
- •Оглавление
- •Комбинированный урок №7
- •Оператор цикла с предусловием While
- •While условие do оператор;
- •Var k:integer;
- •Оператор цикла с постусловием Repeat
- •Var k:Integer;
- •Правила использования операторов цикла
- •Примеры алгоритмов циклической структуры
- •Var a,b,c: Real;
- •X,Xn,Xk,dX : Real;
- •Контрольные вопросы и задания
Примеры алгоритмов циклической структуры
Пример 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. |
Разложение целого числа Х на простые множители. Будем делить Х на 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;