Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.07.01;
Скачать: CL | DM;

Вниз

Не полное сравнение данных   Найти похожие ветки 

 
{RASkov} ©   (2007-06-10 20:10) [0]

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-ки
Например:

12321
32111
22333
11111
и
32123
32131
22111
33333

Считать одинаковыми т.е. вернуть функцией True
А вот так ситать, что они разные
12321
32111
22333
11111
и
11321 !
32111
22333
11111

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

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


 
{RASkov} ©   (2007-06-10 20:13) [1]

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

TTypeData = (1,2,3);

TData = record
D1, D2: TTypeData;
end;


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


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

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


 
{RASkov} ©   (2007-06-10 20:29) [3]

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

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


 
{RASkov} ©   (2007-06-10 20:38) [4]

Одни данные (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


 
begin...end ©   (2007-06-10 21:17) [5]

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

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 22:35) [6]

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

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



Страницы: 1 вся ветка

Текущий архив: 2007.07.01;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.026 c
15-1181010042
Slider007
2007-06-05 06:20
2007.07.01
С днем рождения ! 5 июня 2007 вторник


3-1175712325
Seme
2007-04-04 22:45
2007.07.01
Не могу подключиться к MySQL.


15-1179464678
ZeroDivide
2007-05-18 09:04
2007.07.01
Господа зажравшиеся программисты, отпускаете ли вы своих жен на


15-1180555261
user__
2007-05-31 00:01
2007.07.01
Windows Vista


3-1175687982
elserpiente
2007-04-04 15:59
2007.07.01
from MySQL to Firebird ;)