Лекции на циклы
Циклические алгоритмы используются для многократного повторения некоторых действий.
Однократное выполнение действий в цикле (БО) называется итерацией цикла. Операторы, которые выполняются в цикле, называется телом цикла.
Циклы бывают арифметические и итерационные. Цикл называют арифметическим, если количество повторений заранее известно или может быть вычислено. Если количество повторений заранее не известно, то такой цикл называют итерационным.
В языке Паскаль циклы могут быть запрограммированы с использованием следующих операторов:
цикл for с параметром(со счетчиком);
цикл с предусловием (цикл while);
цикл с постусловием ( цикл repeat);
Цикл с параметром.
For <пар.цикла> := < нач. зн.> to <кон. зн.> do <оператор>;
for i := 1 to 5 do
write( I,’ ’);
Используется в случае, если известно количество повторений.
Параметр цикла называют управляющей переменной цикла. Тип переменной цикла, начального, конечного значения может быть любого порядкого типа.
Параметр цикла – переменная, которая изменяется от начального значения до конечного с шагом =1.
Начальное, конечное значения могут быть переменными, константами и выражениями порядкого типа.
Сначала вычисляются и запоминаются in, ik. Переменная i получает значение in. Если in<ik, то выполняются действия в цикле, затем переменная цикла получает приращение на 1 i = i + 1 и если i<=ik, то опять выполняются действия в цикле и так продолжается до тех пор пока i <=ik.
Если in>ik, то цикл не выполнится ни разу. При in = ik цикл выполнится один раз.
Шаг может быть равен -1. В этом случае оператор имеет вид: For <пар.цикла> := < нач. зн.> downto <кон. зн.> do <оператор>;
Если в цикле необходимо выполнить более одного оператора, ставятся операторные скобки, внутри которых записываются необходимые операторы.
Особенности цикла с параметром:
Не требуются начальные установки до заголовка цикла.
В теле цикла запрещается менять значения переменной цикла.
Вход в цикл только через заголовок.
Передача управления в тело цикла извне запрещена.
Количество итераций неизменно и определяется значениями нижней и верхней границ цикла.
После естественного завершения цикла переменная цикла сохраняет последнее значение.
Для досрочного прерывания цикла используется оператор Break. Для прерывания текущей итерации цикла используется оператор Continue.
При написании программ следует учитывать, что операцию возведения в целую степень лучше заменять на операцию умножения (более быстрая).
Пример.
Вычислить:S=1+1/2+1/3+…..+1/20
program main
var
i, in, ik: integer;
s: real;
begin
writeln('bb. in, ik');
read( in, ik);
s=0;
for I :=in to ik do
s := s+1 / I;
writeln( 's=',s);
end.
Пример.
Вычислить сумму четных чисел в указанном диапазоне.
program main
i, in, ik,s: integer;
print*,'bb. in, ik'
read*, in, ik
begin
s:=0
for i:=in, ik do
if i mod 2 = 0 then
s := s+I;
writeln( 's=',s);
end.
Пример.
Вычислить факториал числа n (n!)
N! = 1*2*3*….n
0!=1
program main;
var
i, n: integer;
f: longint;
begin
writeln('bb. n');
read( n);
f:=1
for i:=1 to n do
f := f * i
writeln( 'фактор. числа',n:5,’=’, f);
end.
Пример.
Для каждого из n значений x на интервале от a до b [-¶, 2¶], вывести таблицу значений функции F(x) = sin(x)+2*cos ( 2*x ).
xi = a+ih (i=1,2,…n).
h=(b-a)/(n-1)
при n=20, кол. интервалов на этом отрезке =19.
Шаг изменения x - h=2pi / 19.
Program main;
var
a, b, i, f, x, h: real;
i, n :integer;
const
n=20;
begin
readln(a, b);
x:=a;
h:=(b-a)/(n-1);
for i:=1 to n do
begin
f:=sin(x)+cos(2*x)
writeln( 'x=',x, 'f=',f);
x:=x+h;
End;
End.
Пример.
Найти делители заданного натурального числа n и их сумму.
Program main
var
n, x, s: Integer
writeln('введите n');
readln(n);
while n< =0 do
begin { контроль ввода}
writeln('error введите новое n ');
Readln( n);
End;
Writeln(' Делители числа',n, ':');
for x:=1, n div 2 do
If n mod x = 0 then
begin
write (x:3);
s:=s+x;
End;
Writeln(’s=’, s);
End.
Пример.
Определить, является ли натуральное число n простым.
program Simple;
var
N,i: integer;
f :boolean;
begin
writeln( 'N=');
readln(N);
f:=true;
for i:=2 to N div 2 do
if (mod(i, 2)= =0) then
begin
f:=false;
break;
end;
if (f) then
writeln (N,' - простое число')
else
writeln (N,' ne- простое число');
end.
Пример.
Найти максимальное значение функции y = ax2- bx +c, при x= 1,2,…20
program Simple;
var
n,x: integer
a,b,c,max: real;
begin
writeln ('n=');
readln(n);
writeln ('bb. a,b,c');
readln(a,b,c);
max:=a-b+c;
for x:=2 to n do
begin
y:=a*x*x-b*x+c
if y>max then
max:=y;
end;
writeln (' max=',max);
end.
Пример.
Вычислить: s=(1-x)(1-2x2)+(1-3x3)…(1-8x8)
program Simple;
var
x,s,stx: integer;
i,n: integer;
writeln('n=,x=');
readln(n,x);
s:=1;
stx:=1;
for i:=1 to n do
begin
stx:=stx*x;
s=s*(1-i*stx);
end;
writeln(' s=',s);
end.
Вычислить: , n корней.
program Simple;
var
i, n, x: integer;
begin
writeln('n=');
readln(n);
x:=0;
for i:=1 to n do
x:=sqrt(x+2);
writeln(' x=',x);
end.
Лекция 6.
Найти значение определенного интеграла методом прямоугольников, при числе разбиений интервала интегрирования n=100.
h=(b-a)/n; i = 1,2,3….n
xi = a + i*h-h/2, i = 1, 2, …n
program integral;
const
n=100;a=0; b=5;
var
s, x, h, a, b:real;
n,i: integer;
begin
h:=(b-a)/n;
x:=a+h/2;
s:=0;
i=1 to n do
begin
s:=s+ln(2+sin(x));
x:=x+h;
end;
s:=s*h;
writeln('s=', s);
end.
В математике большую роль играют последовательности чисел с определенными свойствами.
Итальянский математик Леонард Пизанский(Фибоначчи), предложил следующую задачу. Пара кроликов каждый месяц дает приплод – двух кроликов (самца и самку), от которых через два месяца уже получается новый приплод. Сколько пар кроликов будет через месяц, два, год и т. д., если в начале года мы имели одну пару только что родившихся кроликов?
Ряд Фибоначчи: 1, 1, 2, 3, 5, 8, 13, 21, 34……. Члены этой последовательности – числа Фибоначчи.
Первый и второй член последовательности = 1. Каждый последующий, начиная с третьего, равен сумме двух предыдущих. Это быстро растущая последовательность.
f0 =f1 = 1
fn = fn-1+fn-2
f0 f1 f2 f3 f4 f5….
1 1 2 3 5 8…..
Пример.
Найти n – ое число Фибоначчи.
program fibonaci
var
f0=1,f1=1,fn,n, i: integer;
begin
writeln('n=');
readln( n);
for i:=3 to n do
begin
fn:=f0+f1;
f0:=f1;
f1:=fn;
end;
writeln (n, 'cislo fibonacci=', fn);
end.
Оператор цикла do while.
Цикл с предусловием:
while < условие > do
<оператор>;
Цикл repeat(с постусловием).
Repeat
< операторы>
until <условие>;
Операторы с пред и с постусловием используются для реализации итерационных циклов и для реализации арифметических циклов, где параметр цикла изменяется с шагом не равным 1.
Цикл while выполняется до тех пор, пока истинно некоторое условие. Условие – это логическое выражение простое или составное. В этом цикле сначала вычисляется условие. Если оно равно False, то цикл завершается и управление передается следующему оператору, поэтому цикл может, не выполнится ни разу. Если условие равно True, то цикл выполняется. Чтобы избежать зацикливания необходимо следить, чтобы в теле цикла обязательно был оператор, который изменяет значение переменных, входящих в логическое выражение. При необходимости выполнения в теле цикла нескольких действий требуется составной оператор(begin …end).
Цикл Repeat выполняется до тех пор, пока ложно некоторое условие и завершается, когда условие становится истинным. В этом цикле не нужен составной оператор. Цикл обязательно выполняется как минимум один раз.
Особенности циклов while иRepeat.
У этих циклов должны быть обязательно сделаны начальные установки переменных, формирующих условие.
В теле цикла необходимы операторы, изменяющие условие, чтобы цикл прекратился через некоторое количество операций, т. е. чтобы избежать зацикливания..
Вычисление факториала числа с помощью операторов while и Repeat.
program main;
var
i,n: integer;
f: longint;
begin
writeln('bb.n');
read(n);
f:=1
i:=1
while i<=n do
begin
f:=f*i
i:=i+1
end;
writeln( 'f=',f);
end.
program main;
var
i,n: integer;
f: longint;
begin
writeln('bb.n');
read(n);
f:=1;
i:=1;
repeat
f:=f*I;
i:=i+1;
until i>n;
writeln( 'f=',f);
end.
Пример.
Вычислить:R=
program Simple;
var
y,r: real;
k:integer;
writeln('y=');
readln(y);
r:=1;
k:=1;
while k<=37 do
r:=r*(y-k)/(y-(k+1))
k:=k+2
end;
writeln(' r=',r);
end.
Пример.
Вычислить за сколько лет в сбербанке будет накоплена сумма S при начальном вкладе W и процентах годового прироста P.
K – число лет.
D – прирост за год.
D=w*p/100
W=w+d
rogram Simple;
var
d,w,s,p:real;
k: integer;
begin
p:=10;
writeln('w=');
readln(w);
writeln('s=');
readln(s);
k:=0;
while w< s do
begin
d:=w*p/100;
w:=w+d;
k:=k+1;
end;
writeln(' s=',s,' k=',k,'w=',w);
end.
Пример.
Вычислить сумму цифр заданного натурального числа.
program Simple;
var
n,p,s: integer;
writeln('n=');
readln(n);
s:=0;
while n>0 do
begin
p:=n mod 10; {выделение последней цифры}
s:=s+p;
n:=n div 10; {уменьшение числа на разряд}
end;
writeln(' s=',s);
end.
Пример.
Найти первое число Фибоначчи, превышающее заданное число x.
program fibonaci2;
var
f0,f1,fn,x, i: integer;
begin
f0:=1
f1:=1;
writeln('x=');
readln( x);
fn=2
while fn<=x do
begin
f0:=f1;
f1:=fn;
fn:=f0+f1;
end;
writeln('cislo fibonacci> x=', fn);
end.
Вложенные циклы.
Для каждого значения x на интервале от 0 до 1, изменяющегося с шагом 0.1, найти значение суммы:
program Simple;
var
s,x,a,b,h: real;
i,n: integer;
begin
writeln ('n=,a=,b=,h=');
readln(n,a,b,h);
x:=a;
while x<=a do
begin
s:=0;
for i:=1 to n do
s:=s+i /(x+i);
writeln(' x=',x, ' s=',s);
x:=x+h;
end;
end.
Правило работы вложенных циклов: Фиксируется значение переменной внешнего цикла и выполнятся весь внутренний цикл, затем переменная внешнего цикла получает приращение на значение шага и опять выполняется внутренний цикл. Так происходит до тех пор, пока все значения переменной внешнего цикла не будут использованы.