我正在使用C ++进行作业。基本上我采取两个方面,假设他们的较小的一面或斜边,然后使用函数吐出剩余的一面。看起来很简单,我99%肯定我的数学是正确的功能部分,但我不断得到奇怪的大答案。
#include<iostream>
#include<cmath>
using namespace std;
double otherSideLength(double, double);
int main() {
double a_small_side;
double hypotenuse;
double swapStore = 0;
double otherSide = 0;
cin >> a_small_side;
cin >> hypotenuse;
if(a_small_side == hypotenuse){
cout << "ERROR" << endl;
cout << "0";
}
if(a_small_side < hypotenuse){
otherSide = otherSideLength(a_small_side, hypotenuse);
cout << otherSide;
}
if(a_small_side > hypotenuse){
swapStore = a_small_side;
a_small_side = hypotenuse;
hypotenuse = swapStore;
otherSide = otherSideLength(a_small_side, hypotenuse);
cout << otherSide;
}
}
double otherSideLength(double a_small_side, double hypotenuse){
//a^2+b^2=c^2,
//b^2 = c^2 + a^2
//b = sqrt(c^2 + a^2)
double b = sqrt(pow(hypotenuse, 2) + pow(a_small_side, 2));
return b;
}
如果有人想快速浏览一下,那就太棒了。
答案 0 :(得分:2)
我认为你有一个标志错误。
如果你检查你的代数,你会发现
a ^ 2 + b ^ 2 = c ^ 2
装置
b ^ 2 = c ^ 2 - a ^ 2.
答案 1 :(得分:2)
除了在Drist的答案中已经发现的正确代数公式之外,你的代码中还存在一些问题。
例如,通常将浮点数与简单x == y
进行比较是错误的。最好使用一种与容差的“模糊”比较。
此外,计算毕达哥拉斯定理简单地应用经典数学公式是容易出错的,如平方,例如a*a
可能会溢出。描述了一种更好的方法here。
假设c是斜边(c > a
),您可以这样做:
// b = sqrt(c*c - a*a);
double r = a / c;
double b = c * sqrt(1.0 - r*r);