Вычисление сумм различных рядов чисел | Язык Паскаль

Вычисление сумм различных рядов чисел

При изучении программирования и алгоритмики часто предлагаются задачи на вычисление суммы или произведения рядов чисел, где каждый следующий элемент ряда вычисляется по той же формуле, что предыдущий, за исключением значения 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.