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 */
- //Fa solo pulizia *silenziosa* (SRP Rispettato)
- std::string pulisci_buffer()
- {
- std::cin.clear();
- //std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
- std::string spazzatura;
- getline(std::cin, spazzatura);
- return spazzatura;
- }
- template<typename T>
- std::expected<T, std::string> 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);
- return std::unexpected("Errore: '" + spazzatura + "' non è un numero valido!");
- }
- if (pulisci_buffer() != "")
- {
- return std::unexpected("Errore: input non valido, ci sono caratteri extra dopo il numero!");
- }
- 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
- auto risultato = richiedi_numero<int>("dimmi quanto pesi: ");
- if (!risultato) //input tecnicamente NON valido
- {
- std::println("Errore: {}", risultato.error());
- return 1; //programma terminato con errori
- }
- peso_kg = risultato.value();
- if (peso_kg <= 0)
- {
- std::println("Peso non valido! Il programma termina");
- return 1; //programma terminato con errori
- }
- auto risultato2 = richiedi_numero<double>("dimmi quanto sei alto: ");
- if (!risultato2) //input tecnicamente NON valido
- {
- std::println("Errore: {}", risultato2.error());
- return 1; //programma terminato con errori
- }
- altezza_m = risultato2.value();
- if (altezza_m <= 0)
- {
- std::println("Altezza non valida! Il programma termina");
- return 1; //programma terminato con errori
- }
- //tecnica alternativa di consumo di expected
- //3. ELABORAZIONE
- IMC = peso_kg / (altezza_m * altezza_m);
- //4 OUTPUT O USCITE
- std::println("IMC calcolato: {}", IMC);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment