
- •Глава 4. Операторы языка. Основные конструкции турбо паскаля
- •Составной оператор
- •4.2. Разветвляющиеся вычислительные процессы и операторы перехода
- •4.2.1. Оператор условного перехода
- •4.2.2. Оператор безусловного перехода
- •4.2.3. Оператор выбора
- •4.3. Циклические вычислительные процессы и операторы цикла
- •4.3.1. Оператор цикла с параметром
- •4.3.2. Оператор цикла с предварительным условием (с предусловием)
- •4.3.3. Оператор цикла с последующим условием (с постусловием)
- •4.3.4. Вложенные циклы
4.3.2. Оператор цикла с предварительным условием (с предусловием)
Оператор цикла с предусловием используется, как правило, для организации итерационных циклов.
Формат записи оператора:
while <условие> do
<оператор>;
или
while <условие> do
begin
<оператор 1>;
<оператор 2>;
. . . . . .
<оператор n>
end;
где <условие> – логическое выражение, <оператор> (или операторы 1, 2, ..., n) – тело цикла. Оператор цикла с предусловием работает следующим образом: определяется значение истинности условия, если логическое выражение имеет значение TRUE (условие выполнено), то выполняется тело цикла, иначе (на FALSE) происходит выход из цикла. Если логическое выражение сразу принимает значение FALSE, то тело цикла не выполняется ни разу, а выполняется оператор, следующий в программе за оператором while.
(фрагмент программы)
. . . . . .
A:=1; N:=1;
while 2*A<=3*N+1 do
begin
A:=A+2;
N:=N+1
end;
. . . . . . .
Исполнение программы:
A 1
N 1
2
A<=3N+1
24
? да 67
? да 1010
? да 1413
? нет
A:=A+2 3 5 7
N:=N+1 2 3 4
выход из цикла
Задача 1. Дана непустая последовательность положительных целых чисел, за которой следует 0 (это признак конца последовательности). Вычислить среднее геометрическое этих чисел.
В этой задаче неизвестно число чисел в последовательности. Поэтому нельзя воспользоваться оператором цикла с параметром.
Среднее геометрическое n чисел равно корню n – ой степени из их произведения.
program SREDNEE_2;
var x,p: integer; n: integer; SR: real;
Begin n:=0; p:=1;
Write ('Введите первое число последовательности X - ');
Readln (x);
while x<>0 do
begin
p:=p*x; n:=n+1;
Write ('Введите очередное число X - ');
Readln (x);
end;
SR:=exp(ln(p)/n);
Writeln('Cреднее геометрическое n чисел послед-ти SR=',SR:8:2)
end.
Задача 2. Числа Фибоначчи ( Fi ) определяются по формулам F0 = F1 = 1; Fi = Fi –1 + Fi –2 при i = 2, 3, ... (каждое очередное число равно сумме двух предыдущих). Вычислить сумму всех чисел Фибоначчи, которые не превосходят заданного натурального числа М.
Program SummaFib;
Var M, {заданное число }
F0, F1, F2, {три последовательных числа Фибоначчи}
S : Integer; {сумма чисел Фибоначчи}
BEGIN
Write(’Введите натуральное М : ’);
ReadLn(M);
F0:=1; F1:=1; F2:=2;
S:=4; {4 – сумма первых трех чисел Фибоначчи}
Write(’Числа Фибоначчи, не превосходящие ’, M, ’ :’, F0:4, F1:4);
While F2<=M do
begin
F0:=F1; F1:=F2; Write(F1 : 4);
F2:=F0+F1; S:=S+F2;
end;
S:=S–F2; {вычитание из суммы последнего числа, которое превосходит М}
WriteLn;
WriteLn(’О т в е т : Сумма этих чисел равна ’, S); ReadLn
END.
Результаты работы Pascal-программы
Введите натуральное M>0 : 10 <Enter>
Числа Фибоначчи, не превосходящие 10 : 1 1 2 3 5 8
О т в е т : Сумма этих чисел равна 20
Задача 3. Дано натуральное число определить, образуют ли цифры числа симметричную последовательность (палиндром). Симметрия означает, что последовательность цифровых символов читается одинаково слева направо и справа налево. Пример: 123321.
Program Palindrom;
Var n, {заданное число }
m, x : LongInt;
BEGIN
Write(’Введите натуральное n : ’);
ReadLn(n);
{сохраняем исходное значение числа}
m:=n;
{получим обратную запись числа}
x:=0;
While n>0 do
begin
x:=x*10 +n mod 10;
n:=n div 10;
end;
{Сравним исходную и обратную записи}
if x=m then WriteLn (’Палиндром ’) else WriteLn (’Не палиндром ’)
END.