(выполняются нижерасположенные после цикла операторы).
Работу данного оператора можно проиллюстрировать структурной схемой:
.
.
.
Установка
условия
не выполняется
Условие
выполняется
Оператор
продолжение программы
Рис. 4.2.3. структурная схема работы оператора цикла
Рассмотрим конкретный пример.
Пусть требуется составить программу для вычисления элементарного ряда:
S |
1 |
1 |
1 |
1 |
... |
1 |
||||
|
|
|
|
|
|
|
|
|||
n2 |
12 |
22 |
32 |
n2 |
||||||
n 1 |
|
|||||||||
с заданной погрешностью:
1*10 4 12 n
Таким образом, вычисление данного ряда можно прекратить тогда, когда последующие члены ряда (слагаемые) становятся довольно малы и слабо влияют на величину суммы S.
Вариант программы: Program_win; Var
S, eps: real; n:integer;
Begin
read (eps); S:=0; n:=1;
While_1/sqr (n)>eps_do Begin
S:=S+1/sqr (n); n:=n+1;
End;
Write (´S=´, S, ´n=´, n);
End.
ОПЕРАТОР ЦИКЛА REPEAT-UNTIL
Данный оператор называют оператором цикла с постусловием и используется так же, как и предыдущий оператор, когда количество циклов заранее неизвестно.
В общем виде данный оператор можно представить:
Repeat
Оператор 1; Оператор 2;
.
. тело (поле) цикла
.
Оператор n;
Until (условие)
Здесь repeat – повторять;
until – до тех пор (пока выполнится условие после слова until)
Компьютер выполняет операторы 1, 2, …, n в цикле до тех пор пока выполнится условие (неравенство) после служебного слова until.
Отличие данного оператора от WHILE – DO заключается в том, что здесь можно использовать несколько операторов (1,2,…,n) в отличие от предыдущего, где требовалось использовать BEGIN – END. Кроме того, отличие заключается ещѐ и в том, что здесь условие проверяется после выполнения каждого цикла (в предыдущем операторе – условие проверялось ещѐ до того, как произвести (выполнить оператор) первый или очередной цикл.
Таким образом, одну и туже задачу возможно решить, как с помощью предыдущего оператора, так и с помощью данного.
В тоже время, следует отметить, что предыдущий оператор while-do используется чаще, чем repeat-until. Это связано с тем, что во многих практических случаях желательно осуществить проверку условия на окончание цикла до его выполнения и иметь
возможность при необходимости пропустить лишний цикл, так как это может отразиться на точности вычислений.
Работу данного оператора можно проиллюстрировать на следующей структурной схеме:
.
.
.
Оператор
нет
Условие
Продолжение да программы после
Рис. 4.2.4. Структурная схема работы оператора цикла.
Рассмотрим конкретный пример:
Составить программу (с помощью данного оператора) для вычисления предыдущего примера:
S |
1 |
1 |
1 |
... |
|||
|
|
|
|
|
|||
n2 |
12 |
22 |
|||||
n 1 |
|
||||||
n
с заданной точностью
1 |
1 10 |
4 |
|
||
n2 |
|
|
|
|
Вариант программы следующий.
Program_sum; Var
S, eps: real; n: integer;
Begin
read (eps); S:=0; n:=1;
Repeat
S:=S+1/sqr (n); n:=n+1;
Until 1/sqr (n) <=eps;
Write (´S=´, S, ´n=´, n);
End.
4.2.4. ПРОЦЕДУРЫ И ФУНКЦИИ
Известно, что существует множество алгоритмов, в которых одни и те же действия (операции), многократно повторяются.
В алгоритмах такого рода в различных местах встречаются фрагменты, одинаковые по выполняемым действиям и различающиеся только в числовых исходных данных.
При составлении программы по такому алгоритму приходится писать одну и туже группу операторов по несколько раз.