Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PASKAL_sokraschyonnoe.doc
Скачиваний:
12
Добавлен:
02.04.2015
Размер:
454.14 Кб
Скачать

Var X, y, deltaX, a, b: real;

n, i : integer;

begin

{ вычисление числа повторений тела цикла }

n := trunc ((b - a) / deltaX) + 1;

for i := 1 to n do

begin

x := a + (i-1)* deltaX; { вычисление текущего х }

y := sin ( sqr (x));

writeln ('x =', x:10:3, ' y =' ,y:10:3);

end

end.

3.5.3. Вычисление сумм

Одной из важных задач, решаемых с помощью циклического алгоритма – вычисление суммы большого числа слагаемых.

Пример 3.15. Вычислить сумму .

Для решения данной задачи воспользуемся методом накопления суммы. Суть его состоит в следующем. Положим S = 0 – это начальное значение S, когда вычисление суммы еще не начато. Далее вычислим следующее выражение: S + , значение которого равно 1, присвоим его переменнойS. На языке PASCAL эта ото действие можно записать в виде оператора

S := S + 1/sqr(1);

После выполнения этой операции значение S будет равно 1, т.е. первому слагаемому.

Теперь вычислим выражение: S + , значение которого, снова присвоим переменнойS. На языке PASCAL эта ото действие можно записать в виде оператора

S := S + 1/sqr(2);

При выполнении этой операции к старому значению S = 1 прибавится второе слагаемое, и результат запишется в S. После выполнения этой операции значение S будет равно , т.е. сумме первых двух слагаемых.

Аналогично, после выполнения оператора

S := S + 1/sqr(3);

мы получим сумму 3-х слагаемых, и т.д. Для вычисления всей суммы надо 20 раз повторить следующий оператор

S := S + 1/sqr(k);

увеличивая при этом каждый раз значение k на 1. Окончательно получаем следующий алгоритм:

1. Положить S = 0, k = 1.

2. Вычислить S + и записать результат в S.

3. Увеличить k на 1.

4. Если k  20, повторить шаг 2, иначе СТОП.

На PASCAL этот алгоритм удобно записать с помощью цикла repeat, т.к. в данном варианте алгоритма проверка условия прекращения цикла происходит после выполнения действия.

Var s : real;

k: integer;

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. Найти сумму членов бесконечно убывающей геометрической прогрессии с точностью до слагаемого, меньшего заданной величины :

z = 1 + x + x2 + x3 +…+ xn + …

При нахождении суммы такого ряда не следует вычислять от­дельно каждый элемент. Достаточно установить зависимость, по ко­торой из предыдущего элемента образуется следующий. Обозначим через an = xn – n-й член прогрессии, тогда

an+1 = xn+1 = an x; a0 = 1.

Та­кой подход позволяет сократить количество вычислительных операций и уменьшить время счета. Сумму будем накапливать в переменной S, которую предвари­тельно необходимо обнулить, как и в предыдущем примере.

Условие окончания цикла – |an | ., которое означает, что последнее слагаемое по модулю меньше . Так как слагаемые данного выражения убывают, то и все следующие слагаемые малы, значит, сумма от последующих сложений практически не увеличится и процесс накопления суммы можно прекратить.

Ниже приведены два варианта программы. В первом варианте использован оператор while, во втором – repeat. В программах an обозначено именем а.

Первый вариант

var

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]