• Предмет: Информатика
  • Автор: ndc201415ox7jqg
  • Вопрос задан 1 год назад

Помогите.
Нужно написать программу, которая в последовательности чисел определяет их сумму и количество чётных чисел, кратных 5. Программа получает на вход целые числа, количество введённых чисел неизвестно, последовательность чисел заканчивается числом 0(0 - признак окончания ввода, не входит в последовательность). Количество чисел не превышает 1000. Введённые числа по модулю не превышают 30 000. Программа должна вывести два числа: сумму последовательности и количество чётных чисел, кратных 5.
Пример работы программы:
Входные данные: 4, 60, 15, 0
Выходные данные: 79, 1
Нужно написать программу на языке Паскаль.


Plus9ToIntellect: Тут паскаль, расходимся
BobbyFresnel: Да, верхогляды могут быть свободны.

Ответы

Ответ дал: KnowsUser1
2

Ответ:

//--- PascalABC.NET 3.6.2 ---//

begin

 var S := ReadSeqIntegerWhile(p -> p <> 0).ToList;

 S.Sum.Println;

 S.Count(p -> (p mod 5 = 0) and (p mod 2 = 0)).Println;

end.


ndc201415ox7jqg: А как ограничить количество чисел и модуль введённых чисел?
KnowsUser1: Если вам нужно вводить числа не до символа окончания ввода, а какое то конкретное кол-во, используйте функцию ReadSeqInteger(n), возвращающую последовательность целых чисел, введённых с клавиатуры, определённой длины
KnowsUser1: Если вам нужно, что бы оно в процессе ещё и проверяло модуль числа на соответствие диапазону, то вероятнее всего придётся пилить подобный ввод самостоятельно, без встроенных функций
ndc201415ox7jqg: Спасибо
KnowsUser1: Ну а если вы хотите, что бы можно было вводить числа до 0, но при этом не больше (или не меньше) какого либо кол-ва, и что бы оно и при этом ещё проверяло модуль каждого вводимого числа, то тут железно придётся сочинять что то самому, такого в стандартной библиотеке я не наблюдал
ndc201415ox7jqg: Ясно. Спасибо. Буду искать что-то по этому поводу.
BobbyFresnel: Да это фантазии. В школьных задачах безусловно предполагается, что входные данные подаются с ограничениями, указанными в задании, поэтому никакие проверки не требуются, если этого не сказано явно.
Ответ дал: BobbyFresnel
2

// PascalABC.NET

begin

 var (s, k) := (0, 0);

 foreach var n in ReadSeqIntegerWhile(p -> p <> 0) do

 begin

   s += n;

   if n.IsEven and (n mod 5 = 0) then Inc(k)

 end;

 Print('Сумма', s, '   количество', k)

end.


BobbyFresnel: Эффективное решение, не требующее запоминания введенных значений.
ndc201415ox7jqg: А как ограничить количество чисел и модуль введённых чисел?
BobbyFresnel: Зачем?
BobbyFresnel: Фразы "Количество чисел не превышает 1000. Введённые числа по модулю не превышают 30 000. " даются, чтобы правильно выбрать тип данных, а не для того, чтобы контролировать что-то.
Вас заинтересует