Глава3. Циклические алгоритмы
Турбо Паскаль позволяет использовать три различных оператора для организации повторяющихся последовательностей действий, которые называют циклами.
3.1 Циклы с параметром.
Оператор цикла For организует выполнение одного оператора заранее определенное число раз. Его еще называют цикл со счетчиком. Существует две формы оператора:
FOR <параметр> := <nz> TO <kz> DO <оператор>;
FOR <параметр> := <nz> DOWNTO <kz> DO <оператор>;
Здесь параметр цикла (счетчик) представляет собой переменную порядкового (ординального) типа; <nz> и <kz> - выражения, определяющие начальное и конечное значение счетчика; <оператор> - один (возможно составной) оператор, который называют телом цикла, повторяемый определенное число раз.
На первом шаге цикла параметр принимает значение nz. В этот же момент происходит вычисление kz - значения параметра на последнем шаге цикла. После каждого выполнения тела цикла, если параметр цикла не равен kz, происходит изменение параметра на следующее большее или меньшее значение в зависимости от формы оператора for, т.е. неявно происходит выполнение одного из двух операторов:
<параметр> := Succ(<параметр>);
<параметр> := Pred(<параметр>);
В случае nz > kz в первой форме оператора или nz < kz во второй его форме ошибки не происходит, но цикл не выполняется ни разу. После завершения работы цикла значение параметра остается равным kz.
РЕКОМЕНДАЦИИ: Использовать цикл for при заранее известном количестве повторений. Не изменять параметр в теле цикла. При использовании кратных (вложенных) циклов применять разные переменные в качестве параметров. Определять до цикла значения всех используемых в нем переменных. Не ставить точку с запятой после do.
цикл с заданным числом повторений (цикл с параметром- цикл ДЛЯ)
компактная запись
развернутая схема: а- с возрастающим параметром; б – с убывающим параметром. |
For i:=Iн To Iк Do "оператор"; либо For i:= Iн DownTo Iк Do "оператор"; В случае связки To цикл выполняется при условии Iн <= Iк и происходит с единичным возрастанием параметра цикла i от Iн до Iк. В случае связки DownTo цикл выполняется при условии Iн >= Iк и происходит с единичным уменьшением параметра цикла i от Iн до Iк. Примеры:
|
ПРИМЕР 1: Вводятся 10 чисел, посчитать среди них количество положительных.
program cycle_for1;
var i,kn:byte; x:real;
begin
kn:=0;
for i:=1 to 10 do
begin
writeln('Введите ',i,' число: '); readln(x);
if x>0 then kn:=kn+1 {увеличиваем количество на 1}
end;
writeln('Вы ввели ',kn,' положительных чисел.');
readln
end.
ПРИМЕР 2: Напечатать буквы от 'Z' до 'A'.
program cycle_for2;
var c:char;
begin
for c:='Z' downto 'A' do write(c);
readln
end.
ПРИМЕР 3: Вычислить N-е число Фиббоначчи. Числа Фиббоначчи строятся следующим образом: F(0)=F(1)=1; F(i+1)=F(i)+F(i-1); для i>=1. Это пример вычислений по рекуррентным формулам.
program Fib;
var a,b,c:word; i,n:byte;
begin
write('введите номер числа Фиббоначчи ');
readln(N);
a:=1; {a=F(0), a соответствует F(i-2)}
b:=1; {b=F(1), b соответствует F(i-1)}
for i:=2 to N do
begin
c:=a+b; {c соответствует F(i)}
a:=b; b:=c; {в качестве a и b берется следующая пара чисел}
end;
writeln(N,'-е число Фиббоначчи =',b); {для N>=2 b=c}
readln
end.
ПРИМЕР 4: Составить программу вычисления значения выражения y=((…(202–192)2 –182)2 –…–12)2.
Решение. В данном случае целесообразно организовать цикл с параметром, изменяющимся от 20 до 1, то есть шаг изменения параметра равен –1.
Обозначим: y – очередное значение квадрата числа; n – параметр цикла. Учитывая это, составим программу:
program Primer;
var y, n:integer;
begin
y:=sqr(20);
For n:=19 Downto 1 Do y:=sqr(y-sqr(n));
writeln('Значение выражения = ',y);
readln
end.
Практическое задание 1
-
Составьте программу, которая вычисляет сумму чисел от 1 до N. Значение N (N должно быть меньше 100) вводится с клавиатуры.
-
Напишите программу печати таблицы перевода расстояний из дюймов в сантиметры (1 дюйм = 2,5 см ) для значений длин от 1 до 20 дюймов.
-
Составьте и отладьте программу, вычисляющую сумму квадратов чисел от 1 до введенного вами целого числа N.
-
Найти наибольшее и наименьшее значение функции y=3x2 + x – 4, если на заданном интервале [a,b] x изменяется с шагом 0,1.
-
Вычислить: а) 1 + 2 + 4+ 8 + … + 210 б) (1+2)*(1+2+3)* .. *(1+2+…+10)
-
В ЭВМ вводятся по очереди данные о росте N учащихся класса. Определить средний рост учащихся класса.
-
Составьте программу вычисления степени числа а с натуральным показателем N. (Записать варианты программы с разными видами циклов while, repeat, For).
-
Составьте программу вычисления факториала натурального числа N. Факториалом (N!) натурального числа N называется произведение всех чисел от 1 до N, включая N.
-
Вычислить: S==1+1/2+1/3+1/4+..+1/n, где n – натуральное число.
-
Для заданного n составьте программу вычисления суммы S=, где i=1,2,3,..,n.
Часто применяются вложенные операторы цикла. Например, если необходимо провести все варианты расчета при изменении нескольких параметров в заданных диапазонах.
ПРИМЕР 5: Составим программу расчета функции y = A*sin(x) - cos(x)/A; при изменении аргумента "x" в диапазоне от 0 до Pi с шагом Pi/100 и при изменении параметра "A" в диапазоне от 1 до 3 с шагом 0. 5.
Program tabl;
var y, x, a, dx: real; i, j: integer;
Begin
Writeln(' Расчет по формуле: y=A*sin(x)-cos(x)/A; ');
Writeln('--------------------------------------------------');
Writeln('|___X___|__A=1.0_|_A=1.5_|_A=2.0_|_A=2.5_|_A=3.0_|');
Writeln('--------------------------------------------------');
dx:= pi/100;
for i:= 0 to 100 do begin { внешний цикл изменения аргумента "X" }
x:= dx*i; Write( x:8:4 );
for j:= 1 to 5 do begin{ вложеннный цикл изменения параметра "A" }
A:= 0.5*(j+1); y:= A*sin(x)-cos(x)/A; Write(y:8:4)
end;
Writeln; { перевод курсора на новую строчку }
if ((i+1) mod 20) = 0 then
readln { задержка прокрутки экрана до нажатия Enter }
end; readln
End.
Практическое задание N 2
1. Рассчитать значения функции y = sin(x)/(x+a)2 при изменении аргумента "x" в диапазоне от 0 до Pi/2 с шагом Pi/80 и при изменении параметра "A" в диапазоне от 1 до 2 с шагом 0, 2.
2. Рассчитать значения функции y = xa/a3 при изменении аргумента "x" в диапазоне от 1 до 10 с шагом 0, 2 и при изменении параметра "A" в диапазоне от 1 до 5 с шагом 1.