La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Unità Didattica Funzioni in C++ ITIS LATTANZIO Materia Informatica.

Presentazioni simili


Presentazione sul tema: "Unità Didattica Funzioni in C++ ITIS LATTANZIO Materia Informatica."— Transcript della presentazione:

1 Unità Didattica Funzioni in C++ ITIS LATTANZIO Materia Informatica

2 2 Acquisire ed essere in grado di individuare le parti che compongono un problema, scomponendolo in più sottoproblemi Acquisire ed essere in grado di individuare le parti che compongono un problema, scomponendolo in più sottoproblemi Essere in grado di descrivere dettagliatamente il lavoro svolto da ogni parte in termini di input, elaborazione, output Essere in grado di descrivere dettagliatamente il lavoro svolto da ogni parte in termini di input, elaborazione, output Essere in grado di implementare in C++ un algoritmo che preveda lutilizzo delle funzioni Essere in grado di implementare in C++ un algoritmo che preveda lutilizzo delle funzioni Obiettivi

3 3 Prerequisiti Conoscere il Concetto di Algoritmo e Programma Conoscere ed Interpretare il Formalismo Pseudo-Codice/Diagrammi a Blocchi Conoscere le tre strutture di un Algoritmo e le corrispondenti istruzioni in C++ necessarie per implementarle Conoscenze di Base della Struttura della memoria di un Calcolatore

4 4 Supponiamo di dover far risolvere al computer il seguente problema: Calcolare e visualizzare il quadrato di un numero letto da tastiera La prima domanda da porsi è: La prima domanda da porsi è: Quante parti compongono il problema? Quante parti compongono il problema? Solitamente le parti sono le azioni da svolgere per ottenere la soluzione. Nel nostro esempio: Solitamente le parti sono le azioni da svolgere per ottenere la soluzione. Nel nostro esempio: Leggere il numero Leggere il numero Calcolare il quadrato Calcolare il quadrato Visualizzare il risultato Visualizzare il risultato Scomposizione in sottoproblemi

5 5 Diagramma di struttura Calcolo del quadrato Leggere il numero Calcolare il quadrato Far vedere il risultato Rappresentiamo la scomposizione del problema con un grafico ad albero chiamato diagramma di struttura

6 6 Descrizione dettagliata delle parti che compongono il problema E importante descrivere, per ogni singolo compito,chi lo svolge, da dove vengono presi gli input e a chi viene restituito loutput. Alcuni dei compiti individuati possono essere svolti dal Main altri da sottoprogrammi diversi. LEGGERE IL NUMERO: questo lavoro viene svolto dal Main che legge da tastiera il numero questo lavoro viene svolto dal Main che legge da tastiera il numero CALCOLARE IL QUADRATO: questo lavoro viene svolto dal sottoprogramma Calcola quadrato che riceve come parametro un numero, ne fa il quadrato e lo restituisce al main questo lavoro viene svolto dal sottoprogramma Calcola quadrato che riceve come parametro un numero, ne fa il quadrato e lo restituisce al main FAR VEDERE IL RISULTATO: Questo lavoro viene svolto dal sottoprogramma Visualizza output che riceve come parametro un numero e lo visualizza sullo schermo Questo lavoro viene svolto dal sottoprogramma Visualizza output che riceve come parametro un numero e lo visualizza sullo schermo

7 7 In C i sottoprogrammi si chiamano FUNZIONI Impariamo la sintassi di scrittura di una funzione In un programma C, per ogni funzione, si deve scrivere: IL PROTOTIPO: IL PROTOTIPO: SINTASSI: tipo restituito NOME FUNZIONE (tipo e nome parametri) ; LA CHIAMATA : LA CHIAMATA : SINTASSI: NOME FUNZIONE (nome parametri) LA DEFINIZIONE (o corpo della funzione): LA DEFINIZIONE (o corpo della funzione): SINTASSI: - tipo restituito NOME FUNZIONE (tipo e nome parametri) - Istruzioni della funzione Le funzioni

