Libreria cmath

Libreria cmath

In questa lezione parleremo della libreria cmath, cioè della libreria standard del C++ che contiene tante funzioni matematiche.

La libreria si include quindi inserendo semplicemente l’header:

#include <cmath>

Elenco funzioni della libreria

Elenchiamo dunque alcune funzioni della libreria cmath:

min – serve a trovare il valore minimo.

maxserve a trovare il valore massimo.

absserve a trovare il valore assoluto di un numero.

powserve a calcolare l’elevamente a potenza.

sqrtserve a calcolare la radice quadrata di un numero.

logserve a calcolare un logaritmo naturale di un numero.

floorserve ad arrotondare un numero per difetto.

ceil serve ad arrotondare un numero per eccesso.

random() – restituisce un numero random tra 0 e RAND_MAX.

Ci sono tantissime altre funzioni, se volete consultare un elenco completo, potete dunque visitare questo link: libreria per le funzioni matematiche.


Primo esempio sulle funzioni matematiche della libreria cmath

In questo semplicissimo esempio prendiamo in input un numero e dopo calcoliamo il valore assoluto con la funzione abs. Poi calcoremo l’arrotandamente per eccesso e per difetto, rispettivamente con le funzioni ceil e floor.

#include <iostream>
#include <cmath>
using namespace std;

int main () {
	double x;

	cout << "Inserisci un numero: " << endl;
	cin >> x;
	
	cout << "Il valore assoluto e': "<<abs(x)<<endl;
	cout << "Il numero arrotondato per eccesso e': " << ceil(x) << endl;
	cout << "Il numero arrotondato per difetto e': " << floor(x) << endl;
	
}


Secondo esempio

In questo secondo esempio sulla libreria cmath in C++, calcoleremo il valore minimo e massimo tra due numeri, utilizzando le funzioni min e max, precedentemente citate.

#include <iostream>
#include <cmath>
using namespace std;

int main () {
    int x;
    int y;
    
    cout << "Inserisci un numero: ";
    cin >> x;
    cout << "Inserisci un numero: ";
    cin >> y;
    
    cout << "Il minimo e' " << min(x,y) << " Il massimo e' " << max(x,y);	
}


Terzo esempio

Un altro esempio d’uso della libreria cmath che facciamo in questa lezione è con la funzione pow, cioè la funzione che serve a calcolare la potenza di un numero.

Quindi in questo caso pow(x, y) mi restituisce x elevato a y.

Se ad esempio inserisco pow(2,3) allora avremo 23.

#include <iostream>
#include <cmath>
using namespace std;

int main () {
    int x;
    int y;
    
    cout << "Inserisci un numero: ";
    cin >> x;
    cout << "Inserisci un numero: ";
    cin >> y;
    
    cout << "La potenza e' " << pow(x,y);	
}

Chiaramente questi sono solo alcuni semplici esempi di suo della libreria cmath in C++.

Alcuni link utili:

Indice argomenti linguaggio C++

1- Introduzione al linguaggio C++

2- Variabili in C++

3- Operatori di assegnazione in C++

4- Esempi in C++

5- Casting in C++

Le variabili locali e globali in C++

Le variabili locali e globali in C++

Approfondiamo in questo breve articolo le variabili locali e globali in C++.

In molti linguaggi di programmazione (in alcuni linguaggi non si dichiarano le variabili) è possibile dichiarare le variabili locali o globali, cioè è possibile stabilire il periodo di vita di una variabile.

Le variabili locali in C++

Le variabili locali, sono quelle variabili che sono dichiarate all’interno dei singoli sottoprogrammi, quindi sono valide (visibili) solo all’interno di questi e pertanto non possono essere utilizzate in altri sottoprogrammi.

Hanno dunque una durata, nascono con la funzione (o sottoprogramma) e muoiono quando termina la funzione stessa.

Facciamo dunque un esempio indicativo, producendo di proposito un errore:

#include <iostream>
using namespace std;

int somma(){
    int x = 5; //variabile locale
    int y = 6; //variabile locale
    
    return x + y;
}

