Сумма чисел от 1 до N

Помечено: 

В этой теме 0 ответов, 1 участник, последнее обновление  Васильев Владимир Сергеевич 1 год, 6 мес. назад.

  • Автор
    Сообщения
  • #3755

    Функция вычисляет сумму целых чисел, не превышающих заданного пользователем числа N.

    Первый вариант решения (с циклом):

    program functions_2;
    uses crt;
    var
      n: integer;
    function Sum(m: integer): integer;
    var i, S: integer;
    begin
      S:=0;
      for i:=1 to m do
        S:=S+i;
      Sum:=S;
    end;
    
    begin
      clrscr;
      write('N > '); read(n);
      write('Cумма чисел от 1 до ', n, ' = ', Sum(n));
      readkey;
    end.

    Вначале программы вводим значение переменной n, например 5. Вычисления продолжаются в функции, где цикл перечисляет все цифры от 1 до m (которое имеет такое же значение, что и введенное n, но внутри функции), в нашем случае это 1, 2, 3, 4, 5. И все эти цифры складывает друг с другом занося значение в переменную «S».

    Но задача имеет свой подвох, так как при больших значениях N цикл будет занимать очень много времени. Есть простой способ решения этой проблемы.

    Второй вариант решения (сумма арифметической прогрессии):

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

    С помощью этой формулы можно получить гораздо более эффективное решение. Например при n = 1000 будет выполнено одно сложение, умножение и деление вместо 1000 операций сложения (даже не считая инкременты счетчика цикла и сравнение его с n).

    Вложения:
    1. 17.png

Для ответа в этой теме необходимо авторизоваться.