Diskuze: Index BMI
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.


Libor Šimo (libcosenior):11.3.2015 8:13
Pokiaľ to má byť program pre čechoslováka, nechápem prečo používaš
cudzie merné jednotky, používaj metre a kg.
Pokiaľ chceš, aby bol program multiregionálny, daj v úvode užívateľovi
vybrať jazyk a merné jednotky. Výpočet je jednoduchý - váha v kg /
(výška v m)^2. Pre iné merné jednotky použiješ prepočet.
Zbyňa:11.3.2015 20:47
No ono jde hlavně o to že je to úkol z jedné knížky... Takto znělo
zadání sorry za okopírování" Napište krátký program který se zeptá na
výšku ve stopách a palcích a váhu v librách" pak použít tři proměnné
má vypsat BMI (index tělesné hmotnosti) pro výpočet BMI je zapotřebí
nejprve konvertovat výšku v palcích na výšku v metrech násobením 0.0254.
Poté konvertovat váhu v librách na váhu v Kg dělením 2.2. Konečně
spošítat to vysněné BMI dělením váhy v Kg "čtvercem" váhy v metrech .
Mám použít symbolické konstanty na vytvoření různých konverzních
faktorů takže to mám blbě .
PS nechápu to dělení váhy v Kg čtvercem váhy v metrech .. Boha co to má
znamenat nechápu
PSS měl jsem tam též problémy s přetipováním VS hlásilo chybu v tomto
kodu jinak kod tgé chyby už nemám sorry
Libor Šimo (libcosenior):12.3.2015 7:42
Najpr si musíš uvedomiť, že výška sa (asi v anglicku) môže udávať v
stopách a palcoch. Jedna stopa má 12 palcov. Napríklad výška je 17 stôp a
6 palcov.
Symbolické konštanty sú makrá bez parametrov a definujú sa pod
hlavičkovými súbormi nasledovne:
#include <.....>
#define STOPA 3,281
#define PALEC 39,37
#define LIBRA 2,205
using namespace std;
int main()
Použitie:
cout << "Npiste svoji vysku ve stopach a palcich" << endl;
cin >> VyskaVeStopach;
float MeterStopa = VyskaVeStopach / STOPA;
cout << "Npiste svoji vysku v palcich" << endl;
cin >> VyskaVPalcich;
float MeterPalec = VyskavPalcich / PALEC;
float VyskaVMetroch = MeterStopa + MeterPalec;
....
Použil jsem většinu kodu ze zdejších tutoriálů tak buďte prosím shovívaví
#include<iostream>
#include<sstream>
#include<conio.h>
#include<locale>
#include <stdexcept>
#include<math.h>
#ifdef __unix__
#define CZ "cs_CZ.utf8"
#else
#define CZ "cs-CZ"
#endif
#define STOPA 3.281
#define PALEC 29.37
#define LIBRA 2.205
using namespace std;
// Vyska v palcich * 0.0254, = vyska v metrech;
// vaha v librach / 2.2 = vaha v kilogramech;
// vaha v kilogramech / ctverec vahy v metrech = BMI
// 1 libra = 0,454 kilogramů
// 1 palec = 2,54 centimetrů 0,025 metrů
// 1 stopa = 30,48 centimetrů 0,305 metrů
double BMI(double Vyska, double Vaha);
double PrevodVyska(double Vyska);
double PrevodVaha(double Vaha);
int main()
{
try
{
locale cz(CZ);
locale::global(cz);
}
catch (std::runtime_error)
{
cerr << "Nepodarilo se nastavit ceske prostredi..." << endl;
return 1;
}
cout << "INDEX BMI PREVOD" << "\n";
bool pokracovat = true;
while (pokracovat)
{
string str;
stringstream *stream = 0;
char c;
double Vyska, Vaha;
do
{
delete stream;
cout << "Napište svou výšku ve stopách a palcich nebo v metrech a centimetrech" << endl;
cin >> str;
stream = new stringstream(str);
*stream >> Vyska;
}
while (stream->fail() || stream->get(c));
do
{
delete stream;
cout << "Napište svou váhu v librách nebo v kilogramech" << endl;
cin >> str;
stream = new stringstream(str);
*stream >> Vaha;
}
while (stream->fail() || stream->get(c));
delete stream;
//volba prevodu (+typ BMI) i
cout << "Vyberte jednu z nasledujících možností:" << endl;
cout << "1 - Výsledek BMI z anglických měrných jednotek" << endl;
cout << "2 - Výsledek BMI z klasických měrných jednotek" << endl;
int volba = _getch();
if (volba == 224)
_getch();
double vysledek = 0;
bool platnaVolba = true;
switch (volba)
{ //váha kg nebo libra / (výška )^2.
case '1':
vysledek = PrevodVaha(Vaha) / pow(PrevodVyska(Vyska),2);
cout << "Vaše výška ve stopách je: " << Vyska << endl;
cout << "Vaše výška v palcích je: " << Vyska * PALEC << endl;
cout << "vaše váha v Librách je: " << Vaha << endl;
cout << "Vaše výška v Metrech je: " << PrevodVyska(Vyska) << endl;
cout << "vaše váha v kilogramech je: " << PrevodVaha(Vaha) << endl;
break;
case '2':
vysledek = BMI(Vaha, Vyska);
cout << "Vaše výška je: " << Vyska << endl;
cout << "Vaše váha je: " << Vaha << endl;
break;
default:
platnaVolba = false;
break;
}
if (platnaVolba)
{
cout << "Výsledek BMI : " << vysledek << endl;
}
else
cout << "Neplatná volba" << endl;
// dotaz na pokračování
cout << "Přejete si zadat další příklad? [a/n]" << endl;
platnaVolba = false;
while (!platnaVolba)
{
switch (tolower(_getch()))
{
case 'a':
pokracovat = true;
platnaVolba = true;
break;
case 'n':
pokracovat = false;
platnaVolba = true;
break;
case 224:
_getch();
default:
cout << "Neplatná volba, zadejte prosím a/n" << endl;
break;
}
}
}
cout << "Děkuji za použití kalkulačky, aplikaci ukončíte libovolnou klávesou." << endl;
_getch();
return 0;
}
double BMI(double Vyska, double Vaha)
{
double vysledek;
vysledek = Vaha / pow(Vyska, 2);
return vysledek;
}
// PrevodVaha(Vaha) / pow(Vyska,PrevodVyska(Vyska));
double PrevodVyska(double Vyska)
{
double VyskaStopa;
double VyskaPalec;
double VyskaVMetrech;
VyskaStopa = Vyska / STOPA;
VyskaPalec = Vyska / PALEC;
VyskaVMetrech = VyskaStopa + VyskaPalec;
return VyskaVMetrech;
}
double PrevodVaha(double Vaha)
{
double VahaKg;
VahaKg = Vaha / LIBRA;
return VahaKg;
}
PS: Doufám že teď je to už dobře, jinak chtěl jsem tam prsknout i fce
Zobrazeno 6 zpráv z 6.