Ergebnis 1 bis 3 von 3

Thema: delphi--noob-frage/for-schleife+variablen

  1. #1

    delphi--noob-frage/for-schleife+variablen

    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

  2. #2
    Du deklarierst alles bis auf "a" als Integer. Aus "a" selbst machst du nen 2 Dimensionalen Array:

    Code:
    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.

    Geändert von Ineluki (15.03.2004 um 21:22 Uhr)

  3. #3
    So ist besser .. da musst du dich nicht mit dynamischen arrays abquaelen ^^

    Code:
    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

    Code:
    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;

    Geändert von Ineluki (16.03.2004 um 00:48 Uhr)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •