#!/usr/bin/perl -w eval 'exec perl -w -S $0 ${1+"$@"}' if 0; # Fibonacci number generator # by Joshua C Bihun # Last updated 24 March 2000 use strict; use CGI; use CGI::Carp qw(fatalsToBrowser); use Math::BigFloat; my $buffer = ''; my @pairs = (); my $pair = ''; my ($name, $value) = ''; my %form = (); my $negpos = ''; my $phi = ''; my $phip = ''; my $fib = ''; my $results = ''; my $series = ''; read(STDIN, $buffer, $ENV{CONTENT_LENGTH}); @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split (/=/, $pair); $form{$name} = $value; } my $x = $form{number} || 1; if ($x =~ m/^-?\d+$/) { my $count = 0; $x = int($x); for ($count = 1; $count <= $x; $count++) { my $calc_me = $count; if ($calc_me < 0) { $negpos = -1; $calc_me = ($calc_me * -1); } else { $negpos = 1; } $phi = (((1 + sqrt(5))/2)**$calc_me); $phip = (((1 - sqrt(5))/2)**$calc_me); if (($count % 2) == 0) { if ($calc_me == 0) { $fib = 0; } else { $fib = (($phi - abs($phip))/sqrt(5)); } } else { $fib = (($phi + abs($phip))/sqrt(5)); } if (int($fib) != $fib) { if ((int($fib) + 0.5) >= ($fib)) { $fib = int($fib); } else { $fib = (int($fib) + 1); } } $fib = ($fib * $negpos); $calc_me = ($calc_me * $negpos); $series .= ", $fib"; if ($count == $x) { $results = "

Fibonacci number for $x is $fib.

\n"; $series =~ s/^, (.*)$/$1/; $series = "

Fibonacci series for $x is:

\n

$series

\n"; } } } else { $results = "

The value you entered, $x, contains nondigit characters. Could not calculate Fibonacci number. Please try again.

\n"; } print "Content-type:text/html\n\n"; print "\n\n Fibonacci Number Generator CGI by Joshua C Bihun\n\n\n"; print "

Fibonacci Number Generator Results

\n
\n"; print "

Calculate new Fibonacci number

\n

Note: due to the UNIX double-byte limit, calculations for values over 1474 are meaningless.

\n"; print "
\n \n \n
\n"; print "
\n"; print $results; print $series; print "
\n

Fibonacci number generator CGI by Joshua C Bihun

\n

Return to samples index

\n\n"; exit(0);