Ingresso al cinema con riduzione per età e controllo sul prezzo inserito in C++

Un esercizio svolto sui libri di testo in ogni salsa. Approfittiamo per vedere alcune finezze del codice C++ con l'uso del define e il controllo dell'input con un ciclo.

Tre persone entrano al cinema. Dichiarano all’ingresso la loro età. Se sono minori di 10 anni o maggiori di 80 pagano il biglietto con sconto del 10%, altrimenti pagano prezzo pieno. Calcola quanto spendono in totale. Il prezzo è inserito da tastiera. Crea un piccolo ciclo per controllare l’inserimento del prezzo: se si inserisce zero o un valore negativo, il ciclo richiede l’inserimento.

Cosa possiamo notare in questo esercizio. Prima di tutto impostiamoci dei define per le età limite e lo sconto. Impostare queste varibili come fisse e definite permette di risparmiare codice qualora i valori scelti vogliono essere variati (es. da 80 a 85 o da 10 a 14) senza dover ricambiare tante, troppe righe di codice dove ivece i valori numerici sono "cablati" proprio col numeretto.

Il controllo del valore di input del prezzo è semplice anche se poco intuitivo per i neofiti dei cicli. Fatto sta che l'operazione di input col cin la devo ripetere ad oltranza finché non viene inserito un valore positivo, quindi il ciclo deve continuare con la condizione minore-uguale di zero.

Il resto del problema vede il controllo dell'età con il blocco selezione e l'uso dell'operatore logico "o"

/*
Tre persone entrano al cinema. Dichiarano all’ingresso la loro età. Se sono minori di 10 anni o maggiori di 80 pagano il biglietto con sconto del 10%, altrimenti pagano prezzo pieno. Calcola quanto spendono in totale. Il prezzo è inserito da tastiera. Crea un piccolo ciclo per controllare l’inserimento del prezzo: se si inserisce zero o un valore negativo, il ciclo richiede l’inserimento.
*/
#include <iostream>

using namespace std;

#define sconto 10
#define etamax 80
#define etamin 10

int main() 
{
  int eta1;
  int eta2;
  int eta3;
  float prezzo = 0;
  float prezzoscontato;
  float totale = 0;

  cout << "Inserisci l'età della prima persona ";
  cin >> eta1;
  cout << "Inserisci l'età della seconda persona ";
  cin >> eta2;
  cout << "Inserisci l'età della terza persona ";
  cin >> eta3;    

  //controllo di validità del prezzo inserito
  while (prezzo <=0)
  {
    cout << "Inserisci il prezzo del biglietto ";
    cin >> prezzo;
  }

  prezzoscontato = prezzo - (prezzo * sconto / 100);

  if (eta1 < etamin || eta1 > etamax)
  {
    totale = totale + prezzoscontato;
  }
  else
  {
    totale = totale + prezzo;
  }

  if (eta2 < etamin || eta2 > etamax)
  {
    totale = totale + prezzoscontato;
  }
  else
  {
    totale = totale + prezzo;
  }

  if (eta3 < etamin || eta3 > etamax)
  {
    totale = totale + prezzoscontato;
  }
  else
  {
    totale = totale + prezzo;
  }  

  cout << "Il totale pagato e' " << totale;
  
  getchar();
  return 0;
}