С ++ рассчитывает соотношение 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), однако, несмотря на то, что я устанавливаю переменную "коэффициент" как двойную, она удаляет любые десятичные дроби из ответа в случаях, когда отношения не являются целыми числами. Может кто-нибудь сказать мне, где я иду не так?
6 ответов
При делении целых чисел результатом является целое число (используется целочисленная арифметика):
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;
Тот факт, что тип результата double
не имеет значения, выполняется ли оригинальное деление на целочисленные типы (усечение десятичной части).
Итак, чтобы решить вашу проблему, либо:
- Используйте тип с плавающей точкой для ввода чисел
- Приведите одно из чисел к типу с плавающей запятой перед делением
Если вам вообще нужно соотношение двух чисел, скажем, a,b в форме n:m (где n>=1), тогда просто найдите НОД (a,b) и разделите a,b на этот результат.
например:
a=4,b=6;
GCD(a,b)=2;
n=4/2=>2
m=6/2=>3
so ratio of 4 and 6 is 2:3
Я сделал всю проблему из Страуструпа "Программирование, принципы и практика с использованием 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 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;
}
В этом коде нет ничего нового, все было описано в предыдущих главах.
#include<iostream>
using namespace std;
class Test
{
public:
void check()
{
int x,y;
cout<<"Enter 1st number";
cin>>x;
cout<<"Enter 2nd number";
cin>>y;
int a;
int d= gcd(x,y);
cout<< x/d << " : " << y / d << endl;
}
int gcd(int x, int y) // 14, 21
{
int d;
if(y>x)
{
y=x+y;
x=y-x;
y=y-x;
}
for(int i=1; i<=y; i++)
{
if(x%i==0 && y%i==0 )
{
d=i;
}
}
return d;
}
};
int main()
{
Test t;
t.check();
return 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;
}
}