Esercizi di Lettura Codice - Oggetti in C++
Esercizio 1
La seguente funzione doppio duplica qualsiasi numero passato in output e restituisce il risultato. Scrivere una nuova funzione doppio_alt avente stesso comportamento, ma senza restituzione del parametro di ritorno. La funzione deve modificare il valore passato in input. Inoltre, aggiungere nel main testing della funzione.
#include <iostream>
using namespace std;
int doppio(int n) {
return n * 2;
}
int main() {
int numero = 7;
numero = doppio(numero);
cout << numero << endl;
doppio_alt(numero);
cout << numero << endl;
return 0;
}
Soluzione:
void doppio_alt(int &n) {
n = n * 2;
}
int main() {
int numero = 7;
numero = doppio(numero);
cout << numero << endl;
doppio_alt(numero);
cout << numero << endl;
return 0;
}
Esercizio 2
Scrivere una funzione che riceve in input un array di numeri interi e la sua dimensione, e restituisce un valore booleano che indica se l’array è ordinato in modo crescente. Un array è ordinato in maniera crescente se ogni elemento è minore o uguale al successivo. Scrivere anche il programma principale (main) per invocare la funzione, sia su un array ordinato sia su un array non ordinato. Stampare a video i risultati ottenuti Esempio: {0,1,3,5,8,10} la funzione restituisce true {1,2,2,2,7,10} la funzione restituisce true {3,6,2,8,9,10} la funzione restituisce false
Soluzione:
bool ordinato(int arr[], int dim) {
// controlliamo se ogni elemento è <= del successivo
for (int i = 0; i < dim - 1; i++) {
// se troviamo un elemento maggiore del successivo, non è ordinato
if (arr[i] > arr[i + 1]) {
return false;
}
}
// se non abbiamo trovato problemi, è ordinato
return true;
}
int main() {
int arr1[] = {0,1,3,5,8,10};
int arr2[] = {3,6,2,8,9,10};
cout << ordinato(arr1, 6) << endl; // true
cout << ordinato(arr2, 6) << endl; // false
return 0;
}
Esercizio 3
Definire le strutture (struct) necessarie per rappresentare una squadra di calcio, modellando rispettivamente squadra, giocatori e allenatore.
- Una squadra ha un nome ed è composta da giocatori (22 componenti) e allenatori (3 componenti)
- Ogni giocatore ha: nome, cognome, numero di maglia, ruolo (portiere, difensore, centrocampista, attaccante) e numero di goal segnati.
- L’allenatore ha: nome, cognome, anni
Definire anche un main in cui testare le strutture
Soluzione:
struct Giocatore {
string nome;
string cognome;
int numeroMaglia;
string ruolo;
int goal;
};
struct Allenatore {
string nome;
string cognome;
int anni;
};
struct Squadra {
string nome;
Giocatore giocatori[22];
Allenatore allenatori[3];
};
int main() {
Squadra s;
s.nome = "AC Milan";
s.giocatori[0] = {"Mario","Rossi",9,"Attaccante",12};
s.allenatori[0] = {"Luca","Bianchi",45};
cout << "Nome squadra: " << s.nome << endl;
cout << "\n--- Giocatore 0 ---" << endl;
cout << "Nome: " << s.giocatori[0].nome << endl;
cout << "Cognome: " << s.giocatori[0].cognome << endl;
cout << "Numero maglia: " << s.giocatori[0].numeroMaglia << endl;
cout << "Ruolo: " << s.giocatori[0].ruolo << endl;
cout << "Goal segnati: " << s.giocatori[0].goal << endl;
cout << "\n--- Allenatore 0 ---" << endl;
cout << "Nome: " << s.allenatori[0].nome << endl;
cout << "Cognome: " << s.allenatori[0].cognome << endl;
cout << "Anni: " << s.allenatori[0].anni << endl;
return 0;
}