Alcune funzioni di libreria

Fino ad adesso ti ho insegnato a programmare in modo lineare, senza l’utilizzo di funzioni (gli array non sono funzioni, ma strutture dati!).

Più avanti imparerai anche tu a costruire e programmare delle funzioni, ma prima è meglio vedere come utilizzarle e come funzionano.

Le funzioni, piccola introduzione

Puoi pensare ad una funzione come una specie di main, ma che non è il main.

Infatti, una funzione è una porzione di codice, scritta al di fuori della funzione main, che possiede dei parametri (variabili) passati dal main o da un’altra funzione, che può possedere delle variabili interne e che può avere un valore di ritorno, che viene ritornato al chiamante.

Adesso il tutto potrebbe risultarti un po’ confuso, ma per il momento non ti preoccupare, ti basta sapere come vengono chiamate e come funzionano.

Come chiamare una funzione

Le funzioni al loro interno possiedono del codice, scritto da te o da un utente, come nel caso delle librerie che vedremo adesso. Questo codice permette di fare dei calcoli o di eseguire una determinata azione.

Ad esempio, come vedremo, esiste una funzione che calcola il valore assoluto di un numero, oppure esiste una funzione che calcola la potenza di un numero. Le funzioni esistenti sono tante, ma non risolvono tutti i problemi, ed è per quello che dovrai imparare a codificarle.

Una funzione si chiama in questo modo:

<nomeFunzione>(<parametri>);

Se queste funzioni hanno anche un valore di ritorno, si può assegnare ad una variabile:

<nomeVariabile> = <nomeFunzione>(<parametri>);

Se le funzioni hanno un valore di ritorno, ma non lo assegni a nessuna variabile, il valore viene comunque ritornato ma non salvato. Tuttavia, questo può essere utilizzato direttamente, senza l’ausilio di una variabile, in una stampa (cout):

cout << "La funzione ha ritornato il valore " << nomeFunzione(parametri) << endl;

I parametri sono i valori che vengono passati alla funzione, con i quali questa può lavorare.

Ad esempio, prendiamo la funzione per il calcolo della potenza: pow.

La funzione si chiama in questo modo:

int risultato = pow(2, 3);

La funzione calcolerà il risultato di 23, e lo salverà nella variabile risultato.

Come hai visto, in una funzione possono essere passati più parametri. Questi vengono separati con una virgola.

Posso passare i parametri ad una funzione in ordine casuale?

Assolutamente no! L’ordine dei parametri deve essere sempre quello e non può essere cambiato.

Ad esempio, scrivere pow(2, 3) non è la stessa cosa di scrivere pow(3, 2), infatti nel primo caso ti calcolerà 23, nel secondo 32, risultati diversi.

Per non sbagliarsi e per sapere l’ordine dei parametri da passare, esiste la documentazione online.

Infatti, ogni creatore di funzioni che vengono pubblicate online dovrebbe pubblicare anche le documentazioni, per poter sapere quali parametri accetta quella funzione e in che ordine. Cerca online la documentazione delle funzioni. Alla fine della pagina ti proporrò le più importanti.

Nel caso della potenza, il prototipo è il seguente: pow (base, esponente);

Posso finalmente utilizzare la funzione nel mio programma?

Non ancora, manca l’ultimo passo.

Queste funzioni che ti andrò ad illustrare sono scritte da qualcun altro, pertanto non fanno parte del linguaggio di base.

Per questo motivo, è arrivato il momento di aggiungere una nuova include nel tuo programma, vicina a quella di base:

#include <math.h>

