Циклы Презентация по программированию Автор: учитель информатики МОУ Плесской СОШ Юдин А.Б. 2011 год
Часть 1. Виды циклов.
I. Цикл с параметром. Выполняется заранее определенное количество раз. FOR – для TO – до DO - выполнить ДЛЯ i:=1 ДО N ВЫПОЛНЯТЬ действие; FOR i:=1 TO N DO действие; если в теле цикла одно действие FOR i:=1 TO N DO BEGIN действие1; действие2; END; если в теле цикла несколько действий FOR i:=N DOWNTO 1 DO действие; если переменная i убывает
Блок-схема цикла с параметром. FOR i:=1 TO N DO действие1; действие2; FOR i:=1 TO N DO BEGIN действие1; действие2; END;
Пример 1. Вывести на экран 64 вертикальные линии. Program n1; Uses Crt, GraphABC; var x,y,i:Integer;begin x:=1; // устанавливаем координату Х первой линии For i:=1 to 64 do begin // перебираем от 1 до 64 Line (x,0,x,400); // рисуем очередную линию x:=x + 10; // увеличиваем координату на 10 end;end.
II. Цикл с постусловием. Выполняется всегда хотя бы один раз. Выполняется пока условие ложно. REPEAT – повторять UNTIL – до тех пор ПОВТОРЯТЬ действие1; действие2; ДО ТЕХ ПОР (ПОКА УСЛОВИЕ ЛОЖНО); REPEAT действие1; действие2; UNTIL (ПОКА УСЛОВИЕ ЛОЖНО);
Пример 2. Вывести на экран 64 вертикальные линии. Program n2;Uses Crt, GraphABC;var x:Integer;begin x:=1; repeat Line (x,0,x,400); x:=x+10; until (x>640) end. повторять до тех пор пока условие ложно
III. Цикл с предусловием. Может не выполнится не разу. Выполняется пока условие истинно. WHILE – пока DO – выполнять ПОКА (УСЛОВИЕ ИСТИННО) ВЫПОЛНЯТЬ НАЧАЛО действие1; действие2; КОНЕЦ; WHILE (УСЛОВИЕ ИСТИННО) DO BEGIN действие1; действие2; END;
WHILE (УСЛОВИЕ ИСТИННО) DO BEGIN действие1; действие2; END; WHILE (УСЛОВИЕ ИСТИННО) DO действие1; действие2;
Пример 3. Вывести на экран 64 вертикальные линии. Program n3;Uses Crt, GraphABC;var x:Integer;begin x:=1; while(x<640) do begin Line (x,0,x,400); x:=x+10; end;end. повторять пока Х меньше 640
Часть 2. Графические задачи на циклы.
Задача 1. Составить программу выводящую на экран следующее изображение Program n1; Uses Crt, GraphABC; var x,i:Integer; begin x:=1; For i:=1 to 64 do begin line(320,400,x,1); x:=x+10; end; end. Более короткое решение: Program n1; Uses Crt, GraphABC; var x:Integer; begin For x:=1 to 64 do line(320,400,x*10,1); end.
Задача 2. Составить программу выводящую на экран следующее изображение Program n2; Uses Crt, GraphABC; var x,y:Integer; begin x:=1; y:=1; repeat Line (x, 0 , 0 , y); x:=x + 16; y:=y + 10; until (x>640); end. В теле цикла могут изменяться две переменные
Задача 3. Составить программу выводящую на экран следующее изображение Program n3; Uses Crt,GraphABC; var i,j,x,y:Integer; Begin clrscr; y:=10; for i:=1 to 12 do begin x:=10; for j:=1 to 20 do begin circle (x,y,10); x:=x+30; end; y:=y+30; end; end. Вывод i-ой строки Изменение координаты Y строки
Часть 3. Расчетные задачи на циклы.
Задача 1. Построить таблицу значений функции y = 3 sin x + cos 2x на интервале [-1 ; 1] с шагом Δх = 0,1. Program n1; Uses Crt; var x,y,dx:real; begin ClrScr; x:= -1; dx:=0.1; repeat y:= 3*sin(x) + cos(2*x); writeln ('x= ',x:7:5,' y= ',y:7:5); x:=x+dx; until (x>1); end.
Задача 2. Построить таблицу значений функции, на интервале [-10 ; 10] с шагом Δх = 1. repeat if (x<>1) then begin y:= (x+1)/(1-x); writeln ('x= ',x:7,' y= ',y:7:5); end; x:=x+dx; until (x>10); Задача 3. Построить таблицу значений функции на интервале [-1; 1] с шагом Δх = 0,1 если функция имеет вид: repeat if (x<-0.5) then y:=x+1; if (x>=-0.5) and (x<=0.5) then y:=x*x; if (x>0.5) then y:=x-2; writeln ('x= ',x:7:5,' y= ',y:7:5); x:=x+dx; until (x>1); x+1, при x<-0.5 Y= x2 , при -0.5<=x<=0.5 x -2, при x>0.5
Небольшое отступление: Построить таблицу значений функции y = 1/х на интервале [-1; 1] с шагом 0,1 Program n1; Uses Crt; var x,y,dx:real; begin ClrScr; x:= -1; dx:=0.1; repeat if (x<>0) then begin y:= 1/x; writeln ('x= ',x,' y= ',y:7:5); end; x:=x+dx; until (x>1); end. Нуля нет! А в место него число в минус шестнадцатой степени. Изменим формат вывода
Вот одно из возможных решений данной проблемы: Program n1; Uses Crt; var x,y,dx:real; begin ClrScr; x:= -1; dx:=0.1; repeat if (abs(x)>1e-12) then begin y:= 1/x; writeln ('x= ',x:7:5,' y= ',y:7:5); end; x:=x+dx; until (x>1); end. Пусть все числа, по модулю меньшие 0,000000000001 будут для нас нулями.
Задача 4. Составить программу вычисления среднего арифметического числовой последовательности. Где количество элементов и сами элементы вводятся с клавиатуры. Program n4; Uses Crt; var i,n:integer; a,s,sr:real; Begin ClrScr; write('N=');readln(n); s:=0; for i:=1 to n do begin write( ‘ Введи [ ‘ , i , ‘ ] = ‘ );Readln(a); s:=s+a; end; sr:=s/n; writeln(‘Среднее арифметическое = ',sr:10:5) end. Математическая запись задачи Результат выполнения программы
Задача 5. Дано целое число N (N>0). Используя один цикл найти сумму 1+ 1/2 + 1/3 +…+1/N Program n1; Uses crt; var s:real; i,n:Integer; begin Clrscr; Write(‘Введи n=');Readln(n); s:=0; For i:=1 to N do s:=s+1/i; writeln('s=',s:10:5); End. Результат очень легко проверить в ручную
Задача 6. Написать программу выводящую на экран все двузначные числа сумма цифр которых равна 10. program n6; Uses Crt; var e,d:integer; begin ClrScr; for d:=1 to 9 do for e:=0 to 9 do if d+e=10 then writeln(d*10+e); end.
Блок-схема к задаче 5
Задача 7. (Вычисление суммы бесконечного ряда с определенной точностью). Вычислите значение суммы ряда с точностью Е=0,02 Сумма вычисляется до тех пор, пока очередное слагаемое не станет меньше точности Е Program n7; Uses crt; var s,e:real; i:integer; begin clrscr; s:=0; i:=1; e:=0.02; Repeat s:=s+1/i; Writeln('i=',i,' слагаемое',1/i); i:=i+1; until (e>1/i); writeln('S=',s:10:5); end.
Задача 8. Вычислить площадь фигуры ограниченной линиями: X=1, X=4, Y=0, Program n8; Uses Crt; Var x,h,s:Real; Begin ClrScr; h:=(4-1)/1000; x:=1; Repeat s:=s+h*1/x; x:=x+h; Until x>4; writeln('Площадь = ',S:10:5); end. Высота прямоугольника 1/x Ширина прямоугольника h:=(4-1)/1000; Площадь одного прямоугольника h*1/x
Задача 9. Найти количество цифр в числе введенном с клавиатуры. Program n8; Uses Crt; Var n:Real; k:Integer; Begin ClrScr; Write ('N= ');readln(n); k:=0; Repeat n:=int(n/10); k:=k+1; Until n<0.1; writeln('Кол-во = ',k:5); end. Если n имеет тип integer то эту строку можно записать так: n:=n div 10;
Часть 4. Всегда ли нужны циклы.
Задача 10. Найти сумму целых четных чисел от 2 до 100. Program n10; Uses crt; var i,s:Integer; begin Clrscr; s:=0; For i:=2 to 100 do if (i mod 2 = 0) then s:=s+i; writeln('s=',s:10); End.
Вспомним формулу суммы n членов арифметической прогрессии Program n10; Uses crt; var s:Real; begin Clrscr; s:=(2+100)/2*50; writeln('s=',s:10:5); End. Найдем количество n членов в этой последовательности: an=a1+d(n-1) 100=2+2(n-1) 100=2+2n-2 100=2n n=50 Подставим значения в формулу суммы