Imparare a programmare in C++ | #4 | Le Funzioni

Imparare a programmare in C++ - Le Funzioni

Imparare a programmare in C++ | #4 | Le Funzioni: L’utilizzo delle funzioni è fondamentale per evitare di riscrivere più volte un’istruzione o un ciclo di istruzioni e per tenere il codice più pulito e leggibile.

Tempo di lettura stimato: 8 minuti

Imparare a programmare in C++ | #4 | Le Funzioni

Le funzioni sono delle parti di codice utilizzabili e richiamabili all’interno di altre funzioni.

Una funzione permette di scrivere una sola volta un codice che deve essere ripetuto, in questo modo il programma finale avrà meno righe di codice e sarà più leggero e semplice da leggere.

Inoltre l’utilizzo di una funzione permette di correggere più facilmente il codice, dovendo fare la modifica solo 1 volta.

Solitamente un programma si divide in tante funzioni che vengono quindi chiamate anche sottoprogrammi, routine, subroutine, moduli o procedure.

Funzioni con Valore e Senza Valore

Ci sono 2 tipi di funzioni, quelle che restituiscono un valore finale e quelle che non restituiscono nessun valore.

Le funzioni che non restituiscono nessun valore vengono generalmente definite procedure, ma chiamarle funzioni è comunque considerato corretto.

Le funzioni vere e proprie sono quelle che invece restituiscono un valore finale.

Vediamo un esempio di procedura e di funzione.

// LA PROCEDURA NON RESTITUISCE NESSUN VALORE
// ESEGUE UN ELENCO DI OPERAZIONI
void FunzioneSenzaValoreFinale()
{
// CODICE DA ESEGUIRE ALL'INTERNO DELLA FUNZIONE
}

// LA FUNZIONE CHE RESTITUISCE UN VALORE DEVE INVECE
// DICHIARARE SEMPRE IL TIPO DI VALORE
int FunzioneConValoreIntero()
{
int VariabileConValore = 10;
// CODICE DA ESEGUIRE
return VariabileConValore;
}

Le funzioni che non restituiscono nessun valore sono di tipo void.

Contengono una serie di istruzioni ma non hanno un return finale perchè non c’è nessun valore da inviare.

Le funzioni che restituiscono un valore invece devono avere lo stesso tipo di valore della variabile che le richiama.

Quindi se una funzione è di tipo int deve obbligatoriamente riportare un valore di tipo int.

Funzioni con Input

Negli esempi precedenti abbiamo visto delle funzioni semplici senza nessun valore in ingresso.

Possiamo però inviare valori in ingresso inserendoli tra le parentesi tonde e separandoli con una virgola.

Ad esempio:

int FunzioneConInput(int Valore1, int Valore2)
{
int ValoreFinale = Valore1 + Valore2;
return ValoreFinale;
}

In questo esempio abbiamo 2 variabili in ingresso che possono essere utilizzate all’interno della funzione.

Anche per i valori inseriti in input è fondamentale specificare il tipo.

Non è necessario che il tipo delle variabili in ingresso sia lo stesso della funzione, posso passare variabili di qualsiasi tipo.

Passare variabili per Valore o per Riferimento

Quando inviamo una variabile ad una funzione possiamo farlo in 2 modi:

  • Per valore
  • Per riferimento

Il passaggio per valore è quello predefinito, e cioè viene passato solo il valore di quella variabile.

Questo significa che la funzione può leggere il valore contenuto dalla variabile ma non può modificare la variabile stessa (praticamente è come se fosse passata in sola lettura).

Passando invece una variabile per riferimento, la funzione accede alla variabile stessa e può modificarne il valore.

Vediamo 2 esempi:

