Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: C++ menší komplikace[vyřešeno]  (Přečteno 1981 krát)

František Zatloukal

  • Závislák
  • ***
  • Příspěvků: 1799
    • frantisek.zatloukalu.eu
C++ menší komplikace[vyřešeno]
« kdy: 05 Listopadu 2012, 14:25:22 »
Ahojte,
narazil jsem na problémek u mého ,,programu,, v C++. Program počítá BMI. Problém nastane, pokud uživatel zvolí možnost zadávat výšku v metrech. Pak je výsledek nesmysl.
Díky moc za pomoc, zdrojový kód je zde:
Kód: [Vybrat]
#include <iostream>
int main()
{
using namespace std;
unsigned short vyska;
float vyskab;
unsigned short vaha;
float bmia;
float bmib;
unsigned short jednotka;
cout << "Zadejte váhu v kg\n";
cin >> vaha;
cout << "Zvolte, v jakých jednotkách chcete zadávát výšku? \n";
cout << "1 - cm\n";
cout << "2 - m\n";
cin >> jednotka;
cout << "Zadejte vysku \n";
if (jednotka = 1)
{
cin >> vyska;
vyskab = vyska / 100.f;
}
else
{
cin >> vyskab;
}
bmia = vyskab * vyskab;
bmib = vaha / bmia;
cout << "Vaše BMI je: ";
cout << bmib;
cout << "\n";
/*
cin >> debug;
*/
if (bmib >= 40)
cout << "Morbidní obezita";
else if (bmib >= 35)
cout << "Střední obezita";
else if (bmib >= 30)
cout << "Mírná obezita";
else if (bmib >= 25)
cout << "Nadváha";
else if (bmib >= 18.5)
cout << "Ideální váha";
else if (bmib >= 16.5)
cout << "Podváha";
else
cout << "Podvýživa";
cout << "\n";
return 0;
}
(jsem v C++ začátečník, proto mne prosím za případné nedostatky neukamenujte ;) ). Díky
« Poslední změna: 05 Listopadu 2012, 15:33:19 od František Zatloukal »
First they ignore you, then they laugh at you,
then they fight you, then you win.
Powered by Fedora 22 | Ubuntu 15.10

ntz_reloaded

  • Lokaj
  • Závislák
  • ***
  • Příspěvků: 3735
  • skill :: ur home erly
Re:C++ menší komplikace
« Odpověď #1 kdy: 05 Listopadu 2012, 14:26:25 »
no to je strasnej kod :D .. az ho napises nejak strukturovane, tak slibuju, ze si ho prectu ;)
tikejte mi, taky Vam tikam ...
song of the day - openSUSE, openindiana, DuckDuckGo
The noise ain't noise anymore, who's to blame, WHO'S TO BLAME ??

Vojtěch Trefný

  • Příspěvků: 9307
  • Don Quijote
Re:C++ menší komplikace
« Odpověď #2 kdy: 05 Listopadu 2012, 14:56:34 »
Kód: [Vybrat]
if (jednotka = 1)

Takhle se do else nikdy nedostaneš. Jedno rovná se je přiřazení, což takhle vrátí true a vesele se skočí do if a na else nikdy v životě nedojde. Takže správně:

Kód: [Vybrat]
if (jednotka == 1)

Tip: Překládej s parametry -Wall a -pedantic a gccčko bude upozorňovat na mnohem víc "chyb".
« Poslední změna: 05 Listopadu 2012, 15:00:16 od Vojtěch Trefný »

Citrisin

  • Aktivní člen
  • *
  • Příspěvků: 138
Re:C++ menší komplikace
« Odpověď #3 kdy: 05 Listopadu 2012, 15:00:49 »
Vložit do eclipsu a nechat si naformátovat :D
Kód: [Vybrat]
Porovnání je "==". Mluvím o if.
Přiřadil jsi do jednotky v if jedničku. V C if přijímá int. 0 je false a 1 je true.
-> tak jsem to nestihl :D
†Asus M51Va
*Lenovo Ideapad Y580, intel i5 Ivi bridge, Nvidia GTX660, 8GB ram, 32GB ssd (Samsung), 1TB hdd.
Ubuntu 12.10, Gnome shell.

Martin - ViPEr*CZ*

  • Závislák
  • ***
  • Příspěvků: 3047
