Problem z programem


(Rhornowski3) #1

Witam mam problem z moim programem byłbym wdzięczny za pomoc . Program ma wyliczyć BMI i sprawdzić poprawnosć danych

#include 

using namespace std;

int main ()

{

    float a,b,x;

    char c,m,k;

    cout<<"Podaj wage w kilogramach: \n";

    cin>>a;

    cout<<"Podaj wzrost w centymetrach: \n";

    cin>>b;

    cout<<"Podaj plec (m=Mezczyzna)(k=Kobieta): \n";

    cin>>c;

    x=a/(b*b);

    if (a>0)

    {if (b>0)

    {if (c==m||c==k)

    {if (c==m) 

    {if (x<20) cout<<"Niedowaga\n";

    else if (x>=20&&x<25) cout<<"Norma\n";

    else if(x>25&&x<30) cout<<"Nadwaga\n";

     else cout<<"Otylosc\n";}


    else {if (x<19)cout<<"Niedowaga\n";

    else if (x>=19&&x<24)cout<<"Norma\n";

    else if(x>=24&&x<30) cout<<"Nadwaga\n";

    else cout<<"Otylosc\n";}


    else cout<<"Zle podana plec\n";}

    else cout<<"Zle podany wzrost\n";}

    else cout<<"Zle podana waga\n";






system ("pause");

return 0;

}

a kompilator wypluwa

28 C:\Documents and Settings\Ravi.RAFA-6CA0EA6B95\Moje dokumenty\BMI.cpp expected primary-expression before "else" 

28 C:\Documents and Settings\Ravi.RAFA-6CA0EA6B95\Moje dokumenty\BMI.cpp expected `;' before "else" 

38 C:\Documents and Settings\Ravi.RAFA-6CA0EA6B95\Moje dokumenty\BMI.cpp expected `}' at end of input

(Sawyer47) #2

Tak cudacznego formatowania warunków jeszcze nie widziałem, gratulacje. Rada, użyć entera/taba/spacji i doprowadź to do postaci:

if(...)

{

	if(...)

	{

		...

	}

	else

	{

		...

	}

}

else if(...)

{

	...

}

else

{

	...

}

To oczywiście przykładowe formatowanie, które moim skromnym zdaniem jest nieco czytelniejsze.


(pio_95) #3

Po pierwsze to, o czym pisał nr47 - formatowanie. Przez wizualne zagmatwanie kodu naprawdę łatwo było zgubić "}".

Po drugie, sprawdzając płeć pobrany znak należy porównać z literą "m" lub "k", nie z kolejną zmienną (do której nawet nic nie przypisano).

I po trzecie, do wzoru na BMI wkładamy wzrost w metrach.

Poprawiane na szybko:

#include 

using namespace std;

int main ()

{

    float a,b,x;

    char c;

    cout<<"Podaj wage w kilogramach: \n";

    cin>>a;

    cout<<"Podaj wzrost w centymetrach: \n";

    cin>>b;

    cout<<"Podaj plec (m=Mezczyzna)(k=Kobieta): \n";

    cin>>c;

    b/=100;

    x=a/(b*b);

if (a>0)

   { 

   if (b>0)

      { 

      if (c=='m'||c=='k')

         { 

         if (c=='m') 

            { 

            if (x<20) cout<<"Niedowaga\n";

            else if (x>=20&&x<25) cout<<"Norma\n";

            else if(x>25&&x<30) cout<<"Nadwaga\n";

            else cout<<"Otylosc\n"; 

            }

         else 

              { 

              if (x<19)cout<<"Niedowaga\n";

              else if (x>=19&&x<24)cout<<"Norma\n";

              else if(x>=24&&x<30) cout<<"Nadwaga\n";

              else cout<<"Otylosc\n"; 

              }

         }

      else cout<<"Zle podana plec\n"; 

      }

   else cout<<"Zle podany wzrost\n"; 

   }

else cout<<"Zle podana waga\n";

system ("pause");

return 0;

}

(Rhornowski3) #4

Zmieniłem na coś takiego i działa ale za każdym razem wyświetla niedowage

#include 

using namespace std;

int main ()

{

    float a,b,x;

    int c,m,k;

    cout<<"Podaj wage w kilogramach: \n";

    cin>>a;

    cout<<"Podaj wzrost w centymetrach: \n";

    cin>>b;

    cout<<"Podaj plec (1=Mezczyzna)(2=Kobieta): \n";

    cin>>c;

    x=a/(b*b);

    if (a>0&&b>0&&(c==1||c==2))

     {if (c==1) 

       {if (x<20) cout<<"Niedowaga\n";

        else if (x>=20&&x<25) cout<<"Norma\n";

        else if(x>25&&x<30) cout<<"Nadwaga\n";

        else cout<<"Otylosc\n";}

      else {if (x<19)cout<<"Niedowaga\n";

        else if (x>=19&&x<24)cout<<"Norma\n";

        else if(x>=24&&x<30) cout<<"Nadwaga\n";

        else cout<<"Otylosc\n";}}

     else cout<<"Bledne dane\n";






system ("pause");

return 0;

}

(Sawyer47) #5

1) Kłania się znajomość składni C(++) - poczytaj jak wygląda składnia warunków w tych językach

2) Entery i taby mają tylko zwiększyć czytelność, ale istotne są _klamry_ , (patrz punkt 1). Radzę pododawać klamry wszędzie, nawet jeśli jest tylko jedna instrukcja - to też powinno pomóc zorientować się w kodzie.


(Rhornowski3) #6

Ok już działa wielkie dzięki za pomoc po prostu zapomniałem z

x=a/(b*b);

na

x=a/(b*0.01*b*0.01);

Wielkie dzięki


#7

Ravi35 , proszę zapoznaj się z tą stroną oraz tym tematem, a następnie popraw tytuł tematu, używając przycisku image.php?album_id=20&image_id=4038