Златоустовская общеобразовательная школа
І-ІІІ ступеней
Алгоритмы с повторениями. Операторы цикла на языке программирования.
Вложенные циклы.
Учитель информатики
Лесконог Елена Викторовна
Логические циклы
При составлении программ часто возникают ситуации, когда
1. Заранее не известно количество повторений цикла;
2. Переменная – счетчик цикла должна изменяться с шагом
≠ 1.
В таких случаях используют логические циклы.
Логические циклы - это циклическое повторение блока
команд, пока выполняется (или не выполняется) некоторое
условие.
Логические циклы
Цикл ДО
Цикл ПОКА
Начало
Начало
Ввод данных
Ввод данных
Условие
Тело цикла
Истина
Ложь
Условие
Тело цикла
Истина
Ложь
Логические циклы
Цикл с предусловием / ПОКА /
While условие do
;
Цикл с постусловием / ДО /
Repeat
Until условие;
Сравнение циклов While и Repeat
В цикле While проверка условия выполнения цикла находится
в начале цикла, а в Repeat – в конце.
Цикл Repeat всегда выполняется хотя бы один раз, а цикл While
может не выполнятся ни разу.
В цикле While выход из цикла осуществляется, если условие
ложно, а в Repeat – если условие истинно.
Между словами Repeat и Until можно размещать несколько
операторов без Begin и End, а цикл While…do может содержать
только один оператор тела цикла; поэтому нужно использовать
Begin и End.
Пример
Начало
Найти все
двузначные числа,
кратные 7.
Составить блок-
схему;
Написать программу.
k:=14
K
Ложь
Истина
Вывести k
k:=k+7
Конец
Результат программы
Program z_1;
While k
Uses Crt;
Begin
Var k: integer;
Writeln(k);
Begin
k:=k+7;
end;
Clrscr;
k:=14;
readln;
end.
Пояснение
При использовании логических циклов необходимо всегда заботиться о том, чтобы переменная, использующаяся в условии завершения цикла, каким-то образом обязательно изменялась в теле цикла. Это может быть команда присваивания (как в данной программе) или команда ввода.
While k
Begin
Writeln(k);
k:=k+7;
end;
readln;
end.
Дополнение
При подключении Uses Crt необходимо использовать
функцию Clrscr.
Clrscr - очищает активное окно и устанавливает курсор в левый верхний угол окна.
Пример использования ClrScr
Program PRIM_2;
uses CRT;
Begin
WriteLn('1 строка');
WriteLn('2 строка');
WriteLn('3 строка');
ClrScr;
WriteLn('А куда они делись?=)');
End.
Program PRIM_1;
Begin
WriteLn('1 строка');
WriteLn('2 строка');
WriteLn('3 строка');
End.
Вложенные циклы
Цикл называется вложенным , если он находится в теле другого цикла.
for i:=0 to n do
begin
for j:=0 to m do
begin
for k:=0 to w do
begin
end;
end;
end;
Цикл k
Цикл j
Цикл i
Внутренний цикл должен полностью находиться в теле внешнего цикла.
Пример
Сколько можно купить быков, коров и телят, если бык стоит 10 рублей, корова -5 рублей, теленок – 0,5 рубля и на 100 рублей надо купить 100 животных.
Решение
B – количество быков
K - количество коров
T- количество телят.
После этого можно записать
два уравнения:
10b+5k+0,5t=100 b+k+t=100,
Преобразуем их:
20b+10k+t=200 b+k+t=100
На 100 рублей можно купить:
- Не больше 10 быков, 0≤b≥10
- Не больше 20 коров, 0≤k≥20
- Не больше 200 телят, 0≤t≥200
Результат программы
Program z_2;
Uses Crt;
Var b, k, t:integer;
Begin
Clrscr;
for b:=0 to 10 do
for k:=0 to 20 do
for t:=0 to 200 do
if (20*b+10*k+t=200) and (b+k+t=100)
then
writeln(‘Быков ',b,' Коров ',k,' Телят ', t);
readln;
end.
Пояснение
Сколько раз будет проверяться условие в данной программе?
Значение b изменяется 11 раз – от 0 до 10;
k - 21, t - 201
Таким образом, условие будет проверяться 11*21*201 = 46431 раз.
Результат программы
begin
t:=100-(b+k);
if 20*b+10*k+t=200
then
writeln(‘Быков ',b,' Коров ',k,' Телят ', t);
end;
readln;
end.
Program z_3;
Uses Crt;
Var b, k, t:integer;
Begin
Clrscr;
for b:=0 to 10 do
for k:=0 to 20 do
Пояснение
11*21*201 = 46431
Если известно количество быков и коров, то количество телят можно вычислить по формуле:
t:=100-(b+k);
Цикл по переменной t можно исключить.
Количество повторений проверки условия становиться 11*21=231
Задача
В кассе есть монеты по 2, 5 и 10 копеек. Сколькими способами можно выдать сдачу на некоторую сумму Sum?
Результат программы
Program z_3;
Uses Crt;
Var Sum, Xmax, Ymax, Zmax, x, y, z, p:integer;
Begin
Clrscr;
Writeln (‘Введите сумму: '); Readln (Sum); p:=0;
Xmax:=Sum div 2; Ymax:=Sum div 5; Zmax:=Sum div 10;
Writeln (' 2 5 10 Всего монет');
Writeln ('______________________');
Результат программы
for x:=0 to Xmax do
for y:=0 to Ymax do
for z:=0 to Zmax do
if 2*x+5*y+10*z=Sum
then
begin
writeln(x:3,y:3,z:3,x+y+z:8);
p:=p+1;
end;
If p=0 then writeln(‘Вариантов нет')
else writeln (‘Всего ', p,' Вариантов');
readln;
end.
5. " width="640"
Задача
Составьте программу, удваивающую значение целой переменной а, если а5.
5, то значение а надо заменить на 2а. В противном случае (а " width="640"
Решение
Решение
Если а 5, то значение а надо заменить на 2а. В противном случае (а
5 Then а := а*2; WriteLn (‘а =', а); End. " width="640"
Результат программы
Program Pr2;
Var а : Integer;
Begin
WriteLn (‘Введите число’);
ReadLn (а);
If а 5 Then а := а*2;
WriteLn (‘а =', а);
End.
Задача
Составить программу, проверяющую правильность пароля
Решение
Решение
Предположим, что пароль – это слово «груша». Программа запрашивает у пользователя пароль, сравнивает его с нашим паролем. Если пользователь ввел правильный пароль, то для него доступ открыт, а если пароль не правильный, то доступ закрыт.
Результат программы
Program Pr6;
Var parol :string;
Begin
WriteLn (‘Какой пароль?’);
ReadLn (parol);
If parol=‘груша’
then
writeLn (‘Доступ для Вас открыт’)
Else
writeLn (‘Доступ закрыт!!!’);
ReadLn;
End .
Задача
Написать программу, которая проверяет, делится ли на 3 целое число, введенное с клавиатуры.
Задача
Написать программу на расчёт:
Из трех данных чисел выбрать наибольшее.
Домашнее задание
Составить блок-схемы к задачам решенным на уроке.
Написать программу на расчет наименьшего числа:
Ввести три числа и найти наименьшее из них.
Пример:
Введите три числа:
54 89 133
Наименьшее число 54