Prośba o sprawdzenie kodu

0

Witam,
Dopiero zaczynam naukę c++ i potrzebuję pomocy.
Chciałem zrobić aplikację konsolową liczącą bmi, zawartość tkanki tłuszczowej w ciele i zapotrzebowanie kaloryczne.
Problem w tym że w drugim punkcie wynik wynosi 0 gry powinien wynosić około 16. Bardzo dziękuję za każdą pomoc. :)

#include <iostream>

using namespace std;

float bmi;
long a, b, c, d, e, wynik;

int  obwodpasa, waga, wzrost, liczba, wiek;
string plec;

int main()
{
    cout << "Witaj, co chcesz obliczyc? Wpisz odpowiednia cyfre i pottwierdz uzywajac entera." << endl;
    cout << "1.BMI"<< endl;
    cout<<"2.Body Fat"<<endl;
    cout<<"3.Zapotrzebowanie kaloryczne i rozklad makroskladnikow"<<endl;
    cin>> liczba;
    if (liczba==1)
    {
        cout<<"podaj wage:";
        cin>>waga;
        cout<<"podaj wzrost";
        cin>>wzrost;


bmi=waga / (wzrost*wzrost/10000.);
        if (bmi<16)
        {
            cout<<"Twoje BMI wynosi:"<<bmi;
            cout<<"Twoje BMI wskazuje wyglodzenie";
        }
        else if((bmi>=16)&&(bmi<17))
        {
            cout<<"Twoje BMI wynosi:"<<bmi;
            cout<<"Twoje BMI wskazuje wychudzenie";
        }
        else if((bmi>=17)&&(bmi<19))
        {
            cout<<"Twoje BMI wynosi:"<<bmi;
            cout<<"Twoje BMI wskazuje niedowage";
        }
       else if((bmi>=18,5)&&(bmi<25))
        {
            cout<<"Twoje BMI wynosi:"<<bmi;
            cout<<"Twoje BMI wskazuje wage prawidlowa";
        }
       else if ((bmi>=25)&&(bmi<30))
        {
            cout<< "Twoje BMI wynosi:"<<bmi;
            cout<<"Twoje BMI wskazuje nadwage:";
        }
       else if ((bmi>=30)&&(bmi<35))
        {
            cout<< "Twoje BMI wynosi:"<<bmi;
            cout<<"Twoje BMI wskazuje pierwszy stopien otylosci";
        }
      else  if((bmi>=35)&&(bmi<40))
        {
            cout<<"Twoje BMI wynosi:"<<bmi;
            cout<<"Twoje BMI wskazuje na drugi stopien otylosci";
        }
      else  if (bmi>=40)
        {
            cout<<"Twoje BMI wynosi:"<<bmi;
            cout<<"Twoje BMI wskazuje skrajna otylosc";
        }
    }
    else if(liczba=2)
    {{
        cout<<"Jaki jest twoj obwod pasa?";
        cin >> obwodpasa;
        cout<<"Jaka jest twoja waga?";
        cin>>waga;
        cout<<"Napisz m jesli jestes meszczyzna, lub k jesli jestes kobieta.";
        cin>> plec;
    }
    a=4,15 * obwodpasa;
    b=a / 2,54;
    c=(82/1000.) * waga * 2,2;
    if ((plec=="m")||(plec=="M"))
    {
      d=b-c-98,42;
    }
else if ((plec=="k")||(plec=="K"))
{
    d=b-c-76,76;
}
    e=waga* 2,2;
    wynik=d/e * 100;
    cout<<"Twoj procent tkanki tluszczowej wynosi"<<wynik;
    }
    return 0;
}

Wartość oblicza się tak jak pokazano na tej stronie//www.trener.pl/artykul63_Jak_obliczyc_zawartosc_tkanki_tluszczowej_w_organizmie.html?offset=0

0

używaj double zamiast int bo wynik=d/e wychodzi 0 z przecinkiem(pas 100 i waga 80 to około 0,6) czyli 0 w int
potem mnożysz 0*100 i wynik jest równy 0

0

Zmieniłem int na double mimo to wynik dalej wynosi 0. Kod prezentuje się teraz tak:

#include <iostream>

using namespace std;

float bmi;
long a, b, c, d, e, wynik;

double  obwodpasa, waga, wzrost, liczba, wiek;
string plec;

