Процедуры и функции
End.
Begin
Var
End.
Begin
Var
Цели работы
Циклы с условиями
Упражнения
Цикл с параметром
Условный оператор
Цель работы
Получение навыков в использовании условного оператора.
Пример. Даны целые числа а, b, с. Если a£b£c, то все числа заменить их квадратами, если а>b>с, то каждое число заменить наименьшим из них, в противном случае сменить знак каждого числа.
Решение:
Условие задачи перепишем следующим образом:
а = a2, b = b2, с = с2, если а <= b <= с,
а = с, b = с, если а> b> с,
а = -a, b = -b, с =-с, в остальных случаях.
Program Example_3;
Var
a,b,c: Integer;
Begin
Writeln('Введите числа a, b, c');
Readln(a,b,c);
If (a<=b) And (b<=c) Then begin
a:=sqr(a);
b:=sqr(b);
c:=sqr(c);
End
Else If (a>b) And (b>c) Then Begin
a:=c;
b:=c;
End
Else Begin
a:=-a;
b:=-b;
c:=-c;
End;
Writeln(a:3,b:3,c:3);
Readln;
End.
Цель работы
Получение навыков в использовании оператора For.
Пример. Из чисел от 10 до 99 вывести те, сумма цифр которых равна п (0<п< 18).
Решение:
Обозначим: k — это просматриваемое число, p1 — это первая цифра числа k, р2 — это вторая цифра числа k, s — это сумма цифр данного числа k. Число k будем выписывать только в том случае, когда сумма р1 и р2 будет равна n.
Program Example_4;
Var
k, n,pi,p2,s:Integer;
Begin
Write('введите целое число ');
Readln(n); {вводим целое число}
For k:=10 To 99 Do begin
pl:=k Div 10; {выделяем первую цифру}
p2:=k Mod 10; {выделяем вторую цифру}
s:=pl+p2; {находим сумму цифр}
If s=n Then Writeln(k); {если сумма равна n, то выводим К}
End;
Readln;
End.
1. Сколько раз будут выполнены операторы из тела циклов в следующих фрагментах программ:
а) For k:=-l To 1 Do ...
б) For k:=10 To 20 Do ...
в) For k:=20 To 10 Do ...
г) k:=5; r:=15;
For i:=k+l To r-1 Do ...
д) k:=5;r:=15;
For i:=0 To k*r Do ...
е) k:=r;
For i:=k To r Do ...
2. Определите значение переменной s после выполнения следующих операторов:
s:=0; n:=10;
For i:=2 To n Do s:=s+100 Div i;
1. Получение навыков в использовании циклов с предусловием и постусловием.
2. Получение навыков работы с вложенными циклами.
Пример 1. Цикл с предусловием. Напечатайте таблицу значений функции у =sin(x) на отрезке [0, 1] с шагом 0,1.
Решение. Постановка задачи наталкивает нас на использование цикла с вещественным параметром, но цикл с параметром предполагает использование переменной порядкового типа, а тип Real таковым не является.
Program Example_5;
x: Real;
x:=0;
While x<=l Do Begin
Writeln (x:5:l,sin(x):7:3);
i:=i+0.1;
End;
Readln;
Пример 2. Цикл с постусловием. Составить программу планирования закупки товара в магазине на сумму, не превышающую заданной величины.
Решение. Обозначим через х и к соответственно цену и количество товара, через р — заданную предельную сумму, через s — общую стоимость покупки. Начальное значение общей стоимости покупки (s) равно нулю. Значение предельной суммы считывается с клавиатуры. Необходимо повторять запрос цены и количества выбранного товара, вычислять его стоимость, суммировать ее с общей стоимостью и выводить результат на экран до тех пор, пока она не превысит предельную сумму р. В этом случае на экран надо вывести сообщение о превышении.
Program Example_6;
x, k, p, s: Integer;
Writeln('Предельная сумма - ');
Readln(p);
s:=0;
Repeat
Writeln('Введите цену товара и его количество');
Readln(x, к) ;
s:=s+x*k;
Writeln('Стоимость покупки равна ',s);
Until s>p;
Writeln ('Суммарная стоимость покупки превысила предельную сумму');
При описании циклов с постусловием необходимо принимать во внимание следующее:
• перед первым выполнением цикла условие его окончания (или продолжения) должно быть определено;
• тело цикла должно содержать хотя бы один оператор, влияющий на условие окончания (продолжения), иначе цикл будет бесконечным;
• условие окончания цикла должно быть в результате выполнено.
Пример 5. Вложенные циклы. Даны натуральные числа n и k. Составить программу вычисления выражения 1k + 2k + ... + nk.
Решение. Для вычисления указанной суммы целесообразно организовать цикл с параметром i, в котором, во-первых, вычислялось бы очередное значение у = ik и, во-вторых, осуществлялось бы накопление суммы прибавлением полученного слагаемого к сумме всех предшествующих (s = s + у).
Program Example_7;
Var
n, k, y, i, s, m: Integer;
Begin
Writeln('Введите исходные данные n и k');
Readln(n,к);
s:=0;
For i:=l To n Do Begin
y:=l;
For m:=l To к Do
y:=y*i; {нахождение степени к числа i}
s:=s+y;
End;
Writeln('Ответ: ',s);
End.
Таким образом, для решения задачи потребовалось организовать два цикла, один из которых пришлось поместить внутрь другого. Такие конструкции называют вложенными циклами.
Внутренний и внешний циклы могут быть любыми из трех рассмотренных ранее видов: циклами с параметром, циклами с предусловием или циклами с постусловием. Правила организации как внешнего, так и внутреннего циклов такие же, как и для простого цикла каждого из этих видов. Но при использовании вложенных циклов необходимо соблюдать следующее условие: внутренний цикл должен полностью укладываться в циклическую часть внешнего цикла.
Упражнения
1. Дана последовательность операторов:
а:=1;
b:=1;
while a+b<8 do begin
a:=a+l;
b:=b+2;
End;
s:=a+b;
Сколько раз будет повторен цикл и какими будут значения переменных а, b, и s после завершения этой последовательности операторов?
2. Какими будут значения переменных a и b после выполнения операторов:
а:=1;
b:=1;
While a<=3 Do
a:=a+l;
b:=b+l;
3. Определите значение переменной s после выполнения следующих операторов:
a) s:=0; i:=0; While i<5 Do Inc(i); s:=s+100 Div i;
6) s:=0; i:=l; While i>l Do Begin s:=s+100 Div i; dec(i) End;
4. Дана последовательность операторов, вычисляющих факториал f числа п:
k:=l; f:=0;
While k<n Do f=f*k
k:=k+l,
которая содержит пять ошибок. Найдите эти ошибки
5. Определите значение переменной s после выполнения следующих операторов:
s:=0; i:=l;
Repeat s:=s+5 Div i; i:=l-l; Until i<=l;
Цель работы
Получение навыков в использовании процедур и функций.
Пример 1. Составить программу, которая будет находить an, то есть п-ю степень числа а, где а и п — это целые числа и п > 0, вводимые с клавиатуры.
Решение. Составим процедуру, которая вычисляет степень целого числа.
Program Example_8;