unità didattica funzioni in c++ itis lattanzio materia informatica

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

Upload: felicita-cipriani

Post on 01-May-2015

283 views

Category:

Documents


4 download

TRANSCRIPT

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

Unità DidatticaFunzioni in C++Funzioni in C++

ITIS LATTANZIOMateria Informatica Materia Informatica

Page 2: Unità Didattica Funzioni in C++ ITIS LATTANZIO Materia Informatica

22

Acquisire ed essere in grado di individuare le parti che compongono Acquisire ed essere in grado di individuare le parti che compongono un problema, scomponendolo in più sottoproblemi un problema, scomponendolo in più sottoproblemi

Essere in grado di descrivere dettagliatamente il lavoro svolto da ogni Essere in grado di descrivere dettagliatamente il lavoro svolto da ogni parte in termini di input, elaborazione, outputparte in termini di input, elaborazione, output

Essere in grado di implementare in C++ un algoritmo che preveda Essere in grado di implementare in C++ un algoritmo che preveda l’utilizzo delle funzionil’utilizzo delle funzioni

ObiettiviObiettivi

Page 3: Unità Didattica Funzioni in C++ ITIS LATTANZIO Materia Informatica

33

PrerequisitiPrerequisiti

Conoscere il Concetto di Algoritmo e ProgrammaConoscere il Concetto di Algoritmo e Programma

Conoscere ed Interpretare il Formalismo Pseudo-Codice/Diagrammi a Conoscere ed Interpretare il Formalismo Pseudo-Codice/Diagrammi a BlocchiBlocchi

Conoscere le tre strutture di un Algoritmo e le corrispondenti istruzioni Conoscere le tre strutture di un Algoritmo e le corrispondenti istruzioni in C++ necessarie per implementarlein C++ necessarie per implementarle

Conoscenze di Base della Struttura della memoria di un CalcolatoreConoscenze di Base della Struttura della memoria di un Calcolatore

Page 4: Unità Didattica Funzioni in C++ ITIS LATTANZIO Materia Informatica

44

Supponiamo di dover far risolvere al computer il Supponiamo di dover far risolvere al computer il seguenteseguente

problema:problema:

Calcolare e visualizzare il quadratoCalcolare e visualizzare il quadrato

di un numero letto da tastieradi 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 Solitamente “le parti” sono le azioni da svolgere per ottenere la soluzione. Nel nostro esempio:per ottenere la soluzione. Nel nostro esempio:

Leggere il numeroLeggere il numero Calcolare il quadratoCalcolare il quadrato Visualizzare il risultatoVisualizzare il risultato

Scomposizione in Scomposizione in sottoproblemisottoproblemi

Page 5: Unità Didattica Funzioni in C++ ITIS LATTANZIO Materia Informatica

55

Diagramma di strutturaDiagramma di struttura

Calcolo del Calcolo del quadratoquadrato

Leggere il Leggere il numeronumero

Calcolare il Calcolare il quadratoquadrato

Far vedere Far vedere il risultatoil risultato

Rappresentiamo la scomposizione del problema con Rappresentiamo la scomposizione del problema con un grafico ad albero chiamato diagramma di un grafico ad albero chiamato diagramma di strutturastruttura

Page 6: Unità Didattica Funzioni in C++ ITIS LATTANZIO Materia Informatica

66

Descrizione dettagliata delle Descrizione dettagliata delle parti che compongono il parti che compongono il

problemaproblemaE’ importante descrivere, per ogni singoloE’ importante descrivere, per ogni singolocompito,chi lo svolge, da dove vengono presi glicompito,chi lo svolge, da dove vengono presi gliinput e a chi viene restituito l’output.input e a chi viene restituito l’output.Alcuni dei compiti individuati possono essere svolti Alcuni dei compiti individuati possono essere svolti dal Main altri da sottoprogrammi diversi.dal Main altri da sottoprogrammi diversi.

LEGGERE IL NUMEROLEGGERE 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 QUADRATOCALCOLARE IL QUADRATO:: questo lavoro viene svolto dal sottoprogramma “Calcola quadrato” che questo lavoro viene svolto dal sottoprogramma “Calcola quadrato” che

riceve come parametro un numero, ne fa il quadrato e lo restituisce al riceve come parametro un numero, ne fa il quadrato e lo restituisce al mainmain

FAR VEDERE IL RISULTATOFAR VEDERE IL RISULTATO:: Questo lavoro viene svolto dal sottoprogramma “Visualizza output” Questo lavoro viene svolto dal sottoprogramma “Visualizza output”

che riceve come parametro un numero e lo visualizza sullo schermoche riceve come parametro un numero e lo visualizza sullo schermo

Page 7: Unità Didattica Funzioni in C++ ITIS LATTANZIO Materia Informatica

77

In C i sottoprogrammi si chiamano FUNZIONIIn C i sottoprogrammi si chiamano FUNZIONI

