III вид : цикл с постусловием.




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

v Задача2: дано натуральное число n (1000<n<9999). Определить является ли оно палиндромом с учётом четырёх цифр числа. program prim_5; uses crt; var n,m,a,i: integer; begin clrscr; writeLn (‘n<=9999’); readLn(n); m:= n; a:= 0; for i:= 1 to4 do begin a:= a*10+m mod10; m:=m div 10 end; ifa=n then writeLn (‘da!’) else writeLn (‘net!’); readLn; end.
Решение.

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.

 

Решить самостоятельно следующие задачи.

Задача 3. Определить количество натуральных трёхзначных, сумма цифр которых равна заданному числу N. Задача 4. Среди двузначных чисел найти те, сумма квадратов цифр которых делится на 13. Задача 5. Найти сумму положительных нечётных чисел, меньших 100. Задача 6. Даны натуральные числа m,n. Получить все кратные им числа, меньшие m*n.  

 

 

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;

 

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2020-05-11 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: