La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Le funzioni. Cosa fa questo programma? #include using namespace std; int x; float y; int main() { x=rand(); y=sqrt(x); cout<

Presentazioni simili


Presentazione sul tema: "Le funzioni. Cosa fa questo programma? #include using namespace std; int x; float y; int main() { x=rand(); y=sqrt(x); cout<

1 Le funzioni

2 Cosa fa questo programma? #include using namespace std; int x; float y; int main() { x=rand(); y=sqrt(x); cout<

3 Le istruzione rand(), sqrt(x); system(pause); prendono il nome di : Chiamata a sottoprogramma Esse sono sottoprogrammi, messi a disposizione dalla librerie. Ma noi possiamo definire dei nostri sottoprogrammi? La risposta è si Vediamo come:

4 Progettare un sottoprogramma Innanzitutto i sottoprogrammi si dividono in Procedure Funzioni Differenze? Le funzioni sono dei sottoprogrammi che restituiscono al codice chiamante un valore Le procedure sono sottoprogrammi le cui istruzioni sono manipolazione di dati che non restituiscono nessun valore. Il valore indefinito in C++ prende il nome di void system è una procedura Rand sqrt sono funzioni

5 Progettare una procedura Vogliamo disegnare una rettanglo di asterischi. le attribuiremo il nome rettangolo Quando si progetta una procedura si parte dalla sua definizione: La definizione è composta dallintestazione e dal corpo

6 Progettare una procedura Intestazione Lintestazione è composta da ( ); Esempi void linea( ); è la procedura che disegna una linea di asterichi che occupa una riga void rettangolo(int r, int c); è la procedura che disegna un rettangolo di asterischi dove r indica il numero di righe e c il numero di colonne che la compongono la prima è una procedura senza parametri laltra ha i parametri.

7 Progettare una procedura Intestazione I parametri sono quelle variabili che mi permettono di effettuare le stesse operazioni su valori differenti Quando non ho questa esigenza non metto i parametri

8 Progettare una procedura Intestazione Quando necessito dei parametri devo indicare il tipo e il nome Il numero dei parametri è opzionale da 0 a n Seguendo la seguente sintassi (,,.. ) La nostra procedura avrà la seguente intestazione void rettangolo ( int r, int c);

9 Progettare una procedura Il corpo È quella parte del codice racchiuso tra parentesi graffe che descrive le istruzioni che la procedura esegue e che ha come ultima istruzione return ; In questo caso seguito da nessun valore perché le procedure restituiscono il tipo void altrimenti return dovrà essere seguito da un valore dello stesso tipo restituito dalla funzione Ad esempio il main essendo di tipo int alla fine contiene listruzione return 0; Dove 0 è un valore intero

