La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Linguaggio C++ Un esempio: Calcolo della potenza n-esima di un numero reale Funzioni.

Presentazioni simili


Presentazione sul tema: "Linguaggio C++ Un esempio: Calcolo della potenza n-esima di un numero reale Funzioni."— Transcript della presentazione:

1 Linguaggio C++ Un esempio: Calcolo della potenza n-esima di un numero reale Funzioni

2 Nella fase dimplementazione di un programma, come nella fase di analisi del problema, è consigliabile suddividere il codice in tante parti, ciascuna delle quali risolve un particolare aspetto del problema. Tali parti, in C++, prendono il nome di funzioni

3 La loro struttura è del tutto simile a quella già vista per il main : un insieme di dati e istruzioni, racchiusi tra parentesi graffe cui è associato un nome e che ritorna un valore. Al momento del runtime, il nome della funzione scritto allinterno di un segmento di programma, provoca lesecuzione dellinsieme distruzioni associato

4 Per affrontare il tema delle funzioni si analizza, come pretesto, il problema del calcolo della potenza intera di un numero reale supponendo di coinvolgere nella sua risoluzione più gruppi di persone. Si vedrà come luso delle funzioni semplifichi questo compito, permettendo altresì di scrivere il programma in un formato più leggibile, compatto ed elegante

5 Si desidera scrivere un programma che calcoli la potenza n-esima di un numero reale x: con n intero, positivo o negativo Analisi del problema

6 La prima versione dellalgoritmo risolutivo è ancora molto semplice: Potenza di un numero reale { Acquisisci il valore di x e di n Calcola la potenza Comunica il risultato }

7 Evidenziati gli aspetti fondamentali del problema (top), si procede scomponendoli in fasi più semplici, fino ad arrivare a una forma non più divisibile (down). Se lesempio proposto facesse realmente parte di un grande progetto, alcuni componenti del gruppo di lavoro potrebbero non conoscerne i dettagli. Ognuno di loro, o in piccoli gruppi, si occuperà di una fase cercando di sfruttare al meglio le proprie competenze specifiche

8 Gli algoritmi rappresentati di seguito potrebbero costituire un primo esempio di tale lavoro: Acquisisci il valore di x e n si occupa di acquisire dalla tastiera il valore della base x e dellesponente n e non necessita di ulteriori scomposizioni

9 Lalgoritmo Calcola la potenza si occupa di calcolare il valore della potenza n-esima di x tenendo conto che se n è negativo la potenza è data dal reciproco della potenza (positiva) di x:x:

