Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 7_Операторы итерационных циклов.doc
Скачиваний:
0
Добавлен:
24.08.2019
Размер:
148.48 Кб
Скачать

Примеры алгоритмов циклической структуры

Пример 1. Для вычисления В в 9-й степени при В < 0, когда Exp(9*Ln(B)) недопустим, можно использовать следующий цикл:

………

K:=1; P:=1;

While K <= 9 Do

Begin

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;

Begin

Read(A,B,C,Xn,Xk,dX);

X:=Xn;

While X <= Xk Do

Begin

Z:=A*Exp(B*X - C*X*X);

Writeln(' X=',X:5:2,' ':5,'Z=',Z:10);

X:=X+dX

End

End.

Пример 3. Вычислить В в 9-й степени при В<0 с использованием оператора цикла Repeat.

K:=1; P:=1;

Repeat

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;

Begin

A:=15.27e-2;

X:=5;

Repeat

Y:=Sin(A*X) * Sqrt(X);

WriteLn(' X=',x,' Y=',y:10);

X:=X+1

Until X > 25

End.

Операторы тела цикла будут выполняться до тех пор, пока Х не станет больше 25.

Пример 5. Найти произведение натуральных чисел меньших 200 и кратных 7.

uses crt;

var m,n:word;

l:longint;

begin

clrscr;

l:=1;

m:=1;

while m<200 do

begin

if m mod 7 = 0 then l:=l*m;

inc(m);

end;

writeln(l);

readkey;

end.

Пример 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.

  1. Разложение целого числа Х на простые множители. Будем делить Х на 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;