В своей практической деятельности человек
постоянно сталкивается с задачами, при решении
которых требуется многократно повторять одни и
те же действия. Для составления алгоритмов
решения таких задач используются команды
повторения (циклы).
Урок 10
Цикл - это замечательное изобретение,
которое, в сущности, и делает компьютеры такими
ценными. Он позволяет многократно повторить
любую часть программы. Цикл не может выполняться
вечно, он заканчивается по какому-либо условию.
Проверка этого условия может производиться в
начале каждого повторяющегося шага, в этом
случае цикл называется ПОКА. При проверке
условия в конце каждого шага цикл называется ДО.
Разновидностью цикла ДО является цикл ПЕРЕСЧЕТ.
10.1.Оператор цикла
WHILE (цикл ПОКА).
Формат оператора:
WHILE логическое выражение DO;
Оператор будет повторятся пока истинно
логическое выражение. Перед каждым повторением
оператора значение логического выражения
вычисляется заново. Если необходимо повторить
несколько операторов, их следует объединить в
составной оператор, т.е. заключить в операторные
скобки begin … end. Этот цикл может не выполниться ни
разу, если условие при входе в него оказалось
ложным. Таким образом, цикл ПОКА содержит условие
повторения цикла.
Пример 1. Программа подсчета суммы S
первых 1000 членов гармонического ряда 1+1/2+1/3+1/4+...1/N.
Program Summa;
Var S:real;
N:integer;
Begin
S:=0;N:=0;
While n<1000 do
Begin
N:=n+1;
S:=s+1/n
End;
Writeln(s);
Readln
End.
Пример 2. Вычислить наибольший общий
делитель двух натуральных чисел А и В.
Воспользуемся для этого алгоритмом Евклида:
будем уменьшать каждый раз большее из чисел на
величину меньшего до тех пор, пока оба числа не
станут равны.
Program NOD;
Var a,b:integer;
Begin
Write ('введите два натуральных числа')
Readln(a,b)
While a<>b do If a>b then a:=a-b else b:=b-a;
Writeln('НОД=',a);
Readln
End.
Пример 3
. Начав тренировки, лыжник в первый день
пробегал 10 км. Каждый следующий день он
увеличивал длину пробега на 10% от предыдущего дня.
Определить в какой день он пробежит больше 20 км, в
какой день суммарный пробег за все дни превысит
100км.
Program prim_10;
Var S:real;
N:integer;
Begin
S:=10;N:=1;
While s<20 do
Begin
N:=n+1;
S:=s*0.1
End;
Writeln(' дневной пробег больше 20 км на ',n,' день');
S:=10;N:=1;
While s<100 do
Begin
N:=n+1;
S:=s+s*0.1 {накапливаем суммарный пробег}
End;
Writeln('за ',n,' пробежит больше 100 км');
Readln
End.
Тренировочные
задания.
1. Даны целые числа а и b (а>b). Определить:
a. Результат целочисленного деления a на b,
не используя стандартную операцию
целочисленного деления;
b. Остаток от деления а на b не используя
стандартную операцию вычисления остатка.
2. Известны оценки по информатике каждого из 20
учеников класса. В начале списка перечислены все
пятерки, затем все остальные оценки. Сколько
учеников имеют по информатике оценку "5"?.
Условный оператор не использовать.
3. Напечатать минимальное число, большее 200,
которое нацело делится на 17.
4. Гражданин 1 марта открыл счет в банке,
вложив 1000 руб. Через каждый месяц размер вклада
увеличивается на 2% от имеющейся суммы.
Определить: за какой месяц величина ежемесячного
увеличения вклада превысит 30 руб.; через сколько
месяцев размер вклада превысит 1200 руб.
5. *В некоторой стране используются денежные
купюры достоинством в 1, 2, 4, 8, 16, 32 и 64. дано
натуральное число N. Как наименьшим количеством
таких денежных купюр можно выплатить сумму N (указать количество каждой из используемых для
выплаты купюр)? Предполагается, что имеется достаточно большое количество купюр всех
достоинств.
Разбор заданий
урока 9.
5. Дано четырехзначное число N. Выяснить:
a. Является ли число палиндромом?
Для решения этой задачи надо записать
число в обратном порядке. Для этого единицы
умножаем на 1000, прибавляем число десятков
умноженное на 100, число тысяч умножаем на 10 и
прибавляем число десятитысяч. Если полученное
число будет равно исходному, значит это
палиндром.
Program prim9_5а;
Var x,y:integer;
Begin
Write('введите четырехзначное число');
Readln(х);
y:=(x mod 10)*1000+((x div 100) mod 10)*100+((x div 1000) mod 10)*10+x div 1000;
If x=y then writeln ('число палиндром ')
Else Writeln('это не палиндром ');
Readln;
End.
6. Трамвайный билет имеет шестизначный номер.
Выяснить, является ли билет "счастливым".
Билет назовем "счастливым", если сумма
первых трех цифр равна сумме последних трех цифр.
Примечание. Так как шестизначное число больше 32767
(тип Integer), необходимо номер билета определит как
тип Longint(до 10 знаков).
Program prim9_6;
Var x1,x2:integer;
x,:longint;
Begin
Write('введите номер билета');
Readln(х);
X1:=x div 100000+(x div 10000) mod 10+(x div 1000) mod 10; {сумма первых
трех цифр}
X2:=(x div 1000) mod 10+(x div 100) mod 10+x mod 10; {сумма последних
трех цифр}
If x1=x2 then writeln (' билет счастливый ')
Else Writeln('билет не счастливый ');
Readln;
End.
Желаю успехов!
Ганилова Татьяна Евгеньевна school6@rikt.ru.