Impariamo la Impariamo la sintassi di scritturasintassi di scrittura di una funzione di una funzione

In un programma C, per ogni funzione, si deve scrivere:In un programma C, per ogni funzione, si deve scrivere:

IL PROTOTIPO:IL PROTOTIPO:SINTASSI:SINTASSI:

tipo restituitotipo restituito NOME FUNZIONE NOME FUNZIONE (parametri)(parametri)

LA CHIAMATA :LA CHIAMATA :SINTASSI:SINTASSI:

NOME FUNZIONE NOME FUNZIONE (parametri)(parametri)

LA DEFINIZIONE (o corpo della funzione):LA DEFINIZIONE (o corpo della funzione):SINTASSI:SINTASSI:

- tipo restituito- tipo restituito NOME FUNZIONE NOME FUNZIONE (parametri)(parametri)- Istruzioni della funzione- Istruzioni della funzione

Le funzioniLe funzioni

Page 8: Unità Didattica Funzioni in C++ ITIS LATTANZIO Materia Informatica

88

float calcolaquadrato(float);float calcolaquadrato(float);

int main()int main()

{float num, ris;{float num, ris;

cout<<“digita un numero”; cout<<“digita un numero”;

cin >> num; cin >> num; // legge il numero da tastiera // legge il numero da tastiera

ris = calcolaquadrato(num);ris = calcolaquadrato(num);

}}

float calcolaquadrato(float a)float calcolaquadrato(float a)

{float q;{float q;

q=a*a;q=a*a;

return q;return q;

}}

PROTOTIPO

CHIAMATA

DEFINIZIONE

Funzione “calcolare il Funzione “calcolare il quadrato”quadrato”

valore restituitovalore restituito

parametrparametroo

Page 9: Unità Didattica Funzioni in C++ ITIS LATTANZIO Materia Informatica

99

Vediamo cosa accade nella RAM e sullo schermo al Vediamo cosa accade nella RAM e sullo schermo al momentomomento

dell’esecuzione delle istruzionidell’esecuzione delle istruzioni

float calcolaquadrato(float);float calcolaquadrato(float);int main()int main(){float num, ris;{float num, ris;

cout<<“Digita un numero”;cout<<“Digita un numero”;cin >> num; cin >> num; ris = calcolaquadrato(num);ris = calcolaquadrato(num);cout<<“Fine”;cout<<“Fine”;

}}float calcolaquadrato(float a)float calcolaquadrato(float a){float q;{float q; q=a*a;q=a*a; return q;return q;}}

Funzione “calcolare il Funzione “calcolare il quadrato”quadrato”

Schermo

Digita un numero 3

Fine

RAMRAM

MAINMAIN FUNZIONEFUNZIONE

numnum risris qq aa

33 3399 99

Page 10: Unità Didattica Funzioni in C++ ITIS LATTANZIO Materia Informatica

1010

Al momento della Al momento della chiamata allachiamata alla

funzionefunzione il valore contenuto in num il valore contenuto in num

viene spostato in a.viene spostato in a.

Esistono due aree distinte di Esistono due aree distinte di memoria,memoria,

una nel main (num) e una nellauna nel main (num) e una nella

funzione (a).funzione (a).

Abbiamo attuato il PASSAGGIO DIAbbiamo attuato il PASSAGGIO DI

PARAMETRI PER VALORE.PARAMETRI PER VALORE.

In modo analogo il valore contenuto In modo analogo il valore contenuto inin

q viene spostato q viene spostato con l’istruzionecon l’istruzione

returnreturn in ris. in ris.

Anche in questo caso esistono dueAnche in questo caso esistono due

aree diverse di memoria, una per ilaree diverse di memoria, una per il

main (ris) e una per la funzione (q). main (ris) e una per la funzione (q).

Cosa abbiamo imparatoCosa abbiamo imparato

float calcolaquadrato(float);float calcolaquadrato(float);

int main()int main()

{float num, ris;{float num, ris;

cout<<“Digita un numero”;cout<<“Digita un numero”;

cin >> num; cin >> num;

ris = calcolaquadrato(num);ris = calcolaquadrato(num);

cout<<“Fine”;cout<<“Fine”;

}}

float calcolaquadrato(float a)float calcolaquadrato(float a)

{float q;{float q;

q=a*a;q=a*a;

return q;return q;

}}

Page 11: Unità Didattica Funzioni in C++ ITIS LATTANZIO Materia Informatica

1111

Il parametro è l’area di memoria che contiene il Il parametro è l’area di memoria che contiene il valore che la funzione usa per svolgere il suo lavoro.valore che la funzione usa per svolgere il suo lavoro.I parametri sono di due tipi:I parametri sono di due tipi: formali: formali: quelli indicati nel prototipo e nella quelli indicati nel prototipo e nella definizione della funzionedefinizione della funzione

attuali: attuali: quelli indicati nella chiamata della quelli indicati nella chiamata della funzionefunzione

float calcolaquadrato (float);float calcolaquadrato (float);int main()int main(){{……....ris = calcolaquadrato(num);ris = calcolaquadrato(num);……..}}float calcolaquadrato(float a)float calcolaquadrato(float a){{……..}}

I parametriI parametri

parametri parametri formaliformali

parametri parametri attualiattuali

Page 12: Unità Didattica Funzioni in C++ ITIS LATTANZIO Materia Informatica

1212

I parametriI parametri La funzione “calcolare quadrato” riceve La funzione “calcolare quadrato” riceve

come parametro un numero di cui come parametro un numero di cui calcolare il quadrato.calcolare il quadrato.

Quali sono i parametri della funzione Quali sono i parametri della funzione “visualizza output ?”“visualizza output ?”

Supponiamo di avere una funzione che Supponiamo di avere una funzione che calcola l’area di un triangolo. Quali sono i calcola l’area di un triangolo. Quali sono i parametri di questa funzione?parametri di questa funzione?

Page 13: Unità Didattica Funzioni in C++ ITIS LATTANZIO Materia Informatica

1313

Il risultato del lavoro svolto da una funzione è unIl risultato del lavoro svolto da una funzione è unvalore che la funzione può restituire o no al “chiamante”.valore che la funzione può restituire o no al “chiamante”.

Nel primo caso parliamo di funzione con valoreNel primo caso parliamo di funzione con valorerestituito, nel secondo caso parliamo di mancanza di restituito, nel secondo caso parliamo di mancanza di

valorevalorerestituito (void).restituito (void).

La funzione “calcolare quadrato” restituisce il quadrato La funzione “calcolare quadrato” restituisce il quadrato che che

ha calcolato.ha calcolato.La funzione “visualizzare risultato” non restituisce nulla alLa funzione “visualizzare risultato” non restituisce nulla al““chiamante”.chiamante”.

Il tipo restituitoIl tipo restituito

Page 14: Unità Didattica Funzioni in C++ ITIS LATTANZIO Materia Informatica

1414

Una differenza importanteUna differenza importanteSe la funzione non ha valore restituito cambia l’istruzione di chiamata.Se la funzione non ha valore restituito cambia l’istruzione di chiamata.

Prendendo sempre lo stesso esempio di CALCOLO DEL QUADRATO, vediamo come si Prendendo sempre lo stesso esempio di CALCOLO DEL QUADRATO, vediamo come si sviluppa lasviluppa la

funzione visualizza outputfunzione visualizza output

float calcolaquadrato (float);float calcolaquadrato (float);

void visualizzaoutput (float);void visualizzaoutput (float);

int main()int main()

{float num, ris;{float num, ris;

cout<<“Digita un numero”;cout<<“Digita un numero”;

cin >> num; cin >> num;

ris = calcolaquadrato(num);ris = calcolaquadrato(num);

visualizzaoutput(ris);visualizzaoutput(ris);

}}

float calcolaquadrato(float a)float calcolaquadrato(float a)

{float q;{float q;

q=a*a;q=a*a;

return q;return q;

}}

void visualizzaoutput (float b)void visualizzaoutput (float b)

{cout<<“\nil risultato è”;{cout<<“\nil risultato è”;

cout<<b;cout<<b;

}}

PROTOTIPOPROTOTIPO

CHIAMATACHIAMATA

DEFINIZIONEDEFINIZIONE

Page 15: Unità Didattica Funzioni in C++ ITIS LATTANZIO Materia Informatica

1515

Diagramma a blocchi per le funzioniDiagramma a blocchi per le funzioni

Le funzioni si rappresentano nel diagramma a blocchi con un Le funzioni si rappresentano nel diagramma a blocchi con un rettangolorettangolo

con doppie righe verticali. Nel rettangolo si scrive l’istruzione con doppie righe verticali. Nel rettangolo si scrive l’istruzione di di

““chiamata della funzione”, come indicato di seguito:chiamata della funzione”, come indicato di seguito:

se la funzione è void:se la funzione è void:

se la funzione ha valore restituito:se la funzione ha valore restituito:

Il diagramma a blocchi del main diventa quindi:Il diagramma a blocchi del main diventa quindi:

visualizzaoutput(risvisualizzaoutput(ris))

risriscalcolaquadrato(num)calcolaquadrato(num)

Page 16: Unità Didattica Funzioni in C++ ITIS LATTANZIO Materia Informatica

1616

Diagramma a blocchiDiagramma a blocchi

Nel diagramma a blocchi del Nel diagramma a blocchi del main si scrivono i nomi delle main si scrivono i nomi delle variabili che poi saranno variabili che poi saranno utilizzati nel programma utilizzati nel programma sorgente. Per ogni funzione si sorgente. Per ogni funzione si può quindi sviluppare un può quindi sviluppare un proprio diagramma a blocchi. proprio diagramma a blocchi.

