Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metod3O.doc
Скачиваний:
5
Добавлен:
14.08.2019
Размер:
6.93 Mб
Скачать

2.3. Программирование алгоритмов циклических структур

При разработке алгоритмов большинства задач возникает необходимость повторения какого-либо оператора или последовательности операторов. Для организации таких повторов (циклов) при записи алгоритмов на Turbo Pascal используются три разновидности операторов цикла:

  • с параметром,

  • с предусловием,

  • с постусловием.

2.3.1. Оператор цикла с предусловием

Оператор цикла с предусловием имеет вид:

while A do S;

где А – выражение логического типа;

Sпростой или составной оператор.

Выполнение оператора начинается с вычисления значения выражения А. Если оно имеет значение true (истина), то выполняется оператор S. Затем выполнение оператора цикла повторяется до тех пор, пока значение выражения А не станет равным false (ложь). Тогда управление передается оператору, следующему за оператором цикла, а оператор S внутри цикла выполняться не будет. Если А ложно при первом входе в цикл, то оператор S не выполняется ни разу. Очевидно, что один из операторов, находящихся внутри цикла, должен изменять значение выражения А, так как иначе цикл будет повторяться бесконечно.

Пример. Вычислить и вывести на экран значения аргумента х и функции у = х2 при изменении х от 0 до 1 с шагом 0.1 ( этот пример был рассмотрен выше, но с использованием оператора цикла с предусловием ).

х := 0;

while х <= 1 do

begin y:= sqr(x);

write(x:5:2, у:5:2);

х:=x + 0.1;

end.

2.3.2.Оператор цикла с постусловием

Оператор цикла с постусловием имеет вид:

repeat S1; S2; ... SN until A;

где S1, S2,…, SN – операторы тела цикла,

A – выражение логического типа.

Оператор цикла с постусловием начинается с выполнения операторов в теле цикла. Затем вычисляется значение логического выражения А, и, если получается истинное значение, то осуществляется выход из цикла. Если же значение А ложно, то выполнение операторов S1, S2, …, SN повторяется, а затем снова вычисляется выражение А.

Следует отметить, что в отличие от цикла с предусловием выход из цикла с постусловием осуществляется при истинности выражения А.

Пример. Вычислить и вывести на экран значения аргумента х и функции у = х2 при изменении х от 0 до 1 с шагом 0.1. (Это пример, рассмотренный выше, но с использованием оператора цикла с постусловием).

х := 0;

repeat

у:= sqr(x);

write(x:5:2, у:5:2);

х:=х + 0.1

until x > 1;

Операторы цикла с пред- и постусловием применяются тогда, когда число повторений тела цикла заранее неизвестно. При этом тело оператора цикла с постусловием всегда будет выполняться хотя бы один раз, а тело оператора цикла с предусловием может не выполняться ни разу.

Среди операторов цикла в Turbo Pascal оператор цикла с предусловием является наиболее универсальным.

В теле цикла среди операторов может находиться и оператор цикла, такие циклы называются вложенными (внешний и внутренний циклы).

При использовании вложенных циклов необходимо помнить, что тело внутреннего цикла должно находиться внутри внешнего.

Пример выполнения задания 2а контрольной работы

Вычислить значение функции двух переменных

с использованием двойного оператора цикла: внешний оператор цикла с предусловием while, а внутренний – оператор цикла с постусловием.

Значение переменных x и y изменяются соответственно от xнач до xкон с шагом h, и от yнач до yкон с шагом h, и вводятся с клавиатуры. Все переменные относятся к вещественному типу.

Вывести на экран таблицу значений х, y, z.

Составить блок схему программы.

Примечание. В программе фиксируется значение одной из пе­ременных (например, хнач) во внешнем цикле, затем во внутреннем цик­ле берется первое значение унач и для пары хнач, унач вычисляется зна­чение z по заданной формуле, выводятся на экран значения х, у, z, далее у увеличивается на шаг hy. Внутренний цикл будет работать, пока у не станет больше укон, затем выход во внешний цикл, увеличение х на шаг hx и т. Д. Двойной цикл закончится, когда х станет больше хкон.

рrogram Iab3;

uses crt;

var x, xn, xk, hx, y, yn, yk, hy, z:real;

begin clrscr;

writeln(Bвeдитe xn, xk, hx, yn, yk, hy);

readln(xn, xk, hx, yn, yk, hy);

x:=xn;

while x < xk + hx/2 do

begin у:=уп;

repeat

z:=sqrt(x*x*x + l)*exp(x)/(y*y + 2);

writeln (х =, x:6:2, y=, y:6:2, z=, z:6:2);

y:=y + hy

until у > yk

x:=x + hx;

writeln;

end;

readkey;

end.

Исходные данные:                Полученный результат:

xнач=1,

hx=1,

xкон=3,

x=1,

y=2

z=0.64

yнач=2,

hy=2.

yкон=6,

x=1

y=4

z=0.21

x=1

y=6

z=0.10

x=2

y=2

z=3.69

x=2

y=4

z=1.23

x=2

y=6

z=0.58

x=3

y=2

z=17.71

x=3

y=4

z=5.90

x=3

y=6

z=2.81

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]