Фрагмент блок-схемы

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;

Контрольные вопросы и задания

  1. Назовите основные виды циклов. Назовите отличия циклов друг от друга.
  2. Опишите структуру оператора цикла с предусловием. Принцип выполнения цикла с предусловием.
  3. Дайте описание типу данных, используемых в качестве параметров для цикла с предусловием.
  4. Опишите структуру оператора цикла с постусловием. Принцип выполнения цикла с постусловием.
  5. Дайте описание типу данных, используемых в качестве параметров для цикла с постусловием.
  6. Дайте объяснение выражению «Может ли один цикл быть вложен внутрь другого?».
  7. Назовите правила использования операторов цикла с пост- и предусловием.
  8. Определите сколько раз исполнится фрагмент программы и чему равно выражение K.

K:=0;

WHILE K<=10 DO

begin K:=K+2; Write('K= ',K:3) end;

  1. Определите сколько раз исполнится фрагмент программы и чему равно выражение K.

K:=0;

WHILE K<=10 DO

begin K:=K+3; Write('K= ',K:3) end;

  1. Определите сколько раз исполнится фрагмент программы и чему равно выражение K.

m:=1;

while m<20 do