Фрагмент блок-схемы
End.
Begin
Begin
End.
Repeat
Begin
Repeat
End.
End
Begin
Begin
Begin
Примеры алгоритмов циклической структуры
REPEAT
Begin
Writeln('Цикл');
k1:=k1+1
end;
7. В этом фрагменте цикл выполнится ровно 4 раза и компьютер перейдет к следующим командам.
8. При использовании операторов цикла с предусловием и постусловием необходимо быть осторожным в тех случаях, когда в логическом выражении (условии окончания цикла) фигурируют вещественные переменные. Следует помнить, что в компьютере значения выражений вещественного типа вычисляются приближенно, т.е. с небольшой погрешностью. Например, вещественное число 1.0 в компьютере может быть представлено как 0.99999999 или как 1.00000001 . Поэтому фрагмент
.............
...........
UNTIL X=B;
.............
где X, B : Real, будет неправильным, хотя с математической точки зрения он верен. Условие X=B скорее всего никогда не выполнится, в результате произойдет "зацикливание" программы. Не следует управлять циклом с помощью логического выражения, в котором вещественные переменные проверяются на строгое равенство.
Пример 1. Для вычисления В в 9-й степени при В < 0, когда Exp(9*Ln(B)) недопустим, можно использовать следующий цикл:
………
K:=1; P:=1;
While K <= 9 Do
P:=P*B;
K:=K+1
End;
Пример 2. Составить программу вычисления и вывода на печать таблицы значений функции , при Х1 <= Xi <= Хn с шагом dX. Здесь а=-105; b=-3,62e-2; c=1,1; Х1 =2,65; Хn =5,55; dX=0,15.
Program Cikl_1;
Var A,B,C: Real;
X,Xn,Xk,dX : Real;
Z: Real;
Read(A,B,C,Xn,Xk,dX);
X:=Xn;
While X <= Xk Do
Z:=A*Exp(B*X - C*X*X);
Writeln(' X=',X:5:2,' ':5,'Z=',Z:10);
X:=X+dX
Пример 3. ВычислитьВ в 9-й степени при В<0 с использованием оператора цикла Repeat.
K:=1; P:=1;
P:=P*B;
K:=K+1
Until K > 9;
Пример 4. Составить программу для вычисления и вывода на печать таблицы значений функции при х=5,6,...,25; а=15.27е-2.
Program Cikl_2;
Var A,Y : Real;
X : Byte;
A:=15.27e-2;
X:=5;
Y:=Sin(A*X) * Sqrt(X);
WriteLn(' X=',x,' Y=',y:10);
X:=X+1
Until X > 25
Операторы тела цикла будут выполняться до тех пор, пока Х не станет больше 25.
Пример 5.Найти произведение натуральных чисел меньших 200 и кратных 7.
uses crt;
var m,n:word;
l:longint;
clrscr;
l:=1;
m:=1;
while m<200 do
if m mod 7 = 0 then l:=l*m;
inc(m);
end;
writeln(l);
readkey;
Пример 6.Для введенной последовательности целых чисел, признаком конца которой является ноль, определить максимальное число, сумму всех чисел и количество чисел удовлетворяющих условию: число цифр 7 в числе равно 3
uses crt;
var n,m,max,s,k,p:longint;
st:string;
begin
clrscr;
max:=-2147483647;
s:=0;
k:=0;
repeat
read (n);
if n>max then max:=n; {поиск максимального значения числа}
s:=s+n; {здесь находится счетчик чисел}
str(n,st); {преобразование целого числа в символьное значение}
repeat
p:=0;
p:=pos('7',st); {поиск значения '7' в строке st и сохранение номера позиции в Р, откуда начинается найденный символ}
if p<>0 then
begin
inc(m);
delete(st,1,p);{удалить количество символов Р из строки ST, }
{начиная с позиции 1}
end;
until p=0;
if m=3 then
begin
inc(k);
m:=0;
end;
until n=0;
writeln ('max: ',max,' summa: ',s,' k: ',k);
readkey;
end.
Пример 7.Вычислить и вывести на экран значения функции y=x3 на интервале изменения х, равном [a, b] в n равноотстоящих точках интервала. Найти:
- сумму тех значений функции, которые удовлетворяют условию –10 <y < 10;
- произведениетех значений функции, целая часть которых делится на 3 без остатка;
- количествоположительных значений функции в точках с нечетными номерами;
- наибольшееиз вычисленных значений функции в расчетных точках.
- наибольшееиз вычисленных значений функции в расчетных точках.
Следующий рисунок иллюстрирует задачу. Требуется вычислить значения функции в n точках, изменяя переменную x от а до b с постоянным шагом
Исходные данные задачи:
a, b –левая и правая границы интервала измененияx;
n –количество расчетных точек.
Введем следующие обозначения:
x –изменяющийся аргумент функции;
y –вычисляемое значение функции;
dx –шаг изменения значения x;
i –номер расчетной точки, изменяющийся от 1 до n с шагом 1;
sum –сумма вычисленных значений функции, удовлетворяющих условию –10 < y < 10;
pr -произведение вычисленных значений функции, целая часть которых делится на 3 без остатка;
kol -положительных значений функции в точках с нечетными номерами;
max –наибольшее из вычисленных значений функции.
Используем для организации цикла оператораFor.
Программа | Комментарии |
Program Primer5_7_1; Var a, b, dx, sum, pr, x, y, max: real; n, kol, i: integer; | Объявляем переменные |
Begin Writeln(‘Введите a и b’); Readln(a,b); Writeln(‘Введите количество расчетных точек N>1’); Readln(n); | Вводим исходные данные |
dx:=abs(b-a)/(n-1); | Вычисляем шаг изменения x |
x:=a; For i:=1 to n do begin Y:=x*x*x; Writeln (x:5:2, y:8:2); x:=x+dx; end; | Вычисляем значения функции и выводим их на экран |
sum:=0; x:=a; For i:=1 to n do begin Y:=x*x*x; If (y>-10) and (y<10) then sum:=sum+y; x:=x+dx; end; Writeln(‘Сумма=’,sum:8:3); | Вычисляем сумму значений функции, удовлетворяющих условию –10<y<10Комментарий:добавляем к сумме только те значения переменной y, которые удовлетворяют условию (y>-10) and (y<10) |
pr:=1; x:=a; For i:=1 to n do begin Y:=x*x*x; If (trunc(y) mod 3 =0 ) then pr:=pr*y; x:=x+dx; end; Writeln(‘Произведение=’,pr:8:3); | Вычисляем произведение тех значений функции, целая часть которых делится на 3 без остатка Комментарий:для проверки делимости на 3 без остатка вычисляется целая часть y с помощью функции trunc(y),затем проверяется условие(trunc(y) mod 3 =0)- равен или нет нулю остаток от целочисленного деления (операция mod вычисляет остаток от целочисленного деления) |
kol:=0; x:=a; For i:=1 to n do begin Y:=x*x*x; If (y>0) and (i mod 2=1) then kol:=kol+1; x:=x+dx; end; Writeln(‘Количество =’,kol); | Вычисляем количество положительных значений функции в точках с нечетными номерами Комментарий:для проверки нечетности номеров точек (переменная i) используется условие i mod 2=1 Если значение переменной i нечетное, то остаток от целочисленного деления равен 1. |
max:=a*a*a; x:=a; For i:=1 to n do begin Y:=x*x*x; If max<y then max:=y; x:=x+dx; end; Writeln(‘Наибольшее значение=’, max:8:3); End. | Вычисляем наибольшее значение функции в расчетных точках Комментарий: за начальное значение переменной max принимается значение функции в точке x=a. В цикле вычисляются новые значения, каждое из которых сравнивается со значением max. Если новое значение функции оказывается больше чем значение max, то оно принимается за новое значение max. |
Пример.Разложение целого числа Х на простые множители. Будем делить Х на p, начиная с p = 2. Если делится нацело, то p — множитель, если не делится, то увеличиваем p на 1, пока Х <> 1.
read(x);p := 2;repeat if x mod p = 0 then begin write(p, ' '); x := x div p; end else p := 1+p;until x = 1;Контрольные вопросы и задания
- Назовите основные виды циклов. Назовите отличия циклов друг от друга.
- Опишите структуру оператора цикла с предусловием. Принцип выполнения цикла с предусловием.
- Дайте описание типу данных, используемых в качестве параметров для цикла с предусловием.
- Опишите структуру оператора цикла с постусловием. Принцип выполнения цикла с постусловием.
- Дайте описание типу данных, используемых в качестве параметров для цикла с постусловием.
- Дайте объяснение выражению «Может ли один цикл быть вложен внутрь другого?».
- Назовите правила использования операторов цикла с пост- и предусловием.
- Определите сколько раз исполнится фрагмент программы и чему равно выражение K.
K:=0;
WHILE K<=10 DO
begin K:=K+2; Write('K= ',K:3) end;
- Определите сколько раз исполнится фрагмент программы и чему равно выражение K.
K:=0;
WHILE K<=10 DO
begin K:=K+3; Write('K= ',K:3) end;
- Определите сколько раз исполнится фрагмент программы и чему равно выражение K.
m:=1;
while m<20 do