07 Июн 13
Сумма целых чисел от 1 до NКомментарии : 1 Просмотры : 22981
Условие задачи : Требуется посчитать сумму целых чисел от 1 до N. Довольно простая задача хоть и с подвохом и если вы знаете как её решить , то вам следует пропустить её. Но если же вы ещё новичек в программировании и у вас возникают проблемы при решении , то вам следует рассмотреть разбор задачи. Устный разбор :Вначале программы вводить значение переменной n. Например 4 . После этого создаем цикл , в котором посчитаем сумму всех чисел от 1 до N.Первое решение задачи :Код program mypascal; var n,s,i:integer; begin readln(n); s:= 0; 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 цикл будет занимать очень много времени. Есть простой способ решения этой проблемы. Второе решение задачи :Код program mypascal; var n:integer; begin readln(n); writeln(( 1 + n ) / 2 * n); end. В данной программе мы не используем цикл , что во много раз ускоряет работу нашей программы . Сам цикл мы заменяем арифметической прогрессией (формулой) Очень короткий код. Нам понадобилась всего одна переменная N .Но и это решение не идеально , так как значение переменной N может быть отрицательным. Третье решение :Код program mypascal; var n:integer; s:real; begin readln(n); if ( n < 0) then s:= ((1+abs(n))*abs(n)/ 2 - 1) * -1 else s:= (1+n)*n/ 2; if ( n = 0 ) 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 имеет вещественный тип. Комментарии : 1 Просмотры : 22981 Илья 16 Янв 14 18:33
спасибо за решение задачи!!! неплохо было бы ещё и блоксхему написать!!!
0
|
НавигацияПоискПопулярные
Сумма целых чисел от 1 до... 07 Июн 13
Перевод в двоичную систем... 19 Янв 14 Поиск элемента в массиве ... 17 Янв 14 Практическая работа №6. О... 10 Янв 14 Сортировка массива в паск... 16 Июл 13 Обсуждаемые
Сумма целых чисел от 1 до... 07 Июн 13
Найти наибольшее число 05 Июн 13 Обмен значениями двух пер... 20 Июн 13 Найти факториал числа 14 Июл 13 Сортировка массива в паск... 16 Июл 13 Скачать паскальРешение задач
Если вас интересует решение какой-либо задачи , то вы можете опубликовать
её условие на нашем сайте или форуме. И в скором времени другие пользователи помогут вам. Опубликовать на сайте Опубликовать на форуме Опрос |