Root /ArchiveAbout
()

Сумма чисел между двумя нулями

Сумма чисел между двумя нулями

Series24. Дано целое число N и набор из N целых чисел, содержащий по крайней мере два нуля. Вывести сумму чисел из данного набора, расположенных между последними двумя нулями (если последние нули идут подряд, то вывести 0).

Здесь предполагается, что вводимая последовательность уже содержит как минимум 2 нуля. То есть ни какой предварительной проверки на наличие нулей не осуществляется.

Будем здесь искать сумму чисел memory между нулями (это будет временная сумма). Краткий смысл действий таков: как только мы ввели первый нуль, со следующего (ненулевого) ввода начинаем считать сумму вводимых чисел. После ввода второго нуля записываем вычисленную сумму, а временную суму memory обнуляем. Со следующего ненулевого числа снова начинаем вычислять сумму до последующего ввода нуля, и т.д.

Краткая последовательность действий по пунктам:

var
  b, N, S, memory: integer;
  i: byte;
  IsZero: boolean;

begin
  write('N = ');
  readln(N);
  memory := 0; { <== Временное значение суммы }
  IsZero := false; { <== Нулей ещё нет }
  writeln('Введите последовательность ', N, ' целых чисел:');
  for i := 1 to N do begin
    read(b); { <-- Вводим целое число }
    if b = 0 then { <-- введенное число b = 0 }
      if not IsZero then { <-- Если нулей ещё не было }
        IsZero := true { <-- то меняем индикатор }
      else begin { <-- В противном случае: }
        S := memory; { <-- запоминаем сумму }
        memory := 0 { <-- обнуляем временную сумму }
      end
    else { <-- введенное число b ≠ 0 }
      if IsZero then { <-- Если нули уже встречались }
        memory := memory + b { <-- то увеличиваем временную сумму }
  end;
  writeln('Сумма чисел между последними двумя нулями: ', S);
  readln
end.

**type** integer;: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647 **type** byte;: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255 **type** boolean;: Представляет логическое значение. **const** false = False;: Представляет логическое значение. **const** true = True;: Представляет логическое значение. Series25. Дано целое число N и набор из N целых чисел, содержащий по крайней мере два нуля. Вывести сумму чисел из данного набора, расположенных между первым и последним нулем (если первый и последний нули идут подряд, то вывести 0).

Как и в предыдущем примере, последовательность должна содержать как минимум два нуля.

Здесь действия будут те же, кроме двух отличий. Во-первых, в начале, кроме вспомогательной суммы memory, нужно также инициализировать общую сумму: S:=0. Во-вторых, как только в цикле находим каждый последующий нуль, сумме S не присваиваем временное memory, а увеличиваем её на memory, так как нас интересует вся сумма чисел от первого до последнего нуля, а не только сумма чисел между двумя последними нулями. Всё остальное не меняется.

var
  b, N, S, memory: integer;
  i: byte;
  IsZero: boolean;

begin
  write('N = ');
  readln(N);
  S := 0; { <== Общее значение суммы }
  memory := 0; { <== Сумма чисел между соседними нулями }
  IsZero := false; { <== Нулей ещё нет }
  writeln('Введите последовательность ', N, ' целых чисел:');
  for i := 1 to N do begin
    read(b); { <-- Вводим с клавиатуры целое число }
    if b = 0 then { <-- введенное число 0 }
      if not IsZero then { <-- Если нулей раньше не было }
        IsZero := true { <== то меняем индикатор: найден первый нуль }
      else begin { <-- Если нули раньше уже были }
        S := S + memory; { <== то увеличиваем общую сумму }
        memory := 0 { <== и обнуляем временную сумму }
      end
    else { <-- число b ненулевое }
      if IsZero then { <-- Если нули уже встречались }
        memory := memory + b { <== увеличиваем временную сумму }
  end;
  writeln;
  writeln('Сумма чисел между первым и последним нулями: ', S);
  readln
end.

**type** integer;: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647 **type** byte;: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255 **type** boolean;: Представляет логическое значение. **const** false = False;: Представляет логическое значение. **const** true = True;: Представляет логическое значение.