Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Найти сумму первых n элементов

Danika Zhigulin Ученик (110), закрыт 4 года назад
Лучший ответ
Остальные ответы
Алексей Мирской Гуру (4683) 4 года назад
На сишке.

#include "stdio.h"
#include "math.h"

double summ = 0.0;

for (int n = 1; n < 5; n++){
summ += (1.0 / pow(2.0, n)) + (1.0 / pow(3, n));
}

printf("Summ: %d\n", summ);
Peer-2-Peer Мудрец (16172) 4 года назад
Автор, совершенно очевидно, что от Вас требуется знание циклов, а также циклических операторов Паскаля!

◉ Но сначала — уточняющий вопрос: какой номер у первого члена ряда: 0 или 1?
В зависимости от этого уточнения ответы получаются разными. В принципе эту информацию можно запросить прямо в программе.

Если присмотреться к заданию, то видно, что значение каждого члена ряда зависит непосредственно от его номера, а номер изменяется с шагом +1. В программировании такому номеру соответствует переменная-счётчик, а значение каждого члена ряда вычисляется в цикле со счётчиком (счётном цикле). В Паскале это стандартный оператор for.

°√° Маленький финт алгоритмизации. Конечно же для возведения в произвольную степень с полным правом можно применить стандартную формулу с натуральным логарифмом и экспонентой. Но рациональнее воспользоваться рекуррентностью, достаточно осознать, что каждое первое слагаемое получается из первого слагаемого предшествующего члена умножением на ½. Аналогично, каждое второе слагаемое получается из второго слагаемого предшествующего члена умножением на ⅓. Таким образом вполне достаточно в теле цикла преобразовывать каждое из слагаемых, складывать результаты и наращивать частичную сумму.

✓ Вот, что следует запрограммировать:
1. Подготовка. AD₁ := 1, AD₂ := 1
2. Уточняющий запрос: I₁ = 0 или 1?
3. Ввод n
4. Если I₁ = 0, то S := 2 и n := n – 1, иначе S := 0
5. Цикл i := I₁ до n
5.1. AD₁ := AD₁ * 1/2
5.2. AD₂ := AD₂ * 1/3
5.3. S := S + AD₁ + AD₂
5.4. Конец цикла
6. Вывод S
Конец.
Peer-2-PeerМудрец (16172) 4 года назад
var
 Sum, A1, A2: extended;
 i, I1, n: integer;
Begin
 A1 := 1.0; A2 := 1.0; Sum := 0.0;
 write ('Пожалуйста, уточните, с какого номера начинается ряд! Введите либо 0, либо 1. №: '); readln (I1);
 write ('Пожалуйста, введите количество первых членов ряда. N: '); readln (n);
 if I1 = 0 then begin n := n – 1; Sum := 2.0 end;
 for i := I1 to n do
 begin
  A1 := A1 / 2.0; A2 := A2 / 3.0; Sum := Sum + A1 + A2
 end;
  writeln; write ('Сумма ', n, ' первых членов ряда равна ', Sum);
 readln
end.
Peer-2-Peer Мудрец (16172) Приведённый код, конечно, не является оптимальным на фоне современных средств разработки. Но он отражает алгоритм. Надеюсь, автору вопроса это принесёт пользу.
Peer-2-PeerМудрец (16172) 4 года назад
✓ Кстати, можно увидеть, что:
◉ только первые слагаемые образуют убывающую геометрическую прогрессию со знаменателем ½.
◉ только вторые слагаемые образуют убывающую геометрическую прогрессию со знаменателем ⅓.
◉ сумма ряда равна сумме сумм этих прогрессий.
Peer-2-Peer Мудрец (16172) При n →∞ сумма ряда стремится к 3,5.
araz arazow Мыслитель (8925) 4 года назад
program arif_pr;
uses crt;
var a:array[1..1000] of real;
i,n:integer;
s:real;
begin
write('':5,' n = '); read(n);
s:=0;
for i:=1 to n do
a[i]:=1/power(2,i)+1/power(3,i);
s:=s+a[i];
write('':5,' sum: a[',i,']=',s:2:4);
end.
{paskal abc}
Victor Surozhtsev Просветленный (33738) 4 года назад
Есть же формула для суммы n первых членов геометрической прогрессии: S(n)=a•(aⁿ-1)/(a-1).

Так что искомая сумма получается 1,5-0,5ⁿ-0,5•(⅓)ⁿ, если суммируются только элементы с натуральными индексами. А вот и код:

program fffm; uses math; var n:int64; begin while true do begin write('n='); readln(n);
writeln(1.5-power(0.5,n)-0.5*power(1/3,n)) end end.

Никаких циклов и вообще ничего лишнего. А значение n вводится с экрана в консольном сеансе. ЯП - Free Pascal.
Александр Волков Профи (529) 4 года назад
uses crt;
var a:array[1..1000] of real;
i,n:integer;
s:real;
begin
write('':5,' n = '); read(n);
s:=0;
for i:=1 to n do
a[i]:=1/power(2,i)+1/power(3,i);
s:=s+a[i];
write('':5,' sum: a[',i,']=',s:2:4);
end.
Похожие вопросы