leggi numleggi num

risriscalcolaquadratocalcolaquadrato(num)(num)

visualizzaoutput(rivisualizzaoutput(ris)s)

inizioinizio

finefine

float calcolaquadrato(float);float calcolaquadrato(float);void visualizzaoutput(float);void visualizzaoutput(float);void main()void main(){{float num, ris;float num, ris;

cout<<“Digita un numero”;cout<<“Digita un numero”;cin >> num; cin >> num; ris = calcolaquadrato(num);ris = calcolaquadrato(num);visualizzaoutput(ris);visualizzaoutput(ris);

}}float calcolaquadrato(float a)float calcolaquadrato(float a){float q;{float q; q=a*a;q=a*a; return q;return q;}}void visualizzaoutput (float b)void visualizzaoutput (float b){ { cout<<“il quadrato del numero cout<<“il quadrato del numero

è”<<b;è”<<b;}}

Page 17: Unità Didattica Funzioni in C++ ITIS LATTANZIO Materia Informatica

1717

Supponiamo ora di dover risolvere il seguente problema:Supponiamo ora di dover risolvere il seguente problema:

Calcolare e visualizzare la radice quadrata di un numero letto da Calcolare e visualizzare la radice quadrata di un numero letto da tastieratastiera

controllando prima che sia positivocontrollando prima che sia positivo

Provate a disegnare il diagramma di struttura, il diagramma a blocchi Provate a disegnare il diagramma di struttura, il diagramma a blocchi e ile il

programma in C++programma in C++

SoluzioneSoluzione EserciziEsercizi Passaggio parametri per indirizzoPassaggio parametri per indirizzo

ESERCIZIO 1ESERCIZIO 1

Page 18: Unità Didattica Funzioni in C++ ITIS LATTANZIO Materia Informatica

1818

ESERCIZIO 2ESERCIZIO 2Dati due numeri eseguire la moltiplicazione e la divisione eDati due numeri eseguire la moltiplicazione e la divisione evisualizzare i risultativisualizzare i risultati..

SoluzioneSoluzione

ESERCIZIO 3ESERCIZIO 3Scrivere un programma che tramite l’uso di un menù permetta di Scrivere un programma che tramite l’uso di un menù permetta di eseguire il quadrato, il cubo e la radice quadrata di un numero eseguire il quadrato, il cubo e la radice quadrata di un numero

fornito infornito ininput.input.

ESERCIZIO 4ESERCIZIO 4In un supermercato il prezzo del prodotto è legato alla quantità: In un supermercato il prezzo del prodotto è legato alla quantità:

se sise sicomperano tre prodotti dello stesso tipo uno è in regalo, se sicomperano tre prodotti dello stesso tipo uno è in regalo, se sicomperano uno o due prodotti non c’è regalo. Calcolare il prezzo comperano uno o due prodotti non c’è regalo. Calcolare il prezzo

dadapagare per un prodotto del quale si inseriscono da tastiera il pagare per un prodotto del quale si inseriscono da tastiera il

prezzoprezzounitario e la quantità.unitario e la quantità.

SoluzioneSoluzione

Page 19: Unità Didattica Funzioni in C++ ITIS LATTANZIO Materia Informatica

1919

SOLUZIONE ESERCIZIO 1:diagramma di SOLUZIONE ESERCIZIO 1:diagramma di strutturastruttura

Calcolo della radice Calcolo della radice quadrataquadrata

• Leggere il numero e controllare che sia Leggere il numero e controllare che sia positivopositivo• Calcolare la radice quadrataCalcolare la radice quadrata• Visualizzare il risultatoVisualizzare il risultato

Leggere e Leggere e controllare ilcontrollare il numeronumero

Calcolare Calcolare la radicela radice

VisualizzarVisualizzare il e il risultatorisultato

Page 20: Unità Didattica Funzioni in C++ ITIS LATTANZIO Materia Informatica

2020

SOLUZIONE ESERCIZIO 1: descrizione dettagliataSOLUZIONE ESERCIZIO 1: descrizione dettagliata

LEGGERE E CONTROLLARE IL NUMEROLEGGERE E CONTROLLARE IL NUMERO::questo lavoro viene svolto dalla funzione “Main” che legge da questo lavoro viene svolto dalla funzione “Main” che legge da

tastiera il numero e controlla che il numero sia >0tastiera il numero e controlla che il numero sia >0

CALCOLARE LA RADICECALCOLARE LA RADICE::questo lavoro viene svolto dalla funzione “Calcola radice” che questo lavoro viene svolto dalla funzione “Calcola radice” che riceve come parametro il numero, ne calcola la radice quadrata e la riceve come parametro il numero, ne calcola la radice quadrata e la restituisce al mainrestituisce al main

