fcamuso

c++ 23: lez 16

Mar 10th, 2026
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.27 KB | None | 0 0
  1. #include <cstdlib> //per exit()
  2. import std;
  3.  
  4. /* forma moderna c++ 23 (la useremo dopo aver visto le lambda)
  5.  *
  6.  *      auto main() -> int { }
  7.  */
  8.  
  9.  
  10.  /*  Questo programma calcola l'Indice di Massa Corporea (IMC) che  si ottiene dividendo il peso corporeo (in kg)
  11.      per il quadrato dell'altezza (in metri); il valore in kg è un numero intero; il valore in metri è un numero reale
  12.      il risultato è un numero reale */
  13.  
  14.  
  15. // *****  NO viola RSP in piú punti   *****
  16. //void test_e_pulizia(std::string messaggio)
  17. //{
  18. //  if (std::cin.fail())
  19. //  {
  20. //      //una o 1000 istruzioni da eseguire se la condizione è vera
  21. //      std::println("{} non valido! Il programma termina", messaggio);
  22. //      exit(1); //programma terminato con errori
  23. //  }
  24. //
  25. //
  26. //  //puliamo il buffer per evitare scherzetti con input tipo 123abc
  27. //  std::string spazzatura = "";
  28. //  std::getline(std::cin, spazzatura);
  29. //  if (spazzatura != "")
  30. //  {
  31. //      std::println("Dati in lettura in eccesso: {} che ignoro ...", spazzatura);
  32. //  }
  33. //}  
  34.  
  35. //Fa solo pulizia *silenziosa* (SRP Rispettato)
  36. void pulisci_buffer()
  37. {
  38.     std::cin.clear();
  39.     std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
  40. }
  41.  
  42. template<typename T>
  43. T richiedi_numero(std::string messaggio_richiesta_intero)
  44. {
  45.     T valore = 0;
  46.  
  47.     std::print("{}", messaggio_richiesta_intero);
  48.     std::cin >> valore;
  49.  
  50.     if (std::cin.fail())
  51.     {
  52.         std::cin.clear();
  53.  
  54.         //dato errato
  55.         std::string spazzatura;
  56.         std::getline(std::cin, spazzatura);
  57.  
  58.         std::println("Errore: '{}' non è parte di un numero! Riprova.", spazzatura);
  59.     }
  60.     else
  61.     {
  62.         pulisci_buffer();
  63.     }
  64.  
  65.  
  66.     return valore;
  67. }
  68.  
  69.  
  70.  int main() {
  71.  
  72.     //1. DICHIARAZIONE VARIABILI
  73.     int peso_kg{ 70 };          //per input    
  74.     double altezza_m{ 1.75 };   //per input
  75.  
  76.     double IMC{ 0.0 };          //per calcolo e output
  77.  
  78.    
  79.     //2. INPUT O INGRESSI
  80.     peso_kg = richiedi_numero<int>("dimmi quanto pesi: ");
  81.  
  82.     if (peso_kg <= 0)
  83.     {
  84.         std::println("Peso non valido! Il programma termina");
  85.         return 1; //programma terminato con errori
  86.     }
  87.    
  88.    
  89.     altezza_m = richiedi_numero<double>("dimmi quanto sei alto: ");
  90.  
  91.     //3. ELABORAZIONE
  92.     IMC = peso_kg / (altezza_m * altezza_m);
  93.  
  94.  
  95.     //4 OUTPUT O USCITE
  96.     std::println("IMC calcolato: {}", IMC);
  97.  
  98.     return 0; //programma terminato senza errori
  99. }
  100.  
  101.  
  102.  
  103.  
  104.  
Advertisement
Add Comment
Please, Sign In to add comment