Другие языки программирования и технологии

Помогите пожалуйста найти ошибку в решении задачи по информатике(паскаль) !!!Прошу очень нужно!!!задача простая!!!

1)найти произведение ненулевых элементов( вот решение=> var a:array [1..100] of integer; i,n,p:integer; begin randomize; writeln(' vvedy razmer massiva'); readln(n); for i:=1 to n do a to n do a:=random(20)+10; p:=1; if a=0 then p:=0 else for i:=1 to n do p:=p*a; writeln(p); end.
a to n do - что за ересь?
a[ i ]:=random(20)+10; - при таком раскладе ВСЕ элементы будут ненулевыми.
if a[ i ]=0 - использование переменной цикла вне цикла без реинициализации запрещается категорически.
p:integer; - при n>4 неминуемо произойдет переполнение: минимальное произведение уже 5-и элементов, полученных согласно формуле a[ i ]:=random(20)+10, будет 100000, в то время как integer кушает только 32767.

В общем, вся программа - одна большая ошибка.
Евгений Чернышев
Евгений Чернышев
68 163
Лучший ответ
Если ты хочешь использовать функцию random(х) , то злементы массива объяви a:array [1..n] of longint;
для чисел типа longint - диапазон -2 147 483 648 … +2 147 483 647. Но тебе уже указали, что нулевых элементов при этом не будет.
А если ты хочешь, чтобы были нулевые элементы массива, то организуй ввод элементов массива с клавиатуры:
Uses Crt;
Const n=10; {Здесь можно определять размер массива}
Var a:array[1..n] of integer; i,p:integer;
Begin
ClrScr;
writeln(' vvedy elementy massiva');
{При вводе каждого эл. мас. с клавиатуры жми на Enter, введи несколько нулевых эл. }
for i:=1 to n do
readln(a[ i ]);
p:=1;
for i:=1 to n do begin
if a[ i ]<>0 then p:=p*a[ i ]; {Произведение ненулевых эл. мас. }
write(a[ i ]:5); {Вывод эл. мас. на экран компьютера}
end;
writeln;
writeln('Proizvedenie p=' , p:7);
readkey
End.
Лищев Алексей
Лищев Алексей
29 246