Re:C++ menší komplikace
« Odpověď #4 kdy: 05 Listopadu 2012, 15:05:44 »
Taky jsem to nestihl... todle se stane... ale je nesmysl to hledat visuálně koukáním do kódu.... prostě si to někde nad tím stopnu a krokuju a chybu mám za chvíli odhalenou bez fóra.  ;)

TIP: až budeš pak trochu dále... tak zkus ošetřit uživatelský vstupy... uživatelé jsou potvory a rádi experimentujou... bmib = vaha / bmia; není ošetřeno dělení nulou  ;)
Open source is gold way... Mint 17.2, Debian 8.1 Jessie| Ubuntu Wiki (návody) | Google vyhledávač | Qt4 návody

Vojtěch Trefný

  • Příspěvků: 9307
  • Don Quijote
Re:C++ menší komplikace
« Odpověď #5 kdy: 05 Listopadu 2012, 15:10:34 »
TIP: až budeš pak trochu dále... tak zkus ošetřit uživatelský vstupy... uživatelé jsou potvory a rádi experimentujou... bmib = vaha / bmia; není ošetřeno dělení nulou  ;)

A hlídat nejen nulu, ale cokoli -- uživatelé jsou svině a zadají klidně písmeno nebo nic :)

(Tohle u nás na fitu rychle naučí progtest -- systém, který automaticky vyhodnocuje programovací úlohy a zkouší veškeré vstupy a za neošetření takových "debilit" letí body dolů hodně rychle.)

Citrisin

  • Aktivní člen
  • *
  • Příspěvků: 138
Re:C++ menší komplikace
« Odpověď #6 kdy: 05 Listopadu 2012, 15:16:05 »
TIP: až budeš pak trochu dále... tak zkus ošetřit uživatelský vstupy... uživatelé jsou potvory a rádi experimentujou... bmib = vaha / bmia; není ošetřeno dělení nulou  ;)
Pokud jde o úpravy, je zde použito několik zbytečných proměnných. Ošetření vstupů vůbec. Výběr m/cm by šel udělat například vepsáním jednotky přímo do vstupu (mě by se to tak více líbilo :)).
†Asus M51Va
*Lenovo Ideapad Y580, intel i5 Ivi bridge, Nvidia GTX660, 8GB ram, 32GB ssd (Samsung), 1TB hdd.
Ubuntu 12.10, Gnome shell.

František Zatloukal

  • Závislák
  • ***
  • Příspěvků: 1799
    • frantisek.zatloukalu.eu
Re:C++ menší komplikace
« Odpověď #7 kdy: 05 Listopadu 2012, 15:32:41 »
Díky všem, problém opravdu spočíval v tom, že jsem měl jen jedno = v podmínce.
Co se týče struktury, popř. zbytečný proměnných - aktuálně nejsem na úrovni, kdy bych to dokázal vyřešit, o c++ jsem se začal zajímat teprve nedávno :)

PS: tolik odpovědí jsem opravdu nečekal  ;D
First they ignore you, then they laugh at you,
then they fight you, then you win.
Powered by Fedora 22 | Ubuntu 15.10

Martin - ViPEr*CZ*

  • Závislák
  • ***
  • Příspěvků: 3047
Re:C++ menší komplikace[vyřešeno]
« Odpověď #8 kdy: 05 Listopadu 2012, 17:25:57 »
Tak tak ... proto jsem psal až budeš dále a také to byl jeden TIP z mnoha... to by jsme tu mohli vymýšlet do nekonečna jak zlepšovat... ku příkladu co uvedl @Citrisin... tak takové věci jsem záměrně nepitval, protože jsi psal, že jsi začátečník. A hlídat samozřejmě cokoliv na vstupu, protože to je cesta jak aplikaci schodit a o to se vždy musí postarat vývojář. Uvedl jsem záměrně dělení nulou což je taková běžná věc... ale na druhou stranu z toho vyplývá, že aby to dělilo nulou, tak nás to opět zavede k uživatelskému vstupu. Prostě tip  ;)
Open source is gold way... Mint 17.2, Debian 8.1 Jessie| Ubuntu Wiki (návody) | Google vyhledávač | Qt4 návody

 

Provoz zaštiťuje spolek OpenAlt.