Читайте также: |
|
Begin
S:= 0; k:=1;
repeat S:= S + 1/sqr(k);
k:= k + 1;
until k > 20;
writeln(‘ S = ’, S:10:5):
End.
Задачу примера 3.15 можно решить с помощью другого варианта циклического алгоритма.
1. Положить S = 0, k = 1.
2. Если k > 20, то СТОП, иначе продолжить.
3. Вычислить S + и записать результат в S.
4. Увеличить k на 1.
5. Повторить шаг 2.
На PASCAL этот алгоритм удобно записать с помощью цикла while, т.к. в данном варианте проверка условия прекращения цикла происходит до выполнения действия.
var S: real;
K: integer;
Begin
S:= 0; k:=1;
while k <= 20 do
begin S:= S + 1/sqr(k);
k:= k + 1;
End;
writeln(‘ S = ’, S:10:5):
End.
В приведенных примерах количество повторений тела цикла можно оценить еще до его выполнения. Однако, во многих задачах количество этих повторений заранее не известно и вычислено быть не может. Операторы repeat и while позволяют организовывать такие циклы. В следующих двух примерах рассмотрим нахождение суммы бесконечного ряда с заданной точностью.
Пример 3.16. Найти сумму членов бесконечно убывающей геометрической прогрессии с точностью до слагаемого, меньшего заданной величины e:
z = 1 + x + x 2 + x 3 +…+ xn + …
При нахождении суммы такого ряда не следует вычислять отдельно каждый элемент. Достаточно установить зависимость, по которой из предыдущего элемента образуется следующий. Обозначим через an = xn – n-й член прогрессии, тогда
an+1 = xn +1 = an × x; a0 = 1.
Такой подход позволяет сократить количество вычислительных операций и уменьшить время счета. Сумму будем накапливать в переменной S, которую предварительно необходимо обнулить, как и в предыдущем примере.
Условие окончания цикла – |an | £ e., которое означает, что последнее слагаемое по модулю меньше e. Так как слагаемые данного выражения убывают, то и все следующие слагаемые малы, значит, сумма от последующих сложений практически не увеличится и процесс накопления суммы можно прекратить.
Ниже приведены два варианта программы. В первом варианте использован оператор while, во втором – repeat. В программах an обозначено именем а.
Первый вариант
Var
x, s, eps, a: real;
Begin
write ('введите х и epsilon - ');
Дата добавления: 2015-07-18; просмотров: 114 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Вычисление сумм | | | Readln (x, eps); |