Zaloguj

Nazwa użytkownika:   Hasło:   Zaloguj mnie automatycznie przy każdej wizycie  





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 1 ] 
Autor Wiadomość
 Tytuł: Programowanie
PostNapisane: 2010-01-08, 11:01 
Offline
Kapitan UW
Avatar użytkownika

Dołączył(a):
2006-06-06, 21:54

Posty: 1166
Wiek: 34

Lokalizacja: Wrocław
Ciekawi mnie co się stanie gdyby pokazywać ludziom programy... Może coś się nauczą. W tym temacie proszę dyskutować jedynie o kodach, metodach, a nie o programowaniu jak jakiejś czynności/pudełku.

Zadanie
Zaprogramować ciąg Fibonacciego
http://pl.wikipedia.org/wiki/Ci%C4%85g_Fibonacciego



Ruby:
Kod:
def fibonacci(n)
   if n == 0
      return 0
   elsif n == 1
      return 1
   elsif n > 1
      return fibonacci(n-1)+fibonacci(n-2)
   else
      raise ">> Parametr n must be greater or equal then 0"
   end
end

for i in 0..50
   print "Fibbonaci(" , i , ")=", fibonacci(i), "\n"
end


Python:
Kod:
# -*- coding: utf-8 -*-
def fibonacci(n):
   if n == 0:
      return 0
   elif n == 1:
      return 1
   elif n > 1:
      return fibonacci(n-1)+fibonacci(n-2)
   else:
      raise Exception,">> Parametr n must be greater or equal then 0"


for i in range(0,50):
   print "Fibbonaci(" , i , ")=", fibonacci(i)



Bash:
Kod:
#!/bin/bash

# funkcje zwracają:
#    max int w bashu to 256
#    min int ponoć  ~ -15tys.

# nie dotyczy to zmiennych i argumentów funkcji, ale jest problem z globalnością/lokalnością zmiennych

fibonacci()
{
   local n=$1

   if [ $n -eq 0 ]; then
      return 0
   elif [ $n -eq 1 ]; then
      return 1
   elif [ $n -gt 1 ]; then
      fibonacci $[ n - 1 ]
      local reta=$?
      fibonacci $[ n - 2 ]
      local retb=$?
      return $[ reta + retb ]
   else
      echo ">> Parametr n must be greater or equal then 0"
      exit 1
   fi


}






for i in {0..13}
do

   fibonacci $i
   echo -e "Fibbonaci(" $i ")=" $?
done






Prolog:
Kod:
fibonacci(0,0).
fibonacci(1,1).
fibonacci(N,X) :- S is N-1, R is N-2,fibonacci(S,Y),fibonacci(R,Z), X is Y+Z.


fib :- fibi(0,30).

fibi(Z,Z).
fibi(N,Z) :-
   fibonacci(N,X),
   write('Fibonacci('),
   write(N),
   write(')='),
   write(X),
   write('\n'),
   K is N+1,fibi(K,Z)
.




PHP:
Kod:
<?php


function fibonacci($n)
{
   if ($n == 0)
      return 0;
   elseif ($n == 1)
      return 1;
   elseif ($n > 1)
      return fibonacci($n-1)+fibonacci($n-2);
   else
      die(">> Parametr n must be greater or equal then 0");
}


for ($i=0;$i<50;++$i)
{
   echo "Fibbonaci(" , $i , ")=", fibonacci($i), "\n" ;
}

?>


Ocaml:
Kod:

let rec fibonacci n =
   if n == 0
      then 0
   else if n == 1
      then 1
   else if n > 1
      then ( (fibonacci (n-1)) + (fibonacci (n-2)) )
   else
      begin
         raise (Invalid_argument ">> Parametr n must be greater or equal then 0");
      end
;;



let rec fibonaccik = function
   | 0 -> 0
   | 1 -> 1
   | n when n > 1 -> fibonaccik (n-1) +  fibonaccik (n-2)
   | _ -> raise (Invalid_argument ">> Parametr n must be greater or equal then 0");
