Programmierung

Erweiterte Anwendungsmöglichkeiten des Memory-Objekts (Teil 2)

In CONZEPT 16 besteht die Möglichkeit, dynamisch (d.h. zur Programmlaufzeit), Speicherplatz im Hauptspeicher (RAM) des verwendeten Computersystems zu reservieren. Dadurch ist es auch möglich Daten-Arrays zu realisieren.

Ein typischer Aufruf, um zum Beispiel ein eindimensionales Byte Array der Größe 0 bis DimX in CONZEPT 16 zu reservieren, sieht folgendermaßen aus:

tArray1D  #  MemAllocate(tDimX+1);

Nach einem erfolgreichen Aufruf der Funktion MemAllocate() zeigt das zurückgegebene Handle „Array1D“ dann auf das neu reservierte eindimensionale Daten-Array im Hauptspeicher.

In Erweiterung dazu können auch mehrdimensionale Arrays einfach erzeugt werden. Hier ein Beispiel für ein zweidimensionales Array:

sub Create_Array2D
(
  aDimX, aDimY  : int
):handle;
{
  return(MemAllocate((aDimX + 1) * (aDimY + 1)));
}

Um nun in dieses zweidimensionale Array an die Position X,Y Werte schreiben zu können, kann die folgende Routine eingesetzt werden.

sub Set_Value
(
  aArray              : handle;
  aPosX,aPosY,aDimX   : int;
  aValue              : byte
);
{
  aArray->MemWriteByte(aPosX * aDimX +  aPosY + 1, aValue ,1);
}

Soll jetzt im weiteren Verlauf auf die in das zweidimensionale Array eingetragenen Werte zugegriffen werden, kann folgende Routine verwendet werden.

sub Get_Value
(
  aArray              : handle;
  aPosX,aPosY, aDimX  : int
): byte;
{
  return(aArray->MemReadByte(aPosX * aDimX + aPosY + 1));
}

Durch den Einsatz der hier gezeigten Routinen ist es nun einfach möglich, auf zweidimensionale Arrays zuzugreifen.

main()
local{
  tX,tY,tValue,tDim   : int;
  tArray2D            : handle;
}
{
  // Dimension festlegen -> 8 * 8 Array
  tDim     # 8;
  tArray2D # Create_Array2D(tDim,tDim);

  // Array füllen
  tValue   # 1;
  for tX # 0 loop inc(tX) while (tX <= tDim)
    for tY # 0 loop inc(tY) while (tY <= tDim)
      {
        tArray2D->Set_Value(tX,tY,tDim,tValue);
        inc(tValue);
      }

  // Array-Wert an Pos 1,1 auslesen
  tValue # tArray2D->Get_Value(tDim,1,1);

  WinDialogBox(0,'2D Array Value',cnvai(tValue),0,0,0);

  tArray2D->Memfree();
};

Einer Erweiterung dieser Funktionalität auch auf N-Dimensionale Arrays steht also nichts mehr entgegen.

Graphische Darstellung eines 2D Arrays
Keine Kommentare

Kommentar abgeben