Гид по технологиям

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

• 8 min read • Программирование • Обновлено 21 Nov 2025
Сумма геометрической прогрессии — Python, C++, JS, C
Сумма геометрической прогрессии — Python, C++, JS, 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.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро