![]() |
|
|
|
|
#1
|
|||
|
|||
|
Подскажите плиз, как сжать двумерный массив, удалив из него все элементы, модуль которых находится в интервале [a,b], а все освободившиеся в конце элементы заполнить нулями.
|
|
#2
|
|||
|
|||
|
Создаешь еще один массив такого же размера. Обходишь первый с начала и до конца. Если элемент попадает в интервал, добавляешь его во второй массив, увеличивая счетчик второго массива. Оставшиеся элементы второго массива забиваешь нулями.
|
|
#3
|
|||
|
|||
|
а обязательно создавать ещё один массив?
|
|
#4
|
|||
|
|||
|
Нет, не обязательно. Можно просто переносить значения между ячейками.
Поройся на форуме, недавно я писал такой код. Там, правда, был одномерный массив, но если двумерный массив рассматривать как массив одномерных массивов (что в Delphi собственно и есть), то можификация кода будет незначительна. |
|
#5
|
|||
|
|||
|
что-то не получается у меня
|
|
#6
|
|||
|
|||
|
Код:
var
Mas: array[1..N, 1..M] of Double;
I, J: Integer;
A, B: Double;
procedure DeleteElement(R, C: Integer);
var
I, J: Integer;
begin
for I := R to N do
begin
for J := C to M - 1 do
C[I, J] := C[I, J + 1];
if I < N then
C[I, M] := C[I + 1, 1];
end;
C[N, M] := 0;
end;
begin
...
for I := 1 to N do
for J := 1 to M do
if (Abs(Mas[I, J]) >= A) and (Abs(Mas[I, J]) <= B) then
DeleteElement(I, J);
...
end; |