// QUI STO PASSANDO LA VARIABILE PER VALORE
// HO MODIFICATO IL VALORE DI VALORE1 IMPOSTANDO 50
// ALL'INTERNO DELLA FUNZIONE QUINDI VALORE1 SARA' SEMPRE 50
// ALL'ESTERNO PERO' AVRA' IL VALORE CHE ABBIAMO IMPOSTATO
// NELLA VARIABILE ORIGINALE
int FunzioneConInput(int Valore1, int Valore2)
{
Valore1 = 50;
int ValoreFinale = Valore1 + Valore2;
return ValoreFinale;
}

// QUI STO PASSANDO LA VARIABILE PER RIFERIMENTO 
// AGGIUNGENDO & ALL'INIZIO DEL NOME DELLA VARIABILE
// HO MODIFICATO IL VALORE DI VALORE1 IMPOSTANDO 50
// ALL'INTERNO DELLA FUNZIONE QUINDI VALORE1 SARA' SEMPRE 50
// ALL'ESTERNO LA VARIABILE VERRA' MODIFICATA E IL SUO VALORE
// DIVENTERA' 50
int FunzioneConInput(int &Valore1, int &Valore2)
{
Valore1 = 50;
int ValoreFinale = Valore1 + Valore2;
return ValoreFinale;
}

Quindi possiamo passare le variabile per valore quando vogliamo che la variabile originale non venga toccata, per riferimento quando vogliamo modificare anche la variabile originale.

Come eseguire (o richiamare) una funzione

Abbiamo visto come creare una funzione, ma le funzioni non vengono eseguite automaticamente, per eseguire il codice al loro interno devono essere richiamate.

//LE FUNZIONI VOID POSSONO ESSERE RICHIAMATE SEMPLICEMENTE SCRIVENDONE IL NOME
void FunzioneIniziale()
{
// CODICE FUNZIONE
}

int main()
{
// RICHIAMO LA FUNZIONE SCRIVENDONE IL NOME E AGGIUNGENDO LE PARENTESI TONDE
// NON DEVO SPECIFICARE IL TIPO PERCHE' LA STO RICHIAMANDO E NON DICHIARANDO
FunzioneIniziale();
return 0;
}

Le funzioni che riportano un valore invece devono assegnare il loro valore ad una variabile, quindi possono essere richiamate in questo modo:

int FunzioneIniziale()
{
int ValoreFinale = 10;
// CODICE FUNZIONE
return ValoreFinale;
}

int main()
{
int ValoreDaModificare;
// RICHIAMO LA FUNZIONE ASSEGNANDOLA AD UNA VARIABILE
// IN QUESTO MODO LA VARIABILE AVRA' IL VALORE
// PASSATO DALLA FUNZIONE CON IL RETURN (IN QUESTO CASO 10)
ValoreDaModificare = FunzioneIniziale();
return 0;
}

Come richiamare una funzione con gli input

Richiamare la funzione con dei valori in input è molto simile alle funzioni senza input.

Dovremo solo inserire i valori di input tra le parentesi tonde, ad esempio:

int FunzioneIniziale(int Valore1, int Valore2)
{
int ValoreFinale = 10;
// CODICE FUNZIONE
return ValoreFinale;
}

int main()
{
int ValoreDaModificare;
int Valore1 = 20;
int Valore2 = 30;
ValoreDaModificare = FunzioneIniziale(Valore1, Valore2);
return 0;
}

ESERCIZIO 1: Calcolare Area e Diametro del Cerchio in C++

Questo esercizio lo abbiamo visto nel video, partendo dal raggio andiamo a calcolare usando 2 funzioni separate l’area e il diametro di un cerchio.

#include <iostream>
using namespace std;

