Другие языки программирования и технологии
программа в паскале, помогите исправить ошибку плиз
program z1;uses crt;var i,j,k:integer; a,b,c:array[1..10] of real;beginclrscr;randomize;for i:=1 to 10 doa[]:=round(-5+10*random);j:=1;k:=1;for i:=1 to 10 do writeln(a, ' ');writeln(' ');for i:=1 to 10 do if a[]>0 then begin b[j]:=a[]; j:=j+1;end;for i:=1 to 10 do if a[]<0 then begin c[k] :=a[]; k:=k+1; end;for i:=1 to j do writeln(b,' ');writeln(' ');for i:=1 to k do writeln(c, ' ');readln;end.там где пустые квадратные скобочки i, но почемуто мэйл убирает их....задача такая: дан массив а. создать массивы в и стакие, что первый содержит все положительные элеемнты массива а, а второй все отрицательные эелменты.Выводит всё нормлаьно но ещё почему то дополнительные 0 появляются даже если их нет в первоначальном массиве, как их убрать?
Доброго времени суток.
Последними элементами нули, я угадал? :-) Делайте так
program z1;
uses crt;
var i,j,k:integer;
a,b,c : array[1..10] of real;
begin
CclrScr;
Randomize;
for i:=1 to 10 do a[ i ] := Random(11) - 5; {случайные числа в диапазоен -5 .. 5}
for i:=1 to 10 do writeln(a[ i ], ' '); {вывод массива а для контроля}
j:=0; {пока нет ни положительных}
k:=0; {ни отрицательных}
writeln(' ');
for i:=1 to 10 do begin {цикл обработки массива а}
if a[ i ] > 0 then begin j:=j+1; b[j]:=a[ i ]; end;
if a[ i ] < 0 then begin k:=k+1; c[k] :=a[]; end;
end;
for i:=1 to j do writeln(b[ i ],' ');
writeln(' ');
for i:=1 to k do writeln(c[ i ], ' ');
readln;
end.
У вас за счет того, что инкрементирование переменных j и k выполнялось после записи очередного элемента в соответствующий массив, число элементов массивов b и с было на 1 больше.
Либо вывод надо было делать так
for i:=1 to j-1 do writeln(b[ i ],' ');
Удачи!
Последними элементами нули, я угадал? :-) Делайте так
program z1;
uses crt;
var i,j,k:integer;
a,b,c : array[1..10] of real;
begin
CclrScr;
Randomize;
for i:=1 to 10 do a[ i ] := Random(11) - 5; {случайные числа в диапазоен -5 .. 5}
for i:=1 to 10 do writeln(a[ i ], ' '); {вывод массива а для контроля}
j:=0; {пока нет ни положительных}
k:=0; {ни отрицательных}
writeln(' ');
for i:=1 to 10 do begin {цикл обработки массива а}
if a[ i ] > 0 then begin j:=j+1; b[j]:=a[ i ]; end;
if a[ i ] < 0 then begin k:=k+1; c[k] :=a[]; end;
end;
for i:=1 to j do writeln(b[ i ],' ');
writeln(' ');
for i:=1 to k do writeln(c[ i ], ' ');
readln;
end.
У вас за счет того, что инкрементирование переменных j и k выполнялось после записи очередного элемента в соответствующий массив, число элементов массивов b и с было на 1 больше.
Либо вывод надо было делать так
for i:=1 to j-1 do writeln(b[ i ],' ');
Удачи!
Что-то какой-то косячный код имхо.
Проще заново написать.
Проще заново написать.
Во-первых - не инициализируются массивы В и С и, соответственно, в них изначально попадает мусор - либо нули, либо результаты предыдущих вычислений. - что не хорошо.
Во-вторых - лишние значения появляются оттого, что после присвоения значения очередному массиву делается +1, т. е. если всего одно значение больше нуля, то J указывает на ДВА, на ту ячейку массива, которая ещё не обрабатывалась. А на Выводе ты выводишь по J, т. е. Первую ячейку с результатом и ВТОРУЮ, в которой мусор... .
Значит надо выводить до J-1, но тогда можно нарваться на 0.
Правильно - это объявлять J и K=0, а ПЕРЕД присвоением их увеличивать, а перед выводом массивов на экран проверять, не равно ли 0?
Во-вторых - лишние значения появляются оттого, что после присвоения значения очередному массиву делается +1, т. е. если всего одно значение больше нуля, то J указывает на ДВА, на ту ячейку массива, которая ещё не обрабатывалась. А на Выводе ты выводишь по J, т. е. Первую ячейку с результатом и ВТОРУЮ, в которой мусор... .
Значит надо выводить до J-1, но тогда можно нарваться на 0.
Правильно - это объявлять J и K=0, а ПЕРЕД присвоением их увеличивать, а перед выводом массивов на экран проверять, не равно ли 0?
Ну так не выводи нулевые элементы массива...
for i:=1 to 10 do
a:=round(-5+10*random);
a:=round(-5+10*random);
а сами нули в какой из массивов идут? )
скорее всего это нули выдаваемых массивов - ведь элементов из них не выкинешь..
скорее всего это нули выдаваемых массивов - ведь элементов из них не выкинешь..
Похожие вопросы
- Помогите исправить ошибку в коде программы на паскале.
- Помогите исправить ошибку в программе (c++).
- Помогите исправить ошибку в программе на Си
- Пожалуйста, помогите исправить ошибки в программах на С++!
- Помогите исправить ошибку в коде программы, пожалуйста!
- Программа на паскале! Помогите(бесплатно)
- помогите исправить ошибку в программе в Pascal
- Pascal ABC. Помогите исправить ошибку в программе.
- Пожайлуста, помогите исправить ошибки в программе на С++!!
- Помогите исправить ошибку