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
 Nuova Discussione  Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
I seguenti utenti stanno leggendo questo Forum Qui c'è:
Autore Discussione Precedente Discussione Discussione Successiva  

Alexander
Nuovo Utente


Regione: Puglia
Prov.: Bari
Città: Bari


Inserito il - 13/01/2009 : 17:17:17  Mostra Profilo  Visita l'Homepage di Alexander Invia a Alexander un Messaggio Privato  Rispondi Quotando
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  Mostra Profilo  Visita l'Homepage di jwein Invia a jwein un Messaggio Privato  Rispondi Quotando
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! ;)
Torna all'inizio della Pagina

Alexander
Nuovo Utente


Regione: Puglia
Prov.: Bari
Città: Bari


Inserito il - 15/01/2009 : 17:29:09  Mostra Profilo  Visita l'Homepage di Alexander Invia a Alexander un Messaggio Privato  Rispondi Quotando
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
Torna all'inizio della Pagina

jwein
Utente giovane



Inserito il - 15/01/2009 : 19:03:08  Mostra Profilo  Visita l'Homepage di jwein Invia a jwein un Messaggio Privato  Rispondi Quotando
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
Torna all'inizio della Pagina

Alexander
Nuovo Utente


Regione: Puglia
Prov.: Bari
Città: Bari


Inserito il - 18/01/2009 : 22:00:39  Mostra Profilo  Visita l'Homepage di Alexander Invia a Alexander un Messaggio Privato  Rispondi Quotando
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
Torna all'inizio della Pagina

SD83
Utente assiduo


Regione: Puglia
Prov.: Foggia


Inserito il - 18/01/2009 : 22:39:17  Mostra Profilo  Visita l'Homepage di SD83 Invia a SD83 un Messaggio Privato  Rispondi Quotando
fa in modo che il valore di f sia l'output della funzione
Torna all'inizio della Pagina

Alexander
Nuovo Utente


Regione: Puglia
Prov.: Bari
Città: Bari


Inserito il - 23/01/2009 : 20:06:37  Mostra Profilo  Visita l'Homepage di Alexander Invia a Alexander un Messaggio Privato  Rispondi Quotando
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
Torna all'inizio della Pagina

jwein
Utente giovane



Inserito il - 23/01/2009 : 22:38:54  Mostra Profilo  Visita l'Homepage di jwein Invia a jwein un Messaggio Privato  Rispondi Quotando
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!
Torna all'inizio della Pagina

Alexander
Nuovo Utente


Regione: Puglia
Prov.: Bari
Città: Bari


Inserito il - 26/01/2009 : 18:22:39  Mostra Profilo  Visita l'Homepage di Alexander Invia a Alexander un Messaggio Privato  Rispondi Quotando
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
Torna all'inizio della Pagina
  Discussione Precedente Discussione Discussione Successiva  
 Nuova Discussione  Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
Vai a:
Forum by laureateci.it © 2002 - 2012 Laureateci Communications Torna all'inizio della Pagina
Il DB ha risposto in 0,2 secondi.

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