10 класс алгоритмы с повторениями
TRANSCRIPT
ЗЛАТОУСТОВСКАЯ ОБЩЕОБРАЗОВАТЕЛЬНАЯ ШКОЛА І-ІІІ СТУПЕНЕЙ
Учитель информатикиЛесконог Елена Викторовна
Алгоритмы с повторениями. Операторы цикла на языке
программирования. Вложенные циклы.
При составлении программ часто возникают ситуации, когда
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<=99
k:=k+7
Вывести kИстина
Ложь
Program z_1;
Uses Crt;
Var k: integer;
Begin
Clrscr;
k:=14;
Результат программы
While k<=99 do Begin Writeln(k); k:=k+7; end;readln;end.
Пояснение
While k<=99 do Begin Writeln(k); k:=k+7; end;readln;end.
При использовании логических циклов необходимо всегда заботиться о том, чтобы переменная, использующаяся в условии завершения цикла, каким-то образом обязательно изменялась в теле цикла. Это может быть команда присваивания (как в данной программе) или команда ввода.
Дополнение
При подключении Uses Crt необходимо использовать функцию Clrscr.Clrscr - очищает активное окно и устанавливает курсор в левый верхний угол окна.
Program PRIM_2;
uses CRT;
Begin
WriteLn('1 строка');
WriteLn('2 строка');
WriteLn('3 строка');
ClrScr;
WriteLn('А куда они делись?=)');
End.
Пример использования ClrScr
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;
Внутренний цикл должен полностью находиться в теле внешнего цикла.
Цикл j
Цикл k
Цикл 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;BeginClrscr;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 раз.
Результат программы
Program z_3;Uses Crt;Var b, k, t:integer;BeginClrscr;for b:=0 to 10 do for k:=0 to 20 do
begin t:=100-(b+k); if 20*b+10*k+t=200 then writeln(‘Быков ',b,' Коров ',k,' Телят ', t); end;readln;end.
Пояснение
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;BeginClrscr;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.
РешениеЕсли а > 5, то значение а надо заменить на 2а. В противном случае (а <= 5) никаких действий производить не нужно.
Решение
Результат программы
Program Pr2; Var а : Integer; Begin WriteLn (‘Введите число’); ReadLn (а); If а >5 Then а := а*2; WriteLn (‘а =', а); End.
Задача
Составить программу, проверяющую правильность пароля
Решение
Предположим, что пароль – это слово «груша». Программа запрашивает у пользователя пароль, сравнивает его с нашим паролем. Если пользователь ввел правильный пароль, то для него доступ открыт, а если пароль не правильный, то доступ закрыт.
Решение
Результат программы
Program Pr6;Var parol :string;BeginWriteLn (‘Какой пароль?’);ReadLn (parol);If parol=‘груша’
then writeLn (‘Доступ для Вас открыт’) Else writeLn (‘Доступ закрыт!!!’);ReadLn;End.
Задача
Написать программу, которая проверяет, делится ли на 3 целое число, введенное с клавиатуры.
Задача
Написать программу на расчёт:Из трех данных чисел выбрать наибольшее.
Домашнее задание
Составить блок-схемы к задачам решенным на уроке.
Написать программу на расчет наименьшего числа:
Ввести три числа и найти наименьшее из них.
Пример:
Введите три числа:
54 89 133
Наименьшее число 54