JapanForum.com  


Reply
 
LinkBack Thread Tools
(#311 (permalink))
Old
Shinji's Avatar
Shinji (Offline)
無限はないか。
 
Posts: 80
Join Date: Mar 2008
Location: Udine, Italy
Send a message via MSN to Shinji
Talking 05-14-2008, 07:49 AM

La programmazione si compone di tre categorie fondamentali:
- programmazione funzionale (es. Scheme, Lisp)
- programmazione imperativa (es. C/C++, Java, Pascal, etc..)
- programmazione logica (es. ProLog)

Scheme è un linguaggio funzionale (a differenza di Pascal, C/C++, Java che sono imperativi)... tuttavia è grazie alla funzionalità di Scheme che mi è stato più facile imparare il Java... anche se come sintassi sono completamente diversi... ti faccio vedere solo due esempi semplici semplici:

TEMA: Creare un programma, in linguaggi Scheme e Java, che, dati un indice naturale n, calcoli l'n-esimo numero di Fibonacci.

i numeri di fibonacci sono definiti come fib(n-2) + fib(n-1); esempi:
fib(0) = 0 //convenzione
fib(1) = 1 //convenzione
fib(2) = fib(0) + fib(1) = 0 + 1 = 1
fib(3) = fib(1) + fib(2) = 1 + 1 = 2
fib(4) = fib(2) + fib(3) = 1 + 2 = 3
fib(5) = fib(3) + fib(4) = 2 + 3 = 5
fib(6) = fib(4) + fib(5) = 3 + 5 = 8
...
più in generale: fib(n) = fib(n-2) + fib(n-1)

soluzione del problema
Soluzione SCHEME
Code:
(define (fibn n) (if (< n 0) (error "ERRORE! Inserire un valore intero positivo.") (fibn-alg n '(1 0) 0 1))) (define (fibn-alg n fib fib1 fib2) (let ((fibn (+ fib1 fib2))) (cond ((= n 0) 0) ((= n 1) (car fib)) (else (fibn-alg (- n 1) (cons fibn fib) fib2 fibn)))))
Soluzione JAVA (usando gli array (impropriamente chiamati "vettori"))
Code:
public class Fibn { public static void main (String[] args) { if (args.length<1) System.out.println("ERRORE! Inserire un indice naturale."); else { int[] fibarray = new int[3]; int fib1=0, fib2=1, fibn; int n = Integer.parseInt(args[0]); if (n >= 1) { for (int i=2; i<(n+1); i++) { fibarray[2] = fibn = fib1 + fib2; fibarray[0] = fib1 = fib2; fibarray[1] = fib2 = fibn; } } System.out.println(indice (fibarray)); } } public static int indice(int[] fibarray) { int j = 2; return fibarray[j]; } }
Soluzione JAVA (usando il ritorno intero)
questo te l'ho anche commentato (se ti può servire per capire meglio)
Code:
public class Fibn { // Main class public static void main(String[] args) { // controllo sul valore n passato in input if (args.length<1) System.out.println("ERRORE! Inserire almeno un valore intero positivo."); else { // se esiste un n in input, viene prelevato ed assegnato alla variabile n int n=Integer.parseInt(args[0]); if (n < 0) { System.out.println("ERRORE! Il valore deve essere intero positivo."); } else { // si passa il valore n alla funzione ausiliaria che itera il risultato System.out.println(algorithm(n)); } } } // Algoritmo (funzione ausiliaria) per il calcolo dell'ultimo numero della serie public static long algorithm(int n) { // dichiarazione e inizializzazione delle variabili long fib; long fib1=0, fib2=1, fibn; // algoritmo in un ciclo for con dichiarazione del contatore i if (n >= 1) { for (int i=2; i<(n+1); i++) { fibn = fib1 + fib2; // calcola l'n-esimo numero della serie fib1 = fib2; // assegna a fib1 il penultimo numero della serie fib2 = fibn; // assegna a fib2 l'ultimo numero della serie } return fib2; // restituisce l'n-esimo numero della serie } else { fib = 0; return fib; } } }
se hai dubbi o incertezze chiedi pure (magari via pm... che se no qua ci prendono per pazzi... lol)


Watashi ha Sasuke desu.
21 sai desu.
Udine (Italy) ni sundemasu.

Schemer Programmer

無限はないか。
そして 人間の愚かさはどのくらいですか?
Reply With Quote
(#312 (permalink))
Old
Rinnegato (Offline)
JF Regular
 
Posts: 91
Join Date: May 2008
05-14-2008, 09:40 AM

Anche se non ho capito completamente tutte le istruzioni ho intuito il funzionamento.
Più che altro mi chiedevo che differenze avessero tra loro i linguaggi funzionali, imperativi e di logica... Sai, questa differenza non l'hanno mai spiegata (e a dire il vero fino ad oggi neanche ne sapevo l'esistenza
Reply With Quote
(#313 (permalink))
Old
Shinji's Avatar
Shinji (Offline)
無限はないか。
 
Posts: 80
Join Date: Mar 2008
Location: Udine, Italy
Send a message via MSN to Shinji
05-14-2008, 04:56 PM

immagino che non sapessi l'esistenza di queste tre categorie...

al momento posso dirti solamente (magari più avanti ti aggiungerò altro) che nei linguaggi funzionali, non esistono i cicli... e tutto si fà tramite le ricorsioni... lo Scheme è particolare in quanto è un linguaggio ibrido e c'è anche in Scheme (per chi lo sà usare bene) un ciclo (il do se non erro!)... ma comunque al livello in cui ci siamo fermati, abbiamo usato solo ricorsioni... anche nel codice che ti ho postato, puoi vedere che la funzione fibn-alg viene richiamata in sé stessa per restituire il risultato (car fib) (ovvero fib(n)) quando viene soddisfatto il caso base (= n 1)...

un accorgimento: perché (= n 1) anziché (n==1) [come si farebbe in Java o C ad esempio!)... beh semplice... perché se sai che cos'è una funzione, si arriva facilmente a dimostrare che in linguaggio Scheme le operazioni (come =, +, - ma anche quelle con stringhe etc...) sono funzioni! (in realtà si potrebbe dire che sono funzioni primitive, ovvero già predefinite nel linguaggio!)...

i linguaggi logici non li ho ancora studiati... ma per logica, presumo siano logici! (:lol: :lol: looooooooooooooooooool)

comunque lo Scheme è un linguaggio funzionale (ibrido con paradigmi imperativi) che deriva dal LISP uno dei più grandi ed antichi linguaggi di programmazione (anch'esso funzionale... anche se è funzionale puro, rispetto allo Scheme)... un altro linguaggio funzionale è l'Haskell... ma non ho mai avuto modo di provarlo, anche se conosco un tizio che lo ama quel linguaggio... eheh...


ah... quasi dimenticavo: i vettori (o array) in Scheme esistono... ma la struttura di tipo vettore fa parte del paradigma imperativo... quindi diciamo che quando si programma in Scheme usando i vettori, stiamo usando il paradigma imperativo del linguaggio... per esempio in Haskell o in LISP, la struttura di tipo vettore non esiste!

a differenza dei linguaggi imperativi normali come C/C++ e Java (che sicuramente hai studiato eheh)


Watashi ha Sasuke desu.
21 sai desu.
Udine (Italy) ni sundemasu.

Schemer Programmer

無限はないか。
そして 人間の愚かさはどのくらいですか?
Reply With Quote
(#314 (permalink))
Old
value1984's Avatar
value1984 (Offline)
JF Old Timer
 
Posts: 161
Join Date: Nov 2007
Location: Italy- Padova
Send a message via MSN to value1984 Send a message via Yahoo to value1984
05-14-2008, 06:27 PM

ciao a tuttiiiiiiiiiiiiiiiii!!!!! alla faccia che spiegazioniiiiiiiiiiii!!!!


I'm Ronin
Gackt Fan Club Member
Reply With Quote
(#315 (permalink))
Old
Rinnegato (Offline)
JF Regular
 
Posts: 91
Join Date: May 2008
05-14-2008, 07:02 PM

Hola, value.
Mmmmh, credo di aver capito a grandi linee...
Beh, devo dire che perlomeno è un argomento da approfondire... Ti ringrazio molto per la spiegazione ^^
Reply With Quote
(#316 (permalink))
Old
shinigami13's Avatar
shinigami13 (Offline)
JF Old Timer
 
Posts: 120
Join Date: Dec 2007
Location: Italy
05-14-2008, 07:59 PM

Devo dirlo da qualche parte sul forum e visto che ormai qua sono di casa lo dico qua... Mi hanno preso di nuovo per l'IRLANDA con l'Inpdap!
(L'ho detto anche per riportare il livello del thread a quello dei comuni mortali )


THE SHINIGAMI CLAN!
Member of the Vampire Clan
MEMBER OF THE FINAL FANTASY CLAN
CODENAME:CLOUD

Reply With Quote
(#317 (permalink))
Old
Rinnegato (Offline)
JF Regular
 
Posts: 91
Join Date: May 2008
05-14-2008, 09:27 PM

Quote:
Originally Posted by shinigami13 View Post
Devo dirlo da qualche parte sul forum e visto che ormai qua sono di casa lo dico qua... Mi hanno preso di nuovo per l'IRLANDA con l'Inpdap!
(L'ho detto anche per riportare il livello del thread a quello dei comuni mortali )
Beh, non proprio... Io ad esempio non so cosa sia l'Inpdap
Reply With Quote
(#318 (permalink))
Old
shinigami13's Avatar
shinigami13 (Offline)
JF Old Timer
 
Posts: 120
Join Date: Dec 2007
Location: Italy
05-14-2008, 09:54 PM

Quote:
Originally Posted by Rinnegato View Post
Beh, non proprio... Io ad esempio non so cosa sia l'Inpdap
Preticamente è l'associazione degli impiegati statali, che ogni anno organizza le vacanze-studio per i figli dei dipendenti. E' il terzo anno che mi prendono e l'ultimo, questa volta non me l'aspettavo


THE SHINIGAMI CLAN!
Member of the Vampire Clan
MEMBER OF THE FINAL FANTASY CLAN
CODENAME:CLOUD

Reply With Quote
(#319 (permalink))
Old
gattaccia (Offline)
JF Old Timer
 
Posts: 282
Join Date: Jan 2008
05-15-2008, 11:27 AM

Quote:
Originally Posted by Shinji View Post
La programmazione si compone di tre categorie fondamentali:
- programmazione funzionale (es. Scheme, Lisp)
- programmazione imperativa (es. C/C++, Java, Pascal, etc..)
- programmazione logica (es. ProLog)

Scheme è un linguaggio funzionale (a differenza di Pascal, C/C++, Java che sono imperativi)... tuttavia è grazie alla funzionalità di Scheme che mi è stato più facile imparare il Java... anche se come sintassi sono completamente diversi... ti faccio vedere solo due esempi semplici semplici:

TEMA: Creare un programma, in linguaggi Scheme e Java, che, dati un indice naturale n, calcoli l'n-esimo numero di Fibonacci.

i numeri di fibonacci sono definiti come fib(n-2) + fib(n-1); esempi:
fib(0) = 0 //convenzione
fib(1) = 1 //convenzione
fib(2) = fib(0) + fib(1) = 0 + 1 = 1
fib(3) = fib(1) + fib(2) = 1 + 1 = 2
fib(4) = fib(2) + fib(3) = 1 + 2 = 3
fib(5) = fib(3) + fib(4) = 2 + 3 = 5
fib(6) = fib(4) + fib(5) = 3 + 5 = 8
...
più in generale: fib(n) = fib(n-2) + fib(n-1)

soluzione del problema
Soluzione SCHEME
Code:
(define (fibn n) (if (< n 0) (error "ERRORE! Inserire un valore intero positivo.") (fibn-alg n '(1 0) 0 1))) (define (fibn-alg n fib fib1 fib2) (let ((fibn (+ fib1 fib2))) (cond ((= n 0) 0) ((= n 1) (car fib)) (else (fibn-alg (- n 1) (cons fibn fib) fib2 fibn)))))
Soluzione JAVA (usando gli array (impropriamente chiamati "vettori"))
Code:
public class Fibn { public static void main (String[] args) { if (args.length<1) System.out.println("ERRORE! Inserire un indice naturale."); else { int[] fibarray = new int[3]; int fib1=0, fib2=1, fibn; int n = Integer.parseInt(args[0]); if (n >= 1) { for (int i=2; i<(n+1); i++) { fibarray[2] = fibn = fib1 + fib2; fibarray[0] = fib1 = fib2; fibarray[1] = fib2 = fibn; } } System.out.println(indice (fibarray)); } } public static int indice(int[] fibarray) { int j = 2; return fibarray[j]; } }
Soluzione JAVA (usando il ritorno intero)
questo te l'ho anche commentato (se ti può servire per capire meglio)
Code:
public class Fibn { // Main class public static void main(String[] args) { // controllo sul valore n passato in input if (args.length<1) System.out.println("ERRORE! Inserire almeno un valore intero positivo."); else { // se esiste un n in input, viene prelevato ed assegnato alla variabile n int n=Integer.parseInt(args[0]); if (n < 0) { System.out.println("ERRORE! Il valore deve essere intero positivo."); } else { // si passa il valore n alla funzione ausiliaria che itera il risultato System.out.println(algorithm(n)); } } } // Algoritmo (funzione ausiliaria) per il calcolo dell'ultimo numero della serie public static long algorithm(int n) { // dichiarazione e inizializzazione delle variabili long fib; long fib1=0, fib2=1, fibn; // algoritmo in un ciclo for con dichiarazione del contatore i if (n >= 1) { for (int i=2; i<(n+1); i++) { fibn = fib1 + fib2; // calcola l'n-esimo numero della serie fib1 = fib2; // assegna a fib1 il penultimo numero della serie fib2 = fibn; // assegna a fib2 l'ultimo numero della serie } return fib2; // restituisce l'n-esimo numero della serie } else { fib = 0; return fib; } } }
se hai dubbi o incertezze chiedi pure (magari via pm... che se no qua ci prendono per pazzi... lol)
Bravo! Sasuke! cosi inparò anch'io!
Reply With Quote
(#320 (permalink))
Old
gattaccia (Offline)
JF Old Timer
 
Posts: 282
Join Date: Jan 2008
05-15-2008, 11:39 AM

Quote:
Originally Posted by shinigami13 View Post
Preticamente è l'associazione degli impiegati statali, che ogni anno organizza le vacanze-studio per i figli dei dipendenti. E' il terzo anno che mi prendono e l'ultimo, questa volta non me l'aspettavo
Che bello!!! Quindi vai a Irlanda per la vacanza! forse un'po di studio inglese Quando parti? Ho sentito che in Irlanda ci sono più o meno 40 tipi di colori verde! Che meraviglia no?
aaa cosi ti immamori di Irlandese e non vieni più qui
va bene, va bene
Reply With Quote
Reply


Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On




Copyright 2003-2006 Virtual Japan.
Search Engine Friendly URLs by vBSEO 3.0.0 RC6