Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

На языке Паскаль существует три вида операторов цикла.




Оператор цикла с параметром (цикл FOR)

Общий вид:

for < пар. >:=< n1 > to < n2 > do < оп. >;

где:

< пар. > – параметр цикла, переменная дискретно-упорядоченного типа, как правило типа integer,

< n1 > – выражение того же типа, начальное значение параметра, присваиваемое ему на входе в цикл,

< n2 > – выражение того же типа, конечное значение параметра,

< оп. > – оператор, выполнение которого повторяется до тех пор, пока параметр цикла, увеличиваясь после каждого шага на единицу, не превысит < n2 >.

Иными словами, цикл for действует следующим образом: вначале вычисляется параметр < n1 > и осуществляется присваивание < пар. >:=< n1 >. После этого циклически повторяется (для параметра целого типа):

1) проверка условия < пар. >¹<n2>+1, если условие не выполняется (т.е. < пар. >=<n2>+1), то цикл завершается;

2) выполнение оператора < оп. >;

3) увеличение переменной < пар. > на единицу.

Замечание 1: Переменная < пар. >, а также выражения < n1 > и < n2 > не могут быть типа real, так как он не является дискретно-упорядоченным.

Замечание 2: В качестве < оп. > может присутствовать только один оператор. В случае, если повторяться должны сразу несколько операторов, то их надо сформировать в блок с помощью операторных скобок begin и end.

Блок-схема: цикла FOR:

 
 

 

 

 


Другая форма оператора FOR:

for < пар. >:=< n2 > downto < n1 > do < оп. >;

В этом случае оператор < оп. > повторяется при уменьшении параметра цикла на единицу. Цикл завершается при достижении условия < пар. >=< n1 >–1.


Блок-схема:


Оператор цикла с предусловием (цикл WHILE)

Общий вид:

while < условие > do <оп.> end;

где:

< условие > – выражение логического типа,

< оп. > – оператор.

Действие. Циклически повторяется:

1) проверка выражения < условие >. Если результат есть false (т.е. < условие > ложно), то цикл завершается;

2) в случае, если < условие > истинно, выполняется оператор < оп. >.

Блок-схема:

 
 



Замечание: Как и в цикле FOR, в качестве < оп. > может присутствовать только один оператора. Если операторов, которые должны повторяться, больше одного, то они должны быть сформированы в блок с помощью операторных скобок begin и end.

Оператор цикла с постусловием (цикл REPEAT)

Общий вид:

Repeat

< оп.1 >;

< оп.2 >;

…………

< оп.N >;

until < условие >;

где:

< оп.1 >, < оп.2 >,…, < оп.N > – операторы,

< условие > - выражение логического типа.

Действие. Последовательность операторов < оп.1 >, < оп.2 >,…, < оп.N > выполняется хотя бы один раз, после чего проверяется < условие >. Если результат есть true, то цикл завершается. В противном случае опять выполняется последовательность операторов, < оп.2 >,…, < оп.N >, затем снова проверяется условие и так далее.

Блок-схема:


Замечание 1. Конструкция repeat … until позволяет повторять сразу несколько операторов, поэтому здесь не требуется (как в случае FOR и WHILE) формировать операторы в блок.

Замечание 2. < условие > в цикле WHILE и < условие > в цикле REPEAT имеют противоположный смысл: в цикле WHILE < условие > есть условие продолжения цикла, а в цикле REPEAT < условие > есть условие окончания цикла.

Пример 1. Дано целое n. Вычислить сумму

Решение. Для обозначения суммы вводится переменная s, которой изначально присваивается значение 0. Затем организуется цикл, на каждом шаге которого к s прибавляется очередное слагаемое. Поскольку известны границы изменения k (от 0 до n), то в качестве оператора цикла удобнее всего взять цикл FOR с параметром k и границами 1 и n.

Программа:

program pr2;

var k,n:integer; s:real;

begin

writeln(¢введите n¢);

readln(n);

s:=0;

for k:=1 to n do

s:=s+k/(1+k*k*k);

writeln(¢s=¢,s)

end.

Пример 2. Сумма тех же слагаемых, что и в примере 1, только вместо n даётся вещественное число (степень точности). Требуется суммировать до тех пор, пока очередное слагаемое не станет меньше .

Решение. В этом случае число слагаемых заранее не известно, зато известно условие, при котором следует закончить суммирование. Поэтому удобнее использовать цикл с выходом по условию, например REPEAT. Для обозначения очередного слагаемого удобно ввести переменную а.

Программа:

program pr3;

var k,eps,s,a:real;

begin

writeln(¢введите eps¢);

read(eps);

s:=0;

k:=1;

a:=0.5;

repeat

s:=s+a;

k:=k+1;

a:=k/(1+k*k*k)

until abs(a)<eps;

writeln(¢s=¢,s)

end.

Пример3. Даны n, m. Вычислить сумму

Решение. Считается сумма по двум параметрам, следовательно используется конструкция «цикл в цикле». Внутренний цикл считает сумму по j при фиксированном i, внешний – сумму по i.

Программа:

program pr4;

var i,j,m,n:integer;

s:real;

begin

writeln(¢введите m,n¢);

read(m,n);

s:=0;

for i:=2 to m do

for j:=1 to n do s:=s+1/(i*i+j*j*j);

writeln(¢s=¢,s)

end.

Пример 4. Даны х,n. Вычислить сумму

Решение: Здесь слагаемое имеет более сложную структуру – оно содержит факториал k!=1*2*3*…* k, вычисление которого есть само по себе цикл, степень , операции для вычисления которой в данной версии паскаля нет, и «мигалку»

Если решать эту задачу “в лоб”, то придётся делать цикл в цикле для вычисления факториала, степень вычислять как exp(k*ln(x)), при этом он не будет работать для х отрицательных, так как логарифмов отрицательных чисел не существует, и отдельно вычислять величину (–1) k. Это существенно усложняет как саму программу, так и работу компьютера. Поэтому для решения таких задач следует использовать технику рекуррентных соотношений.

Рекуррентным соотношением называется формула, позволяющая выражать каждый член последовательности через предыдущий (или несколько предыдущих).

Для выведения рекуррентного соотношения требуется проделать некоторую предварительную работу перед написанием программы. В нашем примере это будет выглядеть так.

Обозначим k -й член суммы через , то есть .

Требуется вывести соотношение, позволяющее выразить через .

Для этого выпишем (подставим в k+1 вместо k):

Разделим на :

Следовательно, .

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...