Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Mini-Wettbewerb: Bedingter Vergleichs-Algo (https://www.delphipraxis.net/46889-mini-wettbewerb-bedingter-vergleichs-algo.html)

RuX 2. Jun 2005 13:52


Mini-Wettbewerb: Bedingter Vergleichs-Algo
 
Für folgendes Problem suche ich einen möglichst einfachen Algorithmus:
- es sollen bestimmte felder von 2 records vergleicht werden
- es kann angegeben werden welche felder verglichen werden sollen
- ergebnis = true wenn alle felder die vergleicht werden sollen übereinstimmen, false wenn nur eins nicht übereinstimmt

Klingt einfach, isses so natursprachlich ausgedrückt auch, ist auch leicht verständlich, bloß das ganze programmiertechnisch umzusetzen ist relativ (zum Problem gesehen) aufwendig imo.
Ich habe zwar schon eine Lösung, bloß die scheint mir anhand des Problems ziemlich komplex, da viele Blöcke, Variablen etc.

Beispiel Record
Delphi-Quellcode:
type TBsp = record
  A: String;
  B: Integer;
  C: Double;
end;
Record 1, Record 2... Beispiele:

Delphi-Quellcode:
Vergleicht werden sollen A, B, C

Record1.A = 'asdf'
Record1.B = 123
Record1.C = 123.45

Record2.A = 'asdf'
Record2.B = 123
Record2.C = 123.45

result = true
Delphi-Quellcode:
Vergleicht werden soll C

Record1.A = 'asdf'
Record1.B = 123
Record1.C = 123.45

Record2.A = 'jklö'
Record2.B = 456
Record2.C = 123.45

result = true
Delphi-Quellcode:
Vergleicht werden sollen A, C

Record1.A = 'asdf'
Record1.B = 123
Record1.C = 123.45

Record2.A = 'jklö'
Record2.B = 456
Record2.C = 123.45

result = false
Wer den kürzesten Delpih Algo abliefert kriegt... respekt :) :kiss:

freak4fun 2. Jun 2005 14:13

Re: Mini-Wettbewerb: Bedingter Vergleichs-Algo
 
Hallo :hi:,
gibt es immer nur A, B und C oder ist die Anzahl variabel?

MfG
freak

mschaefer 2. Jun 2005 14:18

Re: Mini-Wettbewerb: Bedingter Vergleichs-Algo
 
Hm, also wenn schon als Wettbewerb, dann bitte mit (annerkennugns) Preis,
Respekt kann man hier doch ohne Einschränkungen dne meisten zugestehen.

Grüße // Martin

Dax 2. Jun 2005 14:19

Re: Mini-Wettbewerb: Bedingter Vergleichs-Algo
 
Da, büdde :)

Delphi-Quellcode:
type
  TBspField = (bfA, bfB, bfC);
  TBspFieldSet = set of TBspField;

function Compare(A, B: TBsp; Fields: TBspFieldSet): Boolean;
begin
  Result := True;
  if bfA in Fields then Result := Result and (A.A = B.A);
  if bfB in Fields then Result := Result and (A.B = B.B);
  if bfC in Fields then Result := Result and (A.C = B.C);
end;
Ich hoffe es hilft dir ;)

RuX 2. Jun 2005 14:25

Re: Mini-Wettbewerb: Bedingter Vergleichs-Algo
 
Zitat:

Zitat von freak4fun
Hallo :hi:,
gibt es immer nur A, B und C oder ist die Anzahl variabel?

MfG
freak

achso ja, vergessen zu sagen. also in meinem fall ist es fest definiert welcher typ von record verglichen werden soll und somit auch die anzahl und arten der felder.

in meiner umsetzung hatte ich mir eine enumeration mit allen feldern gebaut + ein set davon damit ich wusste welche vergleicht werden sollen.
alternativ wäre noch eine nachbildung des records bloß mit boolschen variablen vorstellbar.

dynamischer brauchts wegen mir also nicht zu sein.

Zitat:

Hm, also wenn schon als Wettbewerb, dann bitte mit (annerkennugns) Preis,
Respekt kann man hier doch ohne Einschränkungen dne meisten zugestehen.
is halt n geek wettbewerb :D außerdem ist die genugtuung den "besten" algo geschrieben zu haben auch kein schlechter preis ;)

Zitat:

Zitat von Dax
Da, büdde :)

Delphi-Quellcode:
type
  TBspField = (bfA, bfB, bfC);
  TBspFieldSet = set of TBspField;

function Compare(A, B: TBsp; Fields: TBspFieldSet): Boolean;
begin
  Result := True;
  if bfA in Fields then Result := Result and (A.A = B.A);
  if bfB in Fields then Result := Result and (A.B = B.B);
  if bfC in Fields then Result := Result and (A.C = B.C);
end;
Ich hoffe es hilft dir ;)

Das war auch mein erster ansatz, leider klappt das so nicht, da result von anfang an true ist das heißt auch wenn nichts übereinstimmt ists true! result von anfang an auf false setzen klappt hier leider auch nicht :(

Dax 2. Jun 2005 14:26

Re: Mini-Wettbewerb: Bedingter Vergleichs-Algo
 
Dann eben so ^^

Delphi-Quellcode:
type
  TBspField = (bfA, bfB, bfC);
  TBspFieldSet = set of TBspField;

function Compare(A, B: TBsp; Fields: TBspFieldSet): Boolean;
begin
  Result := Fields <> [];
  if bfA in Fields then Result := Result and (A.A = B.A);
  if bfB in Fields then Result := Result and (A.B = B.B);
  if bfC in Fields then Result := Result and (A.C = B.C);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:38 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz