Оператор цикла с параметром For..do (цикл с параметром)




Программирование циклических алгоритмов

План:

1. Оператор цикла с предусловием While..do

2. Оператор цикла с постусловием Repeat..Until

3. Оператор цикла с параметром For..do

Оператор цикла с предусловием While..do

Многократно повторяемые действия могут быть заданы с помощью оператора цикла. Рассмотрим синтаксическую диаграмму одного из таких операторов - оператора цикла с предусловием:

While <выражение булевского типа> do

<оператор>;

Выполняется данный оператор цикла так: сначала вычисляется значение булевского выражения (т.е. условие, стоящее после слова while, проверяется на истинность). Если оно имеет значение true, то выполняется оператор, стоящий после слова do, затем условие проверяется вновь и т.д. Как только на очередном шаге условие не выполняется (значение булевского выражения становится равным false), то выполнение оператора цикла прекращается. Если выполняемый оператор не изменяет значения переменных, входящих в условие, то условие будет истинным всегда и цикл будет выполняться вечно, при этом говорят, что программа зацикливается. Если же при первой проверке условия оно сразу оказывается ложным, то оператор цикла не выполняется вообще.

Если в цикле нам необходимо выполнять больше, чем один оператор, то, как и в случае с условным оператором, применяется составной оператор, то есть несколько операторов заключаются в операторные скобки begin... end.

 

Пример оператора цикла с предусловием:

while х <= 0 do

х:= х + 1

Если до оператора цикла значение х положительно, то цикл не будет выполняться вообще.

Если х было равно 0 то цикл будет выполняться ровно один раз, а если х было меньше 0, то цикл выполнится несколько раз и закончится, когда х станет равным 1.

Важно заметить, что операторы стоящие внутри цикла repeat (иначе – в теле цикла) выполняются хотя бы один раз (только после этого проверяется условие выхода).

 

1. Найти сумму натуральных чисел от 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.

2. По заданному целому неотрицательному значению п, не применяя формулы, вычислить:

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. Цикл при этом просто не будет выполняться. При других же вариантах решения данный случай, скорее всего, придется рассматривать отдельно.

3. С клавиатуры вводятся натуральные числа. Последовательность этих чисел заканчивается 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. Найти сумму натуральных чисел от 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.

 

2. По заданному целому неотрицательному значению п вычислите п! = 1*2*3*.,.*п. Учтите, что по определению 0! = 1.

3. По заданному целому неотрицательному значению п и вещественному значению х вычислите хn. Для решения задачи используйте оператор цикла (операция возведения в степень в языке Pascal отсутствует).

Оператор цикла с параметром For..do (цикл с параметром)

Синтаксическую диаграмму для данного оператора необходимо дополнить следующими правилами.

1. Идентификатор (счетчик) и оба выражения должны быть одного и того же порядкового типа. (Из изученных ранее порядковыми являются все целые типы, а также тип boolean, далее будут рассмотрены символьный и перечислимый порядковые типы.)

2. Оба выражения вычисляются перед выполнением оператора цикла и впоследствии не перевычисляются!!!

3. Идентификатор является параметром цикла и по стандарту не должен изменяться внутри оператора цикла (данное требование стандарта поддерживается в языке Delphi), однако это не противоречит синтаксису Borland Pascal, но может приводить к непредсказуемым последствиям, например, зацикливанию.

 

For <cсчетчик>:= <выражение> to <выражение> do

<оператор>;

For <cсчетчик>:= <выражение> downto <выражение> do

<оператор>;

4. После окончания цикла значение параметра цикла не определено, то есть нельзя считать, что значение параметра равно значению второго выражения.

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

Если А > В, то цикл не будет выполняться совсем.

Если для цикла с downto А > В, то параметр цикла последовательно будет принимать значения, равные А, А - 1, А - 2,..., В. То есть цикл будет выполняться ровно А - В + 1 раз.

Если А < В, то цикл не будет выполняться совсем.

 

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

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

 

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

 

p: =1

for i: =1 to n do

p: = p*x;

 

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

 

f:=1

for i:= 2 to n do

f:= f*I;

Если в качестве оператора цикла необходимо использовать несколько операторов, то применяется составной оператор.

 

3. По заданному натуральному значению 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;

 

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

s:= 0;

z:= 1;

for i: = 1 to n do

Begin

{в переменной z - очередное слагаемое}

z:= z * x;

s:= s + z

end;

5. По заданному натуральному значению n вычислить 1 - 1/3 + 1/5 - 1/7 +... 1/(2n + 1).

6. В последовательности а1, а2,..., аn найти номер самого большого числа.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-12-12 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: