3Е-Информатика_1 пара_каб.205

Программирование циклических алгоритмов
План:
Оператор цикла с предусловием While..do
Оператор цикла с постусловием Repeat..Until
Оператор цикла с параметром For..do
Оператор цикла с предусловием While..do
Многократно повторяемые действия могут быть заданы с помощью оператора цикла. Рассмотрим синтаксическую диаграмму одного из таких операторов - оператора цикла с предусловием:
While <выражение булевского типа> do
<оператор>;
Выполняется данный оператор цикла так: сначала вычисляется значение булевского выражения (т.е. условие, стоящее после слова while, проверяется на истинность). Если оно имеет значение true, то выполняется оператор, стоящий после слова do, затем условие проверяется вновь и т.д. Как только на очередном шаге условие не выполняется (значение булевского выражения становится равным false), то выполнение оператора цикла прекращается. Если выполняемый оператор не изменяет значения переменных, входящих в условие, то условие будет истинным всегда и цикл будет выполняться вечно, при этом говорят, что программа зацикливается. Если же при первой проверке условия оно сразу оказывается ложным, то оператор цикла не выполняется вообще.
Если в цикле нам необходимо выполнять больше, чем один оператор, то, как и в случае с условным оператором, применяется составной оператор, то есть несколько операторов заключаются в операторные скобки begin ... end.

Пример оператора цикла с предусловием:
while х <= 0 do
х := х + 1
Если до оператора цикла значение х положительно, то цикл не будет выполняться вообще.
Если х было равно 0 то цикл будет выполняться ровно один раз, а если х было меньше 0, то цикл выполнится несколько раз и закончится, когда х станет равным 1.
Важно заметить, что операторы стоящие внутри цикла repeat (иначе ( в теле цикла) выполняются хотя бы один раз (только после этого проверяется условие выхода).

Найти сумму натуральных чисел от 1 до 100:
var i,sum: integer;
begin
sum:=0; i:=0;
while i<100 do begin
i:=i+1;
sum:=sum+i;
end;
writeln('Сумма равна: ',sum);
readln;
end.
По заданному целому неотрицательному значению п, не применяя формулы, вычислить:
s = 1 + 2 + 3 + 4 + ... + п:

readln(n);
s := 0;
i := 0;
while x < n do
begin
i : = i + 1;
s : = s+I;
end.

В таких задачах очень важно правильно задать до цикла значения изменяемых в цикле переменных и проконтролировать, нужное ли количество раз выполнится цикл. Так, если в рассмотренной задаче заменить условие х < n на х <= n, то на последнем шаге цикла к s прибавится значение n + 1, что неверно. Заметим, что приведенная в качестве решения задачи программа автоматически работает верно, и для случая n = 0. Цикл при этом просто не будет выполняться. При других же вариантах решения данный случай, скорее всего, придется рассматривать отдельно.
С клавиатуры вводятся натуральные числа. Последовательность этих чисел заканчивается 0 (в данном случае 0 - признак окончания ввода). Найти их сумму:

read(а);
s := 0;
while а <> 0 do
begin
s := s + а;
read(a)
end.

Оператор цикла с постусловием Repeat..Until
В языке Pascal существует еще один оператор цикла с условием, которое проверяется уже после выполнения оператора. Приведем его синтаксическую диаграмму:
Repeat
<оператор>;
until <условие>;
В данном операторе слова repeat и until служат операторными скобками begin end использовать не требуется. На первом шаге цикла операторы, заключенные между repeat и until, выполняются в любом случае, дальше же цикл будет повторяться, пока значение булевского выражения ложно. То есть цикл закончится, когда оно станет истинным.

Найти сумму натуральных чисел от 1 до 100.

var i,sum: integer;
begin
sum:=0; i:=0;
repeat
i:=i+1;
sum:=sum+i;
until i=100;
writeln('Сумма равна: ',sum);
readln;
end.

По заданному целому неотрицательному значению п вычислите п! = 1*2*3*.,.*п. Учтите, что по определению 0! = 1.
По заданному целому неотрицательному значению п и вещественному значению х вычислите хn. Для решения задачи используйте оператор цикла (операция возведения в степень в языке Pascal отсутствует).
Оператор цикла с параметром For..do (цикл с параметром)
Синтаксическую диаграмму для данного оператора необходимо дополнить следующими правилами.
Идентификатор (счетчик) и оба выражения должны быть одного и того же порядкового типа. (Из изученных ранее порядковыми являются все целые типы, а также тип boolean, далее будут рассмотрены символьный и перечислимый порядковые типы.)
Оба выражения вычисляются перед выполнением оператора цикла и впоследствии не перевычисляются!!!
Идентификатор является параметром цикла и по стандарту не должен изменяться внутри оператора цикла (данное требование стандарта поддерживается в языке Delphi), однако это не противоречит синтаксису Borland Pascal, но может приводить к непредсказуемым последствиям, например, зацикливанию.

For := <выражение> to <выражение> do
<оператор>;

For := <выражение> downto <выражение> do
<оператор>;

После окончания цикла значение параметра цикла не определено, то есть нельзя считать, что значение параметра равно значению второго выражения.
Оператор цикла выполняется так: сначала вычисляются значения выражений, обозначим их А и В. Они являются начальным и конечным значениями параметра цикла. Если для цикла с to А < В, то параметр цикла последовательно будет принимать значения, равные А, А + 1, А + 2, ..., В. То есть цикл будет выполняться ровно В - А + 1 раз.
Если А > В, то цикл не будет выполняться совсем.
Если для цикла с downto А > В, то параметр цикла последовательно будет принимать значения, равные А, А - 1, А - 2, ..., В. То есть цикл будет выполняться ровно А - В + 1 раз.
Если А < В, то цикл не будет выполняться совсем.

Оператор цикла с параметром следует применять, если заранее известно, сколько раз нужно выполнить некоторый оператор. Параметр цикла может являться просто счетчиком, контролирующим количество повторений оператора, а может и использоваться в самом операторе (с учетом того факта, что на каждом шаге цикла параметр цикла на 1 отличается от предыдущего своего значения).
Использовать цикл for при заранее известном количестве повторений. Не изменять параметр в теле цикла. При использовании кратных (вложенных) циклов применять разные переменные в качестве параметров. Определять до цикла значения всех используемых в нем переменных. Не ставить точку с запятой после do.

По заданному целому неотрицательному значению п и вещественному х вычислить хn:

p: =1
for i : =1 to n do
p: = p*x;

По заданному целому неотрицательному значению n вычислить n!

f:=1
for i := 2 to n do
f:= f*I;
Если в качестве оператора цикла необходимо использовать несколько операторов, то применяется составной оператор.

По заданному натуральному значению n вычислить 1 -1/2 + 1/3-1/4+1/ n:

k:=1;
s:=1;
for i: = 2 to n do
begin
(в переменной k имеем знак очередного слагаемого)
k: =-k;
s: = s +k/I;
end;

По заданному натуральному значению п и вещественному значению х вычислить х + х2 + Xs + ... + хп

s := 0;
z := 1;
for i := 1 to n do
begin
{в переменной z - очередное слагаемое}
z := z * x;
s := s + z
end;
По заданному натуральному значению n вычислить 1 - 1/3 + 1/5 - 1/7 + ... 1/(2n + 1).
В последовательности а1, а2, ..., аn найти номер самого большого числа.

Заголовок 315

Приложенные файлы

  • doc 5037419
    Размер файла: 56 kB Загрузок: 0

Добавить комментарий