ЗЛАТОУСТОВСКАЯ ОБЩЕОБРАЗОВАТЕЛЬНАЯ ШКОЛА
І-ІІІ СТУПЕНЕЙ
Учитель информатики
Лесконог Елена Викторовна
Алгоритмы с повторениями.
Операторы цикла на языке
программирования.
Вложенные циклы.
При составлении программ часто возникают ситуации, когда
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;
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
раз.
Результат программы
Program z_3;
Uses Crt;
Var b, k, t:integer;
Begin
Clrscr;
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;
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.
Решение
Если а > 5, то значение а надо заменить на 2а. В противном
случае (а <= 5) никаких действий производить не нужно.
Решение
Результат программы
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

10 класс алгоритмы с повторениями

  • 1.
    ЗЛАТОУСТОВСКАЯ ОБЩЕОБРАЗОВАТЕЛЬНАЯ ШКОЛА І-ІІІСТУПЕНЕЙ Учитель информатики Лесконог Елена Викторовна Алгоритмы с повторениями. Операторы цикла на языке программирования. Вложенные циклы.
  • 2.
    При составлении программчасто возникают ситуации, когда 1. Заранее не известно количество повторений цикла; 2. Переменная – счетчик цикла должна изменяться с шагом ≠ 1. В таких случаях используют логические циклы. Логические циклы - это циклическое повторение блока команд, пока выполняется (или не выполняется) некоторое условие. Логические циклы
  • 3.
    Логические циклы Цикл ПОКА Начало Вводданных Условие Тело цикла Начало Ввод данных Условие Тело цикла Цикл ДО Истина Истина Ложь Ложь
  • 4.
    Цикл с предусловием/ ПОКА / While условие do <оператор>; Цикл с постусловием / ДО / Repeat <операторы> Until условие; Логические циклы
  • 5.
    Сравнение циклов Whileи Repeat В цикле While проверка условия выполнения цикла находится в начале цикла, а в Repeat – в конце. Цикл Repeat всегда выполняется хотя бы один раз, а цикл While может не выполнятся ни разу. В цикле While выход из цикла осуществляется, если условие ложно, а в Repeat – если условие истинно. Между словами Repeat и Until можно размещать несколько операторов без Begin и End, а цикл While…do может содержать только один оператор тела цикла; поэтому нужно использовать Begin и End.
  • 6.
    Пример Найти все двузначные числа, кратные7. Составить блок- схему; Написать программу. Начало Конец k:=14 K<=99 k:=k+7 Вывести k Истина Ложь
  • 7.
    Program z_1; Uses Crt; Vark: integer; Begin Clrscr; k:=14; Результат программы While k<=99 do Begin Writeln(k); k:=k+7; end; readln; end.
  • 8.
    Пояснение While k<=99 do Begin Writeln(k); k:=k+7; end; readln; end. Прииспользовании логических циклов необходимо всегда заботиться о том, чтобы переменная, использующаяся в условии завершения цикла, каким-то образом обязательно изменялась в теле цикла. Это может быть команда присваивания (как в данной программе) или команда ввода.
  • 9.
    Дополнение При подключении UsesCrt необходимо использовать функцию Clrscr. Clrscr - очищает активное окно и устанавливает курсор в левый верхний угол окна.
  • 10.
    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.
  • 11.
    Вложенные циклы Цикл называетсявложенным, если он находится в теле другого цикла. 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
  • 12.
    Пример Сколько можно купитьбыков, коров и телят, если бык стоит 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
  • 13.
    Результат программы Program z_2; UsesCrt; 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.
  • 14.
    Пояснение Сколько раз будетпроверяться условие в данной программе? Значение b изменяется 11 раз – от 0 до 10; k - 21, t - 201 Таким образом, условие будет проверяться 11*21*201 = 46431 раз.
  • 15.
    Результат программы Program z_3; UsesCrt; Var b, k, t:integer; Begin Clrscr; 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.
  • 16.
    Пояснение 11*21*201 = 46431 Еслиизвестно количество быков и коров, то количество телят можно вычислить по формуле: t:=100-(b+k); Цикл по переменной t можно исключить.  Количество повторений проверки условия становиться 11*21=231
  • 17.
    Задача В кассе естьмонеты по 2, 5 и 10 копеек. Сколькими способами можно выдать сдачу на некоторую сумму Sum?
  • 18.
    Результат программы Program z_3; UsesCrt; 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 ('______________________');
  • 19.
    for x:=0 toXmax 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. Результат программы
  • 20.
    Задача Составьте программу, удваивающуюзначение целой переменной а, если а>5.
  • 21.
    Решение Если а >5, то значение а надо заменить на 2а. В противном случае (а <= 5) никаких действий производить не нужно. Решение
  • 22.
    Результат программы Program Pr2; Varа : Integer; Begin WriteLn (‘Введите число’); ReadLn (а); If а >5 Then а := а*2; WriteLn (‘а =', а); End.
  • 23.
  • 24.
    Решение Предположим, что пароль– это слово «груша». Программа запрашивает у пользователя пароль, сравнивает его с нашим паролем. Если пользователь ввел правильный пароль, то для него доступ открыт, а если пароль не правильный, то доступ закрыт. Решение
  • 25.
    Результат программы Program Pr6; Varparol :string; Begin WriteLn (‘Какой пароль?’); ReadLn (parol); If parol=‘груша’ then writeLn (‘Доступ для Вас открыт’) Else writeLn (‘Доступ закрыт!!!’); ReadLn; End.
  • 26.
    Задача Написать программу, котораяпроверяет, делится ли на 3 целое число, введенное с клавиатуры.
  • 27.
    Задача Написать программу нарасчёт: Из трех данных чисел выбрать наибольшее.
  • 28.
    Домашнее задание Составить блок-схемык задачам решенным на уроке. Написать программу на расчет наименьшего числа: Ввести три числа и найти наименьшее из них. Пример: Введите три числа: 54 89 133 Наименьшее число 54