int main()
{
    cout << "Witaj, co chcesz obliczyc? Wpisz odpowiednia cyfre i pottwierdz uzywajac entera." << endl;
    cout << "1.BMI"<< endl;
    cout<<"2.Body Fat"<<endl;
    cout<<"3.Zapotrzebowanie kaloryczne i rozklad makroskladnikow"<<endl;
    cin>> liczba;
    if (liczba==1)
    {
        cout<<"podaj wage:";
        cin>>waga;
        cout<<"podaj wzrost";
        cin>>wzrost;


bmi=waga / (wzrost*wzrost/10000.);
        if (bmi<16)
        {
            cout<<"Twoje BMI wynosi:"<<bmi;
            cout<<"Twoje BMI wskazuje wyglodzenie";
        }
        else if((bmi>=16)&&(bmi<17))
        {
            cout<<"Twoje BMI wynosi:"<<bmi;
            cout<<"Twoje BMI wskazuje wychudzenie";
        }
        else if((bmi>=17)&&(bmi<19))
        {
            cout<<"Twoje BMI wynosi:"<<bmi;
            cout<<"Twoje BMI wskazuje niedowage";
        }
       else if((bmi>=18,5)&&(bmi<25))
        {
            cout<<"Twoje BMI wynosi:"<<bmi;
            cout<<"Twoje BMI wskazuje wage prawidlowa";
        }
       else if ((bmi>=25)&&(bmi<30))
        {
            cout<< "Twoje BMI wynosi:"<<bmi;
            cout<<"Twoje BMI wskazuje nadwage:";
        }
       else if ((bmi>=30)&&(bmi<35))
        {
            cout<< "Twoje BMI wynosi:"<<bmi;
            cout<<"Twoje BMI wskazuje pierwszy stopien otylosci";
        }
      else  if((bmi>=35)&&(bmi<40))
        {
            cout<<"Twoje BMI wynosi:"<<bmi;
            cout<<"Twoje BMI wskazuje na drugi stopien otylosci";
        }
      else  if (bmi>=40)
        {
            cout<<"Twoje BMI wynosi:"<<bmi;
            cout<<"Twoje BMI wskazuje skrajna otylosc";
        }
    }
    else if(liczba=2)
    {{
        cout<<"Jaki jest twoj obwod pasa?";
        cin >> obwodpasa;
        cout<<"Jaka jest twoja waga?";
        cin>>waga;
        cout<<"Napisz m jesli jestes meszczyzna, lub k jesli jestes kobieta.";
        cin>> plec;
    }
    a=4,15 * obwodpasa;
    b=a / 2,54;
    c=(82/1000.) * waga * 2,2;
    if ((plec=="m")||(plec=="M"))
    {
      d=b-c-98,42;
    }
else if ((plec=="k")||(plec=="K"))
{
    d=b-c-76,76;
}
    e=waga* 2,2;
    wynik=d/e * 100;
    cout<<"Twoj procent tkanki tluszczowej wynosi"<<wynik;
    }
    return 0;
}
1

W kółko powtarzasz tę linijkę:

cout<<"Twoje BMI wynosi:"<<bmi;

więc wydziel ją poza drabinkę ifów i zapisz tylko raz.

0

Dziękuję poprawiłem:

#include <iostream>

using namespace std;

float bmi;
long a, b, c, d, e,  wynik;

double  obwodpasa, waga, wzrost, liczba, wiek;
string plec;

