Autore |
Discussione  |
|
Alexander
Nuovo Utente
Regione: Puglia
Prov.: Bari
Città: Bari
|
Inserito il - 13/01/2009 : 17:17:17
|
Ragazzi mi postete l'esercizio di Fibonacci con le funzioni.....maledette funzioni, ancora non le capisco.
grazie uagnuu
|
Matarrese Vattene da Bari |
|
jwein
Utente giovane

|
Inserito il - 13/01/2009 : 18:25:36
|
Ciao! Dipende, non so se vuoi l'ennesimo numero di fibonacci o la sua sequenza. Comunque l'implementazione delle due cose è qualcosa del genere.
Ennesimo numero:
int ennesimo_numero_fibonacci( int n )
{
int f, f1, f2, i;
if( n == 0 || f == 1 ) f = n;
else
{
f2 = 0;
f1 = 1;
f = f1 + f2;
i = 2;
while( i <= n )
{
f = f1 + f2;
f2 = f1;
f1 = f;
++i;
}
}
return f;
}
Sequenza:
void sequenza_fibonacci_1( int n )
{
int a, b, i;
for( i = 0; i <= n; i += 2 )
{
printf( "%d\n%d\n", a, b );
a += b;
b += a;
}
}
oppure:
void fibonacci_sequence_2( int n )
{
int vecchio = 1, corrente = 0, prossimo = 0;
while( corrente < n )
{
printf( "%d ", corrente );
prossimo = vecchio + corrente;
vecchio = corrente;
corrente = prossimo;
}
printf( "\n" );
}
Se ti riferisci a quello delle slides comunque dovrebbe essere l'ennesimo, quindi il primo pezzo di codice. Ovviamente queste sono le versioni iterative...
Ciao! ;) |
 |
|
Alexander
Nuovo Utente
Regione: Puglia
Prov.: Bari
Città: Bari
|
Inserito il - 15/01/2009 : 17:29:09
|
Volevo la sequenza di fibonacci. Però mi servirebbe l'esercizio fatto per intero (proprio in codice, non in pseudocodice) così riesco a vedere dove sbaglio.In particolare non so impostare i paramentri e non so utilizzare il return finale.
io ho fatto questo che non funziona però 
#include<stdio.h>
int fibonacci (int); int main() { int n,i; int pippo,num; int fib; printf("Inserisci il numero di cui vuoi calcolare la sequenza di Fibonacci\n"); scanf("%d",&n); if (n<2) { fib=n; printf("Fibonacci= %d\n",fib); } else{ pippo=fibonacci(pippo); printf("Fibonacci= %d ",0); printf("%d ",1); printf("%d ",pippo); printf("\n"); } system("pause"); return 0; } int fibonacci (int x) { int pippo; int n; int fib=1; int fib1=1; int fib2=0; int i=2; while (i<=n) { fib=fib1+fib2; fib2=fib1; fib1=fib; i++; } pippo=fib; printf ("\n"); return ?????; }
|
Matarrese Vattene da Bari |
 |
|
jwein
Utente giovane

|
Inserito il - 15/01/2009 : 19:03:08
|
Ciao!
Premetto che la scorsa volta andavo molto di fretta, non vedere dal codice del primo post perchè contiene alcune sviste ;) ( purtroppo non posso modificare il messaggio ).
Comunque il tuo codice contiene diversi problemi, ad esempio dichiari 'x' dentro la funzione ma non usi mai quella variabile, teoricamente dovresti ritornare la variabile 'fib' (perchè è quella che contiene il risultato) e il ciclo while(i<=n) non ha molto senso perchè n non viene mai inizializzata ( dovrebbe essere invece, per come l'hai fatta, qualcosa come while(i<=x).
Comunque ho scritto velocemente un esempio il più semplice possibile, devi fare una cosa cosi:
#include <stdio.h>
#include <stdlib.h>
int ennesimo_di_fibonacci( int n )
{
int f, f1, f2, i;
if( n == 0 || n == 1 ) f = n;
else
{
f2 = 0;
f1 = 1;
f = f1 + f2;
i = 2;
while( i <= n )
{
f = f1 + f2;
f2 = f1;
f1 = f;
++i;
}
}
return f;
}
int main()
{
int i, n, f;
printf( "Numero fino al quale calcolare la sequenza: " );
scanf( "%d", &f );
for( i = 0; i <= f; ++i )
{
n = ennesimo_di_fibonacci(i);
printf( "%d ", n );
}
printf( "\n" );
system( "pause" );
return 0;
}
Questo sfruttando la funzione per l'ennesimo per visualizzare la sequenza ( si potrebbe anche fare una funzione ad hoc, anche perchè questa è un po' 'sprecata' e 'adattata' solo per visualizzare la sequenza ). |
Modificato da - jwein in data 15/01/2009 19:04:37 |
 |
