Zitat von
xexex84:
Danke für die bisherigen Antworten. War schon sehr hilfreich, aber jetzt frage ich mich wie ich die Matrix an sich am besten implementiere.
Ich würde das als 2-dimensionales Feld machen, also zb. var Matrix : array[i,j], wie muss ich diesen Datentyp in oder die Variable definieren?
hast du dir die
Jedi Math Bibliothek überhaupt angeschaut? Da gibt es schon eine fertige zweidimensionale Matrix vom Typ IJmFloatMatrix.
d. h. zum Erstellen brauchst du nur die Matrix mit dem Befehl Matrix mit der Matrixgröße übergeben und fertig.
Delphi-Quellcode:
uses ...,JmTypes, JmFloatMatrix;
implementation
var
TestMatrix: IJmFloatMatrix;
procedure Erstelle_Matrix(ZeilenAnzahl, SpaltenAnzahl: Integer);
begin
TestMatrix:=Matrix(ZeilenAnzahl, SpaltenAnzahl);
end;
Zitat von
xexex84:
Und wie kann ich diese Matrix dann in der
GUI am besten füllen, StringGrid sieht ganz gut aus, kann man das auch in der Größe variabel machen (also die Anzahl der Reihen etc.)? Gibt es eine Metheode den gesamten inhalt direkt in die Matrix zu übertragen oder ist die Schleife der beste Weg?
Intuitiv würde ich auch StringGrid zum Eingeben verwenden. Du kannst ja in deinem Programm mit z.B. SpinEdit Felder abfragen wie groß die Matrix sein soll, dann setzt du die Eigenschaften ColCount und RowCount von StringGrid z.B. StringGrid1.ColCount:=SpinEdit1.Value u. StringGrid1.RowCount:=SpinEdit2.Value.
Wenn der User fertig ist mit der Eingabe im StringGrid übernimmst es in deine Matrix, das du mit der
Jedi Math erstellt hast.
z.B.
Delphi-Quellcode:
procedure StringGrid2JediMatrix(const SourceGrid: TStringGrid; var DestMatrix:IJmFloatMatrix);
var
zeile, spalte: Integer;
begin
for zeile:=0 to SourceGrid.RowCount-1 do
for spalte:=0 to SourceGrid.ColCount-1 do
begin
DestMatrix[zeile+1,spalte+1]:=StrToFloat(SourceGrid.Cells[spalte,zeile]); //weil IJmFloatMatrix 1 basiert und StringGrid 0 basiert
end;
end;
Ich habe das auf die schnelle eingetippt, also bitte nicht bös sein, wenn etwas auf Anhieb nicht funktioniert.
Was hier fehlen könnte sind weitere Überprüfungen, wie z.B. ob in der StringGrid wirklich Zahlen drin stehen, aber das kannst du ja noch nachholen.
Grüsse,
jus