Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проверить массив на пустоту 
V
    Опции темы
Rondo
  Дата 28.5.2006, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 24.2.2006
Где: там..

Репутация: нет
Всего: нет



Хелп! Создал тему и даже незнаю как ее назвать  smile 
Короче, мне нужно сделать условный оператор if, но таким образом чтоб он проверял массив.
Пример..
Код

  if (mass[1] <> (ПУСТАТА)) then// хочу чтоб он проверил есть ли в этом элементе ЧТО-ТО
  begin
     ...
  end;

Надеюсь вы поняля что я имелл ввиду  smile   

Это сообщение отредактировал(а) Rondo - 28.5.2006, 10:13
--------------------
Начинающий кодер  
PM MAIL ICQ   Вверх
Snowy
Дата 28.5.2006, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Там всегда что-та есть.
Это массив чего? 
PM MAIL   Вверх
Rondo
Дата 28.5.2006, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 24.2.2006
Где: там..

Репутация: нет
Всего: нет



Массив чисел. Можно даже пример и без массива!
Главное я непонял как это.. проверяется на пустоту!

Цитата(Snowy @  28.5.2006,  10:19 Найти цитируемый пост)
Там всегда что-та есть.

А что хранится в пустом массиве? Который еще ничем незаполняли? 
--------------------
Начинающий кодер  
PM MAIL ICQ   Вверх
Snowy
Дата 28.5.2006, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Массив чисел не бывает пустым.
Там как минимум сидят нули в каждом элементе.
Числа тоже бывают разными. integer, real, byte, word, dword, int64, double, single, cardinal... 
PM MAIL   Вверх
Rondo
Дата 28.5.2006, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 24.2.2006
Где: там..

Репутация: нет
Всего: нет



 smile 
Массив Integer;
Кажется понял как правильно сформировать вопрос smile

Надо проверить были ли заполнен некий элемент(ы) массива 
--------------------
Начинающий кодер  
PM MAIL ICQ   Вверх
Snowy
Дата 28.5.2006, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Тут 2 варианта:
1. написать функцию, которая будет бежать по всем элементам и проверять их на равность нулю.
2. Создать второй массив или блок данных того же размера, заполненный нулями, а потом сравнить их через CompareMem
Или сделать по грамотному: не массив, а объект-List. Запись элемента фиксировать при помощи инкапсуляции. 
PM MAIL   Вверх
Rondo
Дата 28.5.2006, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 24.2.2006
Где: там..

Репутация: нет
Всего: нет



 smile  
--------------------
Начинающий кодер  
PM MAIL ICQ   Вверх
Демо
Дата 28.5.2006, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



Rondo, 

Код

for i := 0 to <Длина массива>-1 do
begin
  if Массив[i]<>0 then
  begin
     ShowMessage(Массив не пустой!);
     break;
  end;
end; 
 


--------------------
    
PM MAIL ICQ Skype   Вверх
Rondo
Дата 28.5.2006, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 24.2.2006
Где: там..

Репутация: нет
Всего: нет



спасибо 
--------------------
Начинающий кодер  
PM MAIL ICQ   Вверх
Snowy
Дата 28.5.2006, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Вариант с СompareMem:
Код

var a: array[0..200] of integer;

function IsArrayModifed(ar: array of integer): boolean;
var tmp: array of Integer;
begin
  SetLength(tmp, Length(ar));
  Result := not CompareMem(@ar[0], @tmp[0], Length(ar) * SizeOf(integer));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  // a[2] := 200;
  if IsArrayModifed(a) then
    ShowMessage('Запись была')
  else ShowMessage('Не было никаких записей');
end;
  
PM MAIL   Вверх
Mechanic
Дата 28.5.2006, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 5.5.2006
Где: Kharkov, Ukraine

Репутация: 6
Всего: 7



А кто сказал, что 0 - это не заполненный элемент?  smile 
А если было присваивание a[1] := 0; то такой элемент заполненный, или нет?

Правильнее всё-таки, наверное
Цитата(Snowy @  28.5.2006,  11:05 Найти цитируемый пост)
Или сделать по грамотному: не массив, а объект-List. Запись элемента фиксировать при помощи инкапсуляции.  


Добавлено @ 13:00 
Цитата(Snowy @  28.5.2006,  11:36 Найти цитируемый пост)
function IsArrayModifed(ar: array of integer): boolean;
var tmp: array of Integer;
begin
  SetLength(tmp, Length(ar));
  Result := not CompareMem(@ar[0], @tmp[0], Length(ar) * SizeOf(integer));
