
Домашние задания: Информатика
Найти сумму первых n элементов

Составь алгоритм и все
Есть же формула для суммы 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.
Так что искомая сумма получается 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.

Автор, совершенно очевидно, что от Вас требуется знание циклов, а также циклических операторов Паскаля!
◉ Но сначала — уточняющий вопрос: какой номер у первого члена ряда: 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
Конец.
◉ Но сначала — уточняющий вопрос: какой номер у первого члена ряда: 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
Конец.
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}
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}
На сишке.
#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);
#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);
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.
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.
Похожие вопросы
- Используя цикл for: Найти сумму первых 10 натуральных чисел кратных 3.
- Дан некоторый числовой массив. Надо найти сумму положительных элементов этого числового массива.
- Дан некоторый числовой массив. Надо найти сумму положительных элементов этого числового массива. На Pascal ABC.
- Заполнить массив из 15 элементов случайными трехзначными числами; сосчитать количество элементов массива, у которых вто
- Заполнить массив из 10 элементов случайными числами 0..100 и отсортировать: первая половина по возраст., вторая по убыв.
- Найдите слова информатика.
- Кто считается первым создаетел компьтеров и в каком году они были изобретены
- Информатика, системы счисления, содержание первого байта
- Напишите программу, которая в последовательности целых чисел определяет их количество и сумма четных чисел
- Сколько существует натуральных чисел у которых сумма цифр равна 2023 а произведение цифр равно 27
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.
◉ только первые слагаемые образуют убывающую геометрическую прогрессию со знаменателем ½.
◉ только вторые слагаемые образуют убывающую геометрическую прогрессию со знаменателем ⅓.
◉ сумма ряда равна сумме сумм этих прогрессий.