Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.07.01;
Скачать: [xml.tar.bz2];

Вниз

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

 
{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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.005 c
2-1181068367
DimDim
2007-06-05 22:32
2007.07.01
Программно установить ActiveSheet


2-1181246808
koha
2007-06-08 00:06
2007.07.01
Как узнать сколько раз процесс подключался к процессору?


1-1178256926
California
2007-05-04 09:35
2007.07.01
При запуске формы все объекты меняют свое положение


3-1175688182
ANB
2007-04-04 16:03
2007.07.01
Транзакции в триггерах Оракла


2-1181452437
Karl
2007-06-10 09:13
2007.07.01
сравнение TStringList и первого столбца ListView





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский