Using Algol 68 to print the Fibonacci series

Three different solutions to the same problem illustrating some of the features of Algol 68.

PROGRAM fibonacci
 
{  Copyright(C)2020    MEJT
 
   Prints the first 30 numbers of the fibonacci series.
 
   This  program is free software: you can redistribute it and/or modify  it
   under  the  terms of the GNU General Public License as published  by  the
   Free  Software  Foundation, either version 3 of the License, or (at  your
   option) any later version.
 
   This  program  is  distributed in the hope that it will  be  useful,  but
   WITHOUT   ANY   WARRANTY;   without  even   the   implied   warranty   of
   MERCHANTABILITY  or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
   Public License for more details.
 
   You  should have received a copy of the GNU General Public License  along
   with this program.  If not, see <http://www.gnu.org/licenses/>.
  
   29 Mar 20 0.1  001 - Initial version - MEJT
 
}
 
BEGIN
 
   INT limit = 30 - 1
   INT count := 0;
 
   PROC recursive fibonacci = (INT number) INT{ Finds the nth  Fibonacci number recursivly. }
 
   IF number < 2 THEN 
      number
   ELSE
      recursive fibonacci(number - 1) + recursive fibonacci(number - 2)
   FI{ recursive fibonacci }
 
   PROC iteritive fibonacci = (INT number) INT{ Finds the nth Fibonacci number iteratively. }
 
   { Based on : http://www.rosettacode.org/wiki/Fibonacci_sequence#Iterative_3 }
  
   IF number < 2 THEN 
      number
   ELSE
      INT even:=0, odd:=1;
      FOR count FROM 1 TO number DO
         IF ODD count THEN odd ELSE even FI := odd + even { Find the next even or next odd term in the series. }
      OD;
      IF ODD number THEN odd ELSE even FI
   FI{ iteritive fibonacci }
 
   PROC analytic fibonacci = (INT number)INT{ Computes the nth Fibonacci number using Binet's Formula. }
 
   IF number < 2 THEN 
      number
   ELSE
      REAL sqrt 5 := sqrt(5);
      REAL phi := (1 + sqrt 5) / 2;
      REAL _phi := 1/phi;
      ROUND((phi**number + _phi**number) / sqrt 5 )
   FI{ analytic fibonacci }
  
  
   FOR count FROM 0 TO limit DO
      write (fixed(analytic fibonacci(count), -00));
      IF count MOD 8 = 7 OR count = limit THEN write(newlineELSE write(", "FI
   OD;
  
   FOR count FROM 0 TO limit DO
      write (fixed(iteritive fibonacci(count), -00));
      IF count MOD 8 = 7 OR count = limit THEN write(newlineELSE write(", "FI
   OD;
 
   FOR count FROM 0 TO limit DO
      write (fixed(recursive fibonacci(count), -00));
      IF count MOD 8 = 7 OR count = limit THEN write(newlineELSE write(", "FI
   OD
 
END
 
FINISH.

Compiling, linking and running the program we get…

algol fibonacci
link finonacci
run fibonacci
0, 1, 1, 2, 3, 5, 8, 13
21, 34, 55, 89, 144, 233, 377, 610
987, 1597, 2584, 4181, 6765, 10946, 17711, 28657
46368, 75025, 121393, 196418, 317811, 514229
0, 1, 1, 2, 3, 5, 8, 13
21, 34, 55, 89, 144, 233, 377, 610
987, 1597, 2584, 4181, 6765, 10946, 17711, 28657
46368, 75025, 121393, 196418, 317811, 514229
0, 1, 1, 2, 3, 5, 8, 13
21, 34, 55, 89, 144, 233, 377, 610
987, 1597, 2584, 4181, 6765, 10946, 17711, 28657
46368, 75025, 121393, 196418, 317811, 514229
$  

This entry was posted in Programming and tagged . Bookmark the permalink.

1 Response to Using Algol 68 to print the Fibonacci series

  1. schillingklaus says:

    Is there a free software algol68 compiler for contemporary linux systems, preferrably as a gcc frontend? How about editing support in emacs or vim?

    mike632t: No idea about syntax highlighting support in emacs or vim but for a compiler you can try apt-get install algol68g

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.