Циклический алгоритм Алгоритм называется циклическим, если в нем есть повторяющиеся действия. Цикл означает ПОВТОРЕНИЕ Условие продолжения цикла Повторяющиеся действия ДА НЕТ Повторяющиеся действия называются телом цикла
Цикл с параметром или счётчиком Цикл может быть со счётчиком, то есть условием продолжения цикла будет достижение счётчиком какого-то заранее известного значения Счетчик
Цикл ПОКА Цикл может повторяться ПОКА выполняется какое-то условие, например А>B. В этом случае заранее не известно сколько раз выполнится цикл. А>B Повторяющиеся действия, т.е.тело цикла, в котором А и В изменяются ДА НЕТ
Цикл со счётчиком Решим задачу возведения числа А в степень В умножением числа А само на себя В раз. Произведение будем находить в переменной С, количество умножений в переменной I(счётчик)
Пусть А=2, В=3 С=1 i=1 1
Program stepen; var a,b,c,i:integer; Begin write(a,b=); read(a,b); c:=1; for i:=1 to b do { для i от 1 до b выполнять } c:=c*a; writeln(ответ:,c) end.{ i автоматически увеличивается на 1 и проверяется условие i
Program stepen; var a,b,c,i:integer; Begin write(a,b=); read(a,b); c:=1; for i:=1 to b do c:=c*a; writeln(ответ:,c) end.
a,b=2 3 ответ: 8
Program stepen; var a,b,c,i:integer; Begin write(a,b=); read(a,b); c:=1; for i:=1 to b do c:=c*a; writeln(ответ:,c) end. begin end
a,b=2 3 ответ: 8 a,b=2 3 ответ: 2 ответ: 4 ответ: 8 a,b=2 13 ответ: 8192 a,b=2 14 ответ: 16384
Цикл со счётчиком (в общем виде) FOR I:=I1 TO I2 DO для I от I1 до I2 выполнять I-счетчик, переменная счётного типа I1- начальное значение I2 – конечное значение I увеличивается на 1 на каждом шаге цикла I=I2 – условие продолжения цикла Условие продолжения цикла проверяется на каждом шаге цикла.
Примеры алгоритмов с циклом FOR 1.Найти сумму квадратов чисел натурального ряда, то есть 1*1+2*2+3*3+…+N*N, где N – любое целое число. (файл UROK4PR1) VAR S,i,N:INTEGER; BEGIN S:=0;WRITE(N=);READ(N); FOR i:=1 TO N DO S:=S+i*i; WRITELN(S=,S) END. Здесь счетчик i совпадает с числами ряда Задание: выполнить программу для разных значений N найти максимальное значение N для S:integer 45 найти максимальное значение N для S:real 1500 Пусть N=5 iS
VAR S,I,N:INTEGER; BEGIN S:=0;WRITE(N=);READ(N); FOR i:=1 TO N DO S:=S+i*i; WRITELN(S=,S) END.
N=1 S= 1 N= 2 S= 5 N=3 S= 14 N=30 S= 944
Примеры алгоритмов с циклом FOR 2.Найти сумму чисел натурального ряда (1+2+3+…+N) и сумму обратных величин, то есть 1+1/2+1/3+…+1/N, где N – любое целое число. (файл UROK4PR2) var i,n,s:integer; sobr:real; begin write('n=');read(n); s:=0;sobr:=0; for i:=1 to n do begin s:=s+i;sobr:=sobr+1/i; end; writeln(' s=',s,' sobr=',sobr); end. Здесь счетчик i используем как числа ряда и знаменатель членов ряда Задание: выполнить программу для разных значений N Пусть N=5 iSSobr
Задания для самостоятельной работы 1.Выполнить UROK4PR1, UROK4PR2 для разных значений входных величин 2.Изменить программу UROK4PR1, чтобы найти сумму следующего ряда а+2а+3а…+Nа, где а и N любые числа. 3.Среди чисел от 1 до 99 найти такие, квадраты которых равны кубу суммы цифр числа, то есть, если, например 27 2 =(2+7) 3, то число 27 напечатать. 4. Подсчитать, сколько двузначных чисел таких, у которых не совпадают цифры в их десятичной записи. Например, у числа 56 первая цифра не равна второй Подсчитайте, сколько чисел от 1 до 1000 таких, которые делятся на 2, но не делятся на три (без остатка).Использовать функцию MOD (остаток от целочисленного деления)
Цикл ПОКА Решим задачу целочисленного деления числа А на число В вычитанием из числа А числа В ПОКА А>=В. Количество вычитаний и будет результатом целочисленного деления
Пусть А=25 В=6 С=0 25>6 19>6 13>6 7>6 1>6 A=19 A=13 A=7 A=1 C=1 C=2 C=3 C=4 Вывод С=4, А (Остаток)=1 начало Конец Ввод А, В С:=0 A:=A-B С:=С+1 А>=B Вывод С,А нет да нет АЛГОРИТМ Начальное значение переменной С=0
начало Конец Ввод А, В С:=0 A:=A-B С:=С+1 А>=B Вывод С,А нет да Program delenie; var a,b,c:integer; begin write(a,b=); read(a,b); c:=0; WHILE A>=B DO { пока a>=b выполнять } begin a:=a-b; c:=c+1 end; writeln(ответ:,c,остаток=,a) end.
Program delenie; var a,b,c:integer; begin write(a,b=); read(a,b); c:=0; WHILE A>=B DO begin a:=a-b; c:=c+1 end; writeln(ответ:,c, остаток=,a) end.
a,b=25 6 ответ: 4 остаток=1
Program delenie; var a,b,c:integer; begin write(a,b=); read(a,b); c:=0; WHILE A>=B DO begin a:=a-b; c:=c+1 end; end. writeln(ответ:,c, остаток=,a)
a,b=25 6 ответ: 4 остаток=1 a,b=25 6 ответ: 1 остаток=19 ответ: 2 остаток=13 ответ: 3 остаток=7 ответ: 4 остаток=1
Цикл ПОКА (с предусловием) в общем виде WHILE DO пока выполнять Такой вид цикла ПОКА называется циклом с предусловием, так как условие продолжения цикла проверяется до его выполнения. Тело цикла может не выполниться ни разу. В цикле с постусловием условие окончания цикла проверяется после его выполнения. Тело цикла один раз выполняется всегда.
Цикл ПОКА (с постусловием) в общем виде REPEAT (повторять) (любое число операторов) UNTIL (пока не) Этот вид цикла используют, если можно один раз выполнить тело цикла без проверки условия. Например в любой программе можно написать цикл - REPEAT UNTIL KEYPRESSED. Здесь логическая функция принимает значение ИСТИНА при нажатии любой клавиши. Если никакая клавиша не нажата KEYPRESSED = ЛОЖЬ и цикл продолжается. Этот цикл удобно использовать, чтобы не дать программе закончиться и выйти из MS DOS в текстовый редактор
Цикл ПОКА с постусловием Решим задачу нахождения наибольшего общего делителя двух чисел m и n (НОД)по алгоритму Евклида, вычитая из большего числа меньшее, пока они не станут равны.
АЛГОРИТМ файл UROK4PR7 program nod; Пусть m=24, n=64 var m,n:integer; begin write('m= n=');read(m,n); repeat if m>n then m:=m-n; if n>m then n:=n-m; until m=n;{условие окончания цикла} writeln('нод=',n); end. mn
Разряды = Примеры алгоритмов с циклом While и Repeat 1. Перевод трехзначного десятичного числа (А) в двоичное вычитанием степеней двойки. Вспомним алгоритм перевода без программы В программе W:=512; WHILE W>=1 DO BEGIN IF A>=W THEN BEGIN A:=A-W; WRITE('1') END ELSE WRITE('0'); W:=W/2; END; Пусть А=140
Примеры алгоритмов с циклом While и Repeat 1. Перевод трехзначного десятичного числа (А) в двоичное вычитанием степеней двойки, файл UROK4PR3 VAR W,A:REAL; BEGIN W:=512; {наибольшая степень двойки для 3-х-значного числа} WRITE('A(
Примеры алгоритмов с циклом While и Repeat 2. Печатать степени числа А, пока она не превысит второе число (В), файл UROK4PR4 program stepen; var a,b,c:real; begin write('a (>1),b');read(a,b); c:=a; while c
Примеры алгоритмов с циклом While и Repeat 3. Извлечение квадратного корня (Х)с помощью алгоритма Ньютона из числа U по формуле X:=(X+U/X)/2. Вычисление повторяется пока погрешность abs(X*X - U) > заранее заданного числа. Понятно, что при точном извлечении корня X*X – U = 0, файл UROK4PR5 program koren; var u,x:real; begin write('u= ');read(u); x:=(u+1)/2; while abs(x*x-u)>= do begin x:=(x+u/x)/2;writeln(x); end; end. Задание: выполнить программу для разных значений U Пусть U=26 X 13,5 7,713 5,541 5,1167 5, ,09902 Погрешность abs(x*x-u) = 9.313Е-10
Примеры алгоритмов с циклом While и Repeat 4. Алгоритм превращения в единицу любого введенного числа, файл UROK4PR6 program edinica; var x:integer; begin write('x=');read(x); while x1 do begin if odd(x) then x:=x*3+1 else x:=x div 2; writeln(x); end; end. Задание: проверить алгоритм для любых значений Х
Задания для самостоятельной работы 1. Составить программу нахождения наименьшего делителя данного целого числа. 2. Составить программу проверки, является ли данное число простым. 3. Составить программу, вычисляющую для данного нечетного N сумму 1 + 1/3 +1/5 + 1/ /N. 4. Дополнить пример 7: найти НОК (наименьшее общее кратное) чисел m и n по А·В формуле НОК= НОД(А,В) 5. В примерах 3, 4, 5, 6 заменить цикл WHILE на цикл REPEAT 6. В примере 7 заменить цикл с постусловием на цикл с предусловием.