• Non ci sono risultati.

Moreno Marzolla

N/A
N/A
Protected

Academic year: 2021

Condividi "Moreno Marzolla"

Copied!
6
0
0

Testo completo

(1)

Funzioni in C++

Moreno Marzolla

moreno.marzolla@pd.infn.it

Moreno Marzolla Fondamenti di Informatica 2

Copyright © 2006 Moreno Marzolla

This work is licensed under the Creative Commons Attribution- Noncommercial-Share Alike 2.5 Italy License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc- sa/2.5/it/ or send a letter to Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.

Funzioni Funzioni



Una funzione in C++ è un blocco di codice che

 Riceve dei parametri in ingresso (input)

 Produce un risultato in uscita (output)



Nota:

 Una funzione potrebbe non avere alcun parametro in ingresso

 Una funzione potrebbe non produrre alcun risultato da restituire al chiamante

Esempio molto semplice Esempio molto semplice



Supponiamo di avere una funzione che calcoli il massimo tra due interi x,y passati come

parametro. Come la uso?

#include <iostream>

using namespace std;

// la funzione massimo(x,y) è definita in qualche modo...

int main( void ) {

int n = 10;

int m = 20;

int max_m_n = massimo( n, m ); // max_m_n vale 20 return 0;

}

(2)

Moreno Marzolla Fondamenti di Informatica 5

Altro esempio Altro esempio



In C++ esiste la funzione sqrt(x) che restituisce la radice quadrata di un valore x di tipo double



Scrivere un programma che, dati in input due double a e b che denotano i cateti di un triangolo rettangolo, calcolano la lunghezza c dell'ipotenusa

Moreno Marzolla Fondamenti di Informatica 6

Soluzione Soluzione

#include <iostream>

#include <cmath> // La funzione sqrt() è definita qui using namespace std;

int main( void ) {

double a, b, c;

cin >> a;

cin >> b;

c = sqrt( a*a + b*b );

cout << “L'ipotenusa vale “ << c << endl;

return 0;

}

Come dichiaro una funzione?

Come dichiaro una funzione?



Le funzioni devono sempre essere dichiarate prima di essere usate



Le dichiarazioni delle funzioni vanno messe prima della funzione main()

tipo_risultato nome_funzione( tipo1 param1, tipo2 param2, tipo3 param3 ) {

// corpo della funzione }

Esempio Esempio



Come definisco una funzione che calcola il massimo tra due interi x e y? (il risultato è di tipo intero)

int massimo( int x, int y ) {

if ( x > y ) { return x;

} else { return y;

} }

Restituisce come risultato il valore x Restituisce come risultato il valore y

(3)

Moreno Marzolla Fondamenti di Informatica 9

Esempio di programma completo Esempio di programma completo

#include <iostream>

using namespace std;

int massimo( int x, int y ) {

if ( x > y ) { return x;

} else { return y;

} }

int main( void ) {

int n, m;

cin >> n; // chiede all'utente di inserire n cin >> m; // chiede all'utente di inserire m cout << massimo( n, m ) << endl;

return 0;

}

Moreno Marzolla Fondamenti di Informatica 10

Funzioni prive di parametri Funzioni prive di parametri



Come definisco una funzione che non prende nessun parametro in ingresso?



Come definisco una funzione che non restituisce alcun risultato?

void stampa_intero( int x ) {

cout << “L'intero vale “ << x << endl;

// notare: niente return }

int costante_due( void ) {

return 2;

}

Esempio Esempio



Scrivere una funzione priva di parametri, che restituisce un intero non negativo come

risultato. L'intero deve venire chiesto all'utente;

se l'utente inserisce un intero negativo, il numero viene richiesto finché corretto

int chiedi_intero( void ) {

int risultato;

do {

cout << “Inserisci un numero >= 0” << endl;

cin >> risultato;

} while ( risultato < 0 );

return risultato;

}

Esempio / 2 Esempio / 2



Chiedere all'utente due interi non negativi A e B, usando la funzione appena vista



Stampare il minimo tra A e B, utilizzando una

funzione minimo() che accetta due parametri di

tipo intero e restituisce un intero.

(4)

Moreno Marzolla Fondamenti di Informatica 13

Soluzione Soluzione

#include <iostream>

using namespace std;

int chiedi_intero( void ) {

int risultato;

do {

cout << “Inserisci un numero >= 0” << endl;

cin >> risultato;

} while ( risultato < 0 );

return risultato;

}

int minimo( int x, int y ) {

if ( x < y ) return x;

else

return y;

}

int main( void ) {

int A = chiedi_intero();

int B = chiedi_intero();

cout << “Il minimo vale “ << minimo( A, B ) << endl;

return 0;

}

Moreno Marzolla Fondamenti di Informatica 14

Esercizio conclusivo / 1 Esercizio conclusivo / 1



Definire una funzione int pari( int n ) che restituisce il valore 1 se n è pari, altrimenti restituisce 0; n deve essere un intero >=0



Per determinare se n è pari si procede come segue: si sottrae ripetutamente 2 da n. Quando il residuo è uguale a 0, allora il numero n è pari;

quando il residuo è uguale a 1, allora il numero n è dispari.

Esercizio conclusivo / 2 Esercizio conclusivo / 2



Usare la funzione definita in precedenza per risolvere il seguente problema: chiedere all'utente in intero non negativo x; se l'utente inserisce x<0, richiederlo finché x>=0. Stampare a video il messaggio “pari” se x è pari, “dispari”

altrimenti

Soluzione Soluzione

#include <iostream>

using namespace std;

int pari( int n ) {

while ( n > 1 ) { n = n-2;

}

if ( n == 0 )

return 1; // n è pari else

return 0; // n è dispari }

int main( void ) {

int x;

do {

cout << “Inserisci un intero non negativo” << endl;

cin >> x;

} while ( x < 0 );

if ( 1 == pari( x ) )

cout << “Il numero inserito è pari” << endl;

else

cout << “Il numero inserito è dispari” << endl;

return 0;

}

(5)

Moreno Marzolla Fondamenti di Informatica 17

Esercizio 1 Esercizio 1



Scrivere una funzione calcola_interesse( double s, double i, int t ) che restituisce un double, che calcola gli interessi su un importo s ad un tasso annuo i per un tempo di t giorni come segue:

interesse = s*i*t / 365.0



Il programma deve chiedere ripetutamente all'utente di inserire un importo, un tasso e un tempo. Quando l'utente inserisce un importo negativo, il programma deve stampare la somma di tutti gli interessi su tutti gli importi inseriti fino a quel momento

Moreno Marzolla Fondamenti di Informatica 18

Esempio di input Esempio di input

Inserisci importo, tasso, tempo 1000 0.1 20

Inserisci importo, tasso, tempo 2000 0.2 50

Inserisci importo, tasso, tempo 500 0.3 20

Inserisci importo, tasso, tempo -1 0 0

La somma degli interessi vale 68.4930

Esercizio 2 Esercizio 2



Scrivere una funzione stampa_base( char c ) che riceve in input un carattere c e non

restituisce alcun risultato



La funzione deve stampare a video:

adenina se c=='A' citosina se c=='C' timina se c=='T' guanina se c=='G'

*ERRORE* se c è diverso dai caratteri precedenti

Esercizio 2 / cont Esercizio 2 / cont



Scrivere quindi un programma che usa la

funzione precedente per risolvere il seguente

problema: è dato un array di 10 caratteri (da

richiedere all'utente). L'utente può inserire 10

caratteri qualsiasi. Una volta riempito l'array, il

programma usa la funzione stampa_base per

stampare il nome di ciascuna base del DNA

inserita, oppure il messaggio d'errore

(6)

Moreno Marzolla Fondamenti di Informatica 21

Esercizio 2 / cont Esercizio 2 / cont



Esempio: se l'utente inserisce A C C T A X C G G Y



Il programma stampa:

adenina citosina citosina timina adenina

*ERRORE* citosina guanina guanina

*ERRORE*

Moreno Marzolla Fondamenti di Informatica 22

Esercizio 3 Esercizio 3



Definire le seguenti funzioni:

double area_quadrato( double l )

double area_triangolo( double b, double h ) double area_cerchio( double r )

che restituiscono rispettivamente l'area di un quadrato di lato l, di un triangolo di base b e altezza h e di un cerchio di raggio r.

Esercizio 3 / cont Esercizio 3 / cont



Viene chiesto all'utente di inserire un carattere da tastiera:

 Se inserisce 'q', il programma chiede il valore del lato di un quadrato e utilizza la funzione area_quadrato() per stampare l'area di un quadrato il cui lato ha il valore inserito; fatto questo il

programma chiede un nuovo carattere

 Se inserisce 't', il programma fa la stessa cosa per un triangolo di base e altezza inseriti dall'utente; fatto questo il programma chiede un nuovo carattere

 Se inserisce 'c', il programma fa la stessa cosa per un cerchio di raggio inserito dall'utente; fatto questo, il programma chiede un nuovo carattere

 Se viene inserito un qualsiasi altro carattere, il programma termina

Riferimenti

Documenti correlati

Size restituisce la dimensione di file e cartelle presenti nella cartella corrente Subfolder restutuisce l'elenco di tutte le sottocartelle presenti nella cartella corrente Type

[r]

õôõôõôõôõô õôõô õô õô

17 563 ./0123453.67893:2;??89@A=B3C83:DEFG.3/=@3F=@2113L/CA2=C;3MN3O3PQR STTUTTVUWXYZ[Y\UT]ZWTUY^YWZ_Y`ab cZV]dUXUY\UT]ZWTUY e fg\XhgdY\UT]ZWTUY ijY`ikb lXgmdUYnhTUgTUY

[r]

JLK

[r]

FRAGILI E + LEGATE AL MODO TRADIZIONALE DI FARE LA GUERRA (...)  SOPRATTUTTO MILITARI, DALL’ALTRO MOLTIPLICA LE RAGIONI DELLA SCELTA PARTIGIANA.. - ULTERIORE SPINTA ASSAI