Главная страница
    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.45 MB
Время: 0.004 c
2-1181563523
Ezorcist
2007-06-11 16:05
2007.07.01
Передача файлов через TidTCP...


2-1181152092
Ламер 2.Х
2007-06-06 21:48
2007.07.01
Админ


3-1175522158
Arsenija
2007-04-02 17:55
2007.07.01
SQL запрос на поиск ну очень большого числа значений.


11-1164187373
SergeR
2006-11-22 12:22
2007.07.01
При установке контрола MHTrackBar ошибка


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский