ПРОГРАММИРОВАНИЕ ЦИКЛИЧЕСКИХ АЛГОРИТМОВ НАЧАЛА ПРОГРАММИРОВАНИЯ Ключевые слова • while ( цикл-ПОКА) • repeat (цикл-ДО) • for (цикл с параметрами) Программирование циклов с заданным условием продолжения работы нет Условие да Тело цикла Общий вид оператора: while <условие> do <оператор> Здесь: <условие> логическое выражение; пока оно истинно, выполняется тело цикла; <оператор> - простой или составной оператор, с помощью которого записано тело цикла. Начало Список данных x, y, r, q - цел x, y r:=x q:=0 r >=у да r:= r - y q:= q +1 q, r Конец нет program n_14; var x, y, q, r: integer; begin writeln ('Частное и остаток'); write ('Введите делимое x>>'); readln (x); write ('Введите делитель y>>'); read (y); r:=x; q:=0; while r>=y do begin r:=r-y; q:=q+1 end; writeln ('Частное q=', q); writeln ('Остаток r=', r) end. Программирование циклов с заданным условием окончания работы Тело цикла да Условие нет Общий вид оператора: repeat <оператор1; оператор2; …; > until <условие> Здесь: <оператор1>; <оператор2>; … - операторы, образующие тело цикла; <условие> - логическое выражение; если оно ложно, то выполняется тело цикла. program n_15; var i: integer; x: real; begin writeln ('График тренировок'); i:=1; x:=10; repeat i:=i+1; x:=x+0.1*x; until x>=25; writeln ('Начиная с ', i, '-го дня спортсмен будет пробегать 25 км') Начало Список данных i – цел x- вещ i := 1 x := 10 i := i +1 x := x +0.1*x end. x>= 25 да i нет Конец Программирование циклов с заданным числом повторений i = i1, i2 Тело цикла Общий вид оператора: for <параметр>:=<начальное_значение> to <конечное_значение> do <оператор> Здесь: <параметр> - переменная целого типа; После каждого выполнения тела цикла происходит <начальное_значение> и <конечное_значение> увеличение на единицу параметра цикла; условие выхода из выражения того же типа, что и параметр; цикла - превышение параметром конечного значения. <оператор> - простой или составной оператор - тело цикла. Начало program n_16; var i,n:integer;a,y:real; begin writeln ('Возведение в степень'); write ('Введите основание a>>'); readln (a); write ('Введите показатель n>>'); readln (n); y:=1; for i:=1 to n do y:=y*a; writeln ('y=', y) end. Список данных i, n – цел a, y – вещ a, n y := 1 i = 1, n y := y * a y Конец Различные варианты программирования циклического алгоритма Для решения одной и той же задачи могут быть созданы разные программы. Организуем ввод целых чисел и подсчёт количества введённых положительных и отрицательных чисел. Ввод должен осуществляться до тех пор, пока не будет введён ноль. В задаче в явном виде задано условие окончания работы. Воспользуемся оператором repeat. program n_17; var n, k1, k2: integer; begin k1:=0; k2:=0; repeat write ('Введите целое число>>'); readln (n); if n>0 then k1:=k1+1; if n<0 then k2:=k2+1; until n=0; writeln ('Введено:'); writeln ('положительных чисел – ', k1); writeln ('отрицательных чисел – ', k2) end. Начало Список данных n, k1, k2 - цел k1:=0 k2:=0 n да k1:=k1+1 n>0 да k2:=k2+1 нет нет n<0 нет n=0 да k1, k2 Конец Ввод осуществляется до тех пор, пока не будет введён ноль. Работа продолжается, пока n 0. Воспользуемся оператором while: program n_18; var n, k1, k2: integer; begin k1:=0; k2:=0; n:=1; while n<>0 do begin writeln ('Введите целое число>>'); read (n); if n>0 then k1:=k1+1; if n<0 then k2:=k2+1; end; writeln ('Введено:'); writeln ('положительных – ', k1); writeln ('отрицательных – ', k2) end. Начало Список данных n, k1, k2 - цел k1:=0 k2:=0 n:=1 n <> 0 да n да k1:=k1+1 k2:=k2+1 n>0 нет k1, k2 Конец нет Самое главное В языке Паскаль имеются три вида операторов цикла: while цикл-ПОКА) repeat (цикл-ДО) for (цикл с параметром). Если число повторений тела цикла известно, то лучше воспользоваться оператором for; в остальных случаях используются операторы while и repeat. Вопросы и задания Дана последовательность Требовалось написать программу вычисления факториала числа n Напишите программу, котораяоператоров: выводит на экран таблицу Напишите программу, которая выводит на экран таблицу Дана Напишите последовательность программу, выводящую операторов: на целых экранчисел изображение (факториал числа n есть произведение всех от 1до n). степеней двойки (от нулевой до десятой). a:=1; умножения на n раз (n - целое число вцикл? диапазоне от 2 до 10, Напишите программу, ввыполнен которой осуществляется ввод шахматной a:=1; доски, чёрные клетки изображаются Сколько Программист торопился игде написал программу неправильно. Проанализируйте следующий цикл: Рекомендуемый вид будет экрана после выполнения программы вводимое с клавиатуры). b:=2; целых чисел (ввод осуществляется до техРекомендуемый пока не будет звёздочками, b:=1; а белые - s:=s+1; пробелами. вид Ниже приведён фрагмент его программы, впор, котором содержится а) for i:=0 to 15 do while a<b do представлен ниже: Напишите программу вычисления наибольшего общего Напишите Напишите программу, программу, которая в вычисляет которой осуществляется сумму: ввод введён ноль) и определение максимального (наибольшего) пять ошибок: экрана repeat после выполнения программы представлен ниже: while a+b<8 do Напишите программу, которая 10 раз выводит на экран c:=a=b; Какой из трёх рассмотренных операторов цикла Таблица степеней двойки: делителя двух целых чисел: Напишите программу, которая генерирует 10 выходных случайных б) for i:=10 to 15 do s:=s+1; Пример входных данных Пример целых чисел (ввод осуществляется до тех пор, пока не а) первых n натуральных чисел; из введённых чисел.ваши k:=1; a:=a+1; * * * * имя и выводит фамилию. Вот чём его особенность? 0 20, 1 repeat; а) используйте оператор является, по вашему основным, т. е.ина таким, чисел в диапазоне 11мнению, до эти числа экранчто begin будет введён ноль) и подсчёт суммы среднего данных в) for i:=-1 to do s:=s+1; f:=0; Используйте оператор repeat. б) квадратов первых n натуральных чисел; b:=b*2; * * * * 1 2 б) используйте оператор while. и вычисляет их среднее арифметическое. им можно заменить два других? арифметического введённых положительных чисел. a:=a+1; г) for i:=10 to 10 do s:=s+1; Введите n> 5 5 * 2 = 10 while k<n do until b>8; в) всех свою чётных диапазоне от *чисел *вrepeat. *4 * 1 до n; 2зрения. Обоснуйте точку Используйте оператор f:=f*k; s:=a+b b:=b+2; д) k:=5; * 3чисел. * 58 **3 = 15 * г) всех двузначных k:=k+1 Сколько разfor будет i:=k-1повторён to k+1 s:=s+1; 5 и* 4какими = *20 будут значения 4 *doцикл 16 end; * * Найдите ошибки. необходимые операторы. этой переменных a, b,Допишите s после исполнения 5 32 * * 5 **5 = 25 * s:=a+b последовательности операторов? 64 * 6повторен * *5 *цикл 6 = *30и какими будут Сколько раз будет 7 128 Пример входных данных выходных данных * * * значения переменных a, b, s Пример после исполнения этой 5 * *7 = 35 8 256 последовательности операторов? 5 *= 8120 = 40 Введите n> 5 5! 9 512 5 * 9 = 45 10 1024 Введите n> 6 6! = 720 5 * 10 = 50 Опорный конспект В языке Паскаль имеются три вида операторов цикла: for (цикл с параметром) repeat Число повторений цикла известно (цикл-ДО) Число повторений цикла неизвестно while (цикл-ПОКA)