PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : delphi--noob-frage/for-schleife+variablen



starlight86
14.03.2004, 17:11
ich will folgendes machen:
in einer for-schleife innerhalb einer 2. for-schleife eine variable machen, deren name von den zählvariablen abhängt. wie mahce ich das?
ich dachte etwa an sowas:
for i=1 to x do
begin
for j=1 to y do
a(i;j):=i*j;
end;

aber so funktioniert das net und ich müsste noch wissen, wie ich a definieren muss, also was für nen typ variable.

danke im oraus für die hilfe

Freezy
14.03.2004, 18:56
Du deklarierst alles bis auf "a" als Integer. Aus "a" selbst machst du nen 2 Dimensionalen Array:



var i,j,x,y: Integer;
a: Array of Array of Integer;

Begin
Setlength(a,x,y); //Setz die länge des Arrays - ob das so funzt weis ich jetzt nicht genau

For i := 1 to x do
For j := 1 to y do
a[i,j] := i* j;

end;


Mit "a" hast du sozusagen ein 2 Dimensionales Raster in das du Zahlen reinschreiben kannst. Mit "i" und "j" gibst du die Zelle an in der du was machen willst.

Ineluki
15.03.2004, 22:23
So ist besser .. da musst du dich nicht mit dynamischen arrays abquaelen ^^



var i,j,x,y: Integer;
a: Array [1..x,1..y] of Integer; // <-- Hier fuer x und y die Maximalwerte einsetzen

Begin
For i := 1 to x do
For j := 1 to y do
a[i,j] := i* j;
end;


Alternativ kannst du das auch auf ein eindimensionales Array ummappen z.B. auf einen Pointer



Type PInteger = ^Integer; //Zeiger auf Integertyp

Var i,j : integer; // Zaehlvariablen
buffer : longint; // Addresse fuer unseren Zeiger
// als longint, da damit besser gerechnet werden kann, als mit einem Pointer

begin
GetMem(Pointer(buffer),MaxX*MaxY*SizeOf(Integer)) ); // Speicher reservieren fuer Breite*Hoehe Elemente
// der Speichergroesse eines Integers
for i:=0 to MaxX-1 do // Nullindexierte Addressierung des Arrays
for j:=0 to MaxY-1 do
PInteger( buffer+ (i+j*MaxX)*SizeOf(Integer) )^:=i*j; // Indexpaar in Realaddresse umrechnen und dieser Wert zuweisen
FreeMem(Pointer(buffer)); //Speicherfreigabe nicht vergessen, wenn mans nicht mehr braucht
end;