![]() |
|
|
#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; |