MODULE f_param_2 EXPORTS Main; IMPORT IO, Fmt; CONST feld_10 = array_int{5,2,7,3,8,9,1,11,4,6}; TYPE array_int = ARRAY OF INTEGER; array_ptr = REF array_int; check = PROCEDURE(x,y : INTEGER) : BOOLEAN; PROCEDURE sort_alg(array : array_ptr; krit : check) = VAR tmp : INTEGER; BEGIN FOR pos := FIRST(array^) TO LAST(array^) DO FOR element := pos+1 TO LAST(array^) DO IF krit(array^[pos],array^[element]) THEN (* kriterium erfuellt ? *) tmp := array^[pos]; (* dann tauschen wir =) *) array^[pos] := array^[element]; array^[element] := tmp; END; END; END; END sort_alg; PROCEDURE aufsteigend(a,b : INTEGER) : BOOLEAN = BEGIN IF (a > b) THEN RETURN TRUE; END; RETURN FALSE; END aufsteigend; PROCEDURE absteigend(a,b : INTEGER) : BOOLEAN = BEGIN IF (a < b) THEN RETURN TRUE; END; RETURN FALSE; END absteigend; PROCEDURE print(array : array_ptr) = BEGIN FOR i := FIRST(array^) TO LAST(array^) DO IO.Put(Fmt.Int(array^[i])); IF NOT i = LAST(array^) THEN IO.Put (", "); ELSE IO.Put("\n"); END; END; END print; VAR feld : array_ptr; BEGIN feld := NEW(array_ptr, 10); (* speicher fuer 10 elementiges array *) feld^ := feld_10; (* zeiger auf feld mit 10 elementen *) IO.Put("Das Feld unsortiert : \n"); print(feld); IO.Put("Feld aufsteigend sortiert : \n"); sort_alg(feld, aufsteigend); print(feld); IO.Put("Feld absteigend sortiert : \n"); sort_alg(feld, absteigend); print(feld); END f_param_2.