Zitat von
stahli:
Proz 3,5:-0,5 -> Diff=-4 -> Ähnlichkeit=80%
Nicht doch eher soetwas wie -114% (also: gar nicht ähnlich)?
Ich würde mir eine Funktion schreiben, die zwei Tupel miteinander vergleicht, und den Ähnlichkeitsindex (0..1 oder 0..100) zurückliefert. Im Prinzip hast Du das ja gemacht, aber eine Funktion zentralisiert diese Entscheidungslogik und macht es
imho übersichtlicher. Vielleicht solltest Du auch nicht von 'Ähnlichkeit' sprechen, sondern von einem 'Abstand', aber das ist Wortklauberei.
Für den Zugriff auf die Tupel sowohl als Array als auch auf die individuellen Werte würde ich einen 'variant record' verwenden.
Delphi-Quellcode:
Type
TValues = Record
Case Boolean Of
False : (Sta, Proz, Gl1, Gl2, Gl3, Gl4 : Double); // Individueller Zugriff
True : (Values : Array [0..5] Of Double); // Indizierter Zugriff
End;
Und die Funktion selbst so deklarieren;
Delphi-Quellcode:
Function SimilarityIndex (Const A,B : TValues) : Double;
Begin
....
End;