Avatar
laney10
Člen
Avatar
laney10:

Ahojte,
Můžete mi napsat jestli to mám dobře popřípadě co mám špatně?

#include <iostream>
#include <math.h>
using namespace std;

double a,b,c,s,S;
int main()
{
cout << "Zadejte delky stran trojuhelniku" << endl;
cin >> a >> b >> c;
if(cin.fail()|| a <= 0 || b <= 0 || c <= 0)
    {
        cout << "Nespravny vstup" << endl;
        return 0;
        }
        if((a+b)>c && (a+c)>b && (b+c)>a)
            {
            cout << "Strany netvori trojuhelnik" << endl;
        }
        else
            {
                s = (a+b+c)/2; // obvod trujuhelniku
                S = (sqrt(s*(s-a)*(s-b)*(s-c))); // Obsah trojuhelniku
        cout << "Trojuhelnik existuje, obsah je: " << S << endl;
        }
    return 0;
}
 
Odpovědět 17.10.2014 16:43
Avatar
davaj
Člen
Avatar
davaj:

Proc pouzivas globalni promenne ? Snaz se je nepouzivat.
Jsi v C++, tak pouzivej novejsi knihovny math.h -> cmath.
Otevri ucebnici matematiky. Mas tam logickou chybu v podmince.
Program je napsan strasne. Zlepsi psani kodu.
Zbytecna zavorka v sqrt();
Pridal jsem cyklus, ktery si vyzada spravny zapis stran.

#include <iostream>
#include <cmath>
#include <cstdlib>
using namespace std;

int main()
{
    double a,b,c,s,S;
    cout << "Zadejte delky stran trojuhelniku" << endl;
    cin >> a >> b >> c;
    while((cin.fail()|| a <= 0 || b <= 0 || c <= 0)){
        cout << "Nespravny vstup" << endl;
        cout << "Zadejte delky stran trojuhelniku" << endl;
        cin >> a >> b >> c;
    }
    if((a+b)>c && (a+c)>b && (b+c)>a){
        s = (a+b+c)/2; // obvod trujuhelniku
        S = sqrt(s*(s-a)*(s-b)*(s-c)); // Obsah trojuhelniku
        cout << "Trojuhelnik existuje, obsah je: " << S << endl;
    }
    else
        cout << "Strany netvori trojuhelnik" << endl;
    system("PAUSE");
    return 0;
}
Editováno 18.10.2014 0:21
 
Nahoru Odpovědět 18.10.2014 0:20
Avatar
laney10
Člen
Avatar
Odpovídá na davaj
laney10:

Ještě jsem si s tím včera pohrál a funguje.

#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;

int main()
{
cout << "Zadejte delky stran trojuhelniku" << endl;
double a,b,c,s,S,obsah;
cin >> a >> b >> c;
while(cin.fail()|| a <= 0 || b <= 0 || c <= 0)
        {
        cout << "Nespravny vstup." << endl;
        return 0;
        }
        if((a+b<c) || (a+c<b) || (b+c<a) )
        {
            cout << "Strany netvori trojuhelnik." << endl;
            return 0;
        }
        else
            {
                s = (a+b+c)/2;
                S = (s * (s - a) * (s - b) * (s - c));
                obsah = sqrt(S);
                cout << fixed << setprecision(6) << "Trojuhelnik existuje, obsah je: " << obsah << endl;
        }
    return 0;
}
 
Nahoru Odpovědět 18.10.2014 7:35
Avatar
laney10
Člen
Avatar
Odpovídá na laney10
laney10:

Ten kód co jsi mi poslal - Když zadáš nečíselné hodnoty tak se spustí nekonečný cyklus.

 
Nahoru Odpovědět 18.10.2014 8:03
Avatar
davaj
Člen
Avatar
davaj:

Aha. Tak takhle je to vyreseno.

#include <iostream>
#include <cmath>
#include <cstdlib>
using namespace std;

int main()
{
    double a,b,c,s,S;
    cout << "Zadejte delky stran trojuhelniku" << endl;
    cin >> a >> b >> c;
    while((cin.fail()|| a <= 0 || b <= 0 || c <= 0)){
        system("CLS");
        cout << "Zadejte delky stran trojuhelniku" << endl;
        cout << "Nespravny vstup" << endl;
        cin.clear();
        cin.ignore();
        cin >> a >> b >> c;
    }
    if((a+b)>c && (a+c)>b && (b+c)>a){
        s = (a+b+c)/2; // obvod trujuhelniku
        S = sqrt(s*(s-a)*(s-b)*(s-c)); // Obsah trojuhelniku
        cout << "Trojuhelnik existuje, obsah je: " << S << endl;
    }
    else
        cout << "Strany netvori trojuhelnik" << endl;
    system("PAUSE");
    return 0;
}
 
Nahoru Odpovědět 18.10.2014 11:55
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 5 zpráv z 5.