
Pascal, убрать нули из массива вот код, он генерирует случайные числа и распределяет по массивам,
в массив B-положительные, а в массив С-отрицательные. Но появилась проблема, на индексах где нет чисел появляются нули, подскажите как их убрать.var N, i, j :integer;A,B,C: array of integer;beginwrite('Введи N=');readln(N);setLength(A,N);setlength(B,N);setlength(C,N);for i:=0 to n-1 dobegina[i]:=random(33)-14;write(a[i]:7);end;writeln;j:=0;for i:=0 to n-1 dobeginif a[i]>0thenB[j]:=a[i]else C[j]:=a[i];J:=j+1;end;writeln;write('massiv c');for j:=0 to n-1 dowrite(c[j]:7);writeln;write('massiv b');for j:=0 to n-1 dowrite(b[j]:7);end.

Ответы на вопрос

Ответ:
(см. объяснение)
Объяснение:
Странно вы как-то пишете. Во-первых, где randomize; Во-вторых, зачем в паскале писать random(33)-14, если можно и нужно random(-14; 18) (обратите внимание, что в этом случае второе число включается, то есть 18 будет тоже допустимо). В-третьих, Вы используете динамические массивы вместо обычных, что странно, учитывая, что свойства, которые они дают Вы полноценно не используете (никак кроме setLength, а ведь с ними задача решается в пару строк кода). В четвертых, заглавными буквами принято обозначать константы, а не переменные. В пятых... Короче говоря, вопросов много.
Судя по коду, Вы создаете массив случайных чисел, выводите его, затем пытаетесь в массив B положить положительные элементы, а в C неположительные. После этого выводите массивы C и B. При этом у Вас есть зачем-то J (которую вы то большой, то маленькой пишете, что очень грубо). То есть, сказав, что Ваш код генерирует случайные числа и распределяет по массивам, в массив B-положительные, а в массив С-отрицательные, Вы говорите неверно. У Вас еще есть ноль. И вы тоже его куда-то да распределяете (подсказка: в массив C). Будем считать, что Вы просто неверно выразились и примем, что в C ноль класть нужно.
У Вас возникает проблема в том, что Вы сталкиваетесь с лишними нулями. Но где у Вас гарантия, что в массиве a не будет естественного нуля? Ее нет. Тогда как вы хотите отличить нули естественные, от появившихся по ошибке? Значит Ваша мысль неверна, то есть убрать нули нельзя. То есть такой мысли по идеи не должно было быть вообще. Сейчас не важно, что в коде написан бред и даже неважно то, что Ваша проблема может возникнуть только у того, кто вообще в паскале не разбирается. Просто задумайтесь, почему одна j? Не лучше ли просто ввести два счетчика для массивов B и C по отдельности и как только вы добавили один элемент соответствующий счетчик увеличить? Это единственно правильный случай, если принимать Ваш код за основу и стараться внести в него минимальные правки.
Не буду больше тянуть и приведу поправленный код.
const N = 10;
var i, j, k, p:integer;
a, b, c: array [1..N] of integer;
begin
k:= 1;
p:= 1;
randomize;
print('Массив a:');
for i:= 1 to N do
begin
a[i]:= random(-14, 18);
print(a[i]);
end;
writeln;
for i:= 1 to N do
begin
if(a[i] > 0) then
begin
b[k]:= a[i];
k:= k + 1;
end else
begin
c[p]:= a[i];
p:= p + 1;
end;
end;
k:= k - 1;
p:= p - 1;
writeln;
print('Массив c:');
for i:= 1 to p do
begin
print(c[i]);
end;
writeln;
print('Массив b:');
for i:= 1 to k do
print(b[i]);
readln;
end.
Еще раз подчеркну, что задачу нужно решать так:
##
'Введите N:'.Print;
var a:= ArrRandom(ReadInteger, -14, 18);
var b:= a.Where(x->x>0);
var c:= a.Where(x->x<=0);
'Массив a:'.Print; a.Println;
'Массив b:'.Print; b.Println;
'Массив c:'.Print; c.Println;
Теперь можно с чистой совестью сказать, что...
Задание выполнено!



Чтобы убрать нули из массивов B и C, вам необходимо изменить логику заполнения этих массивов. Вместо того, чтобы использовать индекс j для заполнения, вы можете использовать два отдельных индекса для массивов B и C. Затем вы можете установить длину массивов B и C, исходя из количества положительных и отрицательных чисел в массиве A. Вот исправленный код:
pascalvar N, i, j, positiveCount, negativeCount: integer; A, B, C: array of integer; begin write('Введи N = '); readln(N); SetLength(A, N); for i := 0 to N - 1 do begin A[i] := Random(33) - 14; write(A[i]:7); end; positiveCount := 0; negativeCount := 0; for i := 0 to N - 1 do begin if A[i] > 0 then Inc(positiveCount) else if A[i] < 0 then Inc(negativeCount); end; SetLength(B, positiveCount); SetLength(C, negativeCount); j := 0; for i := 0 to N - 1 do begin if A[i] > 0 then begin B[j] := A[i]; Inc(j); end else if A[i] < 0 then begin C[j] := A[i]; Inc(j); end; end; writeln; write('Массив C:'); for j := 0 to negativeCount - 1 do write(C[j]:7); writeln; write('Массив B:'); for j := 0 to positiveCount - 1 do write(B[j]:7); end.
Теперь нули не будут включены в массивы B и C.


Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili