Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdlib> //per exit()
- import std;
- /* forma moderna c++ 23 (la useremo dopo aver visto le lambda)
- *
- * auto main() -> int { }
- */
- /* Questo programma calcola l'Indice di Massa Corporea (IMC) che si ottiene dividendo il peso corporeo (in kg)
- per il quadrato dell'altezza (in metri); il valore in kg è un numero intero; il valore in metri è un numero reale
- il risultato è un numero reale */
- // ***** NO viola RSP in piú punti *****
- //void test_e_pulizia(std::string messaggio)
- //{
- // if (std::cin.fail())
- // {
- // //una o 1000 istruzioni da eseguire se la condizione è vera
- // std::println("{} non valido! Il programma termina", messaggio);
- // exit(1); //programma terminato con errori
- // }
- //
- //
- // //puliamo il buffer per evitare scherzetti con input tipo 123abc
- // std::string spazzatura = "";
- // std::getline(std::cin, spazzatura);
- // if (spazzatura != "")
- // {
- // std::println("Dati in lettura in eccesso: {} che ignoro ...", spazzatura);
- // }
- //}
- //Fa solo pulizia *silenziosa* (SRP Rispettato)
- void pulisci_buffer()
- {
- std::cin.clear();
- std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
- }
- template<typename T>
- T richiedi_numero(std::string messaggio_richiesta_intero)
- {
- T valore = 0;
- std::print("{}", messaggio_richiesta_intero);
- std::cin >> valore;
- if (std::cin.fail())
- {
- std::cin.clear();
- //dato errato
- std::string spazzatura;
- std::getline(std::cin, spazzatura);
- std::println("Errore: '{}' non è parte di un numero! Riprova.", spazzatura);
- }
- else
- {
- pulisci_buffer();
- }
- return valore;
- }
- int main() {
- //1. DICHIARAZIONE VARIABILI
- int peso_kg{ 70 }; //per input
- double altezza_m{ 1.75 }; //per input
- double IMC{ 0.0 }; //per calcolo e output
- //2. INPUT O INGRESSI
- peso_kg = richiedi_numero<int>("dimmi quanto pesi: ");
- if (peso_kg <= 0)
- {
- std::println("Peso non valido! Il programma termina");
- return 1; //programma terminato con errori
- }
- altezza_m = richiedi_numero<double>("dimmi quanto sei alto: ");
- //3. ELABORAZIONE
- IMC = peso_kg / (altezza_m * altezza_m);
- //4 OUTPUT O USCITE
- std::println("IMC calcolato: {}", IMC);
- return 0; //programma terminato senza errori
- }
Advertisement
Add Comment
Please, Sign In to add comment