From 5d6ffe8d892090bbb8347ecab25fc744c154123a Mon Sep 17 00:00:00 2001 From: yhirose Date: Wed, 5 Aug 2015 11:54:32 -0400 Subject: [PATCH] Added samples for PL/0. --- language/pl0/samples/fib.pas | 30 ++++++++++++++++++ language/pl0/samples/gcd.pas | 61 ++++++++++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+) create mode 100644 language/pl0/samples/fib.pas create mode 100644 language/pl0/samples/gcd.pas diff --git a/language/pl0/samples/fib.pas b/language/pl0/samples/fib.pas new file mode 100644 index 0000000..f21e931 --- /dev/null +++ b/language/pl0/samples/fib.pas @@ -0,0 +1,30 @@ +VAR i, x, r; + +PROCEDURE fib; +VAR xx, r1, r2; +BEGIN + xx := x; + IF xx = 0 THEN r := 1; + IF xx = 1 THEN r := 1; + IF xx >= 2 THEN BEGIN + x := xx - 2; + CALL fib; + r1 := r; + + x := xx - 1; + CALL fib; + r2 := r; + r := r1 + r2; + END +END; + +BEGIN + i := 0; + WHILE i < 30 DO BEGIN + x := i; + CALL fib; + write i; + write r; + i := i + 1; + END +END. diff --git a/language/pl0/samples/gcd.pas b/language/pl0/samples/gcd.pas new file mode 100644 index 0000000..36ab30d --- /dev/null +++ b/language/pl0/samples/gcd.pas @@ -0,0 +1,61 @@ +CONST + m = 7, + n = 85; + +VAR + x, y, z, q, r; + +PROCEDURE multiply; +VAR a, b; +BEGIN + a := x; + b := y; + z := 0; + WHILE b > 0 DO BEGIN + IF ODD b THEN z := z + a; + a := 2 * a; + b := b / 2; + END +END; + +PROCEDURE divide; +VAR w; +BEGIN + r := x; + q := 0; + w := y; + WHILE w <= r DO w := 2 * w; + WHILE w > y DO BEGIN + q := 2 * q; + w := w / 2; + IF w <= r THEN BEGIN + r := r - w; + q := q + 1 + END + END +END; + +PROCEDURE gcd; +VAR f, g; +BEGIN + f := x; + g := y; + WHILE f # g DO BEGIN + IF f < g THEN g := g - f; + IF g < f THEN f := f - g; + END; + z := f +END; + +BEGIN + x := m; + y := n; + CALL multiply; + x := 25; + y := 3; + CALL divide; + x := 84; + y := 36; + CALL gcd; + write z; +END.