float RaggioCerchio;
float PiGreco = 3.14f;
float AreaCerchio(float RaggioCerchio, float PiGreco)
{
	float ValoreAreaCerchio;
	ValoreAreaCerchio = (RaggioCerchio * RaggioCerchio) * PiGreco;
	return ValoreAreaCerchio;
}
float DiametroCerchio(float RaggioCerchio)
{
	float ValoreDiametroCerchio = RaggioCerchio + RaggioCerchio;
// CORREZIONE: PER ERRORE AVEVO SCRITTO RaggioCerchio * RaggioCerchio
// LA FORMULA CORRETTA E' (RaggioCerchio * 2) oppure (RaggioCerchio + RaggioCerchio)
	return ValoreDiametroCerchio;
}
int main() 
{
	float RisultatoAreaCerchio, RisultatoDiametroCerchio;
	cout << "Inserisci il raggio del cerchio..." << endl;
	cin >> RaggioCerchio;
	RisultatoAreaCerchio = AreaCerchio(RaggioCerchio, PiGreco);
	RisultatoDiametroCerchio = DiametroCerchio(RaggioCerchio);
	cout << "L'area del cerchio e': " << RisultatoAreaCerchio << endl;
	cout << "Il diametro del cerchio e': " << RisultatoDiametroCerchio << endl;
	return 0;
}

ESERCIZIO 2: Calcolare Area del Triangolo in C++

Questo è il primo dei 2 esercizi di prova, il programma dovrà chiedere all’utente di inserire base e altezza del triangolo, poi con una funzione andare a calcolare l’area (base * altezza / 2).

Mostra la soluzione

#include <iostream>
using namespace std;

float CalcolaAreaTriangolo(float BaseTriangolo, float AltezzaTriangolo)
{
	float AreaTriangolo = (BaseTriangolo * AltezzaTriangolo) / 2;
	return AreaTriangolo;
}
int main() 
{
	float BaseTriangolo, AltezzaTriangolo, AreaTriangolo;
	cout << "Inserisci la base del triangolo:" << endl;
	cin >> BaseTriangolo;
	cout << "Inserisci l'altezza del triangolo:" << endl;
	cin >> AltezzaTriangolo;
	AreaTriangolo = CalcolaAreaTriangolo(BaseTriangolo, AltezzaTriangolo);
	cout << "L'area del triangolo e' di: " << AreaTriangolo;
	return 0;
}

ESERCIZIO 3: Creare una cassa semplice in C++

In questo esercizio andremo a creare una semplice funzionalità di cassa.

Il programma dovrà ricevere in input il costo di un prodotto, l’importo pagato dal cliente e riportare il resto.

Il valore del resto non deve essere inserito in una nuova variabile ma andrà aggiornata la variabile con i contanti del cliente.

La funzione può essere di tipo void ma deve avere il valore dell’importo pagato passato per riferimento.

L’output finale dovrà mostrare la variabile dell’importo pagato contenente solo il resto.

Mostra la soluzione

#include <iostream>
using namespace std;

float CostoProdotto, ContantiCliente;

void CalcolaPagamento(float CostoProdotto, float &ContantiCliente)
{
	// QUESTO TUTORIAL NON PREVEDE CHE I CONTANTI POSSANO ESSERE
	// INFERIORI AL COSTO DEL PRODOTTO
	// QUESTO CASO LO VEDREMO NEL PROSSIMO TUTORIAL
	ContantiCliente = ContantiCliente - CostoProdotto;
}

int main() 
{
	cout << "Quanto costa il prodotto scelto?" << endl;
	cin >> CostoProdotto;
	cout << "Quanti contanti ha il cliente?" << endl;
	cin >> ContantiCliente;
	CalcolaPagamento (CostoProdotto, ContantiCliente);
	cout << "Al cliente rimangono: " << ContantiCliente << " euro." << endl;
	return 0;
}

Video

Il video mostra l’intero tutorial presente in questa pagina

author avatar
Claudio Masci
Sono innanzitutto un appassionato di informatica e tecnologia in generale. Lavoro in ambito informatico da circa 16 anni, spaziando in diversi campi, andando dalla programmazione web, allo sviluppo di software, dalla grafica alla modellazione 3d ed al video editing, ho sempre voluto approfondire ogni aspetto e questo mi ha permesso di lavorare in diversi ambiti informatici.