Оператор цикла FOR
Задача 1. Найти произведение положительных, сумму и количество отрицательных из 10 введенных целых значений. USES Crt; VAR X: INTEGER; S, K, P: INTEGER; I: BYTE; Begin P:=1; S:=0; K:=0; FOR I:=1 TO 10 DO Begin WriteLn(‘Введите ‘,I,’ -е значение’); ReadLn(x); IF X>0 Then P:=P*X; { произведение положительных } IF X<0 Then Begin S:=S+X; { сумма отрицательных } K:=K+1; { количество отрицательных } End; End; WriteLn(‘ Произведение положительных значений = ‘,p); WriteLn(‘ Сумма отрицательных значений = ‘,s); WriteLn(‘ Количество отрицательных значений = ‘,k); END. Задача 2. Из N целых чисел найти минимальное значение. USES Crt; VAR MI, X: INTEGER; I,N: BYTE; BEGIN WriteLn('Введите количество значений'); ReadLn(n); WriteLn('Введите первое значение'); ReadLn(mi); FOR I:=2 TO N DO Begin WriteLn(‘Введите ‘,I,’ -е значение’); ReadLn(x); IF X<MI Then MI:=X; End; WriteLn(‘Минимальное значение = ‘,MI); END. Задача 3. Из N целых чисел найти минимальное среди положительных и максимальное среди отрицательных значений. USES Crt; VAR MI, MA, N, I, X: INTEGER; FL, FL1: BYTE; BEGIN WriteLn('Введите количество значений'); ReadLn(N); FL:=0; FL1:=0; FOR I:=1 TO N DO Begin WriteLn('Введите ',I,' значение'); ReadLn(X); IF (FL=0) AND (X<0) Then Begin MA:=X; FL:=1; End; IF (FL1=0) AND (X>0) Then Begin MI:=X; FL1:=1; End; IF (X<0) AND (X>MA) Then MA:=X; IF (X>0) AND (X<MI) Then MI:=X; End; IF FL=1 Then WriteLn('максимальное среди отрицательных = ',ma) Else WriteLn('отрицательных нет'); IF FL1=1 Then WriteLn('минимальное среди положительных = ',mi) Else WriteLn('положительных нет'); END. ..................................................................................................................................... Практические задания ..................................................................................................................................... 1. Найти среднее арифметическое минимального и максимального элементов из 10 введенных. 2. Напечатать лучший результат заплыва среди 8 участников. 3. Из n введенных чисел найти максимальное значение среди положительных элементов. 4. В группе определить самого высокого мальчика и самую маленькую девочку. 5. В ЭВМ вводятся результаты соревнований по прыжкам в высоту. Число участников произвольно. Напечатать сообщение о победителе. Оператор цикла 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. ..................................................................................................................................... Практические задания ..................................................................................................................................... 1. Составить программу, печатающую квадраты всех натуральных чисел от 0 до заданного натурального n. 2. Дано натуральное n, вычислить n! (0!=1, n! = n * (n-1)!). 3. Последовательность Фибоначчи определяется так: a(0)= 1, a(1) = 1, a(k) = a(k-1) + a(k-2) при k >= 2. Дано n, вычислить a(n). 4. К старушке на обед ходят кошки. Каждую неделю две кошки приводят свою подружку. В доме у старушки 100 мисок. Через какое время появятся лишние кошки, и сколько кошек при этом останется голодными. 5. Известна сумма номеров страниц, определить номер страницы. 6. Лягушка каждый последующий прыжок делает в два раза короче предыдущего. Достигнет ли она болота и за сколько прыжков. Длину первого прыжка задайте самостоятельно.
|