Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Паскаль_Конспект лекций.doc
Скачиваний:
41
Добавлен:
27.05.2015
Размер:
1.39 Mб
Скачать

7.2 Цикл типа While

Этот цикл используется, если известно условие прекращения цикла, но неизвестно количество итераций.

While <выражение типа Boolean> do <оператор>;

В данном случае <выражение типа Воо1еап> - это условие продолжения цикла (пока условие - истинно, тело цикла выполняется).

Если условие принимает с самого начала значение false, то тело цикла вообще не выполняется.

Конструкция цикла предусмотрена на случай того, что телом является только один оператор, который непосредственно следует за структурой While... do, а для включения в тело цикла нескольких операторов необходимо объединить их в один составной.

Примеры:

1)

While x < у do х: = х - 1 ;

2)

while (a < m) or (b < n) do

begin

a : = a - t ;

b : = b - z ;

end;

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

Примеры:

1)

While true do Writeln('2=2') ;

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

2)

while (a < 100) or (a > 100) or (a = 100) do Writeln(a);

В этом цикле условие его продолжения будет всегда выполняться (а – переменная целого типа), а в теле цикла нет оператора влияющего на условие его продолжения. Следовательно цикл будет продолжаться бесконечно.

Задача. Используя алгоритм Евклида, найти НОД (наибольший общий делитель) двух чисел.

Алгоритм Евклида:

  1. Если переменные неравны, то заменить большее значение на разность большего и меньшего и перейти на начало пункта 1).

  2. Если же переменные равны, выбрать любое значение в качестве результата и закончить алгоритм.

program p7_7;

var

а, b, х, у: integer;

begin

Write('Введите а и b: ');

Readln (a, b);

х := а; {запоминаем начальные значения а и b}

у:=b;

While a <> b do if a > b then a:= a - b else b:= b – a;

Writeln (‘ HOД( ‘, x, ', ' , y, ') = ' , a);

end.

7.3 Цикл типа Repeat... Until

Этот цикл во многом похож на цикл While, но отличается от него тем, что условие проверяется не в начале цикла, а в конце, и это не условие продолжения цикла, а условие выхода из него.

В отличие от цикла While, тело цикла Repeat... Until всегда выполняется по крайней мере один раз.

Repeat

<оператор 1>;

<оператор 2>;

……………….

<оператор n>;

Until <выражение типа Boolean>;

В данном случае <выражение типа Boolean> - это условие выхода из цикла (пока условие - ложно, тело цикла выполняется). Конструкция цикла такова, что для организации тела не требуется объединять операторы в один составной, потому что часть программы между служебными словами Repeat и Until и так является его телом.

Примеры:

1)

х := 0;

Repeat

x: = x + 1 ;

Write('х= ', х);

у: = sin(х);

Writeln(' x= ', x, ' у= ', у);

Until x = 100;

2)

х := 10;

Repeat

t: = t - 1;

Until t = 0;

Задача. Вычислить выражениес точностьюe.

program p7_8;

var

S, е, х : real;

i : integer;

begin

Writeln('Введите точность');

Readln(e);

S := 0;

i := 1;

Repeat

x:= 1/(i*i*i) ;

S := S + x;

i : = i + 1 ;

Until x < e;

Writeln(Summa = ' , S:10:8) ;

end.

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