int main()
{
    cout << "Witaj, co chcesz obliczyc? Wpisz odpowiednia cyfre i pottwierdz uzywajac entera." << endl;
    cout << "1.BMI"<< endl;
    cout<<"2.Body Fat"<<endl;
    cout<<"3.Zapotrzebowanie kaloryczne i rozklad makroskladnikow"<<endl;
    cin>> liczba;
    if (liczba==1)
    {
        cout<<"podaj wage:";
        cin>>waga;
        cout<<"podaj wzrost";
        cin>>wzrost;


bmi=waga / (wzrost*wzrost/10000.);
cout<<"Twoje BMI wynosi:"<<bmi;
        if (bmi<16)
        {

            cout<<"Twoje BMI wskazuje wyglodzenie";
        }
        else if((bmi>=16)&&(bmi<17))
        {
            cout<<"Twoje BMI wskazuje wychudzenie";
        }
        else if((bmi>=17)&&(bmi<19))
        {
            cout<<"Twoje BMI wskazuje niedowage";
        }
       else if((bmi>=18,5)&&(bmi<25))
        {
            cout<<"Twoje BMI wskazuje wage prawidlowa";
        }
       else if ((bmi>=25)&&(bmi<30))
        {
            cout<<"Twoje BMI wskazuje nadwage:";
        }
       else if ((bmi>=30)&&(bmi<35))
        {
            cout<<"Twoje BMI wskazuje pierwszy stopien otylosci";
        }
      else  if((bmi>=35)&&(bmi<40))
        {
            cout<<"Twoje BMI wskazuje na drugi stopien otylosci";
        }
      else  if (bmi>=40)
        {
            cout<<"Twoje BMI wskazuje skrajna otylosc";
        }
    }
    else if(liczba=2)
    {{
        cout<<"Jaki jest twoj obwod pasa?";
        cin >> obwodpasa;
        cout<<"Jaka jest twoja waga?";
        cin>>waga;
        cout<<"Napisz m jesli jestes meszczyzna, lub k jesli jestes kobieta.";
        cin>> plec;
    }
    a=4,15 * obwodpasa;
    b=a / 2,54;
    c=(82/1000.) * waga * 2,2;
    if ((plec=="m")||(plec=="M"))
    {
      d=b-c-98,42;
    }
else if ((plec=="k")||(plec=="K"))
{
    d=b-c-76,76;
}
    e=waga* 2,2;
    wynik=d/e * 100;
    cout<<"Twoj procent tkanki tluszczowej wynosi"<<wynik;
    }
    return 0;
}
1

A teraz podziel kod na funkcje - będzie czytelniej :]

0

long to też typ całkowity
long też zamień na double

1
  1. Zlikwiduj zmienne globalne
  2. Wyodrębnij stosowne komunikaty
  3. Wyodrębnij liczenie BMI do osobnej funkcji
  4. Zmapuj wyniki słowne do zakresów liczbowych
  5. Wybij sobie z głowy drabinki warunków
  6. Przecinek (18,5) robi zupełnie coś innego niż myślisz, że robi. *

* - (wyjaśnienie na przykładzie)

0

@furious programming
Przepraszam, ale ... nie rozumiem. Uczę się c++ dopiero od 3 dni. :D
@Krwawy Mleczarz
Dalej mam błąd, tylko że zamiast 0 pokazuje mi -77,7652 zamiast 16,3.(Brałem moje "parametry")

0

Zapomniałem wkleić kodu:

include <iostream>

using namespace std;

float bmi;
double  obwodpasa, waga, wzrost, liczba, wiek, a, b, c, d, e,  wynik;
string plec;

int main()
{
    cout << "Witaj, co chcesz obliczyc? Wpisz odpowiednia cyfre i pottwierdz uzywajac entera." << endl;
    cout << "1.BMI"<< endl;
    cout<<"2.Body Fat"<<endl;
    cout<<"3.Zapotrzebowanie kaloryczne i rozklad makroskladnikow"<<endl;
    cin>> liczba;
    if (liczba==1)
    {
        cout<<"podaj wage:";
        cin>>waga;
        cout<<"podaj wzrost";
        cin>>wzrost;


bmi=waga / (wzrost*wzrost/10000.);
cout<<"Twoje BMI wynosi:"<<bmi;
        if (bmi<16)
        {

            cout<<"Twoje BMI wskazuje wyglodzenie";
        }
        else if((bmi>=16)&&(bmi<17))
        {
            cout<<"Twoje BMI wskazuje wychudzenie";
        }
        else if((bmi>=17)&&(bmi<19))
        {
            cout<<"Twoje BMI wskazuje niedowage";
        }
       else if((bmi>=18,5)&&(bmi<25))
        {
            cout<<"Twoje BMI wskazuje wage prawidlowa";
        }
       else if ((bmi>=25)&&(bmi<30))
        {
            cout<<"Twoje BMI wskazuje nadwage:";
        }
       else if ((bmi>=30)&&(bmi<35))
        {
            cout<<"Twoje BMI wskazuje pierwszy stopien otylosci";
        }
      else  if((bmi>=35)&&(bmi<40))
        {
            cout<<"Twoje BMI wskazuje na drugi stopien otylosci";
        }
      else  if (bmi>=40)
        {
            cout<<"Twoje BMI wskazuje skrajna otylosc";
        }
    }
    else if(liczba=2)
    {{
        cout<<"Jaki jest twoj obwod pasa?";
        cin >> obwodpasa;
        cout<<"Jaka jest twoja waga?";
        cin>>waga;
        cout<<"Napisz m jesli jestes meszczyzna, lub k jesli jestes kobieta.";
        cin>> plec;
    }
    a=4,15 * obwodpasa;
    b=a / 2,54;
    c=(82/1000.) * waga * 2,2;
    if ((plec=="m")||(plec=="M"))
    {
      d=b-c-98,42;
    }
else if ((plec=="k")||(plec=="K"))
{
    d=b-c-76,76;
}
    e=waga* 2,2;
    wynik=d/e * 100;
    cout<<"Twoj procent tkanki tluszczowej wynosi"<<wynik;
    }
    return 0;
}
0

