Задание: В соответствии с условием разработать алгоритм комбинированной структуры и составить программу
Условие: Вычислить значение функции
, 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, z n → 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