Informatică, întrebare adresată de olarescudavid, 9 ani în urmă


Cerinţa

Să se scrie un program care citeşte trei numere reale şi verifică dacă aceste numere pot fi lungimile laturilor unui triunghi și în caz afirmativ determină daca triunghiul este ascuțitunghic, dreptunghic sau obtuzunghic.
SPUNETI-MI SI MIE ,VA ROG FRUMOS ,CU CE GRESESC LA ACEASTA PROBLEMA, MULTUMESC
Date de intrare

Programul citește de la tastatură trei numere reale a, b, c.

Date de ieşire

Programul afișează pe ecran mesajul nu este triunghi, dacă cele trei numere nu pot fi lungimile laturilor unui triunghi, respectiv unul dintre mesajele triunghi ascutitunghic, triunghi dreptunghic sau triunghi obtuzunghic, în funcție de natura triunghiului.

Restricţii şi precizări
•0 ≤ a,b,c ≤ 100

Exemplul 1:

Intrare
3 5 4


Ieșire
triunghi dreptunghic


Exemplul 2:

Intrare
5 1 4


Ieșire
nu este triunghi


#include
using namespace std;
int main()
{
int n,m,h;
cin>>n;
cin>>m;
cin>>h;
if(n+m<=h || n+h<=m || h+m<=n )
cout<<"nu este triunghi";
else
{
if(n*n+m*m==h*h || m*m+h*h==n*n || n*n+h*h==m*m )
{
cout<<"triunghi dreptunghic ";
return 0;
}
if(n*n+m*m > h*h || m*m+h*h > n*n || n*n +h*h > m*m )
{


cout<<"triunghi ascutitunghic";
return 0;
}
if(n*n +m*m < h*h || m*m +h*h < n*n || n*n +h*h < m*m )
{


cout<<"triunghi obtuzunghic";
return 0;
}
}


return 0;
}





artur99: nu e ok cu return 0; la fiecare if... Irosesti f mult spatiu useless... e mai ok un else if decat un if cu return 0;
olarescudavid: oricum programul se inchide , e mai eficient sa-l inchizi imediat
artur99: recuperezi 0.000001 secunde, dar iti zic eu ca nu e ok... :)

Răspunsuri la întrebare

Răspuns de artur99
11
Calculezi cu 2 shortif-uri cea mai lunga latura, si celelalte 2 laturi, apoi faci comparatiile:

#include <iostream>
using namespace std;
int main(){
    int n,m,h, max, sum2;
    cin>>n;
    cin>>m;
    cin>>h;
    if(n+m<=h || n+h<=m || h+m<=n){
        cout<<"nu este triunghi";
    }else{
        max = m>n?(m>h?m:h):(n>h?n:h);
        //Calculezi lungimea celei mai lungi laturi
        max = max*max;
        //Apoi o ridici la a 2-a
        sum2 = m>n?(m>h?(h*h+n*n):(m*m+n*n)):(n>h?(h*h+m*m):(m*m+n*n));
        //Calculezi suma patratelor celorlalte 2 laturi
        //Apoi verifici fiecare caz
        if(sum2==max)cout<<"triunghi dreptunghic ";
        else if(sum2>max)cout<<"triunghi ascutitunghic";
        else cout<<"triunghi obtuzunghic";
    }
    return 0;
}
Alte întrebări interesante