int differenza() {
   return x - y; //non vede le variabili x e y
}

int main () {
   somma();
   cout << somma();
   differenza();
   cout << differenza();

   return 0;
}

Mi restituisce come errore che le variabili x e y non sono state dichiarate per questo scope ovvero per questo ambito di visibilità.

Infatti riscontriamo che:

  1. Variabili locali: Le variabili x e y sono dichiarate all’interno della funzione somma(), quindi sono considerate variabili locali a quella funzione. Ciò significa che sono accessibili solo all’interno della funzione somma() stessa e non possono essere utilizzate all’esterno di essa.
  2. Scope delle variabili: La variabile x è definita all’interno della funzione somma(), quindi non è visibile dalla funzione differenza(). Quando si tenta di fare riferimento a x e y all’interno della funzione differenza(), si verifica un errore perché queste variabili non sono definite nello scope di quella funzione.
  3. Chiamate alle funzioni: Nel main(), le funzioni somma() e differenza() vengono chiamate, ma i loro valori di ritorno non vengono utilizzati o stampati. Per stampare il risultato delle funzioni, è necessario utilizzare cout.


Le variabili globali in C++

Le variabili globali sono quelle che hanno validità non solo nel programma principale ma anche nei sottoprogrammi dove non sono state dichiarate.

Anche se potrebbe sembrare più semplice utilizzarle non bisogna farne abuso.

Esempio 1

Vediamo quindi un esempio di uso di variabili locali e globali puramente indicativo:

#include <iostream>
using namespace std;

int y; // variabile globale 

int main()
{
     int x; // variabile locale al main

     cout << "Inserisci un numero: ";
     cin >> x;
     cout << "Hai inserito il numero: " << x << endl;
     cout << "Inserisci un altro numero: ";
     cin >> y;
     cout << "Hai inserito il numero: " << y << endl;

    return 0;
}

In questo esempio utilizziamo una variabile globale y dichiarata prima del main e una variabile locale x dichiarata all’interno del main.

Esempio 2

Dati in input il numero degli allievi e delle allieve di un Istituto, calcolare la percentuale dei maschi e delle femmine di tutta la scuola.

Ecco dunque un esempio d’uso di variabili globali e parametri formali, guardate i commenti, inseriti nel codice, per capire quali variabili sono utilizzate.

#include <iostream>
using namespace std;

int iscritti; // Variabile globale per il numero totale di iscritti
int allievi; // Variabile globale per il numero di allievi
int allieve; // Variabile globale per il numero di allieve

// Funzione che calcola la percentuale di maschi
float percentualeMaschi(int iscritti, int allievi) {
    return (static_cast<float>(allievi) / iscritti) * 100;
}

// Funzione che calcola la percentuale di femmine
float percentualeFemmine(int iscritti, int allieve) {
    return (static_cast<float>(allieve) / iscritti) * 100;
}

int main() {
    // Input del numero totale di iscritti
    cout << "Inserisci il numero totale di iscritti: ";
    cin >> iscritti;

    // Input del numero di allievi
    cout << "Inserisci il numero degli allievi: ";
    cin >> allievi;

    // Input del numero delle allieve
    cout << "Inserisci il numero delle allieve: ";
    cin >> allieve;

    // Calcolo delle percentuali utilizzando le funzioni e stampa dei risultati
    cout << "Percentuale di maschi: " << percentualeMaschi(iscritti, allievi) << "%" << endl;
    cout << "Percentuale di femmine: " << percentualeFemmine(iscritti, allieve) << "%" << endl;

    return 0;
}

Possiamo migliorare il codice evitando l’uso di variabili globali, passando i valori delle variabili iscritti, allievi e allieve come argomenti alle funzioni percentualeMaschi e percentualeFemmine. Ecco come potrebbe essere modificato il codice:

#include <iostream>
using namespace std;

// Funzione che calcola la percentuale di maschi
float percentualeMaschi(int iscritti, int allievi) {
    return (static_cast<float>(allievi) / iscritti) * 100;
}

