Forum by laureateci.it
[ Home | REGOLE FORUM | Tutti i blog | Profilo | Registrati | CHAT | Discussioni Attive | Discussioni Recenti | Segnalibro | Msg privati | Sondaggi Attivi | Utenti | Download Informatica | Download ICD | Download TPS | Download Magistrale | Download Specialistica | Giochi | Cerca nel web | cerca | faq | RSS ]
Nome Utente:
Password:
Salva Password
Password Dimenticata?

 Tutti i Forum
 INFORMATICA - Primo Anno
 Programmazione
 Esercizio Fibonacci con funzioni

Nota: Devi essere registrato per poter inserire un messaggio.
Per registrarti, clicca qui. La Registrazione è semplice e gratuita!

Larghezza finestra:
Nome Utente:
Password:
Modo:
Formato: GrassettoCorsivoSottolineatoBarrato Aggiungi Spoiler Allinea a  SinistraCentraAllinea a Destra Riga Orizzontale Inserisci linkInserisci EmailInserisci FlashInserisci Immagine Inserisci CodiceInserisci CitazioneInserisci Lista Inserisci Faccine
   
Icona Messaggio:              
             
Messaggio:

  * Il codice HTML è OFF
* Il Codice Forum è ON

Smilies
Approvazione [^] Arrabbiato [:(!] Bacio [:X] Bevuta [:273]
Caldo [8D] Compiaciuto [8)]    
compleanno [:269]
Davvero Felice [:D] Diavoletto [}:)] Disapprovazione [V] Domanda [?]
Felice [:)] Fumata [:29] Goloso [:P] Imbarazzato [:I]
Infelice [:(] Morte improvvisa da [:62]
Morto [xx(] Occhio Nero [B)] Occhiolino [;)] Palla 8 [8]
pc [:205]    
Riproduzione [:76]
Scioccato [:O]      

   Allega file
  Clicca qui per inserire la tua firma nel messaggio.
Clicca qui per sottoscrivere questa Discussione.
    

V I S U A L I Z Z A    D I S C U S S I O N E
Alexander 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
8   U L T I M E    R I S P O S T E    (in alto le più recenti)
Alexander 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.
jwein 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 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;
}











SD83 Inserito il - 18/01/2009 : 22:39:17
fa in modo che il valore di f sia l'output della funzione
Alexander 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?
jwein 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 ).
Alexander 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 ?????;
}
jwein 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! ;)

Forum by laureateci.it © 2002 - 2012 Laureateci Communications Torna all'inizio della Pagina
Il DB ha risposto in 0,06 secondi.

TargatoNA.it | SuperDeejay.Net | Antidoto.org | Brutto.it | Equiweb.it | Snitz Forum 2000