В основном у меня есть две функции. Функция 1 CalculateGamma возвращает угол Y. Это мой прототип для функции:
double calculateGamma(int l1, int l2, int l3) {
double eqn1Numer = (pow(l1, 2) + pow(l2, 2) - pow(l3, 2));
double eqn1Denom = 2 * l1 * l2;
double angleY = acos(eqn1Numer / eqn1Denom);
return angleY;
}
Я вызываю функцию с этим оператором:
angleYres = calculateGamma(l1, l2, l3);
Моя вторая функция radiusMethod1 использует значение, возвращаемое CalculateGamma. (Я проверил, и фактическое значение angleYres является правильным, и я могу напечатать его в main.)
Это моя вторая функция:
double radiusMethod1(int angleYres, int l1, int l2, int l3) {
printf("Angle Y: %lf\n", angleYres);
printf("%d %d %d", l1, l2, l3);```
}
Если я печатаю angleY в main, значение составляет 1,44568. Если я печатаю angleYres (то, что я определил angleY как в функции main) внутри функции radiusMethod1, возвращается 0,0000. Это смущает меня, поскольку l1, l2 и l3 все печатают на правильный вывод: 200, 250, 300, и это три значения, которые я получил от другой функции.
Мой вопрос: как я могу получитьвозвращаемое значение angleY от convertGamma, которое будет использоваться в функции radiusMethod2?
Я попытался переназначить функцию, используя тот же метод, который я использовал для l1, l2, l3, и, похоже, он не работает так же;это сбивает меня с толку, так как я думаю, что использую тот же метод.
Вот мой необработанный код с комментариями / сообщениями об устранении неполадок
#include <stdio.h>
#include <math.h>
int readLength(void) {
int length;
printf("Please enter a side (largest value last): ");
scanf("%d", &length);
return length;
}
double calculateGamma(int l1, int l2, int l3) {
double eqn1Numer = (pow(l1, 2) + pow(l2, 2) - pow(l3, 2)); // Equation 1 calculation
double eqn1Denom = 2 * l1 * l2;
double angleY = acos(eqn1Numer / eqn1Denom);
return angleY;
}
double radiusMethod1(int angleYres, int l1, int l2, int l3) {
printf("Angle Y: %lf\n", angleYres);
printf("%d %d %d", l1, l2, l3);
}
/*double radiusMethod2(int l1, int l2, int l3) {
double valS = (.5) * (l1 + l2 + l3); // calculates value under the square root
double eqn2Numer = (pow(valS * (valS - l1) * (valS - l2) * (valS - l3), 0.5));
double radiusT_Circ = eqn2Numer / valS;
return radiusT_Circ;
}
void printResults(double angleYres, double radiusMethod1, double radiusMethod2) {
printf("Angle Gamma: %lf", angleYres);
printf("Method 1: %lf", radiusMethod1);
printf("Method 2: %lf", radiusMethod2);
}*/
int main() {
int length;
int l1, l2, l3, angleY;
double angleYres, radius1res, radius2res;
// Gets user lengths and assigns them to l1, l2, l3
l1 = readLength();
l2 = readLength();
l3 = readLength();
// Calculates angle Y
angleYres = calculateGamma(l1, l2, l3);
printf("Angle Y: %lf\n", angleYres);
// Calculates radius using method 1
radius1res = radiusMethod1(angleYres, l1, l2, l3);
printf("\n%lf", radius1res);
Я ожидаю, что angleY выведет до ~ 1,4 вФункция radiusMethod1, однако она выводит до 0,0000 внутри функции и -nan (ind) в main.