end;


Не. Не совсем. SetLength не заполняет элементы нулями.
Цитата

Existing characters in the string or elements in the array are preserved, but the content of newly allocated space is undefined.

Еще бы сюда 
Код

FillChar(Tmp[0],Length(ar) * SizeOf(integer),0);
 
--------------------
Tell me the extensions of the files You backup and I'll tell You who You are..  ©Mch  
PM   Вверх
Snowy
Дата 28.5.2006, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Цитата(Mechanic @  28.5.2006,  12:49 Найти цитируемый пост)
А кто сказал, что 0 - это не заполненный элемент?
По дефолту так, если массив описан в интерфейсной части. Иначе мусор, который определить невозможно.

Цитата(Mechanic @  28.5.2006,  12:49 Найти цитируемый пост)
А если было присваивание a[1] := 0; то такой элемент заполненный, или нет?
Если мы на место 0 записываем 0, то это не является модификацией.

Цитата(Mechanic @  28.5.2006,  12:49 Найти цитируемый пост)
Правильнее всё-таки, наверное
Цитата(Snowy @  28.5.2006,  11:05 )    
Или сделать по грамотному: не массив, а объект-List. Запись элемента фиксировать при помощи инкапсуляции.
Правильнее, грамотнее, но сложнее в реализации.
Зато потом работать с такой структурой - одно удовольствие.
Поэтуму необходимость такой заморочки зависит от того, как много мы собираемся работать с этой структурой.
Если код небольшой, то и незачем заморачиваться.
А вот, если большой, то очень стоит подумать. С грамотной структурой он и читается проще.

Цитата(Mechanic @  28.5.2006,  12:49 Найти цитируемый пост)
Не. Не совсем. SetLength не заполняет элементы нулями.
Заполняет. FillChar там уже прописан.
Это уже обсуждалось когда-то. 
PM MAIL   Вверх
Mechanic
Дата 28.5.2006, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 5.5.2006
Где: Kharkov, Ukraine

Репутация: 6
Всего: 7



Цитата(Snowy @  28.5.2006,  13:05 Найти цитируемый пост)
Заполняет. FillChar там уже прописан.

Точно. Проверил. Внутри DynArraySetLength стоит Call @FillChar..

SDK врёт. А я, олух, ухи развесил, и его слушаю..  smile 
Snowy, уж дзвыняй, меня подставили..  smile 

А по сабжу, действительно, смотря что нужно получить в конце, и насколько часто это нужно делать.
Тут ещё семантика слова "пустой" важна. Например, если в массиве хранятся индексы zero-based массивов, то 0 тут никак не пустой. А иногда вводят специальную константу, которой метят "пустой" элемент (вместо привычного nil = 0). Ну, а если нужно в самом деле определять факт модификации массива (типа события OnChange для него), тогда в самом деле, без проперти-райтера не обойтись.
 
--------------------
Tell me the extensions of the files You backup and I'll tell You who You are..  ©Mch  
PM   Вверх
Rondo
Дата 28.5.2006, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 24.2.2006
Где: там..

Репутация: нет
Всего: нет



Да уж smile теперь придется во все врубатся smile
Я думал будет проще! Много чего непонятного.. т-к пока начинающий! 
--------------------
Начинающий кодер  
PM MAIL ICQ   Вверх
Mechanic
Дата 28.5.2006, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 5.5.2006
Где: Kharkov, Ukraine

Репутация: 6
Всего: 7



Цитата(Rondo @  28.5.2006,  16:28 Найти цитируемый пост)
Да уж  теперь придется во все врубатся 

Если получилось просто, то зачем во что-нить врубаться?  smile 
Если во все врубаться, то никогда ничего не сделаешь, т.к. обязательно будет в том, что собираешься сделать, то, о чем ты еще не знаешь.  smile 

Цитата(Rondo @  28.5.2006,  10:13 Найти цитируемый пост)
хочу чтоб он проверил есть ли в этом элементе ЧТО-ТО

Просто замени свое "ЧТО-ТО" на то, что действительно там может быть, и всё. И делов-то..  smile 

Иначе, для общего случая, и не таких методов тебе подбросят.. 
--------------------
Tell me the extensions of the files You backup and I'll tell You who You are..  ©Mch  
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0602 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.