Циклические алгоритмы
Оператор цикла WHILE
Задача 1. Дано целое число а и натуральное (целое неотрицательное) число n. Вычислить а в степени n. {Введем целую переменную k, которая меняется от 0 до n, причем поддерживается такое свойство: b = (a в степени k).}
USES Crt;
VAR
A, N, B, K : INTEGER;
BEGIN
ClrScr;
Write(‘ Введите два значения ‘); ReadLn(A,N);
K := 0; B := 1;
While K <> N DO Begin
K := K + 1; B := B * A;
End;
Write(‘ A в степени N = ’,B);
END.
Другое решение той же задачи:
USES Crt;
VAR
A, N, B, K : INTEGER;
BEGIN
ClrScr; { Чистка экрана }
Write(‘ Введите два значения ‘); ReadLn(A,N);
K := N; B := 1;
{A в степени N = B * (A в степени K)}
While K <> 0 DO Begin
K := K - 1; B := B * A;
End;
Write(‘ A в степени N = ’,B);
END.
Задача 2. Даны натуральные числа а, b. Вычислить произведение а*b, используя в программе лишь операции +, -, =, <>.
USES Crt;
VAR
A, B, C, K : INTEGER;
BEGIN
Write(‘ Введите два значения ‘); ReadLn(A,B);
K := 0; C := 0;
While K <> B DO Begin
K := K + 1; C := C + A;
End;
{C = A * K и K = B, следовательно, C = A * B}
Write(‘ A*B= ‘,C);
END.
Задача 3. Дано натуральное (целое неотрицательное) число A и целое положительное число D. Вычислить частное Q и остаток R при делении A на D, не используя операций DIV и MOD. (Согласно определению, А = Q * D + R, 0 <= R < D.)
USES Crt;
VAR
A, D, R, Q : INTEGER;
BEGIN
ClrScr;
Write(‘ Введите два значения ‘); ReadLn(a,d);
R := A; Q := 0;
While Not (R < D) DO Begin
R := R - D; {R >= 0}
Q := Q + 1;
End;
WriteLn(‘ Частное = ’,Q);
WriteLn(‘ Остаток = ’,R);
END.
Задача 4. Каждый год урожайность повышается на 5%. Через сколько лет урожай удвоится?
USES Crt;
VAR
YR, KL: BYTE; YRG: REAL;
Begin
ClrScr;
Write('Введите урожайность '); ReadLn(YR);
YRG:=YR;
While (YRG <2*YR) Do Begin
YRG:=YRG+0.05*YRG;
KL:=KL+1;
End;
WriteLn('Новый урожай ',YRG:5:0);
Write('Через ',KL,' лет урожай удвоится');
END.
Задача 5. Деду M лет, а внуку N лет. Через сколько лет дед станет вдвое старше внука. И сколько при этом лет будет деду и внуку.
USES Crt;
VAR
M,N: BYTE; Kl: BYTE;
BEGIN
ClrScr;
Write('Введите количество лет деда '); ReadLn(m);
Write('Введите количество лет внука '); ReadLn(n);
KL:=0;
While (M>2*N) DO Begin
M:=M+1; N:=N+1; KL:=KL+1;
End;
WriteLn(M,' лет деду');
WriteLn(N,' лет внуку');
WriteLn('Через ',KL,' лет дед вдвое станет старше внука');
END.
Задача 6. Поле засеяли цветами двух сортов на площади S1 и S2. Каждый год площадь цветов первого сорта увеличивается вдвое, а площадь второго сорта увеличивается втрое. Через сколько лет площадь первых сортов будет составлять меньше 10% от площади вторых сортов.
USES Crt;
VAR
S1,S2:WORD; KL:BYTE;
BEGIN
ClrScr;
Write('Введите площадь, которую засеяли цветами 1-го сорта '); ReadLn(S1);
Write('Введите площадь, которую засеяли цветами 2-го сорта '); ReadLn(S2);
KL:=1;
While (S1>0.1*S2) DO Begin
S1:=S1*2; S2:=S2*3; KL:=KL+1;
End;
WriteLn('Площадь, которую засеяли цветами 1-го сорта ',S1);
WriteLn('Площадь, которую засеяли цветами 2-го сорта ',S2);
WriteLn('Через ', kl,' лет');
END.
Задача 7. Составить программу перевода числа из 10 системы счисления в 2 систему счисления.
Для этой задачи представлено два решения.
a)
USES Crt;
VAR
DES, OST, I, DW:INTEGER;
BEGIN
ClrScr;
Write('Введите десятичное число '); ReadLn(DES);
I:=1;
While (DES>=2) DO Begin
OST:=DES mod 2;
DES:=DES div 2;
DW:=DW+OST*I;
I:=I*10;
End;
DW:=DW+DES*I;
Write('Двоичная запись числа ',DW);
END.
b)
USES Crt;
Const A=10;
VAR
DES, OST, I:INTEGER;
DW:Array[1..100] OF INTEGER;
BEGIN
ClrScr;
Write('Введите десятичное число '); ReadLn(des);
I:=1;
While (des>=2) DO Begin
OST:=DES mod 2;
DES:=DES div 2;
DW[I]:=OST;
I:=I+1;
End;
DW[I]:=DES;
FOR I:=I DownTo 1 DO
Write(DW[I]);
END.
.....................................................................................................................................
Практические задания
.....................................................................................................................................
- Составить программу, печатающую квадраты всех натуральных чисел от 0 до заданного натурального n.
- Дано натуральное n, вычислить n! (0!=1, n! = n * (n-1)!).
- Последовательность Фибоначчи определяется так: a(0)= 1, a(1) = 1, a(k) = a(k-1) + a(k-2) при k >= 2. Дано n, вычислить a(n).
- К старушке на обед ходят кошки. Каждую неделю две кошки приводят свою подружку. В доме у старушки 100 мисок. Через какое время появятся лишние кошки, и сколько кошек при этом останется голодными.
- Известна сумма номеров страниц, определить номер страницы.
- Лягушка каждый последующий прыжок делает в два раза короче предыдущего. Достигнет ли она болота и за сколько прыжков. Длину первого прыжка задайте самостоятельно.