Другие языки программирования и технологии
Помогите пожалуйста найти ошибку в решении задачи по информатике(паскаль) !!!Прошу очень нужно!!!задача простая!!!
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.
В общем, вся программа - одна большая ошибка.
a[ i ]:=random(20)+10; - при таком раскладе ВСЕ элементы будут ненулевыми.
if a[ i ]=0 - использование переменной цикла вне цикла без реинициализации запрещается категорически.
p:integer; - при n>4 неминуемо произойдет переполнение: минимальное произведение уже 5-и элементов, полученных согласно формуле a[ i ]:=random(20)+10, будет 100000, в то время как integer кушает только 32767.
В общем, вся программа - одна большая ошибка.
Если ты хочешь использовать функцию 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.
для чисел типа 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.
Похожие вопросы
- Помогите пожалуйста найти ошибку в задаче (Язык программирования Си)
- Pascal помогите пожалуйста найти ошибку в задаче.
- Помогите пожалуйста найти ошибку. Паскаль. Оператор Case of
- Помогите пожалуйста найти ошибку, с++
- Срочно нужна помощь. помогите пожалуйста найти ошибку
- Помогите, пожалуйста, найти ошибки в коде. Нужно выбрать из массива минимальное значение и вывести индексы его позиции.
- Здравствуйте всем! Помогите пожалуйста найти ошибку в моем коде
- Помогите, пожалуйста, найти ошибку в программе сортировки стека (по убыванию ) на Си.
- Помогите найти ошибку в решении олимпиадной задаче...
- Помогите плз найти ошибку в задаче в паскале, есть код,что сделал