math è infatti la libreria che ti proporrò adesso. Per poter inserire altre librerie, il procedimento è lo stesso, però ovviamente devi cambiare il nome della libreria. Questo è tutto riportato nelle documentazioni di quella determinata libreria. (Attenzione! Includere una libreria con #include non funziona allo stesso modo per le librerie create da te, ma anche quello lo vedrai più avanti).

Precisazione: non tutti i programmi necessitano di tutte le librerie. Per esempio, ad un programma potrebbero non servire le funzioni di math. Non inserire sempre tutte le librerie, se non ti servono!

Un esempio di programma completo con la libreria math.h

Esempio: chiedere all’utente una base e un esponente e calcolarne la potenza mediante la funzione pow di math.

#include <iostream>
#include <math.h>

using namespace std;

int main() {
	
	double base, esponente, risultato;
	
	cout<<"Inserisci la base: ";
	cin>>base;
	
	cout<<"Inserisci l'esponente: ";
	cin>>esponente;
	
	/*
	risultato = pow(base, esponente);
	cout<<"Risultato della potenza: "<<risultato;
	*/
	
	cout<<"Risultato della potenza: "<<pow(base, esponente);
}

Ho scritto il programma utilizzando entrambi i modi per la stampa del risultato (ti consiglio di utilizzare il secondo in rosso, per risparmiarti un passaggio e una variabile).

Tabella delle funzioni principali

Ecco la tabella con le funzioni principali di math. Queste ne sono solo alcune, consulta la documentazione per sapere le altre.

Nome funzione Tipo di ritorno Spiegazione Esempio
pow(double base, double esponente) double Calcola il risultato della potenza pow(2, 4);
ritorna 16
abs(int numero) int Ritorna il valore assoluto del numero passato abs(-5);
ritorna 5
sqrt(double numero) double Ritorna la radice quadrata del numero passato sqrt(25);
ritorna 5
cos(double numero)


sin(double numero)


tan(double numero)





double
Ritorna il coseno del valore passato

Ritorna il seno del valore passato

Ritorna la tangente del valore passato

Il numero passato è in radianti. Per calcolare il coseno, seno o tangente di un angolo in gradi passare (angolo * 3,14/180)
cos(45*3.14/180);
ritorna 0,707
round(double numero) double Approssima il valore per eccesso o per difetto round(5.4);
ritorna 5
log10(double numero) double Ritorna il logaritmo in base 10 del numero passato log10(100);
ritorna 2

Generare numeri random con le funzioni di libreria

Si possono anche generare numeri casuali utilizzando le funzioni di libreria.

Per generare numeri casuali, bisogna innanzitutto includere altre due librerie nel nostro programma, ovvero stdlib e time.

#include <stdlib.h>
#include <time.h>

Poi, bisognerà scrivere all’inizio del programma la seguente riga di codice:

srand(time(NULL));

Infine, per generare numeri casuali, bisognerà utilizzare la funzione rand().

Questa funzione non ha parametri, e di base restituisce un valore intero compreso tra 0 ed un valore che varia in base al compilatore.

Per poter estrarre un numero casuale in un determinato intervallo, bisognerà usare la funzione rand() accompagnata da alcune operazioni (probabilmente mod e addizione).

Ecco una tabella che fa capire come utilizzare la funzione rand per ottenere dei valori casuali in un intervallo:

Scrittura Spiegazione Esempio
rand() Genera un numero casuale tra 0 e un numero che varia in base al compilatore. Su DEV-C++, si ottiene un valore compreso tra 0 e 32767 inclusi.
rand()%n Genera un numero casuale tra 0 ed n-1 compresi. rand()%9
Genera un numero casuale tra 0 e 8 inclusi.
rand()%a+b Genera un numero casuale compreso tra b e b+a-1 compresi. rand()%14+5
Genera un numero casuale tra 5 e 18 inclusi.

La funziona rand, come tutte le altre, può essere chiamata più volte mediante un ciclo, e con questo si possono salvare i valori in un array. Infatti è assolutamente consentito, ad esempio, fare a[3] = rand()%12!


Ora sei pronto per qualche esercizio! Ricordati che puoi sempre consultare la documentazione online per le librerie al sito https://www.cplusplus.com/reference/cmath/.