Оператор цикла с предусловием (цикл 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):

Разделим на :

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



Дата добавления: 2016-09-06; просмотров: 1527;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.012 сек.