(*PROGRAM DREI3*); CONST N=500; VAR I:INTEGER; A:ARRAY[0..N]OF BOOLEAN; PROCEDURE GEN(X:INTEGER); (*ERZEUGE DIE MENGE IM INTERVALL [1..N] *) BEGIN IF X<=N THEN BEGIN A[X]:=TRUE;GEN(2*X+1);GEN(3*X+1) END; END; FUNCTION TEST(X:INTEGER):BOOLEAN; (*PRUEFE, OB X ELEMENT VON M *) (*FUEHRE REDUKTION REKURSIV DURCH. EVTL. REDUKTION UEBER *) (*DIVISION DURCH 2, FALLS REDUKTION MIT 3 NICHT ZUM *) (*ERFOLG FUEHRTE. *) VAR DRIN:BOOLEAN; BEGIN X:=X-1;DRIN:=X=0; IF NOT DRIN THEN IF (X MOD 3)=0 THEN DRIN:=TEST(X DIV 3); IF NOT DRIN THEN IF (X MOD 2)=0 THEN DRIN:=TEST(X DIV 2); TEST:=DRIN END; BEGIN (*ARRAY LOESCHEN*) FOR I:=1 TO N DO A[I]:=FALSE; (*M ERZEUGEN: *) GEN(1); (*PRUEFEN: *) WRITELN("ENTHALTEN SIND:"); FOR I:=1 TO N DO BEGIN IF A[I] THEN WRITE(I); IF A[I]<>TEST(I)THEN WRITELN("FEHLER:",I); END END.