I вид: цикл с параметром.
Оператор цикла с параметром применяют тогда, когда известно число повторений одного и того же действия заранее до входа в цикл. Параметр цикла в этом случае играет роль счётчика.
Начальное и конечное значения параметра цикла могут быть представлены константами, переменными или арифметическими выражениями.
В Паскале он выглядит так:
FOR <параметр> := A to B do <тело цикла>
(для) (до) (выполнять)
Если шаг изменения параметра равен 1, то его можно опустить.
Например:
For v:=e1 to e2 do p
где v – переменная любого скалярного, дискретного, упорядочного типа;
е1 и е2 – выражения того же самого типа, что и v,
р – произвольный оператор Паскаля, возможно снова оператор цикла (вложенные циклы)
Если же значение параметра изменяется с шагом, равным -1, то применяется оператор:
FOR <параметр> := A downto B do <тело цикла>
(для) (вниз) (выполнять)
Например:
For v:= e1 downto e2 do p
v:= e1;
while v>=e2 do begin
p;
v:= pred(v); {pred – предыдущий, начинаем с максимального е2 и спускаемся к
end. наименьшему числу}
v Задача 1: составить программу вычисления
значения выражения у= 1+1/2+1/3+…+1/20
|
Program prim4;
uses crt;
var n: integer; y: real;
begin
clrscr;
y:=0;
for n:= 1 to 20 do begin
y:= y + 1/n;
writeLn (‘y=’,y);
end;
readLn;
end.
Решить самостоятельно следующие задачи.
|
II вид: цикл с предусловием.
Цикл с предусловием на языке Паскаль выглядит так:
Вариант 1.
While УСЛОВИЕ do ДЕЙСТВИЕ; Например: while B do P
(пока) (условие продолжения цикла)
Вариант 2.
While УСЛОВИЕ do begin
ДЕЙСТВИЕ 1;
ДЕЙСТВИЕ 2;
……………….
ДЕЙСТВИЕ N;
END;
Цикл с предусловием используется для программирования процессов, в которых число повторений оператора цикла не известно, а задаётся некоторое условие его окончания. Выполнение оператора цикла с предусловием начинается с проверки условия записанного после слова while. Если оно соблюдается, то выполняется <тело цикла>, а затем вновь проверяется условие и т.д. Как только на очередном шаге окажется, что условие не соблюдается, то выполнение <тела цикла> прекратится. Если Р не воздействует на В, то это чревато зацикливанием. Оператор Р может быть выполнен 0 или ∞ раз (это опасный оператор).
ЗАДАЧА 1.Найти наименьший не равный единице делитель заданного числа N.
program min_delitel;
uses crt;
var N, p: Longint;
Begin
clrscr;
writeLn(‘N=’); readLn (N);
p:=2;
whileLn (N mod p) <> 0 do Inc(p);
writeLn (‘min_delitel’,N,’=’,p);
readln;
End.
ЗАДАЧА 2. Вычислить значение функции Y=3*X 2 +1,5 на отрезке от А до В с шагом H.
При использовании цикла типа ПОКА, при вводе данных (А, В,H) в качестве начального значения аргумента Х принимается А (левая граница отрезка), далее в теле цикла вычисляется значение Y для текущего значения Х, а затем прибавляется к Х значение шага H и повторяется цикл пока истинно условие X< B + H / 2.
program znach_fynkzi;
uses crt;
var A, B, H, X, Y: real;
Begin
clrscr;
writeLn (‘vedite granizy otrezka I shag’);
readln (A, B, H);
X:=A;
while X < B + H/2 do begin
Y:= 3*SQR(X) +1.5;
writeLn (‘pri X=’, X:8:2, ‘Y=’, Y:8:2);
X:= X+H;
end;
readLn;
End.
III вид: цикл с постусловием.
Для программной реализации циклических процессов с неизвестным числом повторений существует ещё один оператор – оператор цикла с постусловием, который имеет следующий вид:
repeat P1;P2;…;Pn; until B;
(повторять) (до тех пор, пока)
Сначала выполняется действие, а потом проверяется условие. Этот оператор выполняется, пока условие В не станет ИСТИНА. Это и есть условие завершения. Цикл выполняется, хотя бы один раз.
При описании циклов с постусловием необходимо принимать во внимание следующее:
· Перед первым выполнением цикла условие его окончания (или продолжения) должно быть определено;
· Тело цикла должно содержать хотя один оператор, влияющий на условие окончания (продолжения), иначе цикл будет бесконечным;
· Условие окончания цикла должно быть в результате выполнено.
Для досрочного выхода из цикла в Паскале используют функции EXIT, BREAK.
Задача: найти НОД двух целых неотрицательных чисел. Условие: х>=y, x ≠0, y≠0.
program NOD;
uses crt;
var x,y: integer;
Begin
writeln (‘x:=’, y:=’);
readln(x,y);
Repeat
if x>y then x:=x mod y else y:=y mod x;
until (x=0) or (y=0);
writeln (‘NOD=”, x+y));
readln;
End.
Задача: Задана входная последовательность натуральных чисел, завершающаяся нулём (нуль играет роль ограничителя), например: 5, 7, 9, 12, 0. Найти сумму членов последовательности.
Program symma;
uses crt;
var S, N: word;
Begin
S:= 0;
Repeat
readLn (N); {читаем первый элемент}
Inc (S,N); { просуммировали}
until N=0; {когда N=0, то заканчиваем чтение всех элементов Pi)
writeLn (‘S=’, S);
readLn;
End.
Решить самостоятельно задачу: составить программу планирования закупки товара в магазине на сумму, не превышающую заданную величину. (Чернов №2 стр 37).
Решение задачи №2 (стр 37 Чернов).
Обозначим: х- цена товара; k – количество товара; p - заданная предельная сумма; s-общая стоимость покупки. Начальное значение общей стоимости равно нулю. Значение предельной суммы задаётся с клавиатуры. Необходимо повторять запрос цены и количества выбранного товара, вычислять его стоимость, суммировать её с общей стоимостью и выводить результат на экран до тех пор пока она не превысит предельную сумму р. В этом случае на экран нужно выводить сообщение о превышении:
program покупка;
uses crt;
var x, k, p, s: integer;
Begin
clrscr;
writeLn (‘ пред.сумма- ‘);
readLn (p);
s:=0;
repeat;
writeLn(‘цена товара и его коллисество’);
readLn(x, k);
s:= s+x*k;
writeLn(‘стоимость покупки =’,s);
until s>p;
writeLn (‘суммарная стоимость покупки превысила предельную сумму’);
readLn;
End.
Существует досрочный выход из цикла при условии, что вы приобрели вещи на сумму P/2.
If (s> p/2) then break;