The following sample MINIP programs are meant as a help when debugging your compilers. They are probably not covering all cases, and the fact that you can successfully compile and run them is no guarantee that your compiler is free of errors.
This file was created by Jeppe Buk for testing the assignments in 1996.
program fibonacci;
var a : integer;
function fib(n : integer): integer;
begin
if n <= 1 then
fib := n
else
fib := fib(n - 1) + fib(n - 2)
end;
begin
a := 0;
while a < 10 do begin
write(fib(a));
writeln();
a := a + 1
end
end.
program fakultet;
var a,r : integer;
function fak(x : integer): integer;
begin
if x<=1 then
begin
fak := 1
end
else
begin
fak := x * fak(x-1)
end
end;
begin
a := 0;
while a <= 10 do
begin
write(fak(a));
a := a + 1;
writeln()
end
end.
program QSort;
var num : ARRAY[1..20] of integer;
procedure writeArray(a, b : integer);
begin
while a <= b do
begin
write(num[a]);
a := a + 1
end;
writeln()
end;
procedure Swap(a, b : integer);
var tmp : integer;
begin
tmp := num[b];
num[b] := num[a];
num[a] := tmp
end;
procedure Quicksort(a, b : integer);
var j : integer;
function Partition(p, r : integer) : integer;
var i, j, x : integer;
cont : boolean;
begin
x := num[p];
i := p - 1;
j := r + 1;
cont := true;
while cont do begin
j := j - 1;
while num[j] > x do
j := j - 1;
i := i + 1;
while num[i] < x do
i := i + 1;
if i < j then Swap(i,j)
else cont := false
end;
Partition := j
end;
begin
if a < b then
begin
j := Partition(a, b);
Quicksort(a,j);
Quicksort(j+1,b)
end
end;
begin
num[1] := 10;
num[2] := 18;
num[3] := 19;
num[4] := 18;
num[5] := 12;
num[6] := 8;
num[7] := 3;
num[8] := 15;
num[9] := 20;
num[10] := 3;
num[11] := 17;
num[12] := 25;
num[13] := 11;
num[14] := 23;
num[15] := 12;
num[16] := 0;
num[17] := -8;
num[18] := -13;
num[19] := 9;
num[20] := 42;
writeArray(1,20);
Quicksort(1,20);
writeArray(1,20)
end.
program procparam;
{ Testing parameter passing of a parameter passed subprogram }
procedure a(function g: integer);
begin
write(g(2));
writeln()
end;
procedure b(function h: integer);
begin
a(h)
end;
procedure c();
var m : integer;
function f(n : integer): integer;
begin
f := m + n
end;
begin
m := 3;
b(f)
end;
begin
c()
end.
program temptest;
{ Testing utilization of temporary variables }
var a,b,c,d,e,f,g,h,i,j :integer;
begin
a:= b+(c+(d+(e+(f+(g+(h+(i+123456)))))))
end.
program access;
{ Testing following of access-link }
var x : integer;
procedure c();
var m : integer;
function f(var n : integer): integer;
begin
n:= m;
f := m + n
end;
begin
m:=3;
m := f(m);
write(m+x)
end;
begin
x:=1;
c()
end.
program param;
{ Testing sub-program parameter (Dragon book, p. 419) }
procedure b(function h: integer);
begin
write(h(2));
writeln()
end;
procedure c();
var m : integer;
function f(n : integer): integer;
begin
f := m + n
end;
begin
m := 3;
b(f)
end;
begin
c()
end.
Last modified: Fri Sep 20 11:48:54 1996