Главная страница
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.022 c
1-1177948932
Чародей
2007-04-30 20:02
2007.07.01
Как распаковать zip


2-1180638871
Углук
2007-05-31 23:14
2007.07.01
Компиляция элемента управления.


4-1169217786
DevilDevil
2007-01-19 17:43
2007.07.01
Disable ScrollBar


2-1181159162
Василий Кузнецов
2007-06-06 23:46
2007.07.01
Указатель


15-1180936975
G_M_S
2007-06-04 10:02
2007.07.01
Сессия...