Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не полное сравнение данных


{RASkov} ©   (2007-06-10 20:10:00) 

TTypeData = (1,2,3);

TData = record
D1, D2: Integer;
end;

TArrData: array of array of TData;

var ArrD: TArrData;

function VerifyData: Boolean;
var C, R: Integer; F: Boolean;
begin
 Result:=False; F:=True;
 for C := 0 to High(ArrD) do begin
  for R := 0 to High(ArrD[C]) do begin
   if (ArrD[C, R].D1<>2) and (ArrD[C, R].D2<>2) then Continue;
   Result:=ArrD[C, R].D1=ArrD[C, R].D2;
   F:=Result;
  end;
  if not F then Break;
 end;
end;


Нужно сравнить внутри типа его данные, но не идеентично полностью, а только 2-ки
Например:

1 23 21
3 2111
22333
11111
и
3 21 23
3 2131
22111
33333

Считать одинаковыми т.е. вернуть функцией True
А вот так ситать, что они разные
1 23 21
3 2111
22333
11111
и
113 21 !
3 2111
22333
11111

и, соответственно вернуть False.

Вроде все правильно написал, но функция возвращает не верный результат. Чет никак не соображу где косяк....
Будте добры, подскажите алгоритм данной функции. Спасибо.


{RASkov}   (2007-06-10 22:35:00) [1]

> [5] begin...end ©   (10.06.07 21:17)

Спасибо. Вроде все верно.


begin...end   (2007-06-10 21:17:00) [2]

Исходный код тщательно не просматривал, но я бы сделал примерно так:

function VerifyData: Boolean;
var
 C, R: Integer;
begin
 Result := False;
 for C := 0 to High(ArrD) do
   for R := 0 to High(ArrD[C]) do
     with ArrD[C, R] do
       if ((D1 = 2) or (D2 = 2)) and (D1 <> D2) then
         Exit;
 Result := True
end


Впрочем, не исключено, что я неправильно понял вопрос...


{RASkov}   (2007-06-10 20:38:00) [3]

Одни данные (D1) такие, например:

11111
12221
12221
11111

Сравниваемые (D2) такие:
Вот так возвращает False
21111
12221
12221
11111

А так (все ниже) True
(Это и должно вернуть True)
11111
12221
12221
11111

(А следующие должны False, но возвращают True) :(
11112 <
12221
12221
11111
и
11111
11111
12222
11111


{RASkov}   (2007-06-10 20:29:00) [4]

> [2] Правильный Вася   (10.06.07 20:16)

Да нет вроде.... тоже самое получается (


Правильный Вася   (2007-06-10 20:16:00) [5]

F:=Result;
заменить на
F:= F andResult;


{RASkov}   (2007-06-10 20:13:00) [6]

Вообщето так :)

TTypeData = (1,2,3);

TData = record
D1, D2: TTypeData;
end;


но это не важно )


Наверх

Титульная страница Поиск, карта сайта Написать письмо