10 Calcola la potenza { SE (n >= 0) esponente n ALTRIMENTI { esponente –n Calcola la potenza positiva SE (n < 0) potenza 1 / potenza } Sviluppando il blocco Calcola la potenza si ottiene:

11 Come si nota, nella fase di scomposizione di questo algoritmo è stato necessario ricorrere ad unaltro algoritmo, Calcola la potenza positiva, che calcolerà il valore della potenza n-esima (positiva) di x. In linguaggio di programmazione, questa scelta naturale si tradurrà nella chiamata della funzione specializzata in questo compito

12 Calcola la potenza positiva { potenza 1 numeroVolte 1 FINCHÉ (numeroVolte <= esponente) { potenza potenza · x numeroVolte numeroVolte + 1 } } Lalgoritmo Calcola la potenza positiva moltiplica x per sé stessa per esponente – 1 volte, ovvero eleva x a esponente : Se esponente è 0 non viene effettuata nessuna moltiplicazione perché x0 x0 vale 1

13 Lalgoritmo Comunica il risultato ha il compito di comunicare il valore del polinomio. La comunicazione può avvenire presentando il valore sullo schermo, stampandolo, scrivendolo su un file o inviandolo a unaltra periferica duscita. In questo esempio si suppone di visualizzarlo sullo schermo. Non sono quindi necessarie ulteriori scomposizioni

14 Nella fase di trasformazione del programma in C++ questi algoritmi, tranne Acquisisci il valore di x e n, sono stati scritti sottoforma di funzione. Sì è così ottenuto un programma il cui main ha la stessa chiarezza e semplicità di lettura dellalgoritmo di base

15 /* Programma per il calcolo della potenza intera di un numero reale. Versione con uso di funzioni */ #include using namespace std; double x, potenza; // di x elevata a n int n, esponente; // esponente ed esponente assoluto int numeroVolte; // variabile di ciclo char op;// carattere di separazione tra x e n

16 // Funzione che calcola x elevata a esponente void CalcolaPotenzaPositiva () { potenza = 1; // Inizializza la variabile accumulatore for(numeroVolte = 1; numeroVolte <= esponente; numeroVolte++) potenza *= x; // potenza = potenza * x }

17 // Funzione che calcola x elevata a n void CalcolaPotenza () { // in esponente va il valore assoluto di n if (n >= 0) esponente = n; else esponente = -n; CalcolaPotenzaPositiva(); // Chiamata di funzione // se n è negativo calcola il reciproco if (n < 0) potenza = 1 / potenza; }

18 void ComunicaRisultato () { cout << "Il valore della potenza e': << potenza << endl; } // Funzione principale del programma int main () { // Acquisisci il valore della x e di n cout << "Scrivi la potenza da calcolare "nel formato x^n: "; cin >> x >> op >> n; CalcolaPotenza();// Chiamata di funzione ComunicaRisultato();// Chiamata di funzione }

19 Si osservi come la struttura delle funzioni utilizzate dal programma sia simile a quella della funzione principale main. Ognuna di esse, infatti, costituisce un vero e proprio sottoprogramma, che sarà eseguito quando richiesto

20 Definizione e chiamata di una funzione Ogni funzione è costituita da unintestazione, in cui è indicato il nome, e da un corpo dove, tra parentesi graffe, sono racchiuse le istruzioni che dovranno essere eseguite quando la funzione verrà chiamata

21 Tale struttura prende il nome di definizione di funzione NomeFunzione() intestazione { } corpo

22 Per fare in modo che le istruzioni del corpo della funzione siano eseguite è sufficiente scriverne il nome seguito dalle parentesi tonde () e dal carattere terminatore ; : NomeFunzione(); Questa istruzione prende il nome di chiamata di funzione

23 Ogni programma è comunemente costituito da numerose funzioni, ciascuna delle quali ha lo scopo di risolvere un determinato problema. Fra queste, ne esiste una di nome main che stabilisce il punto dal quale avrà inizio lesecuzione del programma. Al main di solito è affidato il compito di controllare la sequenza del programma Esecuzione di un programma

24 Durante lesecuzione di una chiamata di funzione, il controllo del programma passa alla prima istruzione del corpo della funzione. Terminata lesecuzione del sottoprogramma, il controllo è restituito alla funzione chiamante che proseguirà eseguendo listruzione successiva alla chiamata di funzione

25 int main() {... CalcolaPotenza();... } void CalcolaPotenza() { } Funzione chiamante Chiamata di funzione Funzione chiamata

26 1. il raggruppamento di un certo numero di istruzioni sotto un unico nome aumenta la leggibilità del codice sorgente e ne può ridurre sia la dimensione sia il tempo necessario per scriverlo; Vantaggi nelluso delle funzioni I principali vantaggi nelluso delle funzioni si possono sintetizzare nei seguenti tre punti:

27 2. nel caso di problemi di complessità elevata, dove è richiesta la partecipazione di più persone allo sviluppo di un progetto, luso delle funzioni costituisce senzaltro lorganizzazione più produttiva, perché permette unefficiente suddivisione del lavoro; 3. le funzioni rendono concreta lanalisi dei problemi con il procedimento top-down

28 È anche bene ricordare che una funzione può essere richiamata dallinterno di unaltra funzione ( CalcolaPotenzaPositiva() è stata chiamata da CalcolaPotenza() ). Inoltre, per utilizzare una funzione non è necessario conoscerne i dettagli

29 Per esempio, per ottenere il valore di xn xn è sufficiente sapere che occorre chiamare la funzione CalcolaPotenza() inizializzando opportunamente le sue variabili di ingresso x ed n e che, dopo la chiamata, il risultato sarà disponibile nella variabile di ritorno potenza

30 In questo modo nulla vieta a una funzione scritta per un programma di essere impiegata per realizzarne un altro: si possono così organizzare apposite librerie (sottoforma di file) dalle quali poi richiamare le funzioni che occorrono, senza la necessità di doverle riscrivere ogni volta

31 Questo espediente permette altresì di modificare il corpo di una funzione (per esempio per correggerla, renderla più efficiente o mutarne addirittura il comportamento) senza dover intervenire sul programma che la utilizza


Scaricare ppt "Linguaggio C++ Un esempio: Calcolo della potenza n-esima di un numero reale Funzioni."

Presentazioni simili


Annunci Google