Využij akce až 30 % zdarma při nákupu e-learningu. Více informací. Zároveň je tento týden sleva až 80 % na e-learning týkající se C# .NET
Hledáme nového kolegu do redakce - 100% home office, 100% flexibilní pracovní doba. Více informací.
discount week 30 halloween
Avatar
Jan Michálek:10.10.2018 6:58

Zdravím,

včera jsem tu otravoval se stejným kodem, ale problém je teď někde jinde a už opravdu vůbec nevím kde. Můj kod je zde

#include <iostream>
#define _USE_MATH_DEFINES
#include <cmath>
#include <string>
#include <iomanip>


using namespace std;

int main()
{
    cout << fixed << showpoint << setprecision(4);
    cout << "Zadejte rovinny obrazec, jehoz obsah a obvod chcete spocitat: a - ctverec, b - obdelnik, c - kruh" << endl;
    char vstup;
    cin >> vstup;
    if (vstup == 'a'){
        cout << "Zadejte stranu ctverce:" << endl;
        double StranaCtverce;
        cin >> StranaCtverce;
        if (StranaCtverce > 0){
            cout << "Obsah ctverce je: " << StranaCtverce*StranaCtverce << endl;
            cout << "Obvod ctverce je: " << 4*StranaCtverce << endl;
        }
        else {
            cout << "Nespravny vstup." << endl;
        }
    }
    else if (vstup == 'b'){
        cout << "Zadejte strany obdelniku:" << endl;
        double StranaObdelniku1, StranaObdelniku2;
        cin >> StranaObdelniku1 >> StranaObdelniku2;
        if (StranaObdelniku1>0 && StranaObdelniku2>0){
            cout << "Obsah obdelniku je: " << StranaObdelniku1*StranaObdelniku2 << endl;
            cout << "Obvod obdelniku je: " << 2 * (StranaObdelniku1+StranaObdelniku2) << endl;
        }
        else {
            cout << "Nespravny vstup." << endl;
        }
    }
    else if (vstup == 'c'){
        cout << "Zadejte polomer kruznice:" << endl;
        double PolomerKruznice;
        cin >> PolomerKruznice;
        if (PolomerKruznice>0){
            cout << "Obsah kruznice je: " << M_PI * (PolomerKruznice*PolomerKruznice) << endl;
            cout << "Obvod kruznice je: " << 2*M_PI*PolomerKruznice << endl;
        }
        else {
            cout << "Nespravny vstup." << endl;
        }
    }
    else{
        cout << "Nespravny vstup." << endl;
    }
    return 0;
}

Kontrola programu proběhne přes automaticky program, který tam začne sypat data a výstup mého programu musí být stejný jako výstup programu od učitele (soubor ref). Přikládám soubory, ktde je ukázané co tam přišli za data (soubor in) a co program vypustil ven (soubor out).
Pokud, ale já zadám na vstup char symbol a. tak mi prostě program běží jak má. Nemůžu prostě docílit toho problému co automatický program od učitele a tím pádem nevím kde mám chybu.

Byl by někdo tak hodný a pomohl by mi? Vůbec si už nevím rady.

Zde ke stahnutí soubory v .rar formátu https://uloz.to/…uB7eCq/c-rar

Odpovědět
10.10.2018 6:58
Nemá cenu nic programovat, pokud se to neprogramuje geniálně.
Avatar
Odpovídá na Jan Michálek
Matúš Olejník:10.10.2018 11:45

Použitím cin.fail() sa dá zistiť či sa vstup podarilo úspešne načítať a priradiť do premennej.
Zmena

if (StranaCtverce > 0){

na

if (!cin.fail() && StranaCtverce > 0){

by mala pomôcť :)

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět
10.10.2018 11:45
/* I am not sure why this works but it fixes the problem */
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Jan Michálek
DarkCoder:10.10.2018 13:23

Pár drobností:

Program musí běžet v cyklu (do), jinak těch dat moc nepřijmeš.

Dále by program měl být schopen přijmout instrukci pro ukončení, kterou Ti druhý program zašle.

Používat řídící příkaz switch namísto schodů if-else-if.

Dokonale znát co a v jakém tvaru Ti data přichází. Dost pravděpodobně to bude vypadat takto:

a 3.0
a 10.5
b 2.1 5.8
b 4.3 4.3
...
c 5.9
k

Ale také nemusí (může být třeba i takto: a(3.0))

Neboj se komunikovat o tom s učitelem. Ten by Ti měl zodpovědět veškeré nejasností, které v zadání a poskytnutých informací jsou.

Nahoru Odpovědět
10.10.2018 13:23
"„Učíš-li se proto, aby sis zapamatoval, zapomeneš. Učíš-li se proto, abys porozuměl, zapamatuješ si."
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.