2016-07-12 2 views
0

Salut les gars, je suis plutôt novice en programmation et en train de travailler sur la programmation, les principes et la pratique de Stroustrup en C++ et je me suis complètement arrêté à la fin du chapitre 3 un exercice vous demandant d'écrire un morceau de code qui fait un certain nombre de calculs impliquant 2 nombres qui inclut la recherche du rapport des nombres. Malheureusement, cela n'a pas été couvert du tout dans le livre et je me suis arraché les cheveux en essayant de comprendre par moi-même, seulement capable de trouver des exemples de code de manière avancée pour mon petit petit cerveau.C++ calculer le ratio de 2 nombres

Le code que j'ai en ce moment est:

double ratio; 
    if (val2 > val1) 
     ratio = (val2/val1); 
    if (val2 < val1) 
     ratio = (val1/val2); 
    cout << "The ratio of " << val1 << " and " << val2 << " is 1:" << ratio << '\n'; 

qui fonctionne très bien pour les nombres qui assimilent à un rapport ensemble (par exemple, 100 et 25) Cependant, malgré moi définissant la variable « ratio » en tant que doubler supprime les décimales de la réponse dans les cas de rapports non entiers. Quelqu'un peut-il me dire où je vais mal?

+0

Ce n'est pas le problème, mais 'ratio = (val2/val1)' n'a pas besoin de parenthèses. –

+0

'((double) val2)/val1'; * entier * division renvoie * entier *, par ex.'7/2 == 3' et' 7% 2 == 1' (reste) quand '7.0/2 = 3.5' ​​ –

+0

Quels sont les types de' val1' et 'val2'? (Oui, je suis sûr que je connais la réponse, mais c'est la première chose que vous devriez regarder quand vous obtenez un comportement surprenant) –

Répondre

2

En divisant entiers le résultat est entier (arithmétique entière est utilisée):

11/2 == 5 
11 % 2 == 1 /* remainder */ 

et lors de la division virgule flottante valeurs le résultat est Floating Point ainsi:

11.0/2 == 5.5 
11/2.0 == 5.5 
((double) 11)/2 == 5.5 

Dans votre cas

double ratio = (val2/val1); 

vous avez une division entière et seulement après la disvison effectuée le résultat de il est moulé à double. Vous pouvez déclarer val2 et val1 comme double:

double val1; 
double val2; 

ou jeté au moins un argument du rapport à double:

double ratio = ((double)val2)/val1; 
0

Le fait que le type de résultat soit double n'a pas d'importance si la division d'origine est effectuée sur des types entiers (tronquer la partie décimale).

Donc, pour résoudre votre problème, que ce soit:

  • Utilisez un type à virgule flottante pour les numéros d'entrée et
  • Cast un des numéros à un type à virgule flottante avant la division
0

je l'ai fait tout le problème de « Programmation de Stroustrup, les principes et Pratique en utilisant C++. Voici les codes bien que pas de commentaires

int main() 
{ 
/** --------Numbers-----*/ 
int val1; 
int val2; 
double largest; //I'll store here the largest value 
double smallest; //I'll store here the smallest value 


cout<< " Enter two Numbers to play with\n"; 
while(cin>> val1>>val2){ 
    if(val1<val2){ 
      cout<< "smallest: "<<val1<<endl; 
      cout<< "largest: "<<val2<<endl; 
      //If the above argument succeeds, largest and smallest will get their values 
      largest=val2; 
      smallest=val1;} 
    if(val1>val2){ 
      cout<< "smallest: "<<val2<<endl; 
      cout<< "largest: "<<val1<<endl; 
      //If the above argument succeeds, largest and smallest will get their values 
      largest=val1; 
      smallest=val2;} 

    int their_sum=val1+val2; 
    int their_product=val1*val2; 
    int their_diff=val1-val2; 
    double ratio1; 
    ratio1=largest/smallest; 
    cout<<"Sum: "<<their_sum<<endl; 
    cout<<"Difference: "<<their_diff<<endl; 
    cout<<"Product: "<<their_product<<endl; 
    cout<<"Ratio: "<<ratio1; 
        } 
return 0; 
} 

Il n'y a rien de nouveau dans ce code, tout a été couvert dans les chapitres précédents.

-2
#include <iostream> 

using namespace std; 

int main() 
{ 
int val1,val2; 

cout << " Enter two integer values followed by enter" << endl << endl; 
cin >> val1; 
cin >> val2; 
    if(val1 < val2) // To determine which value is larger and which one is smaller 
    { 
     cout << val1 << " is smaller than" << val2 << endl << endl << "And"     << val2 << " is larger than " << val1 << endl<<endl; 
      } 

    enter code here 
    else if(val2 < val1) 
    { 
     cout<<val2 <<" is smaller than"<< val1<<endl<<endl<<"And"<< val1 << " is larger than "<< val2<< endl << endl; 
    } 

cout << "The sum of "<< val1<<" and "<<val2<<" is "<< val1+val2<<endl<<endl; 
// diplaying the sum of the two numbers 

    enter code here 

cout << " The difference between "<<val1<< " and "<<val2<< " is " << val1-val2<<endl; 
// displays the difference of val2 from val1 
cout << " The difference between "<<val2<< " and "<<val1<< " is " << val2-val1<<endl; 
// displays thr difference of val1 fromval2 

    enter code here 
    enter code here 

cout << " The product of " <<val1<< " and " << val2<< " is " << val1*val2<< endl<<endl; 
// displaying the product of val1 and val2 

    enter code here 
    enter code here 
    enter code here 

// now to diplay the ratio of the two numbers 
double ratio1; 
cout << " The ratio of "<<val1<<" and "<<val2<<" is "; 
     if(val1 < val2) 
     { 
     ratio1= ((double)val2) /val1; 
      cout << ratio1; 
     } 
     else if(val1 > val2) 
     { 
      ratio1= ((double)val1) /val2; 
      cout << ratio1; 
     } 
} 
+1

Bienvenue sur SO. Veuillez lire ceci [how-to-answer] (http://stackoverflow.com/help/how-to-answer) pour améliorer la qualité de votre réponse. – thewaywewere