;;



for i = 0 to 50 do
begin
   let result=fibonacci i in
   if result >= 0
   then
      begin
         print_string "Fibbonaci(";
         print_int i;
         print_string ")=";
         print_int result;
         print_newline ();
      end
end
done;;




Octave/Matlab*:
Kod:
function z0
   mode=1;
   n=30;

   if mode == 0
      for i = 0:n
         printf("Fibonacci(%i)=%i\n" , i , fibonacci(i) )
      endfor
   else
      n=n+1
      result = fibonacci2(n);
      for i = 1:n
      
         printf("Fibonacci(%i)=%i\n" , i-1 , result(i) )
      endfor

endif

endfunction



% wersja rekursywna
function [ret] = fibonacci (n)
   if n == 0
      ret=0;
      return;
   elseif n == 1
      ret=1;
      return;
   elseif n > 1
      ret=(fibonacci(n-1)+fibonacci(n-2));
      return;
   else
      error(">> Parametr n must be greater or equal then 0");
   endif
endfunction


% wersja tablicowa
function [ret] = fibonacci2 (n)

   ret= ones (1, n);
   ret(1)=0;
   for i = 3:n
      ret(i) =  ret(i-1) + ret(i-2);
   endfor

endfunction




JavaScript
Kod:

function fibonacci(n)
{
   if (n == 0)
      return 0;
   else if (n == 1)
      return 1;
   else if (n > 1)
      return fibonacci(n-1)+fibonacci(n-2);
   else
      throw new Error (">> Parametr n must be greater or equal then 0");

}

function fibonacci2(n)
{
   var result=new Array(n);
      
   result[0]=0;
   result[1]=1;
   for (var i=2;i<=n;++i)
      result[i]=result[i-1]+result[i-2];

   return result;

}


var mode=1;
var n=30;

if (mode==0)
{
   try
   {
      for (var i=0;i<=n;++i)
         document.write("Fibonacci(", i , ")=" , fibonacci(i),"<br />" );
   }
   catch(e)
   {
      document.write(e,"<br />");
   }
}
else
{
   var res=fibonacci2(n);
   for (var i=0;i<=n;++i)
      document.write("Fibonacci(", i , ")=" , res[i] ,"<br />" );      
}




Clisp:
Kod:
(defun fibonacci (n) (
cond
   ((= n 0)
      0)
   ((= n 1)
      1)
   ((> n 1)
      (+ (fibonacci (- n 1)) (fibonacci (- n 2))  ))
   (t
         (print ">> Parametr n must be greater or equal then 0")
         (exit 1)
   )
))



(loop
for i from 0 to 50 do
(print '>)
(princ "Fibbonaci(")
(princ i)
(princ ")=")
(princ (fibonacci i))
)
)


Polecam zwrócić uwagę na różnice między Ruby a Pythonem, a raczej praktyczny ich brak. Jeśli gdzieś są dwie definicje funkcji liczącej to zapewne jedna z nich jest robiona metodą tablicową (jest tablica i jej wartości liczone są w pętli*), a druga metodą rekurencyjną (funkcja wywołuje samą siebie)

Implementacje w C, C++, Java, C#.... Nie chciało się mi, bo to już nietwórcze... Jednakże... Wystarczy w istocie skopiować kod PHP i kilka kosmetycznych poprawek, jak np. usunąć dolary, wstawić typ "int" wszędzie gdzie trzeba, echa zamienić na printf lub analogiczne, a "die" na printf i exit().

_________________
Wizytówka: link
Stronka-domowata: http://sites.google.com/site/nicwro/
Stronka-dom: http://titek.victorygames.info


Góra
 Zobacz profil Wyślij e-mail  
 
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 1 ] 


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów

Szukaj:
Skocz do:  
Copyright © 2007 Forum serwisu "TiTek"
DivineBlack by Darthorx
Updated by phpBBservice.nl
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Przyjazne użytkownikom polskie wsparcie phpBB3 - phpBB3.PL
Not able to open ./cache/data_global.php