A large commit.
[pdp8.git] / sw / src / pascal / ROSS.PS
diff --git a/sw/src/pascal/ROSS.PS b/sw/src/pascal/ROSS.PS
new file mode 100644 (file)
index 0000000..f2ebb51
--- /dev/null
@@ -0,0 +1,52 @@
+PROGRAM ROESSELSPRUNG(OUTPUT);
+
+CONST N = 5; NSQ = 25;
+
+VAR   I,J: INTEGER;
+      FELD: ARRAY[1..N,1..N] OF INTEGER;
+      A,B: ARRAY[1..8] OF INTEGER;
+      ERFOLGREICH: BOOLEAN;
+
+
+PROCEDURE VERSUCH(I: INTEGER; X,Y: INTEGER);
+   VAR K,U,V: INTEGER;
+BEGIN K := 0;
+   REPEAT K:= K+1;
+      U := X + A[K]; V := Y + B[K];
+      IF (1<=U) AND (U<=N) AND (1<=V) AND (V<=N) THEN IF FELD[U,V]=0 THEN
+        BEGIN
+           FELD[U,V] := I;
+           IF I < NSQ THEN
+                        BEGIN
+                           VERSUCH(I+1,U,V);
+                           IF NOT ERFOLGREICH THEN FELD[U,V] := 0
+                        END
+                      ELSE ERFOLGREICH := TRUE
+        END
+   UNTIL ERFOLGREICH OR (K=8)
+END (* VERSUCH *);
+
+BEGIN
+   A[1] :=  2; B[1] :=  1;
+   A[2] :=  1; B[2] :=  2;
+   A[3] := -1; B[3] :=  2;
+   A[4] := -2; B[4] :=  1;
+   A[5] := -2; B[5] := -1;
+   A[6] := -1; B[6] := -2;
+   A[7] :=  1; B[7] := -2;
+   A[8] :=  2; B[8] := -1;
+
+   ERFOLGREICH := FALSE;
+   FOR I := 1 TO N DO FOR J := 1 TO N DO FELD[I,J] := 0;
+
+   FELD[1,1] := 1; VERSUCH(2,1,1);
+
+   WRITELN("WEG DES SPRINGERS:"); WRITELN;
+   IF ERFOLGREICH THEN
+                     FOR I := 1 TO N DO
+                        BEGIN
+                           FOR J := 1 TO N DO WRITE( FELD[I,J] :5);
+                           WRITELN
+                        END
+                  ELSE WRITELN("KEINE LOESUNG!")
+END.