Главная страница
    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.46 MB
Время: 0.004 c
2-1181275835
NNN
2007-06-08 08:10
2007.07.01
пароль на *.mdb


2-1180987541
Dipodidae
2007-06-05 00:05
2007.07.01
Интерфейс


2-1181332636
Bullfrog
2007-06-08 23:57
2007.07.01
работа с текстовым файлом


2-1181221488
Magedon
2007-06-07 17:04
2007.07.01
Регистрация DLL


15-1179163591
Rouse_
2007-05-14 21:26
2007.07.01
ММР в Питере





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