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 = #
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
12 esercitazioni complete per padroneggiare il C++