FAR VEDERE IL RISULTATOFAR VEDERE IL RISULTATO::Questo lavoro viene svolto dalla funzione “Visualizza output” che Questo lavoro viene svolto dalla funzione “Visualizza output” che riceve come parametro il numero e lo visualizza sullo schermoriceve come parametro il numero e lo visualizza sullo schermo

Page 21: Unità Didattica Funzioni in C++ ITIS LATTANZIO Materia Informatica

2121

SOLUZIONE ESERCIZIO 1: diagramma a SOLUZIONE ESERCIZIO 1: diagramma a blocchi e programmablocchi e programma

leggi numleggi num

11 11) mentre num < 0) mentre num < 0

risriscalcolaradice(num)calcolaradice(num)

visualizzaoutput(rivisualizzaoutput(ris)s)

inizioinizio

finefine

float calcolaradice(float);float calcolaradice(float);void visualizzaoutput (float);void visualizzaoutput (float);int main()int main(){float num, ris;{float num, ris; dodo

{{cout<<“digita un cout<<“digita un numero”;numero”;cin >> num; cin >> num; } while (num<0);} while (num<0);

ris = calcolaradice(num);ris = calcolaradice(num); visualizzaoutput(ris);visualizzaoutput(ris);}}float calcolaradice(float a)float calcolaradice(float a){float q;{float q; q=sqrt(a);q=sqrt(a); return q;return q;}}void visualizzaoutput (float void visualizzaoutput (float

b)b){cout<<“\nil risultato è”;{cout<<“\nil risultato è”; cout<<b;cout<<b;} }

Torna indietro

VV

FF

Page 22: Unità Didattica Funzioni in C++ ITIS LATTANZIO Materia Informatica

2222

SOLUZIONE ESERCIZIO 2: diagramma di SOLUZIONE ESERCIZIO 2: diagramma di strutturastruttura

Prodotto e divisione Prodotto e divisione di due numeridi due numeri

leggere leggere i i numerinumeri

calcolare calcolare il il prodottoprodotto

calcolare calcolare la la divisionedivisione

visualizzarvisualizzare outpute output

controllarcontrollare inpute input

Page 23: Unità Didattica Funzioni in C++ ITIS LATTANZIO Materia Informatica

2323

SOLUZIONE ESERCIZIO 2: descrizione dettagliataSOLUZIONE ESERCIZIO 2: descrizione dettagliata

LEGGERE I NUMERI:LEGGERE I NUMERI:questo lavoro viene svolto dalla funzione “Main” che legge da questo lavoro viene svolto dalla funzione “Main” che legge da tastiera due numeritastiera due numeriFARE IL PRODOTTOFARE IL PRODOTTO::questo lavoro viene svolto dalla funzione “Calcola prodotto” che questo lavoro viene svolto dalla funzione “Calcola prodotto” che riceve come parametri i numeri, ne fa il prodotto e lo restituisce riceve come parametri i numeri, ne fa il prodotto e lo restituisce al mainal mainCONTROLLARE INPUT:CONTROLLARE INPUT:questo lavoro viene svolto dalla funzione “Main” che, prima di questo lavoro viene svolto dalla funzione “Main” che, prima di chiamare la funzione “Calcola divisione”, controlla che il secondo chiamare la funzione “Calcola divisione”, controlla che il secondo numero digitato sia diverso da zeronumero digitato sia diverso da zeroFARE LA DIVISIONE:FARE LA DIVISIONE:questo lavoro viene svolto dalla funzione “Calcola divisione” che questo lavoro viene svolto dalla funzione “Calcola divisione” che riceve come parametri i numeri, ne fa la divisione e la restituisce riceve come parametri i numeri, ne fa la divisione e la restituisce al mainal mainFAR VEDERE IL RISULTATOFAR VEDERE IL RISULTATO::Questo lavoro viene svolto dalla funzione “Visualizza output” che Questo lavoro viene svolto dalla funzione “Visualizza output” che riceve come parametro un numero e lo visualizza sullo schermoriceve come parametro un numero e lo visualizza sullo schermo

Page 24: Unità Didattica Funzioni in C++ ITIS LATTANZIO Materia Informatica

2424

ATTENZIONE:ATTENZIONE:

Si realizzaSi realizza UNA SOLA FUNZIONEUNA SOLA FUNZIONE “Visualizza “Visualizza output” che verrà chiamata due volte nel main.output” che verrà chiamata due volte nel main.

Il compito della funzione “visualizza output” è Il compito della funzione “visualizza output” è sempre lo stesso indipendentemente dal sempre lo stesso indipendentemente dal significato del numero che deve mostrare sullo significato del numero che deve mostrare sullo schermo. schermo.

Nel nostro esempio il numero da far vedere è Nel nostro esempio il numero da far vedere è una volta il risultato di una moltiplicazione ed una volta il risultato di una moltiplicazione ed una volta il risultato di una divisione, ma il una volta il risultato di una divisione, ma il compito della funzione non cambia.compito della funzione non cambia.

