Вычисление сумм различных рядов чисел
При изучении программирования и алгоритмики часто предлагаются задачи на вычисление суммы или произведения рядов чисел, где каждый следующий элемент ряда вычисляется по той же формуле, что предыдущий, за исключением значения N, которое изменяется.
Задача 1. Найти сумму n-го количества элементов ряда 1, -0.5, 0.25, -0.125, … .
var
a, sum: real;
n, i: integer;
begin
write('Количество элементов ряда: ');
readln(n);
a := 1;
sum := 0;
for i := 1 to n do begin
sum := sum + a;
a := -a / 2
end;
writeln(sum:4:3);
end.
Примеры выполнения программы:
Количество элементов ряда: 3
0.750
Количество элементов ряда: 5
0.688
Количество элементов ряда: 10
0.666
Задача 2. Найти сумму и количество элементов последовательности, которые по модулю больше 0.001. Элементами последовательности являются слагаемые суммы S = 1/2 - 2/4 + 3/8 - 4/16 + ... - ... .
var
a, b, sign, n: integer;
sum: real;
begin
a := 1;
b := 2;
sign := 1;
sum := 0;
n := 0;
while a / b > 0.001 do begin
sum := sum + sign * (a / b);
n := n + 1;
sign := -sign;
a := a + 1;
b := b * 2;
end;
writeln('Сумма: ', sum:5:3);
writeln('Количество элементов ряда: ', n);
end.
Примеры выполнения программы:
Сумма: 0.223
Количество элементов ряда: 13
Задача 3. Вычислить сумму ряда чисел 1/12 + 1/22 + 1/32 + … + 1/n2, где n определяется пользователем.
var
n, i: word;
sum: real;
begin
write('n = '); readln (n);
sum := 0;
for i := 1 to n do
sum := sum + 1/(i*i);
writeln(sum:6:5);
end.
В данном случае правильнее складывать в порядке от слагаемых с большими номерами к слагаемым с меньшими номерами. Чем больше номер слагаемого, тем меньше его значение в данной задаче. При суммировании в прямом порядке может возникнуть ситуация, когда к достаточно большому значению суммы будет прибавляться очень малое приращение. Из-за особенностей машинной арифметики погрешность такой операции возрастает. Поэтому цикл лучше писать в форме for i := n downto 1
.
Задача 4. Найти произведение a(a-1)(a-2)(a-3)...(a-n).
var
a,n,i: integer;
mult: longint;
begin
write('Введите a: ');
readln(a);
write('Введите n: ');
readln(n);
mult := a;
for i:=1 to n do
mult := mult * (a - i);
writeln(mult);
end.
Задача 5. 1/a + 1/(a+1) + ... + 1/(a+n)
var
a,n,i: integer;
sum: real;
begin
write('Введите a: ');
readln(a);
write('Введите n: ');
readln(n);
sum := 0;
for i:=0 to n do
sum := sum + 1/(a + i);
writeln(sum:5:2);
end.