kalkulator bmi
Ostatnio zmodyfikowano 2020-02-13 22:14
| klosu Temat założony przez niniejszego użytkownika | kalkulator bmi » 2020-02-01 14:45:51 Dzień dobry, jestem osobą zaczynającą przygodę z c++. Narodził mi się pomysł w głowie żeby zrobić kalkulator bmi, niestety podając wartości wagi oraz wzrostu po obliczeniu ze wzoru wychodzi mi wartośc np 0,002241. Kieruje się o pomoc do was jak zrobić, żeby wynik nie zawierał na trzech pierwszy miejscach 0.wysyłam do was w formie pisemnej początek kodu oraz czekam na wytłumaczenie mi jakby można było mój problem rozwiązać.
 
 
 #include <iostream>
 
 
 using namespace std;
 
 int main()
 
 {
 int waga;
 double wzrost, bmi;
 
 cout << "Prosze, podaj swoja wage." << endl;
 cin >> waga; cout << endl;
 cout << "Prosze, podaj swoj wzrost." << endl;
 cin >> wzrost; cout << endl;
 bmi = waga /( wzrost * wzrost );
 cout << "Twoje bmi wynosi: " << bmi << endl;
 
 
 
 cout << "Komentarz odnosnie twej wagi: " << endl;
 
 return 0;
 }
 
 | 
|  | 
| DejaVu | » 2020-02-01 16:21:31 | 
|  | 
| nanoant20 | przykładowe rozwiązanie » 2020-02-12 11:21:26 Jako programista powinieneś kontrolować lub starać się przewidzieć jakie dane może wprowadzać użytkownik,  a nawet uniemożliwić wprowadzanie nieprawidłowych danych. W celu umozliwienia wprowadzania user'owi różnych jednostek (wzrostu) np. 183 lub 1.83 czy nawet błędnie 1,83 program może wyglądać np. tak: #include <iostream>#include <cstring>
 #include <algorithm>
 #include <iomanip>
 #include <limits>
 
 using namespace std;
 
 int main()
 {
 double waga { 0 }, bmi { 0 }, liczba { 0 };
 string wzrost;
 
 cout << "Podaj wage := ";
 while( !( cin >> waga ) )
 {
 cout << "Wprowadzony znak nie jest liczba" << endl;
 cout << "Prosze podac liczbe : ";
 
 std::cin.clear();
 std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' );
 continue;
 }
 
 std::cin.clear();
 std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' );
 cout << "Podaj wzrost := ";
 getline( cin, wzrost );
 
 
 replace( wzrost.begin(), wzrost.end(), ',', '.' );
 
 
 size_t found = wzrost.find( '.' );
 
 if( found == true )
 {
 
 liczba = atof( wzrost.c_str() );
 bmi = waga /( liczba * liczba );
 }
 else
 {
 
 liczba = atof( wzrost.c_str() );
 bmi = waga /(( liczba * liczba ) / 10000 );
 }
 
 cout << endl;
 cout << "Your Body Mass Index (BMI) := " << fixed << setprecision( 2 ) << bmi << endl;
 
 if( bmi < 18.5 )
 cout << "Niedowaga.\n";
 else if( bmi >= 18.5 && bmi <= 25 )
 cout << "Prawidlowa masa ciala\n";
 else if( bmi >= 25 && bmi <= 29.99 )
 cout << "Nadwaga\n";
 else if( bmi > 30 )
 cout << "Otylosc.\n";
 
 cout << endl;
 getchar();
 return 0;
 }
 
 | 
|  | 
| pekfos | » 2020-02-13 18:13:11 | W celu umozliwienia wprowadzania user'owi różnych jednostek (wzrostu) np.
 183 lub 1.83 czy nawet błędnie 1,83
 | 
 Ja tu nie widzę żadnych jednostek. A co jak ktoś poda swój w stopach? | size_t found = wzrost.find( '.' );
 if( found == true )
 | 
 Testujesz (błędnie) tylko obecność kropki, więc jak podam że mam 180.5 centymetrów, to traktujesz to jak metry. | 
|  | 
| nanoant20 | » 2020-02-13 21:35:34 | jak podam że mam 180.5 centymetrów | 
 if( found == true && found != string::npos ) | A co jak ktoś poda swój w stopach? | 
 można poprosić o jednostkę miary i dokonywać przeliczeń.  Jednostek miar długości jest dużo. Zastrzegłem sobie, że  | program może wyglądać np. tak: | 
 a nie że jest to (panaceum) ostateczne rozwiązanie | 
|  | 
| pekfos | » 2020-02-13 22:14:57 | if( found == true && found != string::npos )
 | 
 Hm.. W sumie to wcześniej było lepiej. Ten dodatek niczego nie zmienia, a w zasadzie found == true , wbrew pozorom, sprawdza właśnie czy kropka jest na pozycji 1, więc czy liczba jest formatu x.xxx.. Genialne. Byłoby jednak czytelniej używając 1. | 
|  | 
| « 1 » |