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

программа в паскале, помогите исправить ошибку плиз

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 ],' ');

Удачи!
Лёха Назаров
Лёха Назаров
59 613
Лучший ответ
Что-то какой-то косячный код имхо.
Проще заново написать.
Во-первых - не инициализируются массивы В и С и, соответственно, в них изначально попадает мусор - либо нули, либо результаты предыдущих вычислений. - что не хорошо.
Во-вторых - лишние значения появляются оттого, что после присвоения значения очередному массиву делается +1, т. е. если всего одно значение больше нуля, то J указывает на ДВА, на ту ячейку массива, которая ещё не обрабатывалась. А на Выводе ты выводишь по J, т. е. Первую ячейку с результатом и ВТОРУЮ, в которой мусор... .
Значит надо выводить до J-1, но тогда можно нарваться на 0.
Правильно - это объявлять J и K=0, а ПЕРЕД присвоением их увеличивать, а перед выводом массивов на экран проверять, не равно ли 0?
Олег Дедяев
Олег Дедяев
9 321
Ну так не выводи нулевые элементы массива...
for i:=1 to 10 do
a:=round(-5+10*random);
а сами нули в какой из массивов идут? )
скорее всего это нули выдаваемых массивов - ведь элементов из них не выкинешь..