Цикл repeat… untilпохож на цикл while. Его синтаксис:
repeatоператор1; оператор2; ....
untilусловие;
Обратите внимание, что, несмотря на несколько операторов в теле цикла, beginи endотсутствуют. Сам оператор представляет собой скобки. Цикл начинается с выполнения операторов, затем проверяется условие, если оно ложно, то цикл повторяется, а если истинно, то завершается. Если условие истинно и перед выполнением цикла, то цикл выполняется один раз. Если условие остается ложным всегда, то программа зацикливается.
Построим таблицу квадратов чисел от 1 до 10 с помощью цикла whileи repeat… until.
ProgramSquareW;
vari : integer;
begin
i:=1
whilei<=10 do
begin
writeln(i:4,sqr(i):4);
i:=i+1;
end;
end.
|
ProgramSquareR;
vari : integer;
begin
i:=1
repeat
writeln(i:4,sqr(i):4);
i:=i+1;
untili>10;
end.
|
- 23 -
Рассмотрим следующий пример. Необходимо построить вложенные друг в друга концентрические окружности. Радиус самой большой окружности – 400 пикселей, а радиус каждой вложенной – в два раза меньше предыдущей, т.е. 200, 100, 50, … Радиус последней – 1 пиксель.
Для решения этой задачи разумно использовать цикл whileили repeat until, поскольку действительно сразу сложно понять сколько будет окружностей (хотя, конечно, можно сосчитать).
ProgramCircles;
UsesGraphABC;
varr : integer;
begin
SetWindowSize(800,800);
r:=400;
repeat
circle(400,400,r);
r:=r div 2;
untilr<1;
end.
|
ProgramCircles;
UsesGraphABC;
varr : integer;
begin
SetWindowSize(800,800);
r:=400;
while(r>=1) do
begin
circle(400,400,r);
r:=r div 2;
end;
end.
|
Рассмотрим еще один пример. Программа должна рисовать случайные расположенные окружности случайного цвета и случайного размера (но не больше 10 пикселей) до тех пор, пока пользователь не нажмет на какую либо клавишу.
ProgramCircles;
UsesGraphABC, CRT;
varr : integer;
begin
SetWindowSize(500,500);
repeat
SetBrushColor(random($FFFFFF));
circle(random(500),random(500),random(10));
delay(10);
untilkeypressed;
end.
|
Здесь используются несколько новых для нас приемов. Во-первых, функция keypressed, определенная в модуле CRT. Она возвращает значение true, если пользователь нажал любую клавишу. Оператор выбора цвета окружности SetBrushColor в качестве параметра использует значение random($FFFFFF). Аргумент функции random представляет максимально возможное числовое значение цвета, записанное в шестнадцатеричной системе исчисления, таким образом окружности будут заливаться случайным цветом от 0 (соответствует черному цвету) до $FFFFFF (соответствует белому цвету). К таким обозначениям цветов мы вернемся во время изучения языка HTML. Функция delay(n) выполняет задержку выполнения программы на n миллисекунд. Мы ее используем для того, чтобы окружности не выводились слишком быстро.
Задание №7.
1. Напишите программу, которая вводила бы целые числа и суммировала их до тех пор, пока пользователь не ввел число 0. (5 баллов)
2. Модернизируете последний пример так, чтобы выводились случайные линии, либо прямоугольники.
- 24 -
Тема №8. Вещественные вычисления
До сих пор мы оперировали целыми числами. Однако в физических вычислениях в вычислениях, связанными с измерениями, мы сталкиваемся с другим классом чисел. В математике их называют вещественными (или действительными). Подмножеством вещественных чисел являются рациональные числа. В языке Pascal вводится тип данных real, который является моделью вещественных чисел в математике.
Рассмотрим сразу пример:
ProgramKrug;
UsesCRT;
// Вычисление длины окружности
varr : real; // Радиус окружности
Читать дальше