Vai al contenuto

Esercizi: raccolta completa

Dai fondamenti alla programmazione orientata agli oggetti - 10 sezioni complete.

Questa raccolta di esercizi copre tutti gli argomenti fondamentali della programmazione C++, dai concetti base alla programmazione orientata agli oggetti. Ogni esercizio include una soluzione dettagliata.

🎯 Suggerimento: Prova a risolvere ogni esercizio da solo prima di guardare la soluzione. Imparerai molto di più!

1. Variabili e Tipi di Dato

📌 Argomenti: Dichiarazione variabili, tipi di dato, input/output, operazioni base

1.1 Calcolatrice di base

Crea un programma che chiede all'utente di inserire due numeri interi e stampa la somma, differenza, prodotto e quoziente.

Mostra la soluzione
#include <iostream>
using namespace std;

int main() {
    int num1, num2;

    cout << "Inserisci il primo numero: ";
    cin >> num1;
    cout << "Inserisci il secondo numero: ";
    cin >> num2;

    cout << "Somma: " << num1 + num2 << endl;
    cout << "Differenza: " << num1 - num2 << endl;
    cout << "Prodotto: " << num1 * num2 << endl;

    if (num2 != 0) {
        cout << "Quoziente: " << (double)num1 / num2 << endl;
    } else {
        cout << "Impossibile dividere per zero!" << endl;
    }

    return 0;
}

1.2 Convertitore di temperatura

Scrivi un programma che converte una temperatura da Celsius a Fahrenheit e Kelvin.

Mostra la soluzione
#include <iostream>
using namespace std;

int main() {
    double celsius;

    cout << "Inserisci la temperatura in Celsius: ";
    cin >> celsius;

    double fahrenheit = (celsius * 9.0/5.0) + 32;
    double kelvin = celsius + 273.15;

    cout << "Temperatura in Fahrenheit: " << fahrenheit << endl;
    cout << "Temperatura in Kelvin: " << kelvin << endl;

    return 0;
}

1.3 Informazioni personali

Crea un programma che chiede nome, età e altezza dell'utente e stampa un messaggio personalizzato.

Mostra la soluzione
#include <iostream>
#include <string>
using namespace std;

int main() {
    string nome;
    int eta;
    double altezza;

    cout << "Inserisci il tuo nome: ";
    cin >> nome;
    cout << "Inserisci la tua eta: ";
    cin >> eta;
    cout << "Inserisci la tua altezza (in metri): ";
    cin >> altezza;

    cout << "Ciao " << nome << "!" << endl;
    cout << "Hai " << eta << " anni e sei alto " << altezza << " metri." << endl;

    return 0;
}

1.4 Calcolo area rettangolo

Scrivi un programma che calcola l'area e il perimetro di un rettangolo date base e altezza.

Mostra la soluzione
#include <iostream>
using namespace std;

int main() {
    double base, altezza;

    cout << "Inserisci la base del rettangolo: ";
    cin >> base;
    cout << "Inserisci l'altezza del rettangolo: ";
    cin >> altezza;

    double area = base * altezza;
    double perimetro = 2 * (base + altezza);

    cout << "Area: " << area << endl;
    cout << "Perimetro: " << perimetro << endl;

    return 0;
}

1.5 Calcolo dell'IMC

Crea un programma che calcola l'Indice di Massa Corporea (IMC) dati peso e altezza.

Mostra la soluzione
#include <iostream>
using namespace std;

int main() {
    double peso, altezza;

    cout << "Inserisci il tuo peso (kg): ";
    cin >> peso;
    cout << "Inserisci la tua altezza (m): ";
    cin >> altezza;

    double imc = peso / (altezza * altezza);

    cout << "Il tuo IMC è: " << imc << endl;

    return 0;
}

2. Operatori Matematici e Logici

📌 Argomenti: Operatori aritmetici, logici, di confronto, espressioni booleane

2.1 Verifica numero pari o dispari

Scrivi un programma che verifica se un numero inserito dall'utente è pari o dispari.