|
Alexander
Nuovo Utente
Regione: Puglia
Prov.: Bari
Città: Bari
|
Inserito il - 18/01/2009 : 22:00:39
|
Ooooooo finalmente 
Grazie mille mi sei stato molto utile.
Potresti spiegarmi come funziona il return???
prendiamo questo pezzo come esempio....
int ennesimo_di_fibonacci( int n ) { int f, f1, f2, i;
if( n == 0 || n == 1 ) f = n;
else { f2 = 0; f1 = 1; f = f1 + f2; i = 2;
while( i <= n ) { f = f1 + f2; f2 = f1; f1 = f; ++i; } }
return f; }
return f a cosa serve? |
Matarrese Vattene da Bari |
 |
|
SD83
Utente assiduo
  
Regione: Puglia
Prov.: Foggia
|
Inserito il - 18/01/2009 : 22:39:17
|
fa in modo che il valore di f sia l'output della funzione |
 |
|
Alexander
Nuovo Utente
Regione: Puglia
Prov.: Bari
Città: Bari
|
Inserito il - 23/01/2009 : 20:06:37
|
Grazie SD83
@jwein
Però non riesco a capire come utilizzare i parametri.
nelle dichiarazioni globali hai scritto:
int ennesimo_di_fibonacci( int n ).........perchè int n???
quando richiami la funzione scrivi:
n = ennesimo_di_fibonacci(i)..............perchè i???
io ho cercato di rifarlo a modo mio ma non so impostare i parametri
#include<stdio.h> #include<stdlib.h> int fibonacci (int); int main()
{ int x; int n; int fib; int fib1,fib2,i; printf("Inserisci il numero di cui vuoi calcolare la sequenza di Fibonacci\n"); scanf("%d",&n); if (n==0 || n==1) { printf("Fibonacci= %d\n",n); } else { x = fibonacci (???????????); printf("%d ",x); } system("pause"); return 0; } int fibonacci (int x) è giusto mettere x oppure dovrei mettere fib???? { fib=1; fib1=1; fib2=0; i=2; printf("Fibonacci= %d ",0); printf("%d ",1); while (i<=n) { fib=fib1+fib2; fib2=fib1; fib1=fib; i++; } return fib; }
|
Matarrese Vattene da Bari |
 |
|
jwein
Utente giovane

|
Inserito il - 23/01/2009 : 22:38:54
|
int ennesimo_di_fibonacci( int n ) -> n è semplicemente un valore che utilizzo all'interno della funzione per il calcolo dell'ennesimo di fibonacci e che ritorno mediante l'istruzione return.
n = ennesimo_di_fibonacci(i) -> questa istruzione richiama la funzione passandole come parametro la variabile i, ciò significa che quando la funzione verrà richiamata il parametro della funzione ( in questo caso int n ) assumerà il valore di i.
Non considerare troppo il nome delle variabili, non c'entra nulla. Considera questo semplice pezzo di codice:
int somma( int a, int b )
{
return a + b;
}
int main()
{
int n = somma( 3, 4 );
return 0;
}
In questo caso la funzione somma viene dichiarata in questo modo: int somma( int a, int b ). Ciò significa che accetta due parametri di tipo a e b.
Nel momento in cui dal main richiami int n = somma( 3, 4 ) la 'a' assumerà il valore di 3 e la 'b' assumerà il valore di 4. Questo perchè il passaggio tiene conto solo della posizione dei parametri ( 'a' era al primo posto, 'b' al secondo posto e guardacaso abbiamo richiamato somma( 3, 4 ) ).
Il nome dei parametri dichiarato come ( int a, int b ) serve solo all'interno della funzione, che poi in questo caso con l'istruzione 'return a + b' ritorna la somma dei due parametri. Se abbiamo richiamato somma(3,4) l'istruzione 'return a + b' corrisponde a 'return 3 + 4' e quindi al valore 7. la 'n' dichiarata nel main assumerà il valore 7.
Sto un po' di fretta, spero di essermi spiegato bene... :)
Nella funzione fibonacci che hai implementato tu devi settare come parametro 'n', non 'x'.
Ciao! |
 |
|
Alexander
Nuovo Utente
Regione: Puglia
Prov.: Bari
Città: Bari
|
Inserito il - 26/01/2009 : 18:22:39
|
Sei stato molto chiaro, dovrei aver capito ...DOVREI
adesso provo a fare qualche esercizio, grazie per la pazienza e l'aiuto, sei stato molto utile, grazie 1000. |
Matarrese Vattene da Bari |
 |
|
|
Discussione  |
|
|
|