При разработке алгоритмов решения большинства задач возникает необходимость повторения ряда шагов. В языке Pascal имеются три различных оператора цикла, с помощью которых можно запрограммировать повторяющиеся фрагменты программ: с параметром, с предусловием и с постусловием.
Использование операторов цикла с условиями
В языке Pascal существуют два оператора цикла с условиями. С их помощью можно запрограммировать повторяющиеся фрагменты программы. Операторы цикла с условиями проверяют условия выполнения или повторения цикла.
Oператор цикла с предусловием
While <условие> do <тело цикла>;
здесь while, do – зарезервированные слова;
<условие> – выражение логического типа;
<тело цикла> – произвольный оператор, в том числе и составной.
Логическое выражение <условие> определяет, будет ли цикл выполняться или завершит свою работу. Если выражение <условие> имеет значение true, то выполняется <тело цикла>, после чего вычисление выражения <условие> и его проверка повторяются. Если <условие> имеет значение false, оператор while прекращает свою работу, т. е. цикл заканчивается. В качестве <тело цикла> может быть либо оператор, либо составной оператор, т. е. последовательность операторов, заключенная в операторные скобки begin ... end.
Пример. Найти минимальное значение функции на отрезке с шагом 0,1.
program minimum; const h:real=0.1; var y,b,x,min:real; begin x:=1; b:=10; min:=sin(x); writeln('Минимальное значение функции у=sin(x) '); writeln(' на отрезке [1,10] шагом 0,1'); while x< =b do begin y:=sin(x); writeln(y:4:2); if y< min then min:=y; x:=x+h; end; writeln('min=', min:2:1); end.
Пример. Составить программу возведения чисел от 1 до 10 в третью степень.
program ctep; {возведение в степень} const h:byte=1; var a,b:integer; x:real; k:integer; begin writeln('Возведение в третью степень чисел от 1 до 10'); a:=1; b:=10; k:=3; while a< =b do begin x:=exp(k*ln(a)); writeln(a,'^3=',x:4:0); a:=a+h; end; end.
Пример. Табулирование функции на отрезке [1; 5] с шагом 0.5.
program tab; const h:real=0.5; var y,x,a,b:real; begin writeln('Табулирование функции y=sin(x) на отрезке [1,5] с шагом 0.5'); a:=1; b:=5; x:=a; while x<=b do begin y:=sin(x); writeln('y=', y:2:1); x:=x+h; end; end.
Оператор цикла с постусловием
Repeat <тело цикла> until <условие>;
здесь repeat, until – зарезервированные слова (повторять до тех пор, [пока не будет выполнено условие]);
<тело цикла> – произвольная последовательность операторов;
<условие> – выражение логического типа.
Операторы <тело цикла> выполняются хотя бы один раз, после чего вычисляется выражение <условие>: если его значение есть false, операторы <тело цикла> повторяются, в противном случае оператор repeat...until завершает свою работу.
Пример. Вычислить максимальное значение функции на отрезке с шагом 0.5.
program maximum; const h: real=0.5; var y, b, x, max: real; begin writeln('Максимальное значение функции y=sin(x) на отрезке [1,10] Шаг=0.5'); x:=1; b:=10; max:=-1; { начальное значение максимума } repeat y:=sin(x); writeln(y:5:3); if y>max then max:=y; x:=x+h; until x>b; writeln('Максимальное значение функции y=sin(x) на отрезке max= ',max:2:9); end.
Цикл с параметром
Если число повторений тела цикла заранее известно, то чаще всего применяется оператор цикла с параметром.
Общий вид оператора:
for <параметр цикла>:=<начальное значение> to <конечное значение > do <оператор>;
или
for <параметр цикла>:=<конечное значение> downto <начальное значение> do <оператор >;
где <параметр цикла> – параметр цикла, переменная любого порядкового типа;
<начальное значение> – начальное значение – выражение, задающее начальное значение параметра цикла;
<конечное значение> – конечное значение – выражение, задающее конечное значение параметра цикла.
Например:
for I:=m to n do <тело цикла>
Оператор присваивает переменной I значение переменной m и увеличивает на единицу до тех пор, пока переменная I не станет равна значению переменной n.
for I :=n downto m do <тело цикла>
Оператор присваивает переменной I значение переменной n и уменьшает на единицу до тех пор, пока переменная I не станет равна значению переменной m.
а) For i:=1 to 10 do
a:= a+1 ;
б) For i:=1 to 20 do
begin
a:= c+b ;
writeln (a,b,c) ;
c:= c+1 ;
end ;
в) For k:=20 downto 1 do
writeln (k*k);
Выход из цикла
В циклах с условиями при большом объеме вычислений возможна ситуация, когда время выполнения цикла становится слишком большим.
В этом случае необходимо использовать стандартную процедуру прекращения выполнения цикла: break.
Эта процедура используется также для досрочного выхода из цикла в случае получения результата до конца выполнения цикла. Процедура continue используется для досрочного перехода к следующей операции цикла.
Пример. Составить программу для возведения числа в степень.
program P4; var k,i:integer; n,y:longint; begin writeln(' Возведение числа в степень '); writeln; y:=1; write('Введите число, возводимое в степень (число должно быть меньше 20) k = '); readln(k); write('Введите целую степень { меньше 5 } n = '); readln(n); for i:=1 to n do y:=y*k; writeln; writeln('Число ',k,' в степени ',n, ' = ',y); writeln; writeln('Для окончания работы нажмите ENTER'); readln; end.
Инструкция