Mostra la soluzione
#include <iostream>
using namespace std;

int main() {
    int numero;

    cout << "Inserisci un numero: ";
    cin >> numero;

    if (numero % 2 == 0) {
        cout << numero << " è pari." << endl;
    } else {
        cout << numero << " è dispari." << endl;
    }

    return 0;
}

2.2 Calcolatrice con operatori logici

Crea una calcolatrice che usa operatori logici per verificare se il risultato è positivo, negativo o zero.

Mostra la soluzione
#include <iostream>
using namespace std;

int main() {
    double num1, num2;
    char operatore;

    cout << "Inserisci il primo numero: ";
    cin >> num1;
    cout << "Inserisci l'operatore (+, -, *, /): ";
    cin >> operatore;
    cout << "Inserisci il secondo numero: ";
    cin >> num2;

    double risultato;
    bool operazione_valida = true;

    switch(operatore) {
        case '+':
            risultato = num1 + num2;
            break;
        case '-':
            risultato = num1 - num2;
            break;
        case '*':
            risultato = num1 * num2;
            break;
        case '/':
            if (num2 != 0) {
                risultato = num1 / num2;
            } else {
                cout << "Errore: divisione per zero!" << endl;
                operazione_valida = false;
            }
            break;
        default:
            cout << "Operatore non valido!" << endl;
            operazione_valida = false;
    }

    if (operazione_valida) {
        cout << "Risultato: " << risultato << endl;

        if (risultato > 0) {
            cout << "Il risultato è positivo." << endl;
        } else if (risultato < 0) {
            cout << "Il risultato è negativo." << endl;
        } else {
            cout << "Il risultato è zero." << endl;
        }
    }

    return 0;
}

2.3 Verifica triangolo

Scrivi un programma che verifica se tre lati possono formare un triangolo valido.

Mostra la soluzione
#include <iostream>
using namespace std;

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

    cout << "Inserisci il primo lato: ";
    cin >> a;
    cout << "Inserisci il secondo lato: ";
    cin >> b;
    cout << "Inserisci il terzo lato: ";
    cin >> c;

    if (a + b > c && a + c > b && b + c > a) {
        cout << "I tre lati possono formare un triangolo valido." << endl;
    } else {
        cout << "I tre lati NON possono formare un triangolo valido." << endl;
    }

    return 0;
}

2.4 Confronto di tre numeri

Crea un programma che trova il maggiore tra tre numeri inseriti dall'utente.

Mostra la soluzione
#include <iostream>
using namespace std;

int main() {
    int num1, num2, num3;

    cout << "Inserisci il primo numero: ";
    cin >> num1;
    cout << "Inserisci il secondo numero: ";
    cin >> num2;
    cout << "Inserisci il terzo numero: ";
    cin >> num3;

    int maggiore = num1;

    if (num2 > maggiore) {
        maggiore = num2;
    }
    if (num3 > maggiore) {
        maggiore = num3;
    }

    cout << "Il numero maggiore è: " << maggiore << endl;

    return 0;
}

2.5 Verifica anno bisestile

Scrivi un programma que verifica se un anno è bisestile usando operatori logici.

Mostra la soluzione
#include <iostream>
using namespace std;

int main() {
    int anno;

    cout << "Inserisci un anno: ";
    cin >> anno;

    if ((anno % 4 == 0 && anno % 100 != 0) || (anno % 400 == 0)) {
        cout << anno << " è un anno bisestile." << endl;
    } else {
        cout << anno << " NON è un anno bisestile." << endl;
    }

    return 0;
}

3. Strutture di Controllo Condizionali

📌 Argomenti: if-else, switch-case, condizioni annidate, operatori ternari

3.1 Voto scolastico

Crea un programma che converte un voto numerico (0-100) in lettere (A, B, C, D, F).

Mostra la soluzione
#include <iostream>
using namespace std;

