Browse Source

* updates from Ales Katona

peter 20 years ago
parent
commit
fc70da304e

+ 0 - 23
tests/bench/shootout/src/ackerm.pp

@@ -1,23 +0,0 @@
-{ Ackermann's Function }
-program ackermann;
-uses SysUtils;
-
-function Ack(M, N : integer) : integer;
-begin
-    if M = 0 then Ack := N+1
-    else if N = 0 then Ack := Ack(M-1, 1)
-    else Ack := Ack(M-1, Ack(M, N-1))
-End;
-
-var NUM, a : integer;
-
-begin
-    if ParamCount = 0 then
-        NUM := 1
-    else
-        NUM := StrToInt(ParamStr(1));
-
-    if NUM < 1 then NUM := 1;
-    a := Ack(3, NUM);
-    WriteLn( 'Ack(3,' + IntToStr(NUM) + '): ' + IntToStr(a) );
-end.

+ 23 - 0
tests/bench/shootout/src/ackermann.pp

@@ -0,0 +1,23 @@
+program ackerman;
+
+{$mode objfpc}
+
+uses SysUtils;
+
+function Ack(const M, N : integer) : integer;
+begin
+  if M = 0 then Ack := N+1
+    else if N = 0 then Ack := Ack(M-1, 1)
+      else Ack := Ack(M-1, Ack(M, N-1));
+end;
+
+var NUM, a: integer;
+begin
+  if ParamCount = 0 then NUM := 1
+    else NUM := StrToInt(ParamStr(1));
+  if NUM < 1 then NUM := 1;
+
+  a := Ack(3, NUM);
+  WriteLn( 'Ack(3,' + IntToStr(NUM) + '): ' + IntToStr(a) );
+end.
+

+ 15 - 15
tests/bench/shootout/src/fibo.pp

@@ -1,25 +1,25 @@
-{ Fibonacci Numbers }
+program fibonacci;
+
+{$mode objfpc}
 
-program fibo;
 uses SysUtils;
 
-function fib(N : integer) : longint;
+function fib(const N: cardinal): cardinal;
 begin
-    if N < 2 then fib := 1
-    else fib := fib(N-2) + fib(N-1);
-End;
+  if N < 2 then fib := 1 else
+    fib := fib(N-2) + fib(N-1);
+end;
 
 var
-    NUM : integer;
-    f : longint;
+  NUM : integer;
+  f   : cardinal;
 
 begin
-    if ParamCount = 0 then
-        NUM := 1
-    else
-        NUM := StrToInt(ParamStr(1));
+  if ParamCount = 0 then NUM := 1
+    else NUM := StrToInt(ParamStr(1));
 
-    if NUM < 1 then NUM := 1;
-    f := fib(NUM);
-    WriteLn( IntToStr(f) );
+  if NUM < 1 then NUM := 1;
+  f := fib(NUM);
+  WriteLn( IntToStr(f) );
 end.
+

+ 19 - 24
tests/bench/shootout/src/random.pp

@@ -1,33 +1,28 @@
-{ Random Number Generator }
-
 program random;
-uses SysUtils;
 
-const
-    IM = 139968;
-    IA =   3877;
-    IC =  29573;
+{$mode objfpc}
+
+uses SysUtils;
 
-var
-    LAST, NUM, i : longint;
-    result : real;
+const IM = 139968;
+      IA =   3877;
+      IC =  29573;
 
-function gen_random(n : integer) : real;
+var  LAST, NUM, i: longint;
+     value: double;
+     
+function gen_random(const n: integer): double; inline;
 begin
-    LAST := (LAST * IA + IC) mod IM;
-    gen_random := n * LAST / IM;
+  LAST := (LAST * IA + IC) mod IM;
+  gen_random := n * LAST / IM;
 end;
 
 begin
-    if ParamCount = 0 then
-        NUM := 1
-    else
-        NUM := StrToInt(ParamStr(1));
-    if NUM < 1 then NUM := 1;
-    LAST := 42;
-    for i:= 1 to NUM do
-    begin
-        result := gen_random(100);
-    end;
-    WriteLn( result:10:9 );
+  if ParamCount = 0 then NUM := 1
+    else NUM := StrToInt(ParamStr(1));
+  if NUM < 1 then NUM := 1;
+  LAST := 42;
+  for i:= 1 to NUM do
+    value:=gen_random(100);
+  WriteLn(value:10:9);
 end.

+ 19 - 0
tests/bench/shootout/src/takfp.pp

@@ -0,0 +1,19 @@
+program takfp;
+
+{$mode objfpc}
+
+uses SysUtils;
+
+function Tak(const x, y, z: double): double;
+begin
+  if y >= x then Tak:=z else
+    Tak:=Tak(Tak(x-1,y,z), Tak(y-1,z,x), Tak(z-1,x,y));
+end;
+
+var n: integer;
+begin
+  if paramcount<1 then n:=1
+    else n:=StrToInt(paramstr(1));
+  writeln(Tak(n*3, n*2, n*1):0:1);
+end.
+