// Funzione che calcola la percentuale di femmine
float percentualeFemmine(int iscritti, int allieve) {
    return (static_cast<float>(allieve) / iscritti) * 100;
}

int main() {
    int iscritti, allievi, allieve;

    // Input del numero totale di iscritti
    cout << "Inserisci il numero totale di iscritti: ";
    cin >> iscritti;

    // Input del numero di allievi
    cout << "Inserisci il numero degli allievi: ";
    cin >> allievi;

    // Input del numero delle allieve
    cout << "Inserisci il numero delle allieve: ";
    cin >> allieve;

    // Calcolo delle percentuali utilizzando le funzioni e stampa dei risultati
    cout << "Percentuale di maschi: " << percentualeMaschi(iscritti, allievi) << "%" << endl;
    cout << "Percentuale di femmine: " << percentualeFemmine(iscritti, allieve) << "%" << endl;

    return 0;
}

In questo modo, tutte le variabili sono locali alla funzione main(), rendendo il codice più modulare e più facile da leggere e comprendere. Le funzioni percentualeMaschi e percentualeFemmine ricevono i valori delle variabili iscritti, allievi e allieve come parametri formali, consentendo loro di calcolare le percentuali senza dipendere da variabili globali.

Esempio 3

In questo esempio definiremo la variabile locale x all’interno del main e all’interno di una funzione e useremo anche una variabile globale x.

#include <iostream>
using namespace std;

int x = 100; // Variabile globale

void funzione() {
    int x = 20; // Variabile locale alla funzione
    cout << x << endl; // Stampa 20
}

void funzione2() {
    cout << x; // Stampa 100, utilizza la variabile globale
}

int main() {
    int x = 5; // Variabile locale al main
    cout << x << endl; // Stampa 5
    funzione();
    funzione2();
    return 0;
}

In questo esempio, abbiamo tre variabili x:

  • Una variabile globale x con valore 100, dichiarata all’inizio del programma.
  • Una variabile locale x all’interno della funzione funzione() con valore 20.
  • Una variabile locale x all’interno di main() con valore 5.

All’interno di main(), innanzitutto verrà stampato il valore della variabile locale x, che è 5.

Poi viene chiamata funzione(), e quindi viene stampato il valore della variabile locale x all’interno della funzione, che è 20.

Infine viene chiamata funzione2() che stampa il valore della variabile globale x, che è 100.

Chiaramente questi sono solo alcuni esempi di possibile uso delle variabili locali e globali in C++, presto farò altri esempi.

Alcuni link utili

Passaggio di parametri per valore o per riferimento

Come usare il for in C++

Ciclo while in C++

Ciclo do while

Iterazioni con il ciclo for in C++

Operatori logici in C++

Esercizi con switch case in C++

Come utilizzare lo switch case in C++

If else in C++

Casting in C++

Variabili in C++

Tutorial C++

Successione di Fibonacci in C++

Definizione di funzione in C++

Definizione di funzione in C++

In questa breve lezione sulla definizione di funzione in C++, vedremo la differenza tra definzione e dichiarazione di una funzione.

Abbiamo già parlato delle funzioni in C++ e visto alcuni esempi pratici, potete seguire il link se non l’avete già fatto.

Cosa fa la definizione di funzione in C++

La definzione di una funzione specifica cosa fa la funzione e come lo fa.

Un esempio che abbiamo già visto nelle precedenti lezioni:

double cubo(float c) //definzione di funzione
{
   return c*c*c;
}

In questo esempio, di definizione di funzione, si definisce una funzione cubo e all’interno ci sono le istruzioni per calcolare il cubo di un numero. Quindi rappresenta un sottoprogramma.

Se una funzione però viene chiamata prima di essere definita allora bisogna dichiarla, così come si fa con le variabili.

Ad esempio, nell’esempio sotto, si avrebbe un errore di funzione non dichiarata.

#include <iostream>
using namespace std;

// Dichiarazione del prototipo della funzione cubo
double cubo(float c);

