Пример 1. Вычислить и вывести на печать значения функции y = x+ex sin x, если аргумент х изменяется от -1 до 2 с шагом 0,1.
Составим схему алгоритма (рис. 1).
Она работает следующим образом: в блоке 2 аргументу х присваивается начальное значение, равное -1, в блоке 3 вычисляется значение функции у при х = -1, в блоке 4 значения у и х выводится на экран. В блоке 5 аргумент получает приращение, т.е. увеличивается на 0,5, в блоке 6 выполняется проверка на достижения аргументом конечного значения, равного 2. Если аргумент х ещё не превысил конечное значение, то
управление передаётся блоку 3, в котором вычисляется новое значение функции у при новом значении х. Если значение х становится больше, чем 2, то вычисления прекращаются, конец программы.
По этому алгоритму можно составить четыре варианта программы.
Схема алгоритма:
Рисунок 1 Схема алгоритма
циклической программы
Программа, вариант 1
REM Цикл с оператором IF…THEN
CLS ' очистка экрана
х =-1 ' присвоение х начального значения
m: у =х + EXP(х)*SIN(х) ' вычисление у при хнач
PRINT "у =";у, "х ="; х ' вывод на экран у и х
х =х + 0.1 ' увеличение х на шаг 0,1
IF х <= 2 THEN m ' если х ещё меньше или равен хкон, то
END ' управление передаётся по метке m, если
' нет, то следующему оператору – END
В программе варианта 1 для организации цикла использован оператор условного перехода IF…THEN (что указано в комментарии – оператор REM).
Действие каждого оператора указано в комментариях под знаком апострофа (это невыполняемая часть программы, которая записывается только для программиста). Возврат в начало цикла организован передачей управления с помощью оператора условного перехода по метке m.
Вариант 2
REM Цикл с оператором FOR…NEXT
CLS ' очистка экрана
FOR х =-1 TO 2 STEP.2 ' задание параметров цикла: хнач, хкон, шага ∆х
у =х + EXP(х)*SIN(х) ' вычисление у в цикле
PRINT "у =";у, "х ="; х ' вывод на экран у и х
NEXT x ' возврат к началу цикла
END
Описание программы:
в операторе цикла FOR…задаётся первое значении х=-1, следующим оператором вычисляется значение функции у, затем оно распечатывается на экране (оператор PRINT) вместе со значением х, потом оператор NEXT x передаёт управление назад, оператору FOR…, где к величине х прибавляется шаг, т.е число 0,2, новое значение х составляет -0,8, в следующем операторе вычисляется значение у при х=-0,8, распечатывается, вновь производится возврат в оператор FOR…, вновь увеличивается аргумент х на 0,2 и становится равным 0,6 и т.д. Последний раз цикл выполнится при х=2, а потом, т.к. заданный интервал х[-1;2] уже просчитан, программа переходит к следующему оператору, т.е.END – конец программы.
Вариант 3
REM Цикл с оператором WHILE…WEND
CLS ' очистка экрана
х = -1 ' задание начального значения: хнач = -1
WHILE x <= 2 ' проверка условия: пока х ещё <= хкон = 2
у =х + EXP(х)*SIN(х) ' вычисление у в цикле
PRINT "у =";у, "х ="; х ' вывод на экран у и х
х = х + 0.2 ' увеличение х на шаг 0.2
WEND ' возврат к началу цикла - WHILE…
END
Описание программы:
Начальное значение х = -1 задаётся до тела цикла WHILE…WEND,
затем в операторе WHILE проверяется достижение конца цикла х = 2. Поскольку х = -1 ещё меньше, чем 2, то программа переходит к следующему оператору, где вычисляется значение у при первом х = -1. затем оно и значение х распечатываются (на экране), потом значение х увеличивается на шаг (х = х + 0.1) и оператор WEND передаёт управление оператору WHILE, где снова проверяется, достигло ли новое значение х = -0,8 значения 2. Т.к. -0,8 ещё меньше 2, то вычисляется у при этом значении х = -0,8,распечатывается вместе с х, снова х увеличивается на шаг 0,2, затем WEND возвращает управление началу цикла, где WEND вновь проверяет х = -0,6 на достижение хкон = 2 и т.д.
Особенностью цикла является то, что он может быть не выполнен ни разу, если значение хнач пройдет проверку в операторе WHILE, т.е. окажется больше хкон.
Вариант 4
REM Цикл с оператором DO…LOOP
CLS ' очистка экрана
х = -1 ' задание начального значения: хнач = -1
DO
у =х + EXP(х)*SIN(х) ' вычисление у в цикле
PRINT "у =";у, "х ="; х ' вывод на экран у и х
х = х + 0.2 ' увеличение х на шаг 0.2
LOOP UNTIL x > 2 ' проверка превышения конца цикла х > 2
END
Описание программы:
До тела цикла вводится хнач= -1, потом следует оператор "Делать" – что именно: вычислять у, распечатывать его и аргумент х. Затем идёт проверка: делать петлю до того, как величина х станет больше хкон. В условии проверки должен стоять знак ">", чтобы цикл был просчитан и при последнем значении х = хкон. Если записать LOOP UNTIL x = 2, то последним значением х, которое будет до х = 2, является х = 1,8, т.е. при х = хкон= 2 цикл просчитан не будет. Если записать LOOP UNTIL x < 2, то все значения х окажутся меньше хкон и цикл просчитается только один раз, при х = хнач= -1, затем он увеличится на шаг и станет равным -0,8, но это значение является значением до х = 2, поэтому "петля" на слово DO делаться не будет. Поэтому, для того, чтобы цикл был
просчитан и при конечном значении аргумента х, в условии LOOP UNTIL должен быть только знак ">".
Структура программы такая же, как и для цикла WHILE…WEND, т.е. до тела цикла вводится начальное значение х = -1, а в теле цикла вычисляется и выводится у, а также задаётся приращение аргумента х = х + 0,1, но:
· проверка достижения хкон выполняется в конце цикла, поэтому он обязательно будет просчитан хотя бы один раз (при х = хнач),
· в условии проверки достижения конечного значения должен стоять знак ">", чтобы цикл был просчитан и при последнем значении аргумента.
Вариант 5
REM Цикл с оператором DO UNTIL…LOOP
CLS ' очистка экрана
х = -1 ' задание начального значения: хнач = -1
DO UNTIL x > 2 ' проверка превышения конца цикла х > 2
у =х + EXP(х)*SIN(х) ' вычисление у в цикле
PRINT "у =";у, "х ="; х ' вывод на экран у и х
х = х + 0.2 ' увеличение х на шаг 0.2
LOOP
END
Работа программы происходит также, как и в варианте 4, но, поскольку проверка конца цикла производится в его начале, то он тоже может быть не выполнен ни разу (как и в цикле WHILE…WEND).
Пример 2 Вычислить с помощью оператора цикла и вывести на печать сумму всех значений у = sin3х, где х изменяется от 1 до 10 с шагом 0.1.
S =