Hartkern hat geschrieben:Was die for Schleifen tuen ist mir bekannt, da ich die Multiplikation bisher umständlich "quasi per Hand" gemacht hab..
Was ist dieser Operator? ich kenn lediglich Procedure und function, okay constructor, destructor auch
Du kannst die vorhanden Operatoren für eigene Datentypen überladen. Siehe hierzu die Dokumentation:
http://www.freepascal.org/docs-html/cur ... 7-22900015
Du kannst alle Operatoren auch als Funktion ausdrücken. Der generierte Binärcode ist nahezu identisch.
Am Ende ist das Überladen von Operatoren nur etwas, was den Quelltext lesbarer macht.
Code: Alles auswählen
// als operator
operator * (const m1, m2: tMat44) res: tMat44;
var
i, j, k: integer;
begin
for i := 0 to 3 do begin
for j := 0 to 3 do begin
Res[i, j] := 0;
for k := 0 to 3 do begin
Res[i, j] := Res[i, j] + m2[i, k] * m1[k, j];
end;
end;
end;
end;
// als Funktion
function MulitplyMat44(const m1, m2: tMat44): tMat44;
var
i, j, k: integer;
begin
for i := 0 to 3 do begin
for j := 0 to 3 do begin
Res[i, j] := 0;
for k := 0 to 3 do begin
MulitplyMat44[i, j] := Res[i, j] + m2[i, k] * m1[k, j];
end;
end;
end;
end;
var
m1, m2, m3: tMat44;
begin
// aufruf Operator
// ohne den oben definierten Operator, würde der FPC hier einen Fehler ausgeben, da er den Typ tMat44 nicht multiplizieren kann
m3 := m1 * m2;
// Aufruf als Funktion
m3 := MulitplyMat44(m1, m2);
end.