Сумма геометрической прогрессии в Python, C++, JavaScript и C

TL;DR
Две практические стратегии: итерация (подходит для целых и простых случаев, когда r или n небольшие) и формула (быстро и точно, если r != 1). Приведены примеры кода на Python, C++, JavaScript и C, разбор пограничных случаев и тесты приёмки.
Что такое геометрическая прогрессия?
Геометрическая прогрессия — последовательность чисел, где каждый следующий член получается умножением предыдущего на постоянный множитель r.
Кратко: геометрический ряд — это сумма членов геометрической прогрессии.
Определение в одну строку:
- a — первый член; r — знаменатель (common ratio); n — число членов.
Последовательность:
`a, ar, ar², ar³, ...`
Условие задачи
Даны первый член a, общий множитель r и число членов n. Нужно вычислить сумму первых n членов геометрической прогрессии.
Пример: a = 1, r = 2, n = 8 Ряд: 1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 Сумма: 255
Итеративный подход
Идея: пройти по n членам, накапливая сумму и обновляя текущий член умножением на r. Надёжен для любых r и n, но менее эффективен при больших n.
C++ Program to Find the Sum of a Geometric Series Using Iteration
`// C++ program to find the sum of geometric series
#include
using namespace std;
// Function to find the sum of geometric series
float sumOfGeometricSeries(float firstTerm, float commonRatio, int noOfTerms)
{
float result = 0;
for (int i=0; i Вывод:
`First Term: 1
Common Ratio: 2
Number of Terms: 8
Sum of the geometric series: 255`
Python Program to Find the Sum of a Geometric Series Using Iteration
`# Python program to find the sum of geometric series
# Function to find the sum of geometric series
def sumOfGeometricSeries(firstTerm, commonRatio, noOfTerms):
result = 0
for i in range(noOfTerms):
result = result + firstTerm
firstTerm = firstTerm * commonRatio
return result
firstTerm = 1
commonRatio = 2
noOfTerms = 8
print("First Term:", firstTerm)
print("Common Ratio:", commonRatio)
print("Number of Terms:", noOfTerms)
print("Sum of the geometric series:", sumOfGeometricSeries(firstTerm, commonRatio, noOfTerms))
`
Вывод:
`First Term: 1
Common Ratio: 2
Number of Terms: 8
Sum of the geometric series: 255`
JavaScript Program to Find the Sum of a Geometric Series Using Iteration
`// JavaScript program to find the sum of geometric series
// Function to find the sum of geometric series
function sumOfGeometricSeries(firstTerm, commonRatio, noOfTerms) {
var result = 0;
for (let i=0; iВывод:
`First Term: 1
Common Ratio: 2
Number of Terms: 8
Sum of the geometric series: 255`
C Program to Find the Sum of a Geometric Series Using Iteration
`// C program to find the sum of geometric series
#include
// Function to find the sum of geometric series
float sumOfGeometricSeries(float firstTerm, float commonRatio, int noOfTerms)
{
float result = 0;
for (int i=0; i Вывод:
`First Term: 1
Common Ratio: 2
Number of Terms: 8
Sum of the geometric series: 255`
Важно: итеративный метод прост и устойчив к нестандартным r (например, r=1), но медленнее при больших n.
Эффективный подход — формула
Если r != 1, сумма первых n членов выражается формулой:
`Sum of geometric series = a(1 – r^n)/(1 – r)`
где a — первый член, r — общий множитель, n — число членов.
Формула O(1) по времени и удобна для больших n, но требует проверки r == 1 (деление на ноль).
C++ Program to Find the Sum of a Geometric Series Using Formula
`// C++ program to find the sum of geometric series
#include
using namespace std;
// Function to find the sum of geometric series
float sumOfGeometricSeries(float firstTerm, float commonRatio, int noOfTerms)
{
return (firstTerm * (1 - pow(commonRatio, noOfTerms))) / (1 - commonRatio);
}
int main()
{
float firstTerm = 1;
float commonRatio = 2;
int noOfTerms = 8;
cout << "First Term: " << firstTerm << endl;
cout << "Common Ratio: " << commonRatio << endl;
cout << "Number of Terms: " << noOfTerms << endl;
cout << "Sum of the geometric series: " << sumOfGeometricSeries(firstTerm, commonRatio, noOfTerms) << endl;
return 0;
}`
Вывод остается 255 для примера выше.
Python Program to Find the Sum of a Geometric Series Using Formula
`# Python program to find the sum of geometric series
# Function to find the sum of geometric series
def sumOfGeometricSeries(firstTerm, commonRatio, noOfTerms):
return (firstTerm * (1 - pow(commonRatio, noOfTerms))) / (1 - commonRatio)
firstTerm = 1
commonRatio = 2
noOfTerms = 8
print("First Term:", firstTerm)
print("Common Ratio:", commonRatio)
print("Number of Terms:", noOfTerms)
print("Sum of the geometric series:", sumOfGeometricSeries(firstTerm, commonRatio, noOfTerms))
`
JavaScript Program to Find the Sum of a Geometric Series Using Formula
`// JavaScript program to find the sum of geometric series
// Function to find the sum of geometric series
function sumOfGeometricSeries(firstTerm, commonRatio, noOfTerms) {
return (firstTerm * (1 - Math.pow(commonRatio, noOfTerms))) / (1 - commonRatio);
}
var firstTerm = 1;
var commonRatio = 2;
var noOfTerms = 8;
document.write("First Term: " + firstTerm + " \n");
document.write("Common Ratio: " + commonRatio + " \n");
document.write("Number of Terms: " + noOfTerms + " \n");
document.write("Sum of the geometric series: " + sumOfGeometricSeries(firstTerm, commonRatio, noOfTerms));`
C Program to Find the Sum of a Geometric Series Using Formula
`// C program to find the sum of geometric series
#include
#include
// Function to find the sum of geometric series
float sumOfGeometricSeries(float firstTerm, float commonRatio, int noOfTerms)
{
return (firstTerm * (1 - pow(commonRatio, noOfTerms))) / (1 - commonRatio);
}
int main()
{
float firstTerm = 1;
float commonRatio = 2;
int noOfTerms = 8;
printf("First Term: %f \n", firstTerm);
printf("Common Ratio: %f \n", commonRatio);
printf("Number of Terms: %d \n", noOfTerms);
printf("Sum of the geometric series: %f \n", sumOfGeometricSeries(firstTerm, commonRatio, noOfTerms));
return 0;
}`
Пограничные случаи и когда методы дают сбой
- r = 1: формула делит на ноль. Правильный ответ: сумма = a * n.
- r = 0: все последующие члены равны 0, сумма = a.
- Отрицательные r: члены чередуются по знаку; формула работает, итерация — тоже.
- Дробные r (|r| < 1) и большие n: формула даёт корректный результат; при вычислениях с плавающей точкой возможны погрешности.
- Очень большие n и большие r: итерация переполнит типы; используйте типы с расширенным диапазоном (long double, BigInt библиотеки) или проводите расчёт в лог-пространстве.
Совет: всегда проверяйте условие r == 1 и используйте формулу только если r != 1.
Тесты приёмки
Критерии приёмки для реализации функции sumOfGeometricSeries:
- Тест 1: a=1, r=2, n=8 → 255
- Тест 2: a=5, r=1, n=10 → 50
- Тест 3: a=3, r=0, n=5 → 3
- Тест 4: a=2, r=-1, n=4 → 2 + (-2) + 2 + (-2) = 0
- Тест 5: a=1, r=0.5, n=10 → значение, близкое к 1*(1-0.5^10)/(1-0.5)
Автоматизируйте проверки на точность для плавающей точки (например, сравнение с точностью 1e-9).
Практические рекомендации и эвристики
- Для небольших n используйте итерацию — проще и безопаснее.
- Для больших n и r != 1 используйте формулу — быстрее и экономит память.
- Всегда проверяйте r == 1 перед применением формулы.
- Для целых больших значений используйте целочисленные типы с большим диапазоном или библиотеки произвольной точности.
Короткий словарь терминов
- Геометрическая прогрессия: последовательность вида a, ar, ar^2, …
- Геометрический ряд: сумма членов прогрессии
- r (знаменатель): множитель между соседними членами
Чек-лист для разработчика
- Проверка r == 1
- Выбор метода (итерация/формула)
- Обработка типов и потенциального переполнения
- Тесты приёмки (см. выше)
- Добавить документацию и примеры
Резюме
- Есть два основных способа вычислить сумму: итерация и формула.
- Формула быстрее, но требует проверки r != 1.
- Итерация проще и устойчивее к особым значениям r.
Короткие рекомендации: для большинства практических задач используйте формулу с защитной проверкой r == 1; если n невелико или r может быть нестандартным, итерация избавит от ошибок.
Если вы изучаете несколько языков программирования, реализовать обе версии (итерация и формула) — хороший тренировочный кейс для синтаксиса и типов в Python, C++, JavaScript и C.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента