Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 20.06.2010, 23:37
Torres Torres вне форума
Прохожий
 
Регистрация: 20.06.2010
Сообщения: 12
Репутация: 10
По умолчанию Сжать массив

Подскажите плиз, как сжать двумерный массив, удалив из него все элементы, модуль которых находится в интервале [a,b], а все освободившиеся в конце элементы заполнить нулями.
Ответить с цитированием
  #2  
Старый 21.06.2010, 03:16
Kapitoshka438 Kapitoshka438 вне форума
Начинающий
 
Регистрация: 09.11.2009
Сообщения: 145
Репутация: 238
По умолчанию

Создаешь еще один массив такого же размера. Обходишь первый с начала и до конца. Если элемент попадает в интервал, добавляешь его во второй массив, увеличивая счетчик второго массива. Оставшиеся элементы второго массива забиваешь нулями.
Ответить с цитированием
  #3  
Старый 21.06.2010, 20:07
Torres Torres вне форума
Прохожий
 
Регистрация: 20.06.2010
Сообщения: 12
Репутация: 10
По умолчанию

а обязательно создавать ещё один массив?
Ответить с цитированием
  #4  
Старый 21.06.2010, 20:41
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Нет, не обязательно. Можно просто переносить значения между ячейками.
Поройся на форуме, недавно я писал такой код. Там, правда, был одномерный массив, но если двумерный массив рассматривать как массив одномерных массивов (что в Delphi собственно и есть), то можификация кода будет незначительна.
Ответить с цитированием
  #5  
Старый 23.06.2010, 20:20
Torres Torres вне форума
Прохожий
 
Регистрация: 20.06.2010
Сообщения: 12
Репутация: 10
По умолчанию

что-то не получается у меня
Ответить с цитированием
  #6  
Старый 24.06.2010, 01:57
Kapitoshka438 Kapitoshka438 вне форума
Начинающий
 
Регистрация: 09.11.2009
Сообщения: 145
Репутация: 238
По умолчанию

Код:
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;
Что-то вроде этого. Могут быть ошибки, код не проверял. Это не самый лучший способ. Здесь много лишних действий выполняется.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:24.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025