Page 25: Unità Didattica Funzioni in C++ ITIS LATTANZIO Materia Informatica

2525

SOLUZIONE ESERCIZIO 2SOLUZIONE ESERCIZIO 2

leggi num1,num2leggi num1,num2

visualizzaoutput(p)visualizzaoutput(p)

inizioinizio

finefine

float calcolaprodotto(float,float);float calcolaprodotto(float,float);float calcoladivisione(float,float);float calcoladivisione(float,float);void visualizzaoutput (float);void visualizzaoutput (float);int main()int main(){float num1, num2,p,d;{float num1, num2,p,d; cout<<“digita il primo numero”;cout<<“digita il primo numero”; cin >> num1; cin >> num1; cout<<“digita il secondonumero”;cout<<“digita il secondonumero”; cin >> num2; cin >> num2; p = calcolaprodotto(num1,num2);p = calcolaprodotto(num1,num2); cout << “il risultato della cout << “il risultato della

moltiplicazione e’”;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 cout << “il risultato della divisione

e”;e”; visualizzaoutput(d);visualizzaoutput(d); }} elseelse cout<<“divisione non possibile”; cout<<“divisione non possibile”; }}float calcolaprodotto(float n1,float n2)float calcolaprodotto(float n1,float n2){float r;{float r; r=n1*n2;r=n1*n2; return r;return r;}}float calcoladivisione(float n1,float n2)float calcoladivisione(float n1,float n2){float r;{float r; r=n1/n2;r=n1/n2; return r;return r;}}void visualizzaoutput (float b)void visualizzaoutput (float b){ cout<<b;{ cout<<b;} }

ppcalcolaprodotto(num1,nucalcolaprodotto(num1,num2)m2)

ddcalcoladivisioneo(nucalcoladivisioneo(num1,num2m1,num2))

visualizzaoutput(d)visualizzaoutput(d)

11

Scrivi Scrivi “divisione“divisione

non possibile”non possibile”

1) Se num2≠01) Se num2≠0

Torna indietro

VVFF

Page 26: Unità Didattica Funzioni in C++ ITIS LATTANZIO Materia Informatica

2626

SOLUZIONE ESERCIZIO 4: diagramma di SOLUZIONE ESERCIZIO 4: diagramma di strutturastruttura

Calcolo prezzo Calcolo prezzo da pagareda pagare

leggere leggere quantitquantità e à e prezzoprezzo

calcolare calcolare i pezzi i pezzi gratisgratis

calcolare calcolare la spesala spesa

visualizzarvisualizzare outpute output

calcolare calcolare i pezzi da i pezzi da pagarepagare

Page 27: Unità Didattica Funzioni in C++ ITIS LATTANZIO Materia Informatica

2727

SOLUZIONE ESERCIZIO 4: descrizione dettagliataSOLUZIONE ESERCIZIO 4: descrizione dettagliata

LEGGERE QUANTITA’ E PREZZO UNITARIO:LEGGERE QUANTITA’ E PREZZO UNITARIO:questo lavoro viene svolto dalla funzione “Main” che legge da questo lavoro viene svolto dalla funzione “Main” che legge da tastiera la quantità acquistata (di un prodotto) ed il prezzo tastiera la quantità acquistata (di un prodotto) ed il prezzo unitariounitarioCALCOLARE I PEZZI GRATISCALCOLARE I PEZZI GRATIS::questo lavoro viene svolto dalla funzione “Calcola regalo” che questo lavoro viene svolto dalla funzione “Calcola regalo” che riceve come parametro la quantità acquistata, calcola la quantità riceve come parametro la quantità acquistata, calcola la quantità che viene regalata e la restituisce al mainche viene regalata e la restituisce al mainCALCOLA I PEZZI DA PAGARE:CALCOLA I PEZZI DA PAGARE:questo lavoro viene svolto dalla funzione “Main” che SOTTRAE questo lavoro viene svolto dalla funzione “Main” che SOTTRAE dalla quantità acquistata la quantità che viene regalata.dalla quantità acquistata la quantità che viene regalata.CALCOLARE LA SPESA:CALCOLARE LA SPESA:questo lavoro viene svolto dalla funzione “Calcola spesa” che questo lavoro viene svolto dalla funzione “Calcola spesa” che riceve come parametri quantità e prezzo unitario,li moltiplica e li riceve come parametri quantità e prezzo unitario,li moltiplica e li restituisce al mainrestituisce al mainFAR VEDERE IL RISULTATOFAR VEDERE IL RISULTATO::Questo lavoro viene svolto dalla funzione “Visualizza output” che Questo lavoro viene svolto dalla funzione “Visualizza output” che riceve come parametro il prezzo da pagare e lo visualizza sullo riceve come parametro il prezzo da pagare e lo visualizza sullo schermoschermo

