Примеры программ с циклами

Пример 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*х) ' вычисление у = e

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; просмотров: 1531;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.032 сек.