8 8 float calcolaquadrato (float); int main() {float num, ris; cout<> num; // legge il numero da tastiera ris = calcolaquadrato (num); ris = calcolaquadrato (num); } float calcolaquadrato (float a) {float q; q=a*a; q=a*a; return q; return q;} PROTOTIPO CHIAMATA DEFINIZIONE Funzione calcolare il quadrato valore restituito parametro

9 9 Vediamo cosa accade nella RAM e sullo schermo al momento dellesecuzione delle istruzioni float calcolaquadrato(float); int main() {float num, ris; cout<> num; ris = calcolaquadrato(num); cout<

10 10 Al momento della chiamata alla funzione il valore contenuto in num viene spostato in a. Esistono due aree distinte di memoria, una nel main (num) e una nella funzione (a). Abbiamo attuato il PASSAGGIO DI PARAMETRI PER VALORE. In modo analogo il valore contenuto in q viene spostato con listruzione return in ris. Anche in questo caso esistono due aree diverse di memoria, una per il main (ris) e una per la funzione (q). Cosa abbiamo imparato float calcolaquadrato(float); int main() {float num, ris; cout<> num; ris = calcolaquadrato(num); cout<

11 11 Il parametro è larea di memoria che contiene il valore che la funzione usa per svolgere il suo lavoro. I parametri sono di due tipi: quelli indicati nel prototipo e nella definizione della funzione formali: quelli indicati nel prototipo e nella definizione della funzione quelli indicati nella chiamata della funzione attuali: quelli indicati nella chiamata della funzione float calcolaquadrato (float); int main() { ….. ris = calcolaquadrato (); ris = calcolaquadrato (num); …. } float calcolaquadrato (float a) {….} I parametri parametri formali parametri attuali

12 12 I parametri La funzione calcolare quadrato riceve come parametro un numero di cui calcolare il quadrato. Quali sono i parametri della funzione visualizza output ? Supponiamo di avere una funzione che calcola larea di un triangolo. Quali sono i parametri di questa funzione?

13 13 Il risultato del lavoro svolto da una funzione è un valore che la funzione può restituire o no al chiamante. Nel primo caso parliamo di funzione con valore restituito, nel secondo caso parliamo di mancanza di valore restituito (void). La funzione calcolare quadrato restituisce il quadrato che ha calcolato. La funzione visualizzare risultato non restituisce nulla al chiamante. Il tipo restituito

14 14 Una differenza importante Se la funzione non ha valore restituito cambia listruzione di chiamata. Prendendo sempre lo stesso esempio di CALCOLO DEL QUADRATO, vediamo come si sviluppa la funzione visualizza output float calcolaquadrato (float); void visualizzaoutput (float); int main() {float num, ris; cout<> num; cin >> num; ris = calcolaquadrato (num); ris = calcolaquadrato (num); visualizzaoutput (ris); visualizzaoutput (ris);} float calcolaquadrato(float a) {float q; q=a*a; q=a*a; return q; return q;} void visualizzaoutput (float b) {cout<<\nil risultato è; cout<

15 15 Diagramma a blocchi per le funzioni Le funzioni si rappresentano nel diagramma a blocchi con un rettangolo con doppie righe verticali. Nel rettangolo si scrive listruzione di chiamata della funzione, come indicato di seguito: se la funzione è void: se la funzione ha valore restituito: Il diagramma a blocchi del main diventa quindi: visualizzaoutput(ris ) visualizzaoutput(ris ) ris calcolaquadrato(num) ris calcolaquadrato(num)

16 16 Diagramma a blocchi Nel diagramma a blocchi del main si scrivono i nomi delle variabili che poi saranno utilizzati nel programma sorgente. Per ogni funzione si può quindi sviluppare un proprio diagramma a blocchi. ris calcolaquadrato(num) visualizzaoutput(ris) fine inizio float calcolaquadrato(float); void visualizzaoutput(float); void main() {float num, ris; cout<> num; ris = calcolaquadrato(num); visualizzaoutput(ris); } float calcolaquadrato(float a) {float q; q=a*a; q=a*a; return q; return q;} void visualizzaoutput (float b) { cout<

17 17 Supponiamo ora di dover risolvere il seguente problema: Calcolare e visualizzare la radice quadrata di un numero letto da tastiera controllando prima che sia positivo Provate a disegnare il diagramma di struttura, il diagramma a blocchi e il programma in C++ Soluzione Soluzione Soluzione Esercizi Esercizi Esercizi Passaggio parametri per indirizzo Passaggio parametri per indirizzo Passaggio parametri per indirizzo Passaggio parametri per indirizzo ESERCIZIO 1

18 18 ESERCIZIO 2 Dati due numeri eseguire la moltiplicazione e la divisione e visualizzare i risultati. Soluzione ESERCIZIO 3 Scrivere un programma che tramite luso di un menù permetta di eseguire il quadrato, il cubo e la radice quadrata di un numero fornito in input. ESERCIZIO 4 In un supermercato il prezzo del prodotto è legato alla quantità: se si comperano tre prodotti dello stesso tipo uno è in regalo, se si comperano uno o due prodotti non cè regalo. Calcolare il prezzo da pagare per un prodotto del quale si inseriscono da tastiera il prezzo unitario e la quantità. Soluzione

19 19 SOLUZIONE ESERCIZIO 1:diagramma di struttura Calcolo della radice quadrata Leggere il numero e controllare che sia positivo Leggere il numero e controllare che sia positivo Calcolare la radice quadrata Calcolare la radice quadrata Visualizzare il risultato Visualizzare il risultato Leggere e controllare il numero Calcolare la radice Visualizzare il risultato

20 20 SOLUZIONE ESERCIZIO 1: descrizione dettagliata LEGGERE E CONTROLLARE IL NUMERO: questo lavoro viene svolto dalla funzione Main che legge da tastiera il numero e controlla che il numero sia >0 CALCOLARE LA RADICE: questo lavoro viene svolto dalla funzione Calcola radice che riceve come parametro il numero, ne calcola la radice quadrata e la restituisce al main FAR VEDERE IL RISULTATO: Questo lavoro viene svolto dalla funzione Visualizza output che riceve come parametro il numero e lo visualizza sullo schermo

21 V 21 SOLUZIONE ESERCIZIO 1: diagramma a blocchi e programma leggi num 1 1 ) mentre num < 0 ris calcolaradice(num) visualizzaoutput(ris) inizio fine float calcolaradice(float); void visualizzaoutput (float); int main() {float num, ris; do do{ cout<> num; } while (num<0); ris = calcolaradice(num); ris = calcolaradice(num); visualizzaoutput(ris); visualizzaoutput(ris);} float calcolaradice(float a) {float q; q=sqrt(a); q=sqrt(a); return q; return q;} void visualizzaoutput (float b) {cout<<\nil risultato è; cout<

22 22 SOLUZIONE ESERCIZIO 2: diagramma di struttura Prodotto e divisione di due numeri leggere i numeri calcolare il prodotto calcolare la divisione visualizzare output controllare input

23 23 SOLUZIONE ESERCIZIO 2: descrizione dettagliata LEGGERE I NUMERI: questo lavoro viene svolto dalla funzione Main che legge da tastiera due numeri FARE IL PRODOTTO: questo lavoro viene svolto dalla funzione Calcola prodotto che riceve come parametri i numeri, ne fa il prodotto e lo restituisce al main CONTROLLARE INPUT: questo lavoro viene svolto dalla funzione Main che, prima di chiamare la funzione Calcola divisione, controlla che il secondo numero digitato sia diverso da zero FARE LA DIVISIONE: questo lavoro viene svolto dalla funzione Calcola divisione che riceve come parametri i numeri, ne fa la divisione e la restituisce al main FAR VEDERE IL RISULTATO: Questo lavoro viene svolto dalla funzione Visualizza output che riceve come parametro un numero e lo visualizza sullo schermo

24 24 ATTENZIONE: Si realizza UNA SOLA FUNZIONE Visualizza output che verrà chiamata due volte nel main. Il compito della funzione visualizza output è sempre lo stesso indipendentemente dal significato del numero che deve mostrare sullo schermo. Nel nostro esempio il numero da far vedere è una volta il risultato di una moltiplicazione ed una volta il risultato di una divisione, ma il compito della funzione non cambia.

25 25 SOLUZIONE ESERCIZIO 2 leggi num1,num2 visualizzaoutput(p) inizio fine float calcolaprodotto(float,float); float calcoladivisione(float,float); void visualizzaoutput (float); int main() {float num1, num2,p,d; cout<> num1; cin >> num1; cout<> num2; cin >> num2; p = calcolaprodotto(num1,num2); p = calcolaprodotto(num1,num2); cout << il risultato della moltiplicazione e; cout << il risultato della moltiplicazione e; visualizzaoutput(p); visualizzaoutput(p); if (num2!=0) if (num2!=0) { d=calcoladivisione(num1,num2); { d=calcoladivisione(num1,num2); cout << il risultato della divisione e; cout << il risultato della divisione e; visualizzaoutput(d); visualizzaoutput(d); } else else cout<

26 26 SOLUZIONE ESERCIZIO 4: diagramma di struttura Calcolo prezzo da pagare leggere quantità e prezzo calcolare i pezzi gratis calcolare la spesa visualizzare output calcolare i pezzi da pagare

27 27 SOLUZIONE ESERCIZIO 4: descrizione dettagliata LEGGERE QUANTITA E PREZZO UNITARIO: questo lavoro viene svolto dalla funzione Main che legge da tastiera la quantità acquistata (di un prodotto) ed il prezzo unitario CALCOLARE I PEZZI GRATIS: questo lavoro viene svolto dalla funzione Calcola regalo che riceve come parametro la quantità acquistata, calcola la quantità che viene regalata e la restituisce al main CALCOLA I PEZZI DA PAGARE: questo lavoro viene svolto dalla funzione Main che SOTTRAE dalla quantità acquistata la quantità che viene regalata. CALCOLARE LA SPESA: questo lavoro viene svolto dalla funzione Calcola spesa che riceve come parametri quantità e prezzo unitario,li moltiplica e li restituisce al main FAR VEDERE IL RISULTATO: Questo lavoro viene svolto dalla funzione Visualizza output che riceve come parametro il prezzo da pagare e lo visualizza sullo schermo

28 28 SOLUZIONE ESERCIZIO 4: diagramma a blocchi e programma leggi qta, pr_un qta_da_pagare qta - reg visualizzaoutput(spe) inizio fine int calcolaregalo(int); float calcolaspesa(int,float); void visualizzaoutput (float); int main() {float pr_un, spe; int reg, qta, qta_da_pagare; int reg, qta, qta_da_pagare; cout<> qta; cin >> qta; cout<> pr_un; cin >> pr_un; reg= calcolaregalo(qta); reg= calcolaregalo(qta); qta_da_pagare=qta – reg; qta_da_pagare=qta – reg; spe=calcolaspesa(qta_da_pagare, pr_un); spe=calcolaspesa(qta_da_pagare, pr_un); visualizzaoutput(spe); visualizzaoutput(spe); } int calcolaregalo(int q) {int r; r=q/3; r=q/3; return r; return r;} float calcolaspesa(int q,float p) {float r; r=q * p; r=q * p; return r; return r;} void visualizzaoutput (float b) { cout<

29 29 Il passaggio di parametri per indirizzo (o per riferimento) passa alla funzione lindirizzo di memoria del parametro anziché il valore. Non ci sono quindi variabili distinte, una nel main ed una nella funzione, ma la funzione opera sulla stessa area di memoria del main. In C gli indirizzi di memoria sono contenuti nelle variabili puntatori La sintassi di dichiarazione di un puntatore è: tipo della variabile puntata * NOME PUNTATORE p.e.: int * punt dichiara la variabile di nome punt che contiene lindirizzo di una che contiene lindirizzo di una variabile intera variabile intera Viceversa data la variabile intera a per sapere qual è lindirizzo di memoria di a si usa loperatore &. Passaggio di parametri per indirizzo

30 30 Passaggio di parametri per indirizzo Osserviamo le istruzioni seguenti: int a; int a; a=5; a=5; cout <

31 31 Passaggio di parametri per indirizzo Vediamo il seguente esempio in cui la funzione aggiungi aggiunge 1 ai due parametri ricevuti. Il primo parametro viene passato per valore il secondo per indirizzo. void aggiungi(int, int &); int main() {int a,b; a=0;b=5; aggiungi(a, b); cout<

32 32 /* Scambio del valore di due variabili mediante valore */ #include #include using namespace std; /* x e y sono dichiarate come due reference a variabili di tipo float */ void Scambio(float, float ); void Scambio(float, float ); // prototipo int main() { float var1 = 3.14, var2 = 1.41; float var1 = 3.14, var2 = 1.41; // variabili locali cout << "Prima dello scambio: var1 = " << var1 << " var2 = " << var2 << endl; cout << "Prima dello scambio: var1 = " << var1 << " var2 = " << var2 << endl; // A Scambio sono passati gli indirizzi a var1 e var2 Scambio (var1, var2); Scambio (var1, var2); // chiamata di funzione cout << "Dopo lo scambio....: var1 = " << var1 << " var2 = " << var2 << endl; cout << "Dopo lo scambio....: var1 = " << var1 << " var2 = " << var2 << endl;} // Funzione Scambio che effettua lo scambio void Scambio(float x, float y) { float temp = x; float temp = x; x = y; x = y; y = temp; y = temp;} Passaggio di parametri per valore RAM MAINFUNZIONE var1var2 x y / /

33 33 /* Scambio del valore di due variabili mediante indirizzo */ #include #include using namespace std; /* x e y sono dichiarate come due reference a variabili di tipo float */ void Scambio(float &, float &); void Scambio(float &, float &); // prototipo int main() { float var1 = 3.14, var2 = 1.41; float var1 = 3.14, var2 = 1.41; // variabili locali cout << "Prima dello scambio: var1 = " << var1 << " var2 = " << var2 << endl; cout << "Prima dello scambio: var1 = " << var1 << " var2 = " << var2 << endl; // A Scambio sono passati gli indirizzi a var1 e var2 Scambio (var1, var2); Scambio (var1, var2); // chiamata di funzione cout << "Dopo lo scambio....: var1 = " << var1 << " var2 = " << var2 << endl; cout << "Dopo lo scambio....: var1 = " << var1 << " var2 = " << var2 << endl;} // Funzione Scambio che effettua lo scambio void Scambio(float &x, float &y) { float temp = x; float temp = x; x = y; x = y; y = temp; y = temp;} Passaggio di parametri per indirizzo

34 34 Passaggio di parametri con i vettori Risolviamo il seguente problema: Date le altezze di 30 alunni di una classe, calcolare laltezza media e stabilire quanti sono gli alunni che superano la media Nel caso dei vettori lindirizzo di memoria in cui il vettore è allocato è indicato con il nome del vettore. Non cè bisogno quindi di dichiarare puntatori. Nel caso dei vettori il è lunico utilizzabile Nel caso dei vettori il passaggio di parametri per indirizzo è lunico utilizzabile

35 35 SOLUZIONE ESERCIZIO : diagramma di struttura Altezze degli alunni di una classe Inserire le altezze in un vettore Calcolare la media delle altezze Contare quanti alunni superano la media

36 36 // prototipi delle funzioni void inserisci(int v[],int); float calcolamedia(int v[],int); void contaaltezze(int v[],int,float); int main() { int const max=30; int vett[max]; float media; inserisci(vett,max);media=calcolamedia(vett,max);contaaltezze(vett,max,media);} void inserisci(int v[],int dim) // carico il vettore { for (int i=0;i>v[i]; cin>>v[i]; }} float calcolamedia(int v[],int dim) //calcolo la media {float s,m; for (int i=0;im) if (v[i]>m) conta++; conta++; } cout<<"\ngli alunni che superano la media sono "<


Scaricare ppt "Unità Didattica Funzioni in C++ ITIS LATTANZIO Materia Informatica."

Presentazioni simili


Annunci Google