Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции _Циклы.doc
Скачиваний:
2
Добавлен:
11.07.2019
Размер:
136.19 Кб
Скачать

15

Лекции на циклы

Циклические алгоритмы используются для многократного повторения некоторых действий.

Однократное выполнение действий в цикле (БО) называется итерацией цикла. Операторы, которые выполняются в цикле, называется телом цикла.

Циклы бывают арифметические и итерационные. Цикл называют арифметическим, если количество повторений заранее известно или может быть вычислено. Если количество повторений заранее не известно, то такой цикл называют итерационным.

В языке Паскаль циклы могут быть запрограммированы с использованием следующих операторов:

  1. цикл for с параметром(со счетчиком);

  2. цикл с предусловием (цикл while);

  3. цикл с постусловием ( цикл 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.

Правило работы вложенных циклов: Фиксируется значение переменной внешнего цикла и выполнятся весь внутренний цикл, затем переменная внешнего цикла получает приращение на значение шага и опять выполняется внутренний цикл. Так происходит до тех пор, пока все значения переменной внешнего цикла не будут использованы.