Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции информатика.doc
Скачиваний:
59
Добавлен:
11.04.2015
Размер:
2.47 Mб
Скачать

3.6 Оператор цикла с предусловием (цикл while)

Обычно используется, когда число повторений заранее неизвестно.

Структура оператора:

заголовок цикла - while <условие> do

тело цикла - <оператор>;

(при условии истинном выполняется оператор)

Условие – логическое выражение, определяющее момент окончания циклических вычислений (цикл выполняется, пока условие истинно). Проверка условия производится перед каждым выполнением тела цикла. Если условие ложно сразу, тело цикла не выполняется ни разу.

Обычно в теле цикла требуется выполнить несколько операторов, поэтому используется составной оператор begin…end.

Схема оператора:

Пример:

var x:integer;

Begin

x:=4;

while x>0 do

begin

x:=x-2; На экране:

writeln(x); 2

end; 0

End.

В теле цикла должны изменяться переменные, входящие в условие, с тем, чтобы условие, в конце концов, стало ложным, и цикл завершился. В противном случае возникает так называемый бесконечный цикл. Прервать выполнение бесконечного цикла можно с помощью клавиш ctrl-break.

Пример 1: while y<0 do writeln (y);

бесконечные циклы (в примере1 – если y:=-1;)

Пример 2: while true do begin…end;

Пример 3: Вычисление суммы чисел S=0,2+ 0,4+ 0,6+…+2.

const n=2;

var s, x: integer;

begin

s:=0; x:=0.2;

while x<=n do begin

s:=s+ x;

x:=x+ 0.2;

end;

writeln(‘S = ’, s);

end.

Пример 4: Программа вычисления суммы S=1+1/2+1/3+…+1/1000

var i: integer;

s: real;

begin

i:=1; s:=0;

while i<=1000 do

begin

s:=s+1/i; или for i:= 1 to 1000 do s:=s+1/i;

i:=i+1;

end;

writeln(‘S’, s:7:3);

end.

Пример 5: Программа вычисления суммы S=1-1/4+1/9-1/16… с точностью ε = 0,001

(считается, что требуемая точность достигнута, если очередное слагаемое по модулю меньше ε, т.е. все последующие слагаемые можно не учитывать).

1 Вариант:

var i, zn: integer;

s: real;

begin

i:=1; s:=0; zn:=1

while 1/sqr(i) > = 0.001 do

begin

s:=s+1/sqr(i)*zn;

i:=i+1;

zn:=-zn;

end;

writeln(‘S = ’, s);

end.

2 Вариант:

var i: integer;

s: real;

begin

i:=1; s:=0;

while 1/sqr(i) > = 0.001 do

begin

if Odd(i) then s:=s+1/sqr(i)

else s:=s -1/sqr(i);

i:=i+1;

end;

writeln(‘S = ’, s);

end.

3 Вариант:

var i: integer;

s: real;

begin

i:=1; s:=0;

while 1/sqr(i) > = 0.001 do

begin

if (i mod 2=0) then s:=s-1/sqr(i)

else s:=s+-1/sqr(i);

i:=i+1;

end;

writeln(‘S = ’, s);

end.

3.7 Оператор цикла с постусловием (цикл repeat)

Обычно используется, когда число повторений заранее неизвестно.

Структура оператора:

repeat < операторы > until < условие >;

(операторы повторяются до тех пор, пока не выполнится условие)

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

Под телом цикла понимается последовательность операторов между словами repeat и until. Операторов может быть один и более. В любом случае операторные скобки beginend не требуются.

Пример:

var i:integer;

Begin

i:=4;

repeat

i:=i-1;

writeln(i);

until i<0; (выполнится 4 раза: i=3,2,1,0)

End.

Схема оператора:

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

Пример 1: repeat … until false; бесконечный цикл

Пример 2: repeat until keypressed; цикл до нажатия любой клавиши

keypressed – стандартная логическая функция, принимает значение true, если была нажата клавиша.

Пример 3: Вычисление суммы чисел S=0,2+ 0,4+ 0,6+…+2.

const n=2;

var s, x: integer;

begin

s:=0; x:=0.2;

repeat

s:=s+ x;

x:=x+ 0.2;

until x>2;

writeln(‘S = ’, s);

end.

Пример 4: Вычисление квадратного корня числа, введенного с клавиатуры.

var a,b: real;

begin

repeat

writeln(‘Введите а>0’);

readln(a);

until a>0;

b:=sqrt(a);

writeln(‘b=’,b);

end.

Пример 5: Программа, считывающая с клавиатуры символ и печатающая его код

var k: integer;

ch: char;

begin

repeat

writeln(‘Введите символ’);

readln(ch);

k:=ord(ch);

writeln(‘Код символа’, ch, ‘ = ’,k);

until k=13; {13 – код пробела}

end.

Основные отличия операторов цикла:

  1. Цикл FOR используется, когда число повторений заранее известно, циклы WHILE и REPEAT – когда неизвестно.

  2. В цикле FOR параметр цикла изменяется с шагом 1, в циклах WHILE и REPEAT необходимо изменять переменные, входящие в условие.

  3. В циклах FOR и WHILE несколько операторов объединяются операторными скобками begin…end, в цикле REPEAT это не требуется.

  4. В циклах FOR и WHILE проверка условия выполняется перед очередным выполнением тела цикла, в цикле REPEAT – после выполнения тела цикла.