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

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

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

Repeat

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

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

……………….

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

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

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

Примеры:

1)

х := 0;

Repeat

x: = x + 1 ;

Write('х= ', х);

у: = sin(х);

Writeln('у= ', у);

Until x = 100;

2)

х := 10;

Repeat

t: = t - 1;

Until t = 0;

Задача. Вычислить выражение Цикл типа Repeat... Until - student2.ru с точностью e.

program p17;

var

S, е, х: real;

i: integer;

begin

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

Readln(e);

S := 0;

i := 1;

Repeat

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

S:= S + x;

i : = i + 1 ;

Until x < e;

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

end.

Дополнительные операторы при программировании циклов

Иногда необходимо бывает проводить проверку на возможный выход из цикла где-нибудь в его середине, а не в начале или конце. Такой выход из цикла обеспечивается процедурой break, которая прерывает выполнение самого внутреннего вложенного цикла, будь то for, while или repeat.

Также не редко полезной может оказаться процедура continue, которая прерывает выполнение самого внутреннего цикла for, while или repeat и передаёт управление на его заголовок, так что начинается выполнение очередной итерации цикла.

Пример:

……………………

while abs(p) > e do

begin

………………….

for i : = 1 to m do

begin

…………………………

if y <= 0 then continue;

…………………………

p: = p+y;

end;

if p > 1 then break;

……………………………

s: = s+p;

end;

………………………

В этом примере во внутреннем цикле пропускаются итерации в случае отрицательных или равных нулю величин y, а во внешнем – цикл прервется, если величина p превысит 1.

Массивы

Массивом называют последовательность однотипных данных, имеющих один идентификатор - имя и различающихся по номерам (индексам) в этой последовательности.

Чтобы описать массив необходимо указать имя массива, тип его элементов, количество индексов (размерность массива), диапазоны изменения индексов.

Одномерные массивы

Описание одномерных массивов имеет вид

<список идентификаторов>: array [<диапазон изменения индексов> ] of <тип элементов массива>;

<диапазон изменения индекса> - это поддиапазон любого перечислимого типа (1 .. 10, Mon .. Sat, ‘A’ .. ‘Z’ и др.). Типом элементов массива может быть любой простой тип. Кроме того, элементами массива могут быть другие массивы. Массивы описывают, как и остальные переменные в разделе Var. Примеры:

A: array[l ..10] of integer; { массив с одним индексом,

который меняется от 1 до 10,

элементы массива целые числа}

В: array['А' . . ' Z ' ] of Real; {массив с одним индексом,

который меняется от 'А' до ‘Z’ ,

элементы массива - вещественные числа}

С: array[10 .. 20] of Char; { массив с одним индексом,

который меняется от 10 до 20,

элементы массива - символы}

D: array[1..3] of array[1..2] of real; { массив с одним

индексом, который меняется от 1 до 3,

его элементами являются другие массивы}

Если два массива А и В однотипные, то допускаются следующие операторы присваивания:

А: = В;

В: = А;

Необходимо отметить, что элементы массивов имеют те же свойства, что и обычные переменные соответствующих типов. Доступ к элементу массива в программе осуществляется по его номеру — индексу, который указывается в квадратных скобках.

Пример:

A[1]: = 7;

A[2]: = A[6];

A[6]:=SQRT(f);

На месте индекса элемента массива может стоять идентификатор переменной. В этом случае во время выполнения программы будет осуществлена подстановка – значение этой переменной.

Примеры:

1)

i:=7;

A[i] := 23; {это равносильно оператору А[7] : = 23; }

2)

for j:= 1 to 10 do A[j]:= j*j;

В последнем примере в цикле выполняется присвоение элементам массива конкретных значений. Изменение счётчика цикла в каждой итерации позволяет перебрать все элементы массива.

Одномерный массив можно представить как вектор c элементами (А1, А2,..., АN). Часто приходится вводить элементы массива с клавиатуры, для этого проще всего использовать цикл:

for i: = 1 to n do read (A[i]) ;

или с выводом сообщения:

for i:= 1 to n do

begin

Write('введите А[' , i , ']: ');

Readln(A[i] ) ;

end;

Подобным образом можно организовать вывод элементов массива на экран. Например, в строку без комментариев:

for i:= 1 to n do Write(А[i] : 4, ‘ ‘);

или в столбец и с комментариями:

for i:= 1 to n do Writeln('А[' , i , ']= ' , A[i]);

Кроме операций ввода и вывода, любые другие операции с элементами массива осуществляются в цикле, и лучше всего для этих целей подходит цикл типа for … do.

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

Задача. Ввести массив с клавиатуры, найти максимальный и минимальный элементы.

program p18;

const n = 10;

var

A: array[1, n] of real;

i: integer;

max, min: real;

begin

{ ввод элементов массива }

Writeln(‘введите ‘ , n, ‘ элементов массива:');

for i:= 1 to n do Read (A [i] );

readln;

{ Начальные установки }

max:= А [ 1] ;

min:= A [ l] ;

{поиск максимума и минимума}

for i:= 2 to n do

if A[i] > max then max:= A[i]

else

if A[i] < min then min:= A[i];

{ вывод максимума и минимума}

Writeln('max= ', max, ' min= ‘ , min);

end.

Наши рекомендации