Использование формулы арифметической прогрессии - C (СИ)
Формулировка задачи:
Поиском пользовалась, нашла много топиков на тему арифметической прогресси, но ничего конкретного по моему вопросу.
Воспользовавшись формулой арифметической прогрессии ( "Sn = (a1+an)*n/2") , я попробовала посчитать сумму первых N чисел не превышающих числа "a", которое было вписано в файл с именем "input".
Далее результат я вывела в файл с именем output .
Формула отлично работает для чётных чисел, тоесть которые без труда делятся на 2 . Но если числом является например 3, то программа уже выдаёт неверные результаты.
Формула выше немного странная, и это так, но она работает чаще, чем допустим эта: http://www.math.ru/dic/16
Тоесть s = ((1 + 2) / 2) * 2
Опять та же проблема - считает только если сумма в скобках чётная и делится нацело на два.
Применение типов в плавающей запятой нисколько не помогло. Что я понимаю не так?
Вот текст моей программки:
Сумма первых n членов арифметической прогрессии равна полусумме первого и n-го ее членов, умноженной на число членов n, т.е..
#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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д