С ++ рассчитывает соотношение 2 чисел

Привет, ребята, я довольно новичок в программировании и прохожу свой путь через «Программирование, принципы и практика использования C ++» Страуструпа, и в конце главы 3 я полностью остановился, выполнив упражнение с просьбой написать кусок кода. это делает ряд вычислений, включающих 2 числа, который включает в себя нахождение отношения чисел. К сожалению, в книге это вообще не освещалось, и я вырываю свои волосы, пытаясь понять это самостоятельно, только в состоянии найти примеры кода, способного продвинуться для моего маленького маленького мозга.

Код, который у меня есть на данный момент:

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

которая отлично работает для чисел, которые равны целому отношению (например, 100 и 25), однако, несмотря на то, что я устанавливаю переменную «отношение» как двойную, она удаляет любые десятичные дроби из ответа в случаях не целых чисел. Может кто-нибудь сказать мне, где я иду не так?

0

Решение

При делении целые результат целое число (используется целочисленная арифметика):

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

и при делении плавающая запятая оценивает результат плавающая запятая также:

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

В твоем случае

 double ratio = (val2 / val1);

у вас есть целочисленное деление и только после того, как совершено смещение, результат double, Вы можете либо объявить val2 а также val1 как double:

double val1;
double val2;

или же бросать хотя бы один аргумент соотношения к double:

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

Другие решения

Тот факт, что тип результата double не имеет значения, выполняется ли оригинальное деление на целочисленные типы (усечение десятичной части).

Итак, чтобы решить вашу проблему, либо:

  • Используйте тип с плавающей точкой для ввода чисел
  • Приведите одно из чисел к типу с плавающей запятой перед делением
0

Я сделал всю проблему из Страуструпа «Программирование, принципы и практика с использованием C ++. Вот коды, хотя без комментариев.

int main()
{
/** --------Numbers-----*/
int val1;
int val2;
double largest; //I'll store here the largest value
double smallest; //I'll store here the smallest valuecout<< " 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;
}

В этом коде нет ничего нового, все было описано в предыдущих главах.

0

#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;
}
}
-2
По вопросам рекламы [email protected]