Mehrdimensionales Array als Parameter

Kangaxx

Mitglied
Hallo,

sitz gerade vor einem kleinen Problem das ich ums verrecken nicht gelöst krieg. Sonderlich viel passendes oder funktionierendes hab ich per Suchfunktion au nicht gefunden.

Das Problem:
Benutze den Gauss-Algorithmus um ein LGS zu lösen. Dieses Gleichungssystem will ich als dynamisches, mehrdimensionales array übergeben. Leider find ich den passenden syntaktischen Ausdruck nicht!

Frage:
Wie formuliere ich die Funktion damit ich später ein dynamisches mehrdimensionales array als Parameter übergeben kann?


Gruß Kangaxx
 
Ich glaube, es ging, wenn man das mehrdimensionale Array als eigenen Typ definiert.

Vielleicht klappt's ja :p

Grüße
Hellie
 
Also, habs jetzt sozusagen hinbekommen, war bissle komisch!

Hab das ganze über nen Pointer gemacht...

Code:
//types
type Matrix = array of array of double;
type MatrixPtr = ^Matrix;


//Funktionsdefinition
procedure GaussElimination(pIN : MatrixPtr; pOUT : Matrix);


//Übergabe eines arrays als Param:
//Als Beispiel test()
procedure Test()
var pInMatrix    : array of array of double;
     pOutMatrix : Matrix; 
     i                : integer;
begin
         //Initialisierung des Arrays, beliebige größe
         SetLength(pInMatrix, 5);
         for i:=0 to Length(pInMatrix)-1 do
         begin
              SetLength(pInMatrix[i],5);
         end;

               //Füllen der Matrix mit irgendwelchen Zahlen...
         

    //Übergabe:
    GaussElimination(MatrixPtr(@pInMatrix),pOutMatrix);

end;


Das hat so funktioniert! In der Gauss-Funktion muss dann lediglich der Parameter dereferenziert werden ( pIN^ ), dann kann man auf das vorher erstelle mehrdimensionale array zugreifen.

Wenn man das zu übergebende Array allerdings nicht dynamisch , so wie oben, erzeugt, sondern mit festen Werten:
Code:
pArr : array[1..3] of array[1..4] of double

so funktioniert das ganze irgendwie nicht.. es wird zwar die korrekte Speicheradresse mit dem Pointer übergeben allerdings scheint die derefernzierung nicht zu funktionieren.

Werd die Funktion dann wohl einfach überladen!

Danke für die Hilfe,
gruß
Kangaxx
 
Zurück