![]() |
|
#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; |
#7
|
|||
|
|||
![]() что-то не получается, помогите
|
#8
|
|||
|
|||
![]() вот мой код, немного бредовый, никак не пропрёт на мысль, подскажите что-нибудь
Код:
//сжатие массива procedure TForm1.RadioButton3Click(Sender: TObject); var i,j,a,b,m,n,x,y:integer; begin a:=StrToInt(Edit3.Text); b:=StrToInt(Edit4.Text); m:=StringGrid1.RowCount-1;//кол-во строк n:=StringGrid1.ColCount-1;//кол-во столбцов for i:=1 to m do begin for j:=1 to n do begin if (a<=abs(massiv[i,j])) and (abs(massiv[i,j])<=b) then begin for x:=i to m do begin for y:=j to n do begin if y<n then begin StringGrid1.Cells[y,x]:=StringGrid1.Cells[y+1,x]; massiv[x,y]:=StrToInt(StringGrid1.Cells[y,x]); StringGrid1.Cells[n,m]:=IntToStr(0); massiv[m,n]:=StrToInt(StringGrid1.Cells[n,m]); end else begin StringGrid1.Cells[y,x]:=StringGrid1.Cells[1,x+1]; massiv[x,y]:=StrToInt(StringGrid1.Cells[y,x]); StringGrid1.Cells[n,m]:=IntToStr(0); massiv[m,n]:=StrToInt(StringGrid1.Cells[n,m]); end; end; end; end; end; end; end; |