Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.01.2010, 14:19   #1
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию Корректное сравнение массивов на условии.

Вопрос в том, как можно корректнее (или быстрее, в зависимости от ответа) сравнить массив на заполенность конкретными значениями:
Так:
Код:
Type
 TMas = Array[1..5] of LogInt;

 Var
  MasZero : TMas = (4,4,4,4,4);
  Mas2      : TMas;

 Begin
  ...
  While Mas2 <> MasZero do ...
Или корректнее (быстрее) так:?
Код:
Function Equa(Mas:TMas):Boolean;
 var
  N:Byte;
 Begin
  Result:=TRUE:
  For N:=1 to 5 do
   If Mas[N] <> 4 Then Result:=FALSE;
 End;

While Not(Equa(Mas2)) do ...
Примерный размер массива: 0..87499
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 10.01.2010, 14:23   #2
maxionans
Форумчанин
 
Аватар для maxionans
 
Регистрация: 02.01.2010
Сообщений: 254
По умолчанию

Если есть эталонный массив, то лучше, на мой взгляд, сравнивать проверяемый массив с эталоном используя CompareMem.
maxionans вне форума Ответить с цитированием
Старый 10.01.2010, 14:34   #3
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Просмотрел форум на предмет CompareMem. Нашел всего несколько тем. В одной из них обнаружил этот код:
Код:
var t2,t:TMemoryStream;
.....
begin
 if t.Size=t2.Size then 
  if CompareMem(t.Memory,t2.Memory,t.Size) then // Одинаковые
end;
Т.е. CompareMem работает только через TMemoryStream. Как тогда перевести массив в этот тип?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 10.01.2010, 14:41   #4
maxionans
Форумчанин
 
Аватар для maxionans
 
Регистрация: 02.01.2010
Сообщений: 254
По умолчанию

Нет, CompareMem всего-лишь требует на входе указатели на два блока данных. В случае с массивами, её можно вызывать так:
Код:
CompareMem( @Arr1[ 0 ], @Arr2[ 0 ], Length( Arr1 ) * SizeOf( Arr1[ 0 ] ) );
У нас принято оформлять код специальным тэгом - при помощи кнопочки "#" (а не значка #). И не значком цитаты.
Вы не знали? Почитайте правила раздела...
Модератор

Последний раз редактировалось mihali4; 10.01.2010 в 15:37.
maxionans вне форума Ответить с цитированием
Старый 10.01.2010, 15:08   #5
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Благодарю, при первой возможности проверю.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Корректное масштабирование рисунка devi409 Мультимедиа в Delphi 16 12.06.2012 21:54
Корректное сохранение в Excel artemavd БД в Delphi 1 19.07.2009 20:57
Корректное сохранение Ico Nester Общие вопросы Delphi 1 25.12.2008 19:50
Корректное закрытие MessageBox Tan4ik Помощь студентам 4 02.05.2008 01:21