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 » |