Algorithmen und |
1. Übung - abzugeben am 12. 10. 1999 in Ihrer Übungsgruppe
In einer der nächsten Übungen werden Sie folgende Aufgabe erhalten:
Als Ihre erste Aufgabe sollen Sie für dieses Modul, das einen Matrixzugriff realisieren wird, ein einfaches Testprogramm ("Testtreiber") schreiben.
DEFINITION OF MODULE Matrix; (*mittels Dope-Vektor*)
CONST DIM*= 3; (*variabel!!! *)
TYPE Index*= ARRAY DIM OF INTEGER;
Element*= INTEGER;
PROCEDURE Init*(loBnd, upBnd: Index; VAR err: BOOLEAN);
PROCEDURE CleanUp*();
PROCEDURE Get*(inx: Index; VAR ele: Element);
PROCEDURE Put*(inx: Index; ele: Element);
PROCEDURE Find*(VAR outx: Index; VAR found: BOOLEAN; ele: Element);
END Matrix.
Um dieses Testprogramm dann auch selbst testen zu können, müssen Sie natürlich die Einfachstversion dieses Moduls (z.B. nur für 3-dimensional, Einsatz der normalen Matrixadressierung von Oberon-2, ...) fertigstellen. Tips dazu bzw. Implementierungsdetails erhalten Sie in der Übung.
Hinweise:
Die Simulation des Modules Matrix könnte derzeit ausschnittweise z.B. folgendermaßen aussehen:
MODULE Matrix;
CONST DIM*= 3; (*variabel!!! *)
TYPE Index*= ARRAY DIM OF INTEGER;
Element*= INTEGER;
VAR ub, lb: Index;
m: POINTER TO ARRAY OF ARRAY OF ARRAY OF Element;
PROCEDURE IndexOk(inx: Index): BOOLEAN;
BEGIN (*InodexOk*)
...
END IndexOk;
PROCEDURE Init*(loBnd, upBnd: Index; VAR err: BOOLEAN);
BEGIN (*Init*)
...Fehlerprüfungen...
lb:=loBnd;
ub:=upBnd;
NEW(m, ub[0]-lb[0]+1, ub[1]-lb[1]+1, ub[2]-lb[2]+1);
err:=(m=NIL);
END Init;
PROCEDURE CleanUp*;
BEGIN (*CleanUp*)
ASSERT(m#NIL);
DISPOSE(m); m:=NIL;
END CleanUp;
PROCEDURE Get*(inx: Index; VAR ele: Element);
BEGIN (*Get*)
ASSERT((m#NIL) & IndexOk(inx));
ele:=m[inx[0]-lb[0], inx[1]-lb[1], inx[2]-lb[2]];
END Get;
PROCEDURE Put*(inx: Index; ele: Element);
BEGIN (*Put*)
ASSERT((m#NIL) & IndexOk(inx));
m[inx[0]-lb[0], inx[1]-lb[1], inx[2]-lb[2]]:=ele;
END Put;
PROCEDURE Find*(VAR outx: Index; VAR found: BOOLEAN; ele: Element);
BEGIN (*Find*)
...
END Find;
BEGIN (*Matrix*)
ASSERT(DIM=3);
m:=NIL;
END Matrix.
Bitte vergessen Sie nicht auf Kommentare zu diesem Modul und zum "Testtreiber"!!