Пример выполнения задачи 4
Задание: В соответствии с условием разработать алгоритм комбинированной структуры и составить программу
Условие:Вычислить значение функции
,0,5 < с < 2,5
y = , с ≤ 0,5 или с ≥ 2,5,
для с = -1,5 ; -0,5 ; -0,1 ; 0 ; 0,5 ; 1,75 ; 1,8 ; 2,5 ; 3,4 ; 5,7.
Тут . Пренебречь членами ряда, меньшими ε = 10 - 4
Решение: обозначим z → Z, zn → ZN, i →I, n → N, ε → EPS как простые переменные, c → C(I), y → Y(I) как одномерные массивы, длина каждого из которых составляет 10 элементов (по количеству заданных значений с).
Комбинированный алгоритм данной задачи состоит из фрагментов разветвляющегося алгоритма и двух циклических: простого (с заранее известным числом повторений) и итерационного (для вычисления суммы Z), прекращение которого происходит при достижении заданной точности вычислений zn < ε = 10-4.
Реализация итерационного цикла возможна только с помощью циклических алгоритмов типа ''Пока'' или ''До''. Для простого цикла можно использовать цикл ''Со счетчиком''.
Первая часть алгоритма осуществляет вычисление переменной Z (итерационный цикл) значение которой используется во второй части (простой цикл вычисления функции Y(I) с разветвлением – выбором соответствующей формулы, в зависимости от введенного значения переменной C(I)).
1-й вариант
Блок – схема
+

+ -
Программа
REM алгоритм комбинированной структуры ‘оператор- комментарий
DIM EPS, N, Z, ZN, I, C(1 TO 10), Y(1 TO 10) ‘ описание переменных
INPUT “ EPS ”; EPS ‘ввод данных
DATA –1.5,-.5,-.1,0,.5,1.75,1.8,2.5,3.4,5.7 ‘строка данных
N = 1: Z = 0 ‘оператор присваивания
DO ‘оператор начала цикла
ZN = 0.1*N / (N+0.6)^3: Z=Z+ZN ‘операторы присваивания N= N + 1
LOOP WHILE ABS(ZN) > EPS ‘завершение цикла
PRINT “Z=”; Z ‘вывод
FOR I = 1 TO 10 ‘оператор начала цикла
READ C(I) ‘ввод данных
IF C(I)> .5 AND C(I)< 2.5 THEN ‘оператор условного перехода
Y(I) = (C(I) * Z - 3) ^ 2 ‘оператор присваивания
ELSE Y(I) = .5 * Z ^ 3 - 5 * C(I) ‘оператор присваивания
END IF ‘завершение оператора условного перехода
PRINT “Y”; I; “=”;Y(I) ‘вывод
NEXT I ‘завершение цикла
END ‘конец программы
Й вариант (с использованием подпрограммы пользователя)
Замечания
Фрагмент вычисления Z выделен в отдельный программный модуль – подпрограмму пользователя (SUB) с именем SUMZ.
Место подпрограммы SUB - после текста основного модуля.
Ввод программы, в тексте которой находится обращение к подпрограмме пользователя, выполняется в 2 этапа:
1. После ввода последней строки основной программы необходимо ввести часть заголовка процедуры, а именно SUB <имя> и нажать ENTER.
На экране появятся 3 строки
SUB имя
-
END SUB
2. Ввод текста процедуры.
После ввода последнего оператора подпрограммы необходимо нажать клавишу F2.
На экране в поле диалога появляются имена головного модуля (например, UNTITLED) и функции.
С помощью курсорных клавиш и ENTERможно перейти в поле редактирования головного модуля или подпрограммы.
Запуск процедуры SUB осуществляется из головной программы оператором CALL
CALL имя подпрограммы (факт. параметр[,ф.п....])
Обмен данными между головным модулем и подпрограммой, осуществляется 2 способами:
1. Использование глобального объявления типов данных с помощью оператора DIM SHARED (данные, которые объявлены глобальными, доступны как в основной программе, так и в процедуре)
2. Использование механизма формально-фактических параметров (здесь подпрограмма использует формальные параметры, значения которых определяются с помощью фактических параметров при обращении к подпрограмме).
Между фактическими и формальными параметрами существует соответствие по типу, количеству и порядку следования.
Оба способа обмена могут быть использованы в одной процедуре.
После выполнения подпрограммы SUB управление передается оператору, следующему за оператором – вызовом подпрограммы CALL
Блок – схема
+ -
+
Программа
REM алгоритм комб. структуры с подпрограммой ‘оператор- комментарий
REM основная программа
DIM SHАRED I, EPS, N, Z, ZN ‘описание простых переменных
DIM C(1 TO 10),Y(1 TO 10) ‘описание массивов
INPUT “ EPS ”; EPS ‘ввод данных
DATA –1.5,-.5,-.1,0,.5,1.75,1.8,2.5,3.4,5.7 ‘строка данных
CALL SUMZ(EPS,Z) ‘ обращение к подпрограмме вычисления Z
FOR I = 1 TO 10 ‘оператор начала цикла
READ C(I) ‘ввод данных
IF C(I)> .5 AND C(I)< 2.5 THEN ‘оператор условного перехода
Y(I) = (C(I) * Z - 3) ^ 2 ‘оператор присваивания
ELSE Y(I) = .5 * Z ^ 3 - 5 * C(I) ‘оператор присваивания
END IF ‘завершение оператора условного перехода
PRINT “C”; I; “=”;C(I) ‘вывод
NEXT I ‘завершение цикла
END ‘конец основной программы
SUB SUMZ(EPS,Z) ‘заголовок (начало) подпрограммы SUMZ
N = 1: Z = 0 ‘операторы присваивания
DO ‘оператор начала цикла
ZN = .1*N / (N+0.6)^3: Z=Z+ZN : N= N + 1 ‘операторы присваивания
LOOP WHILE ABS(ZN) > EPS ‘завершение цикла
PRINT “Z=”; Z ‘вывод
END SUB ‘конец подпрограммы SUMZ
Результат выполнения программы:
EPS ? .001 _
Z = 5.597609E-02
Y2 = 2.500088
Y3 = 5.000088
Y4 = 8.769555E-05
Y5 = -2.499912
Y6 = 8.421847
Y7 = 8.40561
Y8 = -12.49991
Y9 = -16.99991
Y10 = -28.49991
|