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;
}