float COZIR::HeatIndex(float temperature, float percentHumidity, bool isFahrenheit) { float hi, a1, a2; if(!isFahrenheit) temperature = Fahrenheit(); hi = 0.5 * (temperature + 61.0 + ((temperature - 68.0) * 1.2) + (percentHumidity * 0.094)); a1 = ((13.0 - percentHumidity) * 0.25) * sqrt((17.0 - abs(temperature - 95.0)) * 0.0588); a2 = ((percentHumidity - 85.0) * 0.1) * ((87.0 - temperature) * 0.2); if(hi>= 80){ hi = -42.379+ (2.0490152 * temperature) + (10.14333127 * percentHumidity) - (0.22475541 * temperature * percentHumidity) - (0.00683783 * temperature * temperature) - (0.05481717 * percentHumidity * percentHumidity) + (0.00122874 * temperature * temperature * percentHumidity) + (0.00085282 * temperature * percentHumidity * percentHumidity) - (0.00000199 * temperature * temperature * percentHumidity * percentHumidity); //case1 if((percentHumidity < 13) && (temperature >= 80.0) && (temperature <= 112.0)) hi -= a1; else if ((percentHumidity > 85) && (temperature >= 80.0) && (temperature <= 87.0)) hi += a2; } return isFahrenheit? hi : convertFtoC(hi); }
//boolean isFahrenheit: True == Fahrenheit; False == Celcius float DHT::computeHeatIndex(float temperature, float percentHumidity, bool isFahrenheit) { // Using both Rothfusz and Steadman's equations // http://www.wpc.ncep.noaa.gov/html/heatindex_equation.shtml float hi; if (!isFahrenheit) temperature = convertCtoF(temperature); hi = 0.5 * (temperature + 61.0 + ((temperature - 68.0) * 1.2) + (percentHumidity * 0.094)); if (hi > 79) { hi = -42.379 + 2.04901523 * temperature + 10.14333127 * percentHumidity + -0.22475541 * temperature*percentHumidity + -0.00683783 * pow(temperature, 2) + -0.05481717 * pow(percentHumidity, 2) + 0.00122874 * pow(temperature, 2) * percentHumidity + 0.00085282 * temperature*pow(percentHumidity, 2) + -0.00000199 * pow(temperature, 2) * pow(percentHumidity, 2); if((percentHumidity < 13) && (temperature >= 80.0) && (temperature <= 112.0)) hi -= ((13.0 - percentHumidity) * 0.25) * sqrt((17.0 - abs(temperature - 95.0)) * 0.05882); else if((percentHumidity > 85.0) && (temperature >= 80.0) && (temperature <= 87.0)) hi += ((percentHumidity - 85.0) * 0.1) * ((87.0 - temperature) * 0.2); } return isFahrenheit ? hi : convertFtoC(hi); }
float DHT::computeHeatIndex(float temperature, float percentHumidity, bool isFahrenheit) { float heatIndex; if (!isFahrenheit) temperature = convertCtoF(temperature); heatIndex = 0.5 * (temperature + 61.0 + ((temperature - 68.0) * 1.2) + (percentHumidity * 0.094)); if (heatIndex > 79) { heatIndex = -42.379 + 2.04901523 * temperature + 10.14333127 * percentHumidity + -0.22475541 * temperature*percentHumidity + -0.00683783 * pow(temperature, 2) + -0.05481717 * pow(percentHumidity, 2) + 0.00122874 * pow(temperature, 2) * percentHumidity + 0.00085282 * temperature*pow(percentHumidity, 2) + -0.00000199 * pow(temperature, 2) * pow(percentHumidity, 2); if((percentHumidity < 13) && (temperature >= 80.0) && (temperature <= 112.0)) heatIndex -= ((13.0 - percentHumidity) * 0.25) * sqrt((17.0 - abs(temperature - 95.0)) * 0.05882); else if((percentHumidity > 85.0) && (temperature >= 80.0) && (temperature <= 87.0)) heatIndex += ((percentHumidity - 85.0) * 0.1) * ((87.0 - temperature) * 0.2); } //boolean isFahrenheit: True == Fahrenheit; False == Celcius return isFahrenheit ? heatIndex : convertFtoC(heatIndex); }
int main() { int choixMenu, h, m, s; //ENTIERS float tempC, tempF, distKM, distMI, volumeL, volumeG; //REELS do //DEBUT DE LA BOUCLE REPETER { AfficherMenu(); printf("\nVotre choix ? "); scanf("%d", &choixMenu); printf("\n"); //STRUCTURE CONDITIONNELLE switch (choixMenu) { case 1: // SI CHOIXMENU EST EGAL A 1 ALORS printf("Saisir heure(s)\n"); scanf("%d", &h); printf("Saisir minute(s)\n"); scanf("%d", &m); printf("Saisir seconde(s)\n"); scanf("%d", &s); printf("%d h, %d min, %d sec = %d secondes", h, m, s, convertHMStoS(h,m,s)); break; //ON SORT DU SWITCH case 2: printf("Saisir secondes\n"); scanf("%d", &s); printf("%d secondes =", s); //ON ENVOIE L'ADRESSE DE H M ET S decoupeSecondes(&h, &m, &s); printf(" %d heures et %d minutes et %d secondes", h, m, s); break; case 3: printf("saisir la temperature en degre C\n"); scanf("%f", &tempC); printf("%1.2f degre C = %1.2f degre F", tempC, convertCtoF(tempC)); break; case 4: printf("saisir la temperature en degre F\n"); scanf("%f",&tempF); printf("%1.2f degre F = %1.2f degre C", tempF, convertFtoC(tempF)); break; case 5: printf("saisir une distance en km\n"); scanf("%f", &distKM); printf("%1.2f km = %1.2f miles", distKM, convertKMtoMI(distKM)); break; case 6: printf("saisir une distance en milles\n"); scanf("%f", &distMI); printf("%1.2f mi = %1.2f km",distMI, convertMItoKM(distMI)); break; case 7: printf("saisir un volume en litres\n"); scanf("%f", &volumeL); printf("%1.2f L = %1.2f G", volumeL, convertLtoG(volumeL)); break; case 8: printf("saisir un volume en gallons\n"); scanf("%f", &volumeG); printf("%1.2f G = %1.2f L", volumeG, convertGtoL(volumeG)); break; case 9: printf("Au revoir\n"); } if (choixMenu < 1 || choixMenu > 9) printf("Erreur de saisie"); } while (choixMenu != 9); //JUSQU'AU TEMPS QUE CHOIXMENU EGAL A 9 return 0; }
float DHT::getHeatIndex() { return convertFtoC(computeHeatIndex(convertCtoF(readTemperature()), readHumidity())); }