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

Soluzione:

#include <iostream>
using namespace std;

void doppio_alt(int &n){
    n = n * 2;
}

int main(){
    int numero = 7;
    doppio_alt(numero);
    cout << numero << endl;
    return 0;
}

Esercizio 2

Scrivere una funzione che riceve in input un array ordinato di interi positivi e la sua dimensione, e restituisce il più piccolo elemento mancante nella sequenza dell’array. Scrivere anche il programma principale (main) per invocare la funzione sia su un array con elementi mancanti, sia su un array senza elementi mancanti. Stampare a video i risultati ottenuti

Esempio:

  • Se l’array è composto dai seguenti valori: {0, 1, 2, 6, 9, 11, 15}, la funzione deve tornare 3.
  • Se l’array è composto dai seguenti valori: {0,1,2,3,4,5,6,7}, la funzione deve tornare -1.

Soluzione

#include <iostream>
using namespace std;

int elementoMancante(int arr[], int n){ 
    
    // scorro tutti gli elementi dell'array
    for(int i=0; i<n-1; i++){
        
        // se elemento successivo non è elemento + 1, allora elemento + 1 è il mancante
        if(arr[i+1] != arr[i] + 1){
            return arr[i] + 1; // ritorno il valore (esce tutto)
        }
    }

    // se arriviamo qui significa che non manca nulla: l'array è ordinato e completo
    return -1;
}

int main(){

    int arr1[] = {0,1,2,6,9,11,15}; // qui buchi
    int arr2[] = {0,1,2,3,4,5,6,7}; // qui no buchi

    cout << elementoMancante(arr1,7) << endl; // stampa 3
    cout << elementoMancante(arr2,8) << endl; // stampa -1

    return 0;
}

Esercizio 3

Definire le strutture (struct) necessarie per rappresentare un ospedale, modellando al suo interno medici e pazienti.

  • Un ospedale è un’organizzazione composta da personale medico e da pazienti.
  • Ogni medico è descritto da nome, cognome, specializzazione, reparto di appartenenza ed email istituzionale.
  • Ogni paziente è descritto da nome, cognome, codice fiscale, età, reparto di ricovero e medico assegnato.
  • L’ospedale può contenere al massimo 200 medici e 500 pazienti.

Definire anche un main in cui testare le strutture

Soluzione

#include <iostream>
using namespace std;

struct Medico{
    string nome;
    string cognome;
    string specializzazione;
    string reparto;
    string email;
};

struct Paziente{
    string nome;
    string cognome;
    string codiceFiscale;
    int eta;
    string reparto;
    string medicoAssegnato;
};

struct Ospedale{
    Medico medici[200];
    Paziente pazienti[500];
};

int main(){
    Ospedale o;

    o.medici[0].nome="Mario";
    o.medici[0].cognome="Rossi";
    o.medici[0].specializzazione="Cardiologia";
    o.medici[0].reparto="Cardiologia";
    o.medici[0].email="m.rossi@ospedale.it";

    o.pazienti[0].nome="Luca";
    o.pazienti[0].cognome="Bianchi";
    o.pazienti[0].codiceFiscale="BNC123AAA";
    o.pazienti[0].eta=44;
    o.pazienti[0].reparto="Cardiologia";
    o.pazienti[0].medicoAssegnato="Mario Rossi";

    // STAMPE richieste
    cout << "--- MEDICO ---" << endl;
    cout << "Nome: " << o.medici[0].nome << endl;
    cout << "Cognome: " << o.medici[0].cognome << endl;
    cout << "Specializzazione: " << o.medici[0].specializzazione << endl;
    cout << "Reparto: " << o.medici[0].reparto << endl;
    cout << "Email: " << o.medici[0].email << endl << endl;

    cout << "--- PAZIENTE ---" << endl;
    cout << "Nome: " << o.pazienti[0].nome << endl;
    cout << "Cognome: " << o.pazienti[0].cognome << endl;
    cout << "Codice Fiscale: " << o.pazienti[0].codiceFiscale << endl;
    cout << "Eta: " << o.pazienti[0].eta << endl;
    cout << "Reparto: " << o.pazienti[0].reparto << endl;
    cout << "Medico Assegnato: " << o.pazienti[0].medicoAssegnato << endl;

    return 0;
}