Я написал несколько функций, и я проверил несколько раз, чтобы увидеть, неправильно ли я написал формулу или какие-либо определенные переменные, но это кажется правильным. ИСПЫТАТЕЛЬНЫЕ СЛУЧАИ БЫЛИ ПРЕДНАЗНАЧЕНЫ МОИМ ИНСТРУКТОРОМ, И Я ПРИНИМАЮ, ЧТО ДОЛЖНО БЫТЬ РАБОТАЮТ! Я не уверен, где и что проблема в моем коде. Кстати, тестовые примеры для всех предыдущих функций до последнего прошли, это всего лишь последняя функция, оценка, которая дает мне проблемы.Почему мои тестовые примеры не работают?
ПРИМЕЧАНИЕ: Я объявил много постоянных переменных, и некоторые из них могут казаться неиспользованными прямо сейчас, но вы можете игнорировать это.
#include "grove.h"
#include <math.h>
#include <stdlib.h>
#define SOILQUALACONST 10 /* Number subtracted from both x and y in typeA. */
#define SOILQUALBCONST 10 /* Number subtracted from both x and y in typeB. */
#define SUNEXPXTERM 8 /* Number you subtract from x in exponent.*/
#define SUNEXPDIV1 10 /* First denominator term in first fraction in exp.*/
#define SUNEXPYTERM 12 /* Number you subtract from y in exponent.*/
#define SUNEXPDIV2 5 /* Second denominator term in second fraction in exp.*/
#define SUNEXPEMULT 10 /* The constant you are multiplying e^(exp.) by.*/
#define IRRIEXPONUM 10 /* The numerator in irrigation exposure function.*/
#define ESTYIELDNUM1 7 /* First term in fraction part of estimated yield.*/
#define ESTYIELDNUM2 7 /* Last term in fraction part of estimated yield.*/
double soilQuality(int x, int y) {
double typeA, typeB, soilQual;
typeA = 1 + (sqrt((pow(x - SOILQUALACONST, 2)) + (pow(y - SOILQUALACONST, 2)) * (1.0)));
typeB = (1 + ((abs(x - SOILQUALBCONST) + abs(y - SOILQUALBCONST))/(2.0)));
soilQual = (((x + y) % 2) * typeB) + ((1 - ((x + y) % 2)) * typeA);
return soilQual;
}
double sunExposure(int x, int y) {
double exponent, sunexp;
exponent = (-0.5) * (((pow(x - SUNEXPXTERM, 2))/(SUNEXPDIV1)) + ((pow(y -
SUNEXPYTERM, 2))/(SUNEXPDIV2)));
sunexp = SUNEXPEMULT * exp(exponent);
return sunexp;
}
double irrigationExposure(int x, int y) {
double denominator, waterexp;
denominator = (1 + abs(x - y)) * (1.0);
waterexp = ((IRRIEXPONUM)/(denominator));
return waterexp;
}
double estimateYield(int x, int y) {
double waterexp, soilqual, sunexp, numerator, estyield;
waterexp = irrigationExposure(x, y);
soilqual = soilQuality(x, y);
sunexp = sunExposure(x, y);
numerator = ((ESTYIELDNUM1) - (abs(waterexp - ESTYIELDNUM2))) + 1;
estyield = (soilqual) * (sunexp) * ((numerator)/(2.0));
return estyield;
}
Так в основном, несколько тестовых случаев для последней функции продолжает неудачу, и я не могу понять, почему. Вот тестовые примеры замешаны мой инструктор:
#include <stdio.h>
#include "grove.h"
#include "checkit.h"
int main(){
checkit_double(estimateYield(3,3), 0.023697 );
checkit_double(estimateYield(1,19),0.067322);
checkit_double(estimateYield(7,8), 20.165240);
checkit_double(estimateYield(12,3), 0.007501);
checkit_double(estimateYield(4,17), 2.371061);
return(0);
}
А вот то, что я получаю, когда я бег их:
Test passed on line 6.
Test FAILED on line 7. estimateYield(1,19) is 0.088215, expected 0.067322.
Test passed on line 8.
Test passed on line 9.
Test FAILED on line 10. estimateYield(4,17) is 2.766238, expected 2.371061.
И только в случае, если вам это нужно, формула для estimateYield является:
soilQuality (х, у) * sunExposure (х, у) * ((7- (абс (irrigationExposure (х, у) - 7)) + 1)/(2))
пожалуйста очистить код от неиспользованной или неактуальной вещи – xmoex
Конечно, нет проблем! – Karen
Вы пытались проверить результаты вручную? Кстати: это домашнее задание? – xmoex