Informatica 2 Liceo Scientifico Scienze Applicate/Funzioni Void e non Void: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica |
Nessun oggetto della modifica |
||
Riga 23:
Pensiamo di scrivere una funzione che clacoli il doppio di un numero <br />
<source lang=c>
float doppio(float n)
{ float z;
Riga 29:
return z;
}
</source >
che poteva essere anche scritta come
<source lang=c>
float doppio(float n)
{
return 2*n;
}
</source >
perche' quello che viene restituito e' il valore dell'espressione (una volta calcolato) dopo l'istruzione return, ricordate inoltre che la funzione termina dopo aver restituito il valore e quindi eventuali istruzioni dopo il return non vengono eseguite, la funziona termina anche se incontra la } di chiusura del codice della funzione.<br />
Ora una volta scritta la funzione doppio possiamo scrivere delle espressioni di calcolo del tipo:
<source lang=c>
z=3*4*sqrt(56)-doppio(5);
</source >
oppure
<source lang=c>
z=3+doppio(sqrt(45));
</source >
in questo caso il risultato della radice sqrt (che e' una funzione non void) viene usato compe parametro attuale della funzione doppio.<br />
I parametri attuali possono essere specifiati attraverso delle costanti , delle singole variabili o delle espressioni di calcolo ( nella realta' le costanti e le singole variabili sono le forme piu' semplici di una espressione di calcolo).Allora possiamo anche scrivere:
<source lang=c>
z= 1+doppio( doppio(3));
</source >
oppure
<source lang=c>
z= doppio( 10 + doppio ( sqrt(4) )) +22;
</source >
ora z=50 cioe' si comportano come le espressioni matematiche che utilizziamo di solito.<br />
Line 59 ⟶ 63:
le funzioni void non possono invece essere inserite in espressioni di calcolo, cioe' se<br />
<source lang=c>
void doppio ( float *n)
{ *n= *n*2;
}
</source >
non posso scrivere
<source lang=c>
float a=4;
z=doppio( &a)+7;
</source >
ma invece
<source lang=c>
float a=4;
doppio( &a);
z=a+7;
</source >
== Funzioni Ricorsive ==
Le funzioni (void e non void) possono essere richiamate non solo da altre funzioni ma anche all'interno della funzione stessa, in questo caso si parla di funzioni ricorsive ( che cioe' richiamano se stesse)<br />
Line 94 ⟶ 100:
se vogliamo scrivere una funzione ricorsiva per il calcolo dell' n! scriviamo<br />
<source lang=c>
long fattoriale (long n)
{ if(n==0)
Line 101 ⟶ 107:
return n*fattoriale(n-1);
}
</source >
se richiamo la funzione con
<source lang=c>
z=fattoriale(3);
</source >
succede che si attiva il codice della funzione fattoriale(3) che si ferma nel calcolo di return 3*fattoriale(2)
si ferma perche' deve ottenere il risultato della chiamata alla funzione fattoriale(2)<br />
Line 137 ⟶ 143:
per passare un vettore di n elementi allora possiamo <br />
dimensione vettore
costante (esempio=10)
variabile k
variabile k
per passare una matrice di nr*nc elementi allora possiamo <br />
dimensione matrice
riga e colonna costanti 4*6 int m[4][6]
riga var colonna costante 6 int
riga e col variabili
una variabile singola puo' essere passata per valore ,per indirizzo o per reference<br />
per valore
per indirizzo
per reference
il passaggio per reference e' un passaggio per indirizzo con sintassi semplificata , scrivendo il nome della variabile passo il suo indirizzo, il parametro attuale davanti al nome ha il simbolo & per ricordare che il passaggio e' per reference, la variabile formale (che nasconde internamente il puntatore) viene usata normalmente e tutto quello che le succede si riflette sulla variabile attuale
|