Примеры программ с циклами
Пример 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 =
Программа
REM цикл For…Next
CLS
S = 0 ' задание начального значения суммы S
FOR x = 1 TO 10 STEP .1 ' ввод параметров цикла
Y = SIN(х)^3 ' вычисление у = sin3x
S = S + Y ' прибавление текущего у к предыдущему S
NEXT x ' переход к началу цикла – следующему х
PRINT "S=", S
END
Описание программы:
До начала цикла вводится начальное значение суммы S = 0. К нему будут добавляться все значения функции у = sin(х), поэтому, чтобы итоговая сумма не искажалась, оно должно быть равно нулю.
Затем оператором FOR аргументу х присваивается первое значение, равное 1, вычисляется Y = sin3x = 0,59 и сумма S = S + Y как S = 0 + 0,59, потом NEXT х передаёт управление строке FOR, где х увеличивается на приращение 0,1 и становится равным 1,1. Вычисляется значение функции при новом х = 1,1 (т.е. Y = 0,707) и прибавляется к предыдущему значению S (S = 0,59 + 0,707 = 1,297, затем NEXT x снова возвращает процесс вычисления на FOR, где х увеличивается на 0.1 и т.д. Последний раз цикл будет просчитан при х = 10, потом значение накопленной суммы S выводится на экран и - конец программы. Если бы оператор PRINT стоял внутри цикла (например, после вычисления S = S + Y, Ио на печать выводились бы все промежуточные значения суммы S.
Та же программа с оператором цикла WHILE…WEND примет вид:
CLS ' очистка экрана
х = 1 : S = 0 ' задание начальных значений х = 1и S = 0
WHILE x <= 10 ' проверка условия: пока х ещё <= хкон = 10
Y = SIN(х)^3 ' вычисление у = sin3x
S = S + Y ' прибавление текущего у к предыдущему S
х = х + 0.1 ' увеличение х на шаг 0.1
WEND ' возврат к началу цикла - WHILE…
PRINT "S ="; S ' вывод на экран S
END
Пример 3 Вычислить с помощью оператора цикла и вывести на печать произведение положительных значений функции p = е4x, где х изменяется от 0.1 до 0.5 с шагом 0.1
Программа с оператором FOR…NEXT примет вид:
CLS
p = 1' присвоение 1 начальному р
FOR x = 0.1 TO 0.5 STEP .1 ' ввод параметров цикла
Y = ЕХР(4*х) ' вычисление у = e4х
p = p*Y ' умножение текущего у на предыдущее р
NEXT x ' переход к началу цикла – следующему х
PRINT "p=", p
END
Пример 4 Вычислить сумму первых 20 членов ряда
S = при х=1.05.
В общем виде i-тый член ряда можно записать как ,
где N – числитель, который увеличивается через 2,
k – показатель степени при х, увеличивающийся на 1.
Обозначим символом m счётчик слагаемых (челнов ряда) для определения конца цикла при m = 20.
Программа
CLS
X=1.05 'присвоение Х значения 1,05
S=0 ' начальное значение суммы S
N=2 ' начальное значение числителя N
k = 1 ' начальное значение показателя степени при х
m = 0 ' начальное значение счётчика циклов сложения
М: Y = N/X^k ' вычисление i-го члена ряда
S=S+Y ' вычисление суммы слагаемых: предыдущее S+Yi
N = N + 2 ' увеличение числителя N на 2
k = k + 1 ' увеличение показателя степени k на 1
m = m + 1 ' увеличение счётчика слагаемых m на 1
IF m <=20 THEN M ' переход к строке с меткой М, если m <= 20
PRINT "S="; S ' печать суммы
END ' конец программы
Описание программы:
После очистки экрана (CLS) вводится значение для Х оператором присваивания (Х=1.05), задаётся начальные значения суммы S=0, числителя N=2, показателя степени в знаменателе k=1 и счётчика слагаемых m=0. Затем вычисляется первый член ряда при начальных N и k, т.е Y=2/k^1 и его значение прибавляется к сумме S=S+Y как S=0+2/х. Потом все коэффициенты – N, k, m получают свои приращения и выполняется проверка: если число слагаемых m ещё меньше или равно 20, то программа возвращается по метке М к вычислению следующего i-го члена ряда с новыми значениями N и k, если m>20, т.е. все 20 членов уже ссумированы, то программа автоматически переходит к следующему оператору, т.е.выводу суммы S и завершению программы.
Та же программа может быть записана с операторами цикла WHILE… WEND и DO…LOOP:
CLS X=1.05: S=0: N=2: k=1: m=0 WHILE m<=20 S=S+N/X^k N=N+2: k=k+1: m=m+1 WEND ? "S="; S END | или CLS X=1.05: S=0: N=2: k=1: m=0 DO S=S+N/X^N N=N+2: k=k+1: m=m+1 LOOP UNTIL m >20 ? "S="; S END |
В этих программах значение Yi вычисляется не отдельно, а сразу в выражениях для суммы S.
Оператор цикла FOR…NEXT здесь не может быть использован, т.к. его формат (конструкция) такова, что он сам задаёт и сам изменяет переменную цикла, а в данной задаче переменная цикла m должна не задаваться, а отслеживаться, т.е. быть не первичным (задающим) , а вторичным, зависящим от других операций параметром.
В примерах 2-4 для вычисления суммы или произведения ряда значений используется прием накопления (суммы или произведения).
Контрольные вопросы
1 Какая структура программы на языке QB соответствует циклу "До" ?
2 Какая структура программы на языке QB соответствует циклу "Пока" ?
3 Какие циклы называются арифметическими ?
4 Какие данные необходимы для организации цикла ?
5 Как определить число повторений цикла ?
6 Каковы алгоритмы решения типовых задач: вычисления суммы, произведения ?
7 Почему в операторе DO…LOOP при проверке условия ставится знак ">", а не "<="?
Задание
Вычислить сумму и произведение полученных значений функции. Составить три варианта программы – с операторами FOR…NEXT, WHILE…
WEND и DO…LOOP
.
№ вар. | Выражение | Данные | |
t=|sin(ax2+bx-c)| | 1<=x<=5; ∆x=0,2 a=2,1; b=3; c=-14,2 | ||
t=2х3sin(e3x – 450+a)-lnс | 10<=x<=25; ∆x=0,2; a=2,22; c=-14,2 | ||
11<=x<=15; ∆x=0,5; a=0,2712; c=-14,2 | |||
D = lg|x-a| | 4<=x<=5; ∆x=0,2; a=2,22; | ||
1<=x<=15; ∆x=2; a=2,22; b=3; c=-14,2 | |||
W = cos(-ax2+600) | 1<=x<=3; ∆x=0,2; a=2,22; | ||
V = ln(sin x5)ab | 3<=x<=5; ∆x=0,2; a=2,22; b=3; | ||
1<=x<=5; ∆x=0,2; a=2,22; b=3; c=-14,2 | |||
Z = + |(ax2-c8+50)| | 1<=x<=5; ∆x=0,2; a=2,22; b=3; c=-14,2 | ||
P = ln(4ax5+c-140) | 1<=x<=5; ∆x=0,2; a=2,22; c=-1 | ||
1<=x<=2 ∆x=0,5; a=2,22; b=3; c=-14,2 | |||
∙3|tg xa+b+c| | 1<=x<=5; ∆x=0,2; a=2,22; b=3; c=-14,2 | |||
F = 24|arctg xa+b| | 1<=x<=5; ∆x=0,2; a=2,22; b=3; c=-14,2 | |||
5<=x<=15; ∆x=0,2; a=2,22; b=3; c=-14,2 | ||||
5<=x<=50; ∆x=10; a=2,22; c=-14,2 | ||||
F = tg4(x5+c-190) | 1<=x<=5; ∆x=0,2; c=-14,2 | |||
L = ln3(4ax5c-140) | 1<=x<=5; ∆x=0,2; a=2,22; c=-14,2 | |||
8<=x<=5; ∆x=1; a=2,22; b=3; c=-14,2 | ||||
M = |ln(3bx5-270)| | 22<=x<=33; ∆x=1.5; b=3 | |||
10<=x<=20 ∆x=2; a=2,22; b=3; c=-14,2 | ||||
Содержание отчета
1 Название работы.
2 Цель работы.
3 Содержание работы
4 Постановка задачи для своего варианта.
5 Три программы с разными операторами цикла.
7 Результаты расчёта суммы и произведения - один раз.
8 Письменные ответы на контрольные вопросы.
9 Выводы по работе.
Дата добавления: 2015-11-10; просмотров: 1523;