2017-09-05 3 views
-4
#include <iostream> 
#include <math.h> 

using namespace std; 

int main() 
{ 
    int l,b,h; 
    int s; 
    s=(l+b+h); 
    float ar=s*(s-l)*(s-b)*(s-h); 
    float area; 
    int ch; 
    cout<<"How do you want to calculate the area?"<<endl; 
    cout<<"1) simple formula"<<endl<<"2) heron's formula"<<endl; 
    cin>>ch; 
    if(ch==1){ 
     cout<<"Enter the sides of the triangle."<<endl; 
     cin>>l>>b>>h; 
     area=0.5*(b*h); 
     cout<<"Area of the triangle is = "<<area<<endl; 
    } 
    else if (ch==2){ 
     cout<<"Enter the sides of the triangle."<<endl; 
     cin>>l>>b>>h; 
     cout<<s<<endl<<l+b+h<<endl; 
     cout<<"The calculated area of the triangle is = "<<sqrt(ar)<<endl; 
    } 
    return 0; 
} 

Il imprime la valeur correcte pour l + b + h mais, pour s, il affiche un nombre négatif énorme .J'ai essayé de changer le type de données de s aussi. Cela arrive dans presque tous mes programmes.J'ai déclaré une variable int avec la valeur de la somme de 3 autres variables int. quand j'imprime cette variable, il montre un nombre négatif énorme

+4

'l',' b', et 'h' a des valeurs non spécifiées car vous ne les avez pas initialisées. Donc, la valeur de 's' est également non spécifiée. Vous ne pouvez pas calculer 's' tant que vous n'avez pas rempli ces valeurs. – CoryKramer

+2

En C++, lorsque vous affectez une expression à une variable, vous affectez en réalité le résultat immédiat de cette expression. Après 's = (l + b + h);' la variable 's' a la somme de ce que' l', 'b' et' h' avaient à ce moment-là. La modification de l'une de ces variables ne mettra pas rétroactivement 's' à jour. –

+0

alors ... je vais devoir taper la partie s = (l + b + h) après avoir reçu les entrées? –

Répondre

0

s est calculée une fois (en lisant les valeurs non initialisées, donc UB).

Vous pouvez créer lambda à la place:

auto s = [&](){ return l + b + h; }; 
auto ar = [&](){ return s() * (s() - l) * (s() - b) * (s() - h); }; 

puis

cout << "Enter the sides of the triangle." << endl; 
cin >> l >> b >> h; 
cout << s << endl << l + b + h << endl; 
cout << "The calculated area of the triangle is = " << sqrt(ar) << endl; 

Ou calculer simplement la valeur après avoir défini les valeurs

cout << "Enter the sides of the triangle." << endl; 
cin >> l >> b >> h; 
const int s = l + b + h; 
const int ar = s * (s - l) * (s - b) * (s - h); 

cout << s << endl << l + b + h << endl; 
cout << "The calculated area of the triangle is = " << sqrt(ar) << endl;