Page 28: Unità Didattica Funzioni in C++ ITIS LATTANZIO Materia Informatica

2828

SOLUZIONE ESERCIZIO 4: diagramma a SOLUZIONE ESERCIZIO 4: diagramma a blocchi e programmablocchi e programma

leggi qta, leggi qta, pr_unpr_un

qta_da_pagareqta_da_pagareqta - qta - regreg

visualizzaoutput(spe)visualizzaoutput(spe)

inizioinizio

finefine

int calcolaregalo(int);int calcolaregalo(int);float calcolaspesa(int,float);float calcolaspesa(int,float);void visualizzaoutput (float);void visualizzaoutput (float);int main()int main(){float pr_un, spe;{float pr_un, spe; int reg, qta, qta_da_pagare;int reg, qta, qta_da_pagare; cout<<“digita la qta da acquistare”;cout<<“digita la qta da acquistare”; cin >> qta; cin >> qta; cout<<“digita il prezzo unitario”;cout<<“digita il prezzo unitario”; cin >> 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, spe=calcolaspesa(qta_da_pagare,

pr_un);pr_un); visualizzaoutput(spe);visualizzaoutput(spe); }}int calcolaregalo(int q)int calcolaregalo(int q){int r;{int r; r=q/3;r=q/3; return r;return r;}}float calcolaspesa(int q,float p)float calcolaspesa(int q,float p){float r;{float r; r=q * p;r=q * p; return r;return r;}}void visualizzaoutput (float b)void visualizzaoutput (float b){ cout<<“il prezzo da pagare e’ “<< { cout<<“il prezzo da pagare e’ “<<

b;b;} }

regregcalcolaregalo(qta)calcolaregalo(qta)

spespecalcolaspesa(qta_dcalcolaspesa(qta_da_pagare, pr_un)a_pagare, pr_un)

Torna indietro

Page 29: Unità Didattica Funzioni in C++ ITIS LATTANZIO Materia Informatica

2929

Il passaggio di parametri per indirizzo (o per riferimento) passa alla Il passaggio di parametri per indirizzo (o per riferimento) passa alla

funzione l’indirizzo di memoria del parametro anziché il valore.funzione l’indirizzo di memoria del parametro anziché il valore.

Non ci sono quindi variabili distinte, una nel main ed una nella Non ci sono quindi variabili distinte, una nel main ed una nella funzione,funzione,

ma la funzione opera sulla stessa area di memoria del main.ma la funzione opera sulla stessa area di memoria del main.

In C gli indirizzi di memoria sono contenuti nelle variabili puntatoriIn C gli indirizzi di memoria sono contenuti nelle variabili puntatori

La sintassi di dichiarazione di un puntatore è: La sintassi di dichiarazione di un puntatore è:

tipo della variabile puntatatipo della variabile puntata * NOME PUNTATORE * NOME PUNTATORE

p.e.: int * punt p.e.: int * punt dichiara la variabile di nome punt che dichiara la variabile di nome punt che contiene contiene l’indirizzo di una variabile interal’indirizzo di una variabile intera

Viceversa data la variabile intera a per sapere quale è l’indirizzo di Viceversa data la variabile intera a per sapere quale è l’indirizzo di memoriamemoria

di a si usa l’operatore &.di a si usa l’operatore &.

Passaggio di parametri per indirizzoPassaggio di parametri per indirizzo

Page 30: Unità Didattica Funzioni in C++ ITIS LATTANZIO Materia Informatica

3030

Passaggio di parametri per indirizzoPassaggio di parametri per indirizzo

Osserviamo le istruzioni seguenti:Osserviamo le istruzioni seguenti:

int a;int a;

a=5;a=5;

cout <<“a vale”<<a;cout <<“a vale”<<a;

cout <<“indirizzo di a cout <<“indirizzo di a vale”<<&a;vale”<<&a;

Sullo schermo viene prodotto:Sullo schermo viene prodotto:

a vale 5a vale 5 indirizzo di a vale indirizzo di a vale indirizzo della var. indirizzo della var.

aa

L’operatore * si usa anche per sapere quale è il valore di una variabile L’operatore * si usa anche per sapere quale è il valore di una variabile di cuidi cui

conosciamo l’indirizzo.conosciamo l’indirizzo.

Osserviamo le istruzioni Osserviamo le istruzioni seguenti:seguenti:

int * punt; // dichiarazione int * punt; // dichiarazione del del // puntatore // puntatore puntpunt

a=5;a=5;

punt = &apunt = &a

cout <<“a vale”<<* punt;cout <<“a vale”<<* punt;

Sullo schermo viene prodotto:Sullo schermo viene prodotto:

a vale 5a vale 5

ottenuto con l’istruzione *punt ottenuto con l’istruzione *punt

Page 31: Unità Didattica Funzioni in C++ ITIS LATTANZIO Materia Informatica