int main() {
    int voto;

    cout << "Inserisci il voto (0-100): ";
    cin >> voto;

    if (voto < 0 || voto > 100) {
        cout << "Voto non valido!" << endl;
    } else if (voto >= 90) {
        cout << "Voto: A (Eccellente)" << endl;
    } else if (voto >= 80) {
        cout << "Voto: B (Buono)" << endl;
    } else if (voto >= 70) {
        cout << "Voto: C (Sufficiente)" << endl;
    } else if (voto >= 60) {
        cout << "Voto: D (Insufficiente)" << endl;
    } else {
        cout << "Voto: F (Gravemente insufficiente)" << endl;
    }

    return 0;
}

3.2 Calcolatrice semplice con switch

Scrivi una calcolatrice che usa switch per selezionare l'operazione.

Mostra la soluzione
#include <iostream>
using namespace std;

int main() {
    double num1, num2;
    char operatore;

    cout << "Inserisci il primo numero: ";
    cin >> num1;
    cout << "Inserisci l'operatore (+, -, *, /): ";
    cin >> operatore;
    cout << "Inserisci il secondo numero: ";
    cin >> num2;

    switch(operatore) {
        case '+':
            cout << "Risultato: " << num1 + num2 << endl;
            break;
        case '-':
            cout << "Risultato: " << num1 - num2 << endl;
            break;
        case '*':
            cout << "Risultato: " << num1 * num2 << endl;
            break;
        case '/':
            if (num2 != 0) {
                cout << "Risultato: " << num1 / num2 << endl;
            } else {
                cout << "Errore: divisione per zero!" << endl;
            }
            break;
        default:
            cout << "Operatore non valido!" << endl;
    }

    return 0;
}

3.3 Menu giornaliero

Crea un programma che mostra un menu di un ristorante e calcola il costo in base alla scelta.

Mostra la soluzione
#include <iostream>
using namespace std;

int main() {
    int scelta;

    cout << "=== MENU RISTORANTE ===" << endl;
    cout << "1. Pizza Margherita - 8€" << endl;
    cout << "2. Pasta al Pomodoro - 7€" << endl;
    cout << "3. Insalata Mista - 5€" << endl;
    cout << "4. Hamburger - 10€" << endl;
    cout << "5. Gelato - 3€" << endl;
    cout << "Inserisci la tua scelta (1-5): ";
    cin >> scelta;

    switch(scelta) {
        case 1:
            cout << "Hai scelto Pizza Margherita. Costo: 8€" << endl;
            break;
        case 2:
            cout << "Hai scelto Pasta al Pomodoro. Costo: 7€" << endl;
            break;
        case 3:
            cout << "Hai scelto Insalata Mista. Costo: 5€" << endl;
            break;
        case 4:
            cout << "Hai scelto Hamburger. Costo: 10€" << endl;
            break;
        case 5:
            cout << "Hai scelto Gelato. Costo: 3€" << endl;
            break;
        default:
            cout << "Scelta non valida!" << endl;
    }

    return 0;
}

3.4 Classificazione età

Scrivi un programma che classifica una persona in base all'età (bambino, adolescente, adulto, anziano).

Mostra la soluzione
#include <iostream>
using namespace std;

int main() {
    int eta;

    cout << "Inserisci l'età: ";
    cin >> eta;

    if (eta < 0) {
        cout << "Età non valida!" << endl;
    } else if (eta < 13) {
        cout << "Bambino" << endl;
    } else if (eta < 20) {
        cout << "Adolescente" << endl;
    } else if (eta < 65) {
        cout << "Adulto" << endl;
    } else {
        cout << "Anziano" << endl;
    }

    return 0;
}

3.5 Prezzo biglietto cinema

Crea un programma che calcola il prezzo di un biglietto del cinema in base all'età e al giorno della settimana.

Mostra la soluzione
#include <iostream>
using namespace std;