jeszcze te przecinki o których pisał Spartan
zamiast np 4,15 to 4.15

0

Dziękuję. Teraz wynik pokazuje mi 17.045. Wynim jest w miarę prawidłowy więc w porządku.
@spartanPAGE
Poczytam by zrozumieć co do mnie napisałeś i zastosuję się do twoich wskazówek. Mam tylko pytanie dlaczego mam wybić sobie z głowy drabinki warunków? Czy jest coś w nich co źle wpływa na program?

#include <iostream>

using namespace std;

int main()
{ int liczba;
    cout << "Witaj, co chcesz obliczyc? Wpisz odpowiednia cyfre i pottwierdz uzywajac entera." << endl;
    cout << "1.BMI"<< endl;
    cout<<"2.Body Fat"<<endl;
    cout<<"3.Zapotrzebowanie kaloryczne i rozklad makroskladnikow"<<endl;
    cin>> liczba;
    if (liczba==1)
    {int waga1, wzrost1;
    double bmi;
        cout<<"podaj wage:";
        cin>>waga1;
        cout<<"podaj wzrost";
        cin>>wzrost1;


bmi=waga1 / (wzrost1*wzrost1/10000.);
cout<<"Twoje BMI wynosi:"<<bmi;
        if (bmi<16)
        {

            cout<<"Twoje BMI wskazuje wyglodzenie";
        }
        else if((bmi>=16)&&(bmi<17))
        {
            cout<<"Twoje BMI wskazuje wychudzenie";
        }
        else if((bmi>=17)&&(bmi<19))
        {
            cout<<"Twoje BMI wskazuje niedowage";
        }
       else if((bmi>=18.5)&&(bmi<25))
        {
            cout<<"Twoje BMI wskazuje wage prawidlowa";
        }
       else if ((bmi>=25)&&(bmi<30))
        {
            cout<<"Twoje BMI wskazuje nadwage:";
        }
       else if ((bmi>=30)&&(bmi<35))
        {
            cout<<"Twoje BMI wskazuje pierwszy stopien otylosci";
        }
      else  if((bmi>=35)&&(bmi<40))
        {
            cout<<"Twoje BMI wskazuje na drugi stopien otylosci";
        }
      else  if (bmi>=40)
        {
            cout<<"Twoje BMI wskazuje skrajna otylosc";
        }
    }
    else if(liczba=2)
    { double obwodpasa, a, b, c, d, e, wynik;
    string plec;
    int waga;
        {
        cout<<"Jaki jest twoj obwod pasa?";
        cin >> obwodpasa;
        cout<<"Jaka jest twoja waga?";
        cin>>waga;
        cout<<"Napisz m jesli jestes meszczyzna, lub k jesli jestes kobieta.";
        cin>> plec;
    }
    a=4.15 * obwodpasa;
    b=a / 2.54;
    c=(82/1000.) * waga * 2,2;
    if ((plec=="m")||(plec=="M"))
    {
      d=b-c-98.42;
    }
else if ((plec=="k")||(plec=="K"))
{
    d=b-c-76.76;
}
    e=waga* 2.2;
    wynik=d/e * 100;
    cout<<"Twoj procent tkanki tluszczowej wynosi"<<wynik;
    }
    return 0;
}

Jeszcze raz bardzo dziękuję za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1