III. Актуализация знаний. Циклический алгоритм – описание действий, которые должны повторяться в указанной последовательности несколько раз или пока не выполнится заданное условие. Для многократного повторения участка программы используется цикл. Существует два принципиально различных типа операторов цикла: оператор с параметром и операторы цикла с условиями. 1. Оператор цикла с параметром - счетный цикл FOR; 2. Операторы цикла с условием: а) цикл WHILE с предусловием; б) цикл REPEAT...UNTIL c постусловием. На первом нашем занятии постараемся познакомиться и научимся использовать счётный цикл FOR . Цикл с параметром. В этом цикле используется целая переменная – счётчик (или параметр цикла), которая автоматически при каждом повторении изменяется на 1 от начального значения до конечного. Если начальное значение меньше конечного, то на Паскале он записывается так (на языке блок-схем данный оператор будет выглядеть так): for i:=1 to 20 do begin команда; команда; ........ end; Если начальное значение больше конечного, то записанный выше цикл не выполнится ни разу. Чтобы он повторял тело цикла, меняя счётчик в сторону уменьшения, заголовок цикла нужно изменить так: for i:=20 downto 1 do begin команда; команда; ........ end; Цикл FOR удобно использовать тогда, когда точно известно количество повторений. Далее учащимся предлагается познакомиться с работой циклической структуры в программе. Пример использования цикла for: Найти сумму первых 30 натуральных чисел. Слово «первых» обозначает, что начинаем с 1. Сумма в цикле увеличивается, но чтобы было к чему прибавить самое первое число, до начала цикла сумму обнуляем (присваиваем ей начальное значение 0). program summa; var s,i: integer; begin s := 0; for i:=1 to 30 do s:= s + i ; writeln (’Сумма 30-ти чисел равна ’,s); readln; end. Цикл с предусловием (с условием перед телом цикла). В этом цикле перед началом «тела цикла» (повторяющегося участка программы) проверяется условие, которое определяет, нужно ли продолжать повторение. Если условие выполняется, тело цикла повторяется. Если условие перестало выполняться, цикл заканчивается. На Паскале этот цикл записывается так (на языке блок-схем данный оператор будет выглядеть так): while a do begin команда; команда; ........ end; Если в теле цикла только одна команда, то begin и end не обязательны. Далее учащимся предлагается познакомиться с работой циклической структуры в программе. program bank; var s1,s2,p:real; g:integer; begin write(’Введите начальную сумму ’); readln(s1); write(’Введите конечную сумму ’); readln(s2); write(’Введите процентную ставку ’); readln(p); g:=0; while s1do begin s1:=s1 + s1 * p / 100; g:=g + 1; end; writeln(’До накопления суммы пройдёт ’,g,’ лет’); end. Цикл с постусловием (с условием после тела цикла). В этом цикле после тела цикла проверяется условие, которое определяет, нужно ли закончить цикл. Если условие выполняется, цикл заканчивается. Если условие ещё не выполнилось, цикл повторяется. На Паскале этот цикл записывается так (на языке блок-схем данный оператор будет выглядеть так): repeat команда; команда; ........ until a = b; Далее учащимся предлагается познакомиться с работой циклической структуры в программе. Пример использования такого цикла: Найти сумму чисел, первое из которых R (R1) задано с клавиатуры, а каждое следующее в 1.5 раза меньше. Последнее из этих чисел (которое не входит в сумму) – меньше 0.001. program summa; var s,r: real; begin write(’Введите число R ( 1) ’); readln(r); s:=0; repeat s:=s+r ; r:=r/1.5 ; until r writeln (’Сумма чисел равна ’,s:7:4); end. Применение полученных умений и навыков на практике: Теперь мы перейдем к практической работе за компьютером. Отладить блоки программ за компьютером. Рассмотрим несколько примеров: S=1 - 1/2 + 1/3 - 1/4 + 1/5-........1/n program zadacha1; var i,n,a:integer; s:real; Begin writeln('Введите n'); readln(n); s:=1;a:=1; for i:=2 to n do begin a:=(-1)*a; s:=s+a/i; end; writeln('Сумма ряда S= ',s); End. program zadacha2; var с1,с2,с3,i,n,kol:integer; Begin writeln('Введите n'); readln(n); kol:=0; for i:=100 to 999 do begin c1:=i div 100; c2:=(i div 10) mod 10; c3:=i mod 100; if c1+c2+c3=n then kol:=kol+1; end; writeln('Количество таких чисел = ',kol); End. program zadacha3; var n,sum,cif:integer; Begin writeln('Введите n'); readln(n); sum:=0; while n0 do begin cif:=n mod 10; sum:=sum+cif; n:=n div 10; end; writeln('Сумма цифр введённого числа = ',sum); End. Найти минимальное натуральное число, которое при делении на 2 даёт в остатке 1, при делении на 3 даёт в остатке 2, при делении на 4 - в остатке 3, при делении на 5 - в остатке 4, при делении на 6 - в остатке 5 а при делении на 7 дают в остатке 6. program zadacha4; var i, kl:longint; Begin kl:=0; i:=0; while kl=0 do begin i:=i+1; if (i mod 2=1) and (i mod 3=2) and (i mod 4=3) and (i mod 5=4) and (i mod 6=5) and (i mod 7=6) then kl:=1; end; writeln(i); End. Иногда на уроке полезно рассмотреть решение одной задачи, используя циклы FOR, WHILE, REPEAT Например: Решим задачу «Найти сумму всех натуральных чисел от 1 до n», используя циклы FOR, WHILE и REPEAT и попытаемся понять принцип работы этих циклов. 1) цикл FOR program zadacha1a; var i,n,s:integer; Begin writeln(' введите натуральное n'); readln(n); s:=0; for i:=1 to n do s:=s+i; writeln('сумма от 1 до',n,' = ',s); End. 2) цикл WHILE program zadacha1b; var i,n,s:integer; Begin writeln('введите натуральное n'); readln(n); s:=0; i: =1; while i begin s:=s+i; i:=i+1; end; writeln('сумма от 1 до',n,'=',s); End. Цикл WHILE будет выполняться до тех пор, пока выполняется условие ii изменяем внутри цикла. 3) цикл REPEAT program zadacha1c; var i,n,s:integer; Begin writeln(' введите натуральное n'); readln(n); s:=0; i:=1; repeat begin s:=s+i; i:=i+1; end; until in; writeln('сумма от 1 до',n,' = ',s); End. Цикл REPEAT . . . UNTIL будет выполняться до тех пор, пока не выполниться условие in. |