Om nah hoo pez nyeetz, Whouzuo!
Wieso sollte das das ganze übersichtlicher machen?
Dazu benötigt man nicht alle Einträge doppelt. Es reicht ja bei dem entsprechenden "fehlenden" Eintrag auf die Negierung des umgedrehten Eintrags zu verweisen.
Das ist mir bewusst.
{Var.1}
case check[h,c] of
-1: {verloren}
0: {unentschieden}
1: {gewonnen}
end;
{Var.2}
gewinn := check[min(h,c),max(h,c)] * sgn(h-c);
case gewinn of
-1: {verloren}
0: {unentschieden}
1: {gewonnen}
end;
Man benötigt tatsächlich nur eine Zeile Quelltext mehr, die aber 3 Funktionsaufrufe enthält. In meinen Augen ist Variante 1 intuitiver, verständlicher und auch performanter und das trotz des höheren Speicherbedarfs für das Array. In dem Fall ist die Hauptdiagonale noch mit Nullen gefüllt.
{Var.3}
if h <> c then
begin
gewinn := check[min(h,c),max(h,c)] * sgn(h-c);
case gewinn of
-1: {verloren}
1: {gewonnen}
end;
end
else
{unentschieden}
Ohne die Hauptdiagonale im Array könnte es so aussehen.
Matthias