int main() {
    float lato;
    double volume;
	
    // Input della lunghezza del lato del cubo
    cout << "Inserisci il lato del cubo, calcolerò il volume: " << endl;
    cin >> lato;
	
    // Calcolo del volume del cubo utilizzando la funzione cubo()
    volume = cubo(lato);
    
    // Output del volume
    cout << "Il volume del cubo è: " << volume << endl;

    return 0;
}

// Definizione della funzione cubo() che calcola il volume di un cubo
double cubo(float c) {
    return c * c * c;
}

In questo caso occorre dunque dichiarala.


Dichiarazione di funzione in C++

La dichiarazione di funzione è rappresentata da un’unica istruzione che specifica il tipo di funzione, i parametri (argomenti) della funzione e il tipo del valore di ritorno (può essere anche void).

Quindi ecco come sarebbe l’esempio di prima con la dichiarazione di funzione.

Ecco dunque un listato che mostra un esempio di definizione di funzione in C++ e di dichiarazione.

#include <iostream>
using namespace std;

// Dichiarazione del prototipo della funzione cubo
double cubo(float c);

int main() {
    float lato;
    double volume;
	
    // Input della lunghezza del lato del cubo
    cout << "Inserisci il lato del cubo, calcolerò il volume: " << endl;
    cin >> lato;
	
    // Calcolo del volume del cubo utilizzando la funzione cubo()
    volume = cubo(lato);
    
    // Output del volume
    cout << "Il volume del cubo è: " << volume << endl;

    return 0;
}

// Definizione della funzione cubo() che calcola il volume di un cubo
double cubo(float c) {
    return c * c * c;
}

E’ importante dire che i nomi dei parametri in una dichiarazione di funzione sono fittizzi, quindi avrei anche potuto scrivere:

double cubo(float); al posto di double cubo(float c);.

Quindi il nome del parametro formale è superfluo, quello che conta è il tipo o la lista dei tipi.

Ovviamente ad una dichiarazione deve seguire sempre una definizione di funzione.

Si può anche definire una funzione in un file e invocarla in un altro, in questo caso nel file in cui la funzione viene utilizzata deve essere inserita la dichiarazione.

Facciamo ancora un altro esempio di dichiarazione di funzioni, riprendendo l’esercizio della lezione precedente.

#include <iostream>
using namespace std;

// Dichiarazione dei prototipi delle funzioni
double quadrato(float);
double cubo(float);
double meta(float);

int main() {
    int num;
    double q, c, r;
	
    // Input del numero dall'utente
    cout << "Inserisci il numero: ";
    cin >> num;
	
    // Calcolo del quadrato, del cubo e della metà del numero
    q = quadrato(num);
    c = cubo(num);
    r = meta(num);
	
    // Output dei risultati
    cout << "Il quadrato è: " << q << ", il cubo è: " << c << ", la sua metà è: " << r;

    return 0;
}

// Definizione della funzione per calcolare il quadrato di un numero
double quadrato(float c) {
    return c * c;
}

// Definizione della funzione per calcolare il cubo di un numero
double cubo(float c) {
    return c * c * c;
}

// Definizione della funzione per calcolare la metà di un numero
double meta(float c) {
    return c / 2;
}

Chiaramente questi sono solo degli esempi sulla definizione di funzione in C++.

Alcuni link utili

Passaggio di parametri per valore o per riferimento

Ciclo while in C++

Ciclo do while

Iterazioni con il ciclo for in C++

Operatori logici in C++

Esercizi con switch case in C++

Switch case in C++

If else in C++

Casting in C++

Variabili in C++

Tutorial C++

Successione di Fibonacci in C++


Uso delle funzioni in C++

Uso delle funzioni in C++

In quest’articolo vedremo una serie di esempi sull’uso delle funzioni in C++, al fine di approfondire l’argomento. Scopo di questo articolo, infatti, è quello di consolidare quali valori possono ritornare le funzioni e come utilizzarle all’interno dei nostri programmi.

Questi esempi inoltre sono stati elaborati con l’intento, nella prossima lezione, di spiegare cosa vuol dire dichiarare una funzione e cosa invece definirla. E anche, nelle lezioni successive, per spiegare le variabili locali e globali.