int main() {
    int eta, giorno;
    double prezzo = 10.0; // prezzo base

    cout << "Inserisci l'età: ";
    cin >> eta;
    cout << "Inserisci il giorno (1=Lunedì, 2=Martedì, ..., 7=Domenica): ";
    cin >> giorno;

    // Sconto per età
    if (eta < 12 || eta >= 65) {
        prezzo = prezzo * 0.7; // 30% di sconto
    }

    // Sconto per giorno
    if (giorno >= 1 && giorno <= 5) { // giorni feriali
        prezzo = prezzo * 0.8; // 20% di sconto
    }

    cout << "Prezzo del biglietto: " << prezzo << "€" << endl;

    return 0;
}

4. I Cicli in C++

📌 Argomenti: for, while, do-while, break, continue, cicli annidati

4.1 Tabellina

Scrivi un programma che stampa la tabellina di un numero inserito dall'utente.

Mostra la soluzione
#include <iostream>
using namespace std;

int main() {
    int numero;

    cout << "Inserisci un numero: ";
    cin >> numero;

    cout << "Tabellina del " << numero << ":" << endl;
    for (int i = 1; i <= 10; i++) {
        cout << numero << " x " << i << " = " << numero * i << endl;
    }

    return 0;
}

4.2 Somma dei numeri

