Организация циклов Компьютер может заданное число раз выполнить одни и те же действия с разными данными. Повторяющиеся действия в программировании называются циклом.
Виды циклов Оператор безусловного перехода goto n; Оператор цикла пока while условие do оператор; Оператор цикла до repeat оператор until условие; Операторы циклов пересчет for i:=n1 to n2 do оператор;
Оператор безусловного перехода Позволяет перейти без проверки условия либо на один из предыдущих операторов, либо на один из последующих, т.е. изменить порядок выполнения команд. Общий вид оператора: goto n; n – целое число, называемое меткой Метка появляется в программе 3 раза: 1)В описательной части в разделе Label; 2)В операторе goto; 3)Перед оператором, на который осуществляется безусловный переход
Пример цикла goto n Задача. Вычислить наибольший общий делитель двух натуральных чисел А и B. Решение. Воспользуемся алгоритмом Евклида: будем уменьшать каждый раз большее из чисел на величину меньшего до тех пор, пока оба числа не станут равны. Исходные данные 1 шаг2 шаг3 шагНОД(А, B)=5 А=25А=10 А=5 B=15 B=5
Алгоритм Евклида на Паскале (с помощью goto) Program E5; Label 1,2; Var a, b: integer; Begin Write (Введите два натуральных числа); Read (a, b); 1: if a=b then goto 2; if a>b then a:=a – b else b:= b – a ; goto 1; 2: write (НОД =, a); readln; End.
Оператор цикла пока Общий вид: while условие do оператор; Выполняется так: оператор повторяется до тех пор, пока выполняется условие ( истинно логическое выражение ) Если оператор сложный – его заключают в операторные скобки begin……end;
Алгоритм Евклида ( с помощью цикла пока) Program E6; Var a, b: integer; Begin Write (Введите два натуральных числа); Read (a, b); while ab do if a>b then a:=a – b else b:= b – a ; write (НОД =, a); readln; End.
Оператор цикла до Проверка условия в цикле до осуществляется после выполнения оператора Общий вид: repeat оператор until условие; ( если несколько операторов, то не нужны операторные скобки )
Алгоритм Евклида ( с помощью цикла до ) Program E7; Var a, b: integer; Begin write (Введите два натуральных числа); read (a, b); repeat if a>b then a:=a – b if b>a then b:=b – a until a=b; write (НОД =, a); readln; End.
Операторы циклов пересчет Когда известно число повторений, удобно использовать цикл пересчет. В Паскале имеется два оператора для организации циклов пересчет: прямой (переменная цикла возрастает с каждым шагом на единицу) и обратный (убывает на единицу)
Оператор прямого пересчета for i:= n1 to n2 do оператор (для i начиная с n1 до n2 выполнить оператор) i – переменная цикла При i=n1 цикл выполняется первый раз Затем к i добавляется 1 и осуществляется проверка, не превысило ли полученное значение величину n2. Если превысило, то происходит выход из цикла и выполнение следующего по порядку оператора программы
Задача 1. Вычислить а n а n= а*а*а*…….*а. Основной оператор в теле цикла повторяется n раз и имеет вид: p=p*a При первом выполнении цикла в ячейке р должно находиться число не влияющее на умножение (т.е. 1)
Программа имеет вид Program E8; Var a, р: real; i,n: integer Begin write (Введите a- основание степени, а=); readln (a); write (Введите n- показатель степени, b=); readln (n); p:=1; for i:=1 to n do p=p*a; write (p =, p); readln; End.
Оператор обратного пересчета Оператор цикла обратный пересчет работает аналогично оператору прямого пересчета, только переменная цикла не возрастает с каждым шагом на единицу, а на единицу убывает. Оператор имеет вид: for i:=n2 downto n1 do оператор Для этого оператора должно также выполняться n2 n1
Правила При использовании в программе операторов цикла необходимо соблюдать следующие правила: Внутри цикла может находится другой цикл, но необходимо, чтобы циклы имели разные переменные и внутренний цикл полностью находился в теле внешнего; Метка и оператор goto с этой меткой должны находится в теле цикла; Если требуется обойти группу операторов в теле цикла и продолжить цикл, то надо передать управление на замыкающий цикл end; Можно досрочно выйти из цикла, или используя оператор goto, или изменив параметр условия в операторах while и repeat так, чтобы цикл больше не выполнялся.