Untitled

mail@pastecode.io avatar
unknown
c_cpp
3 years ago
2.7 kB
2
Indexable
Never
#include <iostream>

using namespace std;

/*3) Il gioco delle due bottiglie
Il gioco delle due bottiglie è questo: Si hanno due bottiglie, una contiene 5 litri esatti d'acqua e l'altra 3. 
Le bottiglie possono essere riempite al massimo o svuotate completamente. Si può anche travasare 
l'acqua contenuta in una bottiglia nell'altra, in questo caso se la seconda bottiglia contiene tutta l'acqua della prima, la prima viene 
svuotata completamente, altrimenti conterrà la restante parte d'acqua che non si è riusciti a travasare.

Creare la classe Bottiglia che ha due variabili membro intere, la capacità massima e lo stato (che indica quanti litri d'acqua contiene). 
La classe non ha costruttori e ha una procedura void inizializza(int c) che prende come parametro d'ingresso la capacità e inizializza 
lo stato a 0. La capacità non deve essere modificata, ma solo letta, mentre lo stato può essere cambiato solo 
tramite le funzioni svuota(int litri) e riempi(int litri). Controllare che la capacità sia maggiore di 0 (minimo 1) e che lo stato 
sia sempre contenuto tra 0 e la capacità.

Creare la classe gioco che contiene le due bottiglie d'acqua, tramite apposite funzioni 
permette all'utente di riempire e svuotare le due bottiglie. Le bottiglie devono essere modificate solo dalle funzioni

svuotaBottiglia1();

svuotaBottiglia2();

riempiBottiglia1();

riempiBottiglia2();

versa2in1();

versa1in2();

Implementare anche due metodi getter per sapere quanti litri contengono entrambe le bottiglie. Sovraccaricare l'operatore 
di output << per stampare lo stato e la capacità di ogni bottiglia.

Creare le due classi in due file differenti.
*/

class Bottiglia {
public:
	void inizializza(int c) {
		capacitaMax = c;
		stato = 0;
		if (checkCapacitaMax() == false)
			cout << "Errore nella capacita' max!";
		if (checkStato() == false)
			cout << "Errore nello stato!";
	}
	int getCapacitaMax() {
		return capacitaMax;
	}
	bool checkCapacitaMax() {
		if (capacitaMax > 0)
			return true;
		return false;
	}
	bool checkStato() {
		if (stato >= 0 && stato <= capacitaMax)
			return true;
		return false;
	}
	void svuotaBottiglia() {
		stato = 0;
	}
	void riempiBottiglia() {
		stato = getCapacitaMax();
	}
	int getStato() {
		return stato;
	}
	void travasa(Bottiglia& istanza1, Bottiglia&istanza2) {
		if (istanza1.getCapacitaMax() < istanza2.getCapacitaMax()) {
			istanza2.stato = istanza1.getCapacitaMax();
			istanza1.stato = 0;
		}
		else {
			istanza2.stato = istanza2.getCapacitaMax();
			istanza1.stato = (istanza1.getCapacitaMax() - istanza2.getCapacitaMax());
		}
	}
private:
	int capacitaMax;
	int stato;
};