10 Progettare una procedura La definizione della nostra procedura sarà la seguente void rettangolo ( int r, int c){ for (int i=0;i

11 All interno del codice dove va scritta? Subito dopo la fine del main Ma se richiamo il sottoprogramma come siamo abituati a fare nel main e non è un sottoprogramma di libreria il compilatore quando giunge alla riga del richiamo del sottoprogramma dà errore di identificatore non dichiarato come si risolve? Prima del main si inserisce il prototipo

12 Progettare una procedura Il prototipo È la linea di codice che va inserita prima del main uguale alla definizione seguito dal punto e virgola Indica al compilatore le proprietà del sottoprogramma quali: Tipo restituito Nome Eventuali parametri void rettangolo(int r, int c); Vediamo il programma completo che usa la nostra procedura

13 #include using namespace std; void rettangolo(int r, int c); int main() { int x,y; rettangolo (20,50); cout<>x>>y; rettangolo(x,y); system(pause); return EXIT_SUCCESS; } void rettangolo ( int r, int c){ for (int i=0;i

14 Costruiamo la funzione fattoriale La funzione fattoriale, come qualsiasi funzione matematica restituisce un valore per un certo parametro di ingresso Vediamo la sua definizione: int fattoriale(int n){ int f=1; for (int i=2;i<=n;i++) f=f*i; return f; }

15 Costruiamo la funzione primo La funzione ci dice se un certo numero passato come parametro alla funzione è primo o no Vediamo la sua definizione: bool primo (int x){ int i=2; while(x%i!=0) i++; if (x==1||i==x) return true; else return false; }

16 Esercizio Realizzare il programma di consegna per oggi facendo uso di sottoprogrammi

17 Esercizio Scrivere un programma C++ che permette di scegliere una delle seguenti funzionalità 1.Visualizzare i primi n numeri 2.Visualizzare i primi n numeri pari 3.Visualizzare i primi n numeri dispari 4.Visualizzare i primi n numeri primi 5.Visualizzare i primi n numeri della serie di Fibonacci 6.Dato in input n calcolare n! 7.Dato in input n stampare le prime n righe del triangolo di Tartaglia Indicazioni e suggerimenti per lo svolgimento Nelle pagine successive

18 Indicazioni Il programma deve essere realizzato con luso di: Selezione multipla e deve contenere un ciclo continuo fino a quando lutente decide di uscire dal programma Ogni caso di scelta deve essere realizzato con un sottoprogramma Ogni caso deve essere realizzato con il ciclo for

19 Suggerimenti Serie di Fibonacci …… n! è il fattoriale di n esso assume i seguenti valori se n=0 fatt(n)=1 Altrimenti fatt(n(= n*n-1*n-2* *2*1 cioè è il prodotto dei numeri da 1 a n Triangolo di Tartaglia Ogni elemento è dato da j!/(k!*(j-k)! Con J che va da 0 a n dove n è il numero delle righe e k va da 0 a j

20 #include using namespace std; float x,y; void scambia(float a, float b); Int main () { cin>>x; cin>>y; scambia (x,y); cout<

21 Perché le variabili non sono scambiate? Non è un errore di algoritmo E una questione di parametri Alla procedura scambia vengono passati dei parametri per valore Questo vuol dire che quando viene eseguita la procedura essa viene corredata della copia dei valori contenuti nei parametri x,y che sono le effettive variabili su cui viene eseguito lo scambio. Cioè la x e la y del main e quelle della procedura puntano a due celle di memoria differenti pertanto le modifiche apportate alle celle puntate dalle variabili della procedura non sono riportate anche sulle altre e tali modifiche alla chiusura della procedura vengono perse Come si risolve questo problema?

22 Quando si vuole che le variabili passate come parametri devono conservare le modifiche effettuate dalla procedura occorre anteporre al nome del parametro la & In questo modo la variabile viene passata per indirizzo e quindi sia le variabili del main che quella passata come parametro alla procedura o funzione puntano alla stessa cella di memoria Il prototipo di scambia diventa void scambia(float &a, float &b);

23 #include using namespace std; float x,y; void scambia(float &a, float &b); Int main () { cin>>x;; cin>>y; scambia (x,y); cout<

24 void acquisisciraggio(float &r ) {do{ cout<<"inserire il raggio deve essere tale che non superi il valore 100 "; cin>>r; } while (r 100); return; } Questo codice permette di inserire un raggio con controllo sul suo valore Il suo richiamo nel main sarà: int main(){ float r; acquisisciraggio( r); cout<< la circonferenza è <<2*r*3.14; return 0; } Posso realizzare la stessa funzionalità con una funzione?

25 float acquisisciraggio() { float r; { cout<<"inserire il raggio deve essere tale che non superi il valore 100 "; cin>>r; } while (r 100); return r; } In questo caso cambia il modo di richiamare il programma ad esempio : int main(){ float r=acquisisciraggio( ); cout<< la circonferenza è <<2*r*3.14; return 0; }

26 void acquisiscilatitriangolo(int &x, int &y, int &z) { do{ cout<<"inserire un valore positivo cin>>x; } while (x<0 ); do{ cout<<"inserire un valore positivo cin>>y; } while (y<0 ); do{ cout<<"inserire un valore positivo cin>>z; } while (z<0 ); return; } Questa procedura permette lacquisizione delle coordinate con cotrollo. Posso trasformarla in funzione?

27 int acquisiscilatitriangolo(int &x, int &y, int &z) { do{ cout<<"inserire un valore positivo cin>>x; } while (x<0 ); do{ cout<<"inserire un valore positivo cin>>y; } while (y<0 ); do{ cout<<"inserire un valore positivo cin>>z; } while (z<0 ); return 0; } Questa volta devo lasciare i parametri perché i lati sono tre e le funzioni restituiscono un solo valore ma essa è comunque una funzione che però deve essere richiamata come una procedura e non come una funzione.


Scaricare ppt "Le funzioni. Cosa fa questo programma? #include using namespace std; int x; float y; int main() { x=rand(); y=sqrt(x); cout<

Presentazioni simili


Annunci Google