Esempio 1 di uso delle funzioni in C++

Dunque realizziamo a scopo didattico un esempio dove creeremo alcune funzioni in C++.

Prendere in input un numero intero e visualizzare il suo quadrato, il suo cubo e la sua radice quadrata.

Quindi creeremo 3 funzioni:

quadrato che ritorna come valore double il quadrato di un numero;

cubo che ritorna come valore double il cubo di un numero;

meta che ritorna come valore double la metà di un numero.

Dopo all’interno del main chiediamo di inserire un numero in input e chiamiamo (o attiviamo) le nostre funzioni quadrato, cubo e meta. Infine stampiamo il risultato.

Ecco dunque il listato completo dell’esempio sull’uso delle funzioni in C++.

#include <iostream>
using namespace std;

// Funzione per calcolare il quadrato di un numero
double quadrato(float c) {
    return c * c;
}

// Funzione per calcolare il cubo di un numero
double cubo(float c) {
    return c * c * c;
}

// Funzione per calcolare la metà di un numero
double meta(float c) {
    return c / 2;
}

int main() {
    int num;
    double q, c, r;

    // Input del numero dall'utente
    cout << "Inserisci il numero: ";
    cin >> num;

    // Calcolo del quadrato, del cubo e della metà del numero
    q = quadrato(num);
    c = cubo(num);
    r = meta(num);

    // Output dei risultati
    cout << "Il quadrato è: " << q << ", il cubo è: " << c << ", la sua metà è: " << r;

    return 0;
}

Esempio 2 uso di funzioni in C++

Prendere in input tre numeri e trovare il valore massimo e il valore minimo, utilizzando le funzioni.

Definiamo le due funzioni maximum e minimum per il calcolo rispettivamenre del minimo e del massimo fra tre numeri.

Dopo richiamiamo all’interno del main queste funzioni e stampiamo il risultato.

Ecco quindi il listato completo.

#include <iostream>
using namespace std;

// Funzione per trovare il valore massimo tra tre numeri
int maximum(int x, int y, int z) {
    int max = x; // Supponiamo che il primo numero sia il massimo

    // Verifica se il secondo numero è maggiore del massimo attuale
    if (y > max) {
        max = y; // Se sì, assegna il secondo numero come nuovo massimo
    }

    // Verifica se il terzo numero è maggiore del massimo attuale
    if (z > max) {
        max = z; // Se sì, assegna il terzo numero come nuovo massimo
    }

    return max; // Restituisce il valore massimo trovato
}

// Funzione per trovare il valore minimo tra tre numeri
int minimum(int x, int y, int z) {
    int min = x; // Supponiamo che il primo numero sia il minimo

    // Verifica se il secondo numero è minore del minimo attuale
    if (y < min) {
        min = y; // Se sì, assegna il secondo numero come nuovo minimo
    }

    // Verifica se il terzo numero è minore del minimo attuale
    if (z < min) {
        min = z; // Se sì, assegna il terzo numero come nuovo minimo
    }

    return min; // Restituisce il valore minimo trovato
}

int main() {
    int a, b, c;

    // Input dei tre numeri dall'utente
    cout << "Inserisci il primo numero: ";
    cin >> a;
    cout << "Inserisci il secondo numero: ";
    cin >> b;
    cout << "Inserisci il terzo numero: ";
    cin >> c;

    // Calcolo e output del valore massimo e minimo
    cout << "Il valore massimo è: " << maximum(a, b, c) << endl;
    cout << "Il valore minimo è: " << minimum(a, b, c);

    return 0;
}

Chiaramente quelli proposti sono solo degli esempi dimostrativi sull’uso delle funzioni in C++.

Alcuni link utili:

Cosa sono le funzioni in C++

Ciclo while in C++

Ciclo do while

Iterazioni con il ciclo for in C++

Operatori logici in C++

Esercizi con switch case in C++

Switch case in C++

If else in C++

Casting in C++

Variabili in C++

Tutorial C++

Successione di Fibonacci in C++


55711