Crea un programma che calcola la somma dei numeri da 1 a N (inserito dall'utente).

Mostra la soluzione
#include <iostream>
using namespace std;

int main() {
    int n, somma = 0;

    cout << "Inserisci un numero: ";
    cin >> n;

    for (int i = 1; i <= n; i++) {
        somma += i;
    }

    cout << "La somma dei numeri da 1 a " << n << " è: " << somma << endl;

    return 0;
}

4.3 Numero primo

Scrivi un programma che verifica se un numero è primo.

Mostra la soluzione
#include <iostream>
using namespace std;

int main() {
    int numero;
    bool primo = true;

    cout << "Inserisci un numero: ";
    cin >> numero;

    if (numero <= 1) {
        primo = false;
    } else {
        for (int i = 2; i * i <= numero; i++) {
            if (numero % i == 0) {
                primo = false;
                break;
            }
        }
    }

    if (primo) {
        cout << numero << " è un numero primo." << endl;
    } else {
        cout << numero << " NON è un numero primo." << endl;
    }

    return 0;
}

4.4 Fattoriale

Crea un programma che calcola il fattoriale di un numero.

Mostra la soluzione
#include <iostream>
using namespace std;

int main() {
    int numero;
    long long fattoriale = 1;

    cout << "Inserisci un numero: ";
    cin >> numero;

    if (numero < 0) {
        cout << "Il fattoriale non è definito per numeri negativi." << endl;
    } else {
        for (int i = 1; i <= numero; i++) {
            fattoriale *= i;
        }
        cout << "Il fattoriale di " << numero << " è: " << fattoriale << endl;
    }

    return 0;
}

4.5 Indovina il numero

Scrivi un gioco dove l'utente deve indovinare un numero segreto (da 1 a 100). Il gioco termina quando l'utente indovina il numero.

Mostra la soluzione
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int main() {
    srand(time(0));
    int numero_segreto = rand() % 100 + 1;
    int tentativo;
    int tentativi = 0;

    cout << "Indovina il numero segreto (1-100)!" << endl;

    do {
        cout << "Inserisci il tuo tentativo: ";
        cin >> tentativo;
        tentativi++;

        if (tentativo < numero_segreto) {
            cout << "Troppo basso! Prova ancora." << endl;
        } else if (tentativo > numero_segreto) {
            cout << "Troppo alto! Prova ancora." << endl;
        } else {
            cout << "Complimenti! Hai indovinato in " << tentativi << " tentativi." << endl;
        }
    } while (tentativo != numero_segreto);

    return 0;
}

5. Gli Array in C++

📌 Argomenti: Dichiarazione array, accesso agli elementi, array multidimensionali, operazioni su array

5.1 Media degli elementi

Scrivi un programma che calcola la media degli elementi di un array di 10 numeri.

Mostra la soluzione
#include <iostream>
using namespace std;

int main() {
    const int DIM = 5;
    double numeri[DIM];
    double somma = 0;

    cout << "Inserisci " << DIM << " numeri:" << endl;
    for (int i = 0; i < DIM; i++) {
        cin >> numeri[i];
        somma += numeri[i];
    }

    cout << "La media è: " << somma / DIM << endl;
    return 0;
}

5.2 Ricerca elemento

Crea un programma che verifica se un numero inserito tramite input è presente in un array.

Mostra la soluzione
#include <iostream>
using namespace std;

int main() {
    const int DIM = 5;
    int numeri[DIM] = {10, 20, 30, 40, 50};
    int ricerca;
    bool trovato = false;

    cout << "Inserisci il numero da cercare: ";
    cin >> ricerca;

    for (int i = 0; i < DIM; i++) {
        if (numeri[i] == ricerca) {
            trovato = true;
            break;
        }
    }

    if (trovato) {
        cout << "Numero trovato!" << endl;
    } else {
        cout << "Numero non trovato." << endl;
    }
    return 0;
}

5.3 Massimo e minimo

Scrivi un programma che trova il valore massimo e minimo in un array.

Mostra la soluzione
#include <iostream>
using namespace std;

int main() {
    const int DIM = 5;
    int numeri[DIM] = {12, 45, 7, 23, 9};
    int max = numeri[0], min = numeri[0];

    for (int i = 1; i < DIM; i++) {
        if (numeri[i] > max) max = numeri[i];
        if (numeri[i] < min) min = numeri[i];
    }

    cout << "Massimo: " << max << endl;
    cout << "Minimo: " << min << endl;
    return 0;
}

5.4 Inversione array

Crea un programma che inverte l'ordine degli elementi di un array.

Mostra la soluzione
#include <iostream>
using namespace std;

int main() {
    const int DIM = 5;
    int numeri[DIM] = {1, 2, 3, 4, 5};

    cout << "Array originale: ";
    for (int i = 0; i < DIM; i++) cout << numeri[i] << " ";

    // Inversione
    for (int i = 0; i < DIM/2; i++) {
        int temp = numeri[i];
        numeri[i] = numeri[DIM-1-i];
        numeri[DIM-1-i] = temp;
    }

    cout << "\nArray invertito: ";
    for (int i = 0; i < DIM; i++) cout << numeri[i] << " ";

    return 0;
}

5.5 Somma di due array

Scrivi un programma che somma gli elementi di due array e memorizza il risultato in un terzo array.

Mostra la soluzione
#include <iostream>
using namespace std;

int main() {
    const int DIM = 5;
    int a[DIM] = {1, 2, 3, 4, 5};
    int b[DIM] = {10, 20, 30, 40, 50};
    int c[DIM];

    for (int i = 0; i < DIM; i++) {
        c[i] = a[i] + b[i];
    }

    cout << "Array risultante: ";
    for (int i = 0; i < DIM; i++) cout << c[i] << " ";
    return 0;
}

6. Le Funzioni in C++

📌 Argomenti: Dichiarazione funzioni, parametri, valori di ritorno, ricorsione, overload

6.1 Funzione somma

Crea una funzione che calcola la somma di due numeri e un programma che la utilizza.

Mostra la soluzione
#include <iostream>
using namespace std;

int somma(int a, int b) {
    return a + b;
}

int main() {
    int num1, num2;
    cout << "Inserisci due numeri: ";
    cin >> num1 >> num2;
    cout << "La somma è: " << somma(num1, num2) << endl;
    return 0;
}

6.2 Funzione fattoriale

Scrivi una funzione che calcola il fattoriale di un numero e un programma che la utilizza.

Mostra la soluzione
#include <iostream>
using namespace std;

long long fattoriale(int n) {
    long long risultato = 1;
    for (int i = 2; i <= n; i++) {
        risultato *= i;
    }
    return risultato;
}

int main() {
    int num;
    cout << "Inserisci un numero: ";
    cin >> num;
    cout << "Il fattoriale è: " << fattoriale(num) << endl;
    return 0;
}

6.3 Funzione per numeri primi

Crea una funzione che verifica se un numero è primo e un programma che la utilizza.

Mostra la soluzione
#include <iostream>
using namespace std;

bool isPrimo(int n) {
    if (n <= 1) return false;
    for (int i = 2; i*i <= n; i++) {
        if (n % i == 0) return false;
    }
    return true;
}

int main() {
    int num;
    cout << "Inserisci un numero: ";
    cin >> num;
    cout << num << (isPrimo(num) ? " è primo" : " non è primo") << endl;
    return 0;
}

6.4 Funzione per array

Scrivi una funzione che stampa un array e un programma che la utilizza.

Mostra la soluzione
#include <iostream>
using namespace std;

void stampaArray(int arr[], int dim) {
    for (int i = 0; i < dim; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;
}

int main() {
    const int DIM = 5;
    int numeri[DIM] = {1, 2, 3, 4, 5};
    stampaArray(numeri, DIM);
    return 0;
}

6.5 Funzione ricorsiva

Crea una funzione ricorsiva che calcola la somma dei numeri da 1 a N.

Mostra la soluzione
#include <iostream>
using namespace std;

int sommaRicorsiva(int n) {
    if (n == 1) return 1;
    return n + sommaRicorsiva(n-1);
}

int main() {
    int num;
    cout << "Inserisci un numero: ";
    cin >> num;
    cout << "La somma è: " << sommaRicorsiva(num) << endl;
    return 0;
}

7. Ordinamento dei Dati

📌 Argomenti: Algoritmi di ordinamento: Bubble Sort, Selection Sort, ordinamento stringhe

7.1 Bubble Sort

Implementa l'algoritmo di ordinamento Bubble Sort per ordinare un array.

Mostra la soluzione
#include <iostream>
using namespace std;

void bubbleSort(int arr[], int n) {
    for (int i = 0; i < n-1; i++) {
        for (int j = 0; j < n-i-1; j++) {
            if (arr[j] > arr[j+1]) {
                // Scambia
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
}

int main() {
    const int DIM = 5;
    int numeri[DIM] = {64, 34, 25, 12, 22};

    bubbleSort(numeri, DIM);

    cout << "Array ordinato: ";
    for (int i = 0; i < DIM; i++) cout << numeri[i] << " ";
    return 0;
}

7.2 Selection Sort

Implementa l'algoritmo di ordinamento Selection Sort per ordinare un array.

Mostra la soluzione
#include <iostream>
using namespace std;

void selectionSort(int arr[], int n) {
    for (int i = 0; i < n-1; i++) {
        int min_idx = i;
        for (int j = i+1; j < n; j++) {
            if (arr[j] < arr[min_idx]) {
                min_idx = j;
            }
        }
        // Scambia
        int temp = arr[min_idx];
        arr[min_idx] = arr[i];
        arr[i] = temp;
    }
}

int main() {
    const int DIM = 5;
    int numeri[DIM] = {64, 25, 12, 22, 11};

    selectionSort(numeri, DIM);

    cout << "Array ordinato: ";
    for (int i = 0; i < DIM; i++) cout << numeri[i] << " ";
    return 0;
}

7.3 Ordinamento stringhe

Scrivi un programma che ordina un array di stringhe in ordine alfabetico.

Mostra la soluzione
#include <iostream>
#include <string>
using namespace std;

void ordinaStringhe(string arr[], int n) {
    for (int i = 0; i < n-1; i++) {
        for (int j = 0; j < n-i-1; j++) {
            if (arr[j] > arr[j+1]) {
                string temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
}

int main() {
    const int DIM = 5;
    string parole[DIM] = {"banana", "mela", "arancia", "kiwi", "uva"};

    ordinaStringhe(parole, DIM);

    cout << "Parole ordinate: ";
    for (int i = 0; i < DIM; i++) cout << parole[i] << " ";
    return 0;
}

7.4 Ordinamento decrescente

Modifica un algoritmo di ordinamento per ordinare in ordine decrescente.

Mostra la soluzione
#include <iostream>
using namespace std;

void bubbleSortDecrescente(int arr[], int n) {
    for (int i = 0; i < n-1; i++) {
        for (int j = 0; j < n-i-1; j++) {
            if (arr[j] < arr[j+1]) {  // Cambiato > con <
                // Scambia
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
}

int main() {
    const int DIM = 5;
    int numeri[DIM] = {12, 45, 7, 23, 9};

    bubbleSortDecrescente(numeri, DIM);

    cout << "Array ordinato decrescente: ";
    for (int i = 0; i < DIM; i++) cout << numeri[i] << " ";
    return 0;
}

8. Le Struct in C++

📌 Argomenti: Definizione struct, membri, array di struct, funzioni con struct

8.1 Struct punto

Crea una struct per rappresentare un punto 2D e calcola la distanza tra due punti.

Mostra la soluzione
#include <iostream>
#include <cmath>
using namespace std;

struct Punto {
    double x;
    double y;
};

double distanza(Punto p1, Punto p2) {
    return sqrt(pow(p2.x - p1.x, 2) + pow(p2.y - p1.y, 2));
}

int main() {
    Punto a = {1.0, 2.0};
    Punto b = {4.0, 6.0};

    cout << "Distanza: " << distanza(a, b) << endl;
    return 0;
}

8.2 Struct studente

Crea una struct per rappresentare uno studente e stampa i suoi dati.

Mostra la soluzione
#include <iostream>
#include <string>
using namespace std;

struct Studente {
    string nome;
    string cognome;
    int eta;
    double media;
};

void stampaStudente(Studente s) {
    cout << "Nome: " << s.nome << endl;
    cout << "Cognome: " << s.cognome << endl;
    cout << "Età: " << s.eta << endl;
    cout << "Media: " << s.media << endl;
}

int main() {
    Studente s1 = {"Mario", "Rossi", 20, 8.5};
    stampaStudente(s1);
    return 0;
}

8.3 Array di struct

Crea un array di struct e calcola la media dei valori.

Mostra la soluzione
#include <iostream>
using namespace std;

struct Valore {
    int numero;
    double peso;
};

double calcolaMedia(Valore valori[], int n) {
    double somma = 0;
    for (int i = 0; i < n; i++) {
        somma += valori[i].numero * valori[i].peso;
    }
    return somma / n;
}

int main() {
    const int DIM = 3;
    Valore valori[DIM] = {{10, 1.0}, {20, 0.5}, {30, 1.5}};

    cout << "Media pesata: " << calcolaMedia(valori, DIM) << endl;
    return 0;
}

9. I Puntatori

📌 Argomenti: Dichiarazione puntatori, dereferenziazione, puntatori e array, puntatori e funzioni

9.1 Operazioni base

Scrivi un programma che dimostra l'uso base dei puntatori.

Mostra la soluzione
#include <iostream>
using namespace std;

int main() {
    int num = 10;
    int *ptr = &num;

    cout << "Valore: " << num << endl;
    cout << "Indirizzo: " << &num << endl;
    cout << "Valore tramite puntatore: " << *ptr << endl;

    *ptr = 20; // Modifica il valore tramite puntatore
    cout << "Nuovo valore: " << num << endl;

    return 0;
}

9.2 Puntatori e array

Mostra come usare i puntatori per accedere agli elementi di un array.

Mostra la soluzione
#include <iostream>
using namespace std;

int main() {
    int numeri[5] = {10, 20, 30, 40, 50};
    int *ptr = numeri; // Puntatore al primo elemento

    for (int i = 0; i < 5; i++) {
        cout << "Elemento " << i << ": " << *(ptr + i) << endl;
    }

    return 0;
}

9.3 Puntatori e funzioni

Scrivi una funzione che scambia due numeri usando i puntatori.

Mostra la soluzione
#include <iostream>
using namespace std;

void scambia(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

int main() {
    int x = 10, y = 20;
    cout << "Prima: x=" << x << ", y=" << y << endl;
    scambia(&x, &y);
    cout << "Dopo: x=" << x << ", y=" << y << endl;
    return 0;
}

10. Programmazione Orientata agli Oggetti (OOP)

📌 Argomenti: Classi, oggetti, incapsulamento, ereditarietà, polimorfismo

10.1 Classe base

Crea una classe semplice che rappresenta un rettangolo.

Mostra la soluzione
#include <iostream>
using namespace std;

class Rettangolo {
private :
    double base;
    double altezza;

public :
    void setDimensioni(double b, double h) {
        base = b;
        altezza = h;
    }

    double area() {
        return base * altezza;
    }

    double perimetro() {
        return 2 * (base + altezza);
    }
};

int main() {
    Rettangolo r;
    r.setDimensioni(5.0, 3.0);
    cout << "Area: " << r.area() << endl;
    cout << "Perimetro: " << r.perimetro() << endl;
    return 0;
}

10.2 Costruttori

Aggiungi costruttori alla classe Rettangolo.

Mostra la soluzione
#include <iostream>
using namespace std;

class Rettangolo {
private :
    double base;
    double altezza;

public :
    Rettangolo() : base(1.0), altezza(1.0) {} // Costruttore default

    Rettangolo(double b, double h) { // Costruttore con parametri
        base = b;
        altezza = h;
    }

    double area() {
        return base * altezza;
    }
};

int main() {
    Rettangolo r1; // Usa costruttore default
    Rettangolo r2(5.0, 3.0); // Usa costruttore con parametri

    cout << "Area r1: " << r1.area() << endl;
    cout << "Area r2: " << r2.area() << endl;

    return 0;
}

10.3 Ereditarietà

Crea una classe derivata da Rettangolo per rappresentare un parallelepipedo.

Mostra la soluzione
#include <iostream>
using namespace std;

class Rettangolo {
protected :
    double base;
    double altezza;

public :
    Rettangolo(double b, double h) : base(b), altezza(h) {}

    double area() {
        return base * altezza;
    }
};

class Parallelepipedo : public Rettangolo {
private :
    double profondita;

public :
    Parallelepipedo(double b, double h, double p) : Rettangolo(b, h), profondita(p) {}

    double volume() {
        return area() * profondita;
    }
};

int main() {
    Parallelepipedo p(5.0, 3.0, 2.0);
    cout << "Volume: " << p.volume() << endl;
    return 0;
}

10.4 Polimorfismo

Dimostra il polimorfismo con funzioni virtuali.

Mostra la soluzione
#include <iostream>
using namespace std;

class Forma {
public :
    virtual void disegna() {
        cout << "Disegno una forma generica" << endl;
    }
};

class Cerchio : public Forma {
public :
    void disegna() override {
        cout << "Disegno un cerchio" << endl;
    }
};

class Rettangolo : public Forma {
public :
    void disegna() override {
        cout << "Disegno un rettangolo" << endl;
    }
};

int main() {
    Cerchio c;
    Rettangolo r;
    Forma f;

    Forma* forma1 = &c;
    Forma* forma2 = &r;
    Forma* forma3 = &f;

    forma1->disegna(); // Disegno un cerchio
    forma2->disegna(); // Disegno un rettangolo
    forma3->disegna(); // Disegno una forma generica

    return 0;
}

Esercitazioni Pratiche C++

Metti in pratica ciò che hai imparato con queste esercitazioni complete

Tutte le Esercitazioni

📊 Variabili e Tipi di Dato

➕ Operatori Matematici e Logici in C++

🔀 Strutture di controllo condizionali

🔄 I cicli in C++

🗃️ C++ gli array

⚙️ Le funzioni in C++

📈 Ordinamento dei Dati

🏗️ Le struct in C++

🎯 I puntatori

🧩 La Programmazione Orientata agli Oggetti (OOP)

📁 La gestione dei file in C++

💪 Esercizi C++ Raccolta Completa

12 esercitazioni complete per padroneggiare il C++