3131

Passaggio di parametri per indirizzoPassaggio di parametri per indirizzoVediamo il seguente esempio in cui laVediamo il seguente esempio in cui la

funzione “aggiungi” aggiunge 1 ai duefunzione “aggiungi” aggiunge 1 ai due

parametri ricevuti. Il primo parametro vieneparametri ricevuti. Il primo parametro viene

passato per valore il secondo per indirizzo.passato per valore il secondo per indirizzo.

void aggiungi(int, int void aggiungi(int, int &&););

int main()int main()

{{ int a,b;int a,b;

a=0;a=0;

b=0; b=0;

aggiungi(a, b);aggiungi(a, b);

cout<<“nel main a vale”<<a;cout<<“nel main a vale”<<a;

cout<<“nel main b vale”<<b;cout<<“nel main b vale”<<b;

}}

void aggiungi(int x, int &y)void aggiungi(int x, int &y)

{x++;{x++;

y++;y++;

cout<<“nella funzione x vale”<<x;cout<<“nella funzione x vale”<<x;

}}

RAMRAM

MAINMAIN FUNZIONEFUNZIONE

aa bb xx

Schermo

00 00 00

1111

nella funzione x vale 1nella funzione x vale 1

nel main a vale 0nel main a vale 0

nel main b vale 1nel main b vale 1

// //

Page 32: Unità Didattica Funzioni in C++ ITIS LATTANZIO Materia Informatica

3232

Passaggio di parametri con i vettoriPassaggio di parametri con i vettori

Risolviamo il seguente problema:Risolviamo il seguente problema:

Date le altezze di 30 alunni di una classe, calcolare l’altezza Date le altezze di 30 alunni di una classe, calcolare l’altezza media emedia e

stabilire quanti sono gli alunni che superano la mediastabilire quanti sono gli alunni che superano la media

Nel caso dei vettori l’indirizzo di memoria in cui il vettore è allocato è Nel caso dei vettori l’indirizzo di memoria in cui il vettore è allocato è indicatoindicato

con il nome del vettore. Non c’è bisogno quindi di dichiarare con il nome del vettore. Non c’è bisogno quindi di dichiarare puntatori.puntatori.

Nel caso dei vettori il passaggio di parametri per indirizzo è l’unico Nel caso dei vettori il passaggio di parametri per indirizzo è l’unico utilizzabileutilizzabile

Page 33: Unità Didattica Funzioni in C++ ITIS LATTANZIO Materia Informatica

3333

SOLUZIONE ESERCIZIO: diagramma di SOLUZIONE ESERCIZIO: diagramma di strutturastruttura

Altezze degli alunniAltezze degli alunnidi una classedi una classe

Inserire le Inserire le altezze in un altezze in un vettorevettore

Calcolare Calcolare la media la media delle delle altezzealtezze

Contare Contare quanti quanti alunni alunni superano la superano la mediamedia

Page 34: Unità Didattica Funzioni in C++ ITIS LATTANZIO Materia Informatica

3434

// prototipi delle funzioni// prototipi delle funzioni

void inserisci(int v[]);void inserisci(int v[]);

float calcolamedia(int v[]);float calcolamedia(int v[]);

void contaaltezze(int v[],float);void contaaltezze(int v[],float);

#define max 30#define max 30

int main()int main()

{ {

int vett[max];int vett[max];

float media;float media;

inserisci(vett);inserisci(vett);

media=calcolamedia(vett);media=calcolamedia(vett);

contaaltezze(vett,media);contaaltezze(vett,media);

}}

void inserisci(int v[max]) // carico il vettorevoid inserisci(int v[max]) // carico il vettore

{{

for (int i=0;i<max;i++)for (int i=0;i<max;i++)

{cout<<"\ndigita un elemento del {cout<<"\ndigita un elemento del vettore ";vettore ";

cin>>v[i];cin>>v[i];

}}

}}

float calcolamedia(int v[max]) //calcolo la mediafloat calcolamedia(int v[max]) //calcolo la media

{float s,m;{float s,m;

for (int i=0;i<max;i++)for (int i=0;i<max;i++)

s=s+v[i];s=s+v[i];

m=s/max;m=s/max;

cout<<"\nla media e' "<<m;cout<<"\nla media e' "<<m;

return m;return m;

}}

void contaaltezze(int v[max],float m) //calcolo le void contaaltezze(int v[max],float m) //calcolo le // altezze // altezze

{int conta=0;{int conta=0;

for (int i=0;i<max;i++)for (int i=0;i<max;i++)

{ {

if (v[i]>m)if (v[i]>m)

conta++;conta++;

}}

cout<<"\ngli alunni che superano la media sono cout<<"\ngli alunni che superano la media sono "<<conta;"<<conta;

}}

SOLUZIONE ESERCIZIO: programmaSOLUZIONE ESERCIZIO: programma