
Условие задачи :
Требуется посчитать сумму целых чисел от 1 до N.
Довольно простая задача хоть и с подвохом и если вы знаете как её решить , то вам следует пропустить её.
Но если же вы ещё новичек в программировании и у вас возникают проблемы при решении , то вам следует рассмотреть разбор задачи.
Устный разбор :
Вначале программы вводить значение переменной n. Например 4 . После этого создаем цикл , в котором посчитаем сумму всех чисел от 1 до N.
Первое решение задачи :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
program mypascal; var n,s,i:integer; begin readln(n); s:= ; for i:= 1 to n do s:= s + i; writeln(s); end. |
Для решения данной задачи нам потребовались 3 переменные . Переменная «N» для хранения заданного числа N , переменная «s» для хранения суммы всех чисел от 1 до N и переменная «i» в качестве счетчика для цикла.
Вначале программы вводим значение переменной N . Например 5 .Далее цикл перечисляет все цифры от 1 до N , в нашем случае это 1 , 2 , 3 , 4 , 5. И все эти цифры складывает друг с другом занося значение в переменную «s».
Но задача имеет свой подвох , так как при больших значениях N цикл будет занимать очень много времени. Есть простой способ решения этой проблемы.
Второе решение задачи :
1 2 3 4 5 6 7 8 9 10 |
program mypascal; var n:integer; begin readln(n); writeln(( 1 + n ) / 2 * n); end. |
В данной программе мы не используем цикл , что во много раз ускоряет работу нашей программы . Сам цикл мы заменяем арифметической прогрессией (формулой)

Очень короткий код. Нам понадобилась всего одна переменная N .Но и это решение не идеально , так как значение переменной N может быть отрицательным.
Третье решение :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
program mypascal; var n:integer; s:real; begin readln(n); if ( n < ) then s:= ((1+abs(n))*abs(n)/ 2 - 1) * -1 else s:= (1+n)*n/ 2; if ( n = ) then s:= 1; writeln(trunc(s)); end. |
Самое гибкое решение . Подойдет для любого случая. Отлично работает при больших значениях N , при отрицательных значениях N. Если условие вывести целое число.
Объявляются две переменные «N» и «s». Переменная N несет в себе значение числа n , которое задают с клавиатуры. Переменная S несет в себе сумму чисел от 1 до N.
1. Вводим значение N.
2. Если значение N отрицательное , то s = ((1+abs(n))*abs(n)/ 2 — 1) * -1. Иначе s = (1+n)*n/ 2.
3. Подстраховываемся на тот случай , когда N = 0 и присваиваем s значение 1. Так как сумма чисел от 1 до 0 равна 1.
4. Выводим переменную s через функцию trunc() ( Подробнее ) специально для того случая , когда в условии задачи написано вывести целое число , а наша переменная s имеет вещественный тип.