...

Funzioni in C++ - Moreno Marzolla

by user

on
Category: Documents
55

views

Report

Comments

Transcript

Funzioni in C++ - Moreno Marzolla
Funzioni in C++
Copyright © 2006 Moreno Marzolla
This work is licensed under the Creative Commons AttributionNoncommercial-Share Alike 2.5 Italy License. To view a copy of
this license, visit http://creativecommons.org/licenses/by-ncsa/2.5/it/ or send a letter to Creative Commons, 171 Second
Street, Suite 300, San Francisco, California, 94105, USA.
Moreno Marzolla
[email protected]
Moreno Marzolla
Funzioni
Riceve dei parametri in ingresso (input)
Produce un risultato in uscita (output)
Nota:
2
Esempio molto semplice
Una funzione in C++ è un blocco di codice che
Fondamenti di Informatica
Una funzione potrebbe non avere alcun parametro in
ingresso
Una funzione potrebbe non produrre alcun risultato da
restituire al chiamante
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;
}
Moreno Marzolla
Fondamenti di Informatica
3
Moreno Marzolla
Fondamenti di Informatica
4
Altro esempio
Soluzione
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
#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;
}
5
Moreno Marzolla
Come dichiaro una funzione?
Come definisco una funzione che calcola il
massimo tra due interi x e y? (il risultato è di
tipo intero)
tipo_risultato nome_funzione( tipo1 param1,
tipo2 param2,
tipo3 param3 )
{
// corpo della funzione
}
Fondamenti di Informatica
6
Esempio
Le funzioni devono sempre essere dichiarate
prima di essere usate
Le dichiarazioni delle funzioni vanno messe
prima della funzione main()
Moreno Marzolla
Fondamenti di Informatica
int massimo( int x, int y )
{
if ( x > y ) {
Restituisce come
return x;
risultato il valore x
} else {
return y;
Restituisce come
}
risultato il valore y
}
7
Moreno Marzolla
Fondamenti di Informatica
8
Esempio di programma completo
Funzioni prive di parametri
#include <iostream>
using namespace std;
int massimo( int x, int y )
{
if ( x > y ) {
return x;
} else {
return y;
}
}
Come definisco una funzione che non prende
nessun parametro in ingresso?
int costante_due( void )
{
return 2;
}
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;
Come definisco una funzione che non
restituisce alcun risultato?
void stampa_intero( int x )
{
cout << “L'intero vale “ << x << endl;
// notare: niente return
}
return 0;
}
Moreno Marzolla
Fondamenti di Informatica
9
Moreno Marzolla
Esempio
Fondamenti di Informatica
10
Esempio / 2
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
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.
int chiedi_intero( void )
{
int risultato;
do {
cout << “Inserisci un numero >= 0” << endl;
cin >> risultato;
} while ( risultato < 0 );
return risultato;
}
Moreno Marzolla
Fondamenti di Informatica
11
Moreno Marzolla
Fondamenti di Informatica
12
#include <iostream>
using namespace std;
Soluzione
Esercizio conclusivo / 1
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
13
Esercizio conclusivo / 2
Fondamenti di Informatica
Moreno Marzolla
#include <iostream>
using namespace std;
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
Moreno Marzolla
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.
15
Fondamenti di Informatica
14
Soluzione
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;
}
Moreno Marzolla
Fondamenti di Informatica
16
Esercizio 1
Esempio di input
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
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
17
Moreno Marzolla
Esercizio 2
Fondamenti di Informatica
18
Esercizio 2 / cont
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
Moreno Marzolla
Fondamenti di Informatica
19
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
Moreno Marzolla
Fondamenti di Informatica
20
Esercizio 2 / cont
Esercizio 3
Esempio: se l'utente inserisce
ACCTAXCGGY
Il programma stampa:
adenina citosina citosina timina adenina
*ERRORE* citosina guanina guanina
*ERRORE*
Moreno Marzolla
Fondamenti di Informatica
21
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
Moreno Marzolla
Fondamenti di Informatica
23
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.
Moreno Marzolla
Fondamenti di Informatica
22
Fly UP