Использование формулы арифметической прогрессии - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Поиском пользовалась, нашла много топиков на тему арифметической прогресси, но ничего конкретного по моему вопросу. Воспользовавшись формулой арифметической прогрессии ( "Sn = (a1+an)*n/2") , я попробовала посчитать сумму первых N чисел не превышающих числа "a", которое было вписано в файл с именем "input". Далее результат я вывела в файл с именем output . Формула отлично работает для чётных чисел, тоесть которые без труда делятся на 2 . Но если числом является например 3, то программа уже выдаёт неверные результаты. Формула выше немного странная, и это так, но она работает чаще, чем допустим эта: http://www.math.ru/dic/16
Сумма первых n членов арифметической прогрессии равна полусумме первого и n-го ее членов, умноженной на число членов n, т.е..
Тоесть s = ((1 + 2) / 2) * 2 Опять та же проблема - считает только если сумма в скобках чётная и делится нацело на два. Применение типов в плавающей запятой нисколько не помогло. Что я понимаю не так? Вот текст моей программки:
#include <stdio.h>
 
int a,s,i;
 
int main() {
    freopen("input","r",stdin);
    freopen("output","w",stdout);
    scanf("%d", &a);
        s = ((1 + a) / 2) * a;
    printf("%d", s);
    return 0;
}

Решение задачи: «Использование формулы арифметической прогрессии»

textual
Листинг программы
#include <stdio.h>
 
int a, i, s;
 
int main() {
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
    scanf("%d", &a);
        if (a > 0)
            s = ((a-(a-1)) + a) * a / 2;
        else if (a < 0) {
            a = -a;
            s = ((a-(a-1)) + a) * a / 2;
            s = -s;
                }
    printf("%d", s);
    return 0;
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4 из 5
Похожие ответы