Uses crt; var n, i, s: integer; a: array [1..1000] of integer; begin writeln('Введите количество чисел последовательности'); read(n); s := 0; writeln('Введите числа'); for i := 1 to n do begin read(a[i]); a[n] := 0; end; writeln(); for i := 1 to n do write(a[i], ' '); writeln(); for i := 1 to n do s := s + a[i]; writeln('Сумма=', s); end.
Поскольку тут речь о последовательности неизвестной длины, вводимой с клавиатуры до появления нуля, а условие позволяет для каждого вводимого числа сразу решить, должно ли оно входить в сумму, задача решается без использования массива и условие "<span>Количество чисел не превышает 1000" - это просто ловушка для наивных с тем, чтобы в случае использования массива длиной 1000 объявить затем решение неэффективным по памяти.
</span><em>1. Решение на современной версии Паскаля</em> <em>PascalABC.NET 3.2, сборка 1389 от 01.03.2017</em> <em>Внимание! Если программа не работает, обновите версию!</em>
begin var s:=ReadSeqIntegerWhile(n->n<>0) .Where(n->(n mod 3=0) and (n mod 10=6)).Sum; Writeln('Сумма отобранных чисел равна ',s) end.
<em>Пример</em> 15 36 26 72 25 96 83 0 Сумма отобранных чисел равна 132
<em>2. Решение "по-школьному"</em>
var n,s:integer; begin s:=0; repeat Read(n); if (n mod 3=0) and (n mod 10=6) then s:=s+n until n=0; Writeln('Сумма отобранных чисел равна ',s) end.
<u>Пример</u> 15 36 26 72 25 96 83 0 Сумма отобранных чисел равна 132