2016-07-12 16 views
0

Hallo Leute, ich bin ziemlich neu in Programmierung und arbeite mich durch Stroustrups "Programmierung, Prinzipien und Praxis mit C++" und ich bin am Ende von Kapitel 3 mit vollständig zum Stillstand gekommen eine Übung, in der Sie aufgefordert werden, ein Stück Code zu schreiben, das eine Anzahl von Berechnungen mit 2 Zahlen durchführt, einschließlich des Ermittelns des Verhältnisses der Zahlen. Unglücklicherweise wurde das im Buch nicht behandelt und ich reiße mir die Haare aus, um es selbst herauszufinden, nur in der Lage, für meinen kleinen kleinen Kopf Beispiele zu finden.C++ Berechnung des Verhältnisses von 2 Zahlen

Der Code, den ich im Moment habe, ist:

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'; 

, die für Zahlen, die auf ein ganzes Verhältnis gleichsetzen (zB 100 und 25) aber trotz mir Setzen der Variable „ratio“ als Doppel ihm gut funktionieren Entfernt alle Dezimalstellen aus der Antwort, wenn es sich nicht um ganzzahlige Verhältnisse handelt. Kann mir jemand sagen, wo ich falsch liege?

+0

Dies ist nicht das Problem, aber 'ratio = (val2/val1)' braucht keine Klammern. –

+0

'((double) val2)/val1'; * Ganzzahl * Division liefert * Ganzzahl *, z.'7/2 == 3' und' 7% 2 == 1' (Rest) wenn '7.0/2 = 3.5' ​​ –

+0

Was sind die Arten von' val1' und 'val2'? (Ja, ich bin mir ziemlich sicher, dass ich die Antwort kenne, aber das ist das erste, was du dir ansehen solltest, wenn du überraschendes Verhalten bekommst) –

Antwort

2

Beim Dividieren von Ganzzahlen ist das Ergebnis Integer (Integer-Arithmetik wird verwendet):

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

und wenn Gleitkomma Dividieren Werte das Ergebnis Punkt schwimmt auch:

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

In Ihrem Fall

double ratio = (val2/val1); 

Sie haben eine Integer-Division und erst nach die Disvison durchgeführt das Ergebnis davon ist auf double geworfen. Sie können entweder erklären val2 und val1 als double:

double val1; 
double val2; 

oder werfen mindestens ein Argument des Verhältnisses zu double:

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

Die Tatsache, dass der Ergebnistyp double ist, spielt keine Rolle, wenn die ursprüngliche Division an ganzzahligen Typen durchgeführt wird (Dezimalteil wird abgeschnitten).

So Ihr Problem zu lösen, entweder als auch

  • Cast eine der Zahlen zu einem Gleitkommatyps

    • eine Fließkommatyp für die Eingabe von Zahlen vor der Teilung
  • 0

    Ich habe das ganze Problem von Stroustrup „Programmieren, Prinzipien und Üben Sie mit C++. Hier sind die Codes, obwohl keine Kommentare.

    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; 
    } 
    

    Es gibt nichts neues in diesem Code, alles wurde in den vorherigen Kapiteln behandelt.

    -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

    Willkommen bei SO. Bitte lesen Sie [how-to-answer] (http://stackoverflow.com/help/how-to-answer), um die Qualität Ihrer Antwort zu verbessern. – thewaywewere