Программирование циклических алгоритмов.
Раздел «Программирование» ( 9 – 10 кл . )
Жукова Татьяна Николаевна, учитель информатики и ИКТ
Типы операторов цикла
Цикл – это многократное выполнение одинаковых действий.
Существуют три разновидности операторов цикла:
- с постусловием,
- с предусловием,
- с конечным числом повторений (с параметром).
Цикл с предусловием ( цикл ПОКА )
Обеспечивает выполнение блока команд, составляющих тело цикла, пока условие остается истинным (выход из цикла – по ложности условия).
Цикл с постусловием (цикл ДО)
Обеспечивает выполнение команд, составляющих тело цикла, пока условие не станет истинным (цикл выполняется, пока условие ложно).
Цикл с параметром (цикл со счетчиком, цикл ДЛЯ)
При выполнении этого оператора после каждого выполнения тела цикла (блока команд) происходит увеличение параметра цикла на 1. Условием выхода из цикла является превышение параметром конечного .
К.З. , то цикл не выполнится ни разу. Если Н.З. = К.З. цикл выполнится 1 раз. Сколько раз выполнится такой цикл можно определить по формуле: К.З. – Н.З. +1 " width="640"
Общий вид параметра цикла с шагом +1
For := to do
begin
end ;
Если Н.З. параметра цикла К.З. , то цикл не выполнится ни разу.
Если Н.З. = К.З. цикл выполнится 1 раз.
Сколько раз выполнится такой цикл можно определить по формуле: К.З. – Н.З. +1
Общий вид параметра цикла с шагом -1
For := downto do
Begin
end ;
Если К.З. параметра цикла Н.З. , то цикл не выполнится ни разу.
Если Н.З. = К.З. цикл выполнится 1 раз.
Различные варианты программирования циклического алгоритма.
Свойством программирования является то, что для решения одной и той же задачи могут быть созданы разные программы. Рассмотрим пример, показывающий, что циклический алгоритм может быть запрограммирован разными способами.
Составим программу, пользуясь циклом с предусловием
program summa;
var a,n,p,f: integer;
s : real ;
begin
writeln (‘Введите основание степени а и количество слагаемых n ‘);
readln(a,n);
s:=0; p:=1; f:=1; i:=1;
While i
begin
p := p*a;
f := f*i;
s := s + p/f;
i :=i + 1;
end;
writeln(‘s=’,s)
end.
n; writeln(‘s=’,s) end. " width="640"
Составим программу, пользуясь циклом с постусловием
program summa;
var a,n,p,f: integer;
s : real ;
begin
writeln (‘Введите основание степени а и количество слагаемых n ‘);
readln(a,n);
s:=0; p:=1; f:=1; i:=1;
repeat
p:=p*a;
f:=f*i;
s:=s+p/f;
i:=i+1
until in;
writeln(‘s=’,s)
end.
Составим программу, пользуясь циклом с конечным числом повторений и шагом +1
program summa;
var a,n,p,f: integer;
s : real ;
begin
writeln (‘Введите основание степени а и количество слагаемых n ‘);
readln(a,n);
s:=0; p:=1; f:=1;
for i:=1 to n do
begin p:=p*a;
f:=f*i;
s:=s+p/f;
end;
writeln(‘s=’,s)
end.
Составим программу, пользуясь циклом с конечным числом повторений и шагом -1
program summa;
var a,n,p,f: integer;
s : real ;
begin
writeln (‘Введите основание степени а и количество слагаемых n ‘);
readln(a,n);
s:=0; p:=1; f:=1;
for i:=n downto 1 do
begin p:=p*a;
f:=f*(n-i+1);
s:=s+p/f;
end;
writeln(‘s=’,s)
end.
n i=1 p=p*a=a 1 ; f=f*i=1*1=1! s=s+p/f=0+a 1 /1!=a 1 /1!; i:=i+1=2 p=p*a= a 1 ; f=f*i=1*1=1! s=s+p/f=0+a 1 /1!= a 1 /1!; i:=i+1=2 i= 2 3 no 2. i=2 p=a 1 *a=a 2 ; f=1*2=2!; s= a 1 /1! + a 2 /2! i=2+1=3 p=a 1 *a=a 2 ; f=1*2=2!; s= a 1 /1! + a 2 /2! i=2+1=3 i=3 3 no 3. i=3 p= a 2 *a=a 3 ; f=1*2*3=3! s= a 1 /1! + a 2 /2! + a 3 /3! i=3+1=4 p= a 2 *a=a 3 ; f=1*2*3=3! s= a 1 /1! + a 2 /2! + a 3 /3! i=3+1=4 i=4 3 yes 4. i=4 выход выход " width="640"
Проверка выполнения циклов в пошаговом режиме (трассировка)
Пусть n = 3; a - основание i: =1; p :=1; f :=1; s :=0;
While i
Repeat … until I n
p=p*a=a 1 ; f=f*i=1*1=1!
s=s+p/f=0+a 1 /1!=a 1 /1!;
i:=i+1=2
p=p*a= a 1 ; f=f*i=1*1=1!
s=s+p/f=0+a 1 /1!= a 1 /1!;
i:=i+1=2
i= 2 3 no
2. i=2
p=a 1 *a=a 2 ; f=1*2=2!;
s= a 1 /1! + a 2 /2!
i=2+1=3
p=a 1 *a=a 2 ; f=1*2=2!;
s= a 1 /1! + a 2 /2!
i=2+1=3
i=3 3 no
3. i=3
p= a 2 *a=a 3 ; f=1*2*3=3!
s= a 1 /1! + a 2 /2! + a 3 /3!
i=3+1=4
p= a 2 *a=a 3 ; f=1*2*3=3!
s= a 1 /1! + a 2 /2! + a 3 /3!
i=3+1=4
i=4 3 yes
4. i=4 выход
выход
Проверка выполнения циклов в пошаговом режиме (трассировка) продолжение…
For … to…do
For…downto…do
p=p*a=a 1 ; f=f*i=1*1=1!
s=s+p/f=0+a 1 /1!= a 1 /1!;
i=3
p=p*a=a 1 ; f=f*(3-i+1)=1*1=1!
s=s+p/f=0+a 1 /1!= a 1 /1!;
2. i=2
p=a 1 *a=a 2 ; f=1*2=2!;
s= a 1 /1! + a 2 /2!
i=2
p=a 1 *a=a 2 ; f=1*(3-2+1)=1*2=2!;
s= a 1 /1! + a 2 /2!
3. i=3
p= a 2 *a=a 3 ; f=1*2*3=3!
s= a 1 /1! + a 2 /2! + a 3 /3!
i=1
p= a 2 *a=a 3 ; f=1*2*3=3!
s= a 1 /1! + a 2 /2! + a 3 /3!
4. i=4 выход
i=0 выход
Таким образом мы видим, что требуемая формула получения суммы совпадает с исходной.
Сравнительная характеристика операторов цикла
Если число повторений заранее не известно, то в этом случае используют либо цикл while , либо цикл repeat . Если число повторений известно, то удобнее использовать цикл с параметром.
Давайте сделаем выводы:
- тело цикла (команды) во всех операторах цикла одинаково, кроме оператора изменения параметра цикла;
- в операторах цикла с конечным числом повторений For … to … do ;
- в операторах цикла For … downto … do шаг изменения параметра цикла по умолчанию +1 и -1;
- цикл Repeat … until хотя бы один раз, но выполнится, а все другие могут и ни разу не выполнится: когда начальное значение параметра цикла больше конечного (для цикла For … to … do ), когда начальное значение меньше конечного (для цикла For … downto … do ), условие, стоящее в заголовке цикла While ложно изначально ;
- в цикле Repeat … until операторные скобки ( begin … end ) не требуются, т.к. они сами выполняют их роль ;
- если в операторах цикла While и Repeat … until не задать изменение параметра цикла, произойдет зацикливание .
Домашнее задание:
1. Повторить все операторы цикла (структура, как работает).
2. Составить программы для вычисления:
- накопить сумму квадратов чисел из интервала 10, 30
- длина последовательности не определена, но последний элемент равен 0, вычислить сумму элементов последовательности
- вычислить произведение P = (1-1/2 2 )*(1-1/3 2 )*…*(1- 1/ n 2 ) , n вводится с клавиатуры
Заключение…
Мы провели обобщающий анализ операторов цикла. Теперь решение за вами: каким и когда вы будете пользоваться при решении поставленных задач. Успехов вам в программировании.
Используемая литература:
- Информатика и ИКТ: учебник для 9 класса / Л.Л. Босова, А.Ю. Босова. – М.: БИНОМ. Лаборатория знаний, 2013.
- Информатика. Углубленный уровень : учебник для 10 класса / К.Ю.
Поляков, Е.А. Еремин. – М.: БИНОМ. Лаборатория знаний, 2013.
- Пильщиков В.Н. Сборник упражнений по языку Паскаль :
Учебное пособие для вузов. – М. : Наука. Гл. ред. физ.- мат. лит., 1989.
- Практикум по информатике и информационным технологиям.
Учебное пособие для общеобразовательных учреждений. Изд. 2-е, испр. / Н.Д. Угринович, Л.Л. Босова, Н.И. Михайлова – М. : БИНОМ. Лаборатория знаний, 2004.
- Информатика и ИКТ. Задачник-практикум : в 2 т. / Л.А. Залогова [ и др.]; под ред. И.Г. Семакина, Е.К. Хеннера. – М. : БИНОМ. Лаборатория знаний, 2013.
6. Информатика : Полный справочник для подготовки к ЕГЭ /
О.Б. Богомолова. – Москва : АСТ: Астрель, 2014.
Электронное сопровождение:
1. Набор цифровых образовательных ресурсов
( http :// metodist . lbz . ru / autors / informatica /)
2. Федеральный центр образовательных ресурсов
(http://fcior.edu.ru)
3. Материалы сайта
(http://fipi.ru)