Last active
May 1, 2018 12:52
-
-
Save m-hayabusa/94a3919ef04bb58ed28275a1ab1c8dd9 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
//#define DEBUG | |
/* | |
Test Case | |
6,7,11,13,16,12,25,25,20,15,9,7 | |
34,35,25,43,51,21,11,9,21,65,63,55 | |
*/ | |
int main() { | |
double deg[12], rain[12], maxdeg, mindeg, maxrain, minrain, degavg, rainavg, degsum, rainsum, r; | |
int i, maxrainmonth; | |
char kansou; // 乾燥季節型 | |
printf("1~12月の平均気温、カンマ区切りで"); | |
scanf("%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf",°[0],°[1],°[2],°[3],°[4],°[5],°[6],°[7],°[8],°[9],°[10],°[11]); | |
printf("1~12月の平均降水量、カンマ区切りで"); | |
scanf("%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf",&rain[0],&rain[1],&rain[2],&rain[3],&rain[4],&rain[5],&rain[6],&rain[7],&rain[8],&rain[9],&rain[10],&rain[11]); | |
mindeg = deg[0]; | |
maxdeg = deg[0]; | |
minrain = rain[0]; | |
maxrain = rain[0]; | |
maxrainmonth = 0; | |
degsum = 0; | |
rainsum = 0; | |
for (i = 0; i <= 11; i++) { | |
if (deg[i] > maxdeg) { | |
maxdeg = deg[i]; // 最暖月の温度 | |
} | |
if (deg[i] < mindeg) { | |
maxdeg = deg[i]; // 最冷月の温度 | |
} | |
if (rain[i] > maxrain) { | |
maxrain = rain[i]; // 最多降水量 | |
maxrainmonth = i; // 最多降水量を示す月 | |
} | |
if (rain[i] < minrain) { | |
minrain = rain[i]; // 最少降水量 | |
} | |
degsum += deg[i]; // 年温度合計 | |
rainsum += rain[i]; // 年降水量合計 | |
} | |
degavg = degsum / 12; // 年温度平均 | |
rainavg = rainsum / 12; // 年降水量平均 | |
#ifdef DEBUG | |
printf("maxdeg,mindeg \t%lf, %lf \n", maxdeg, mindeg); | |
printf("maxrain,minrain \t%lf, %lf \n", maxrain, minrain); | |
printf("maxrainmonth: \t%d\n", maxrainmonth); | |
#endif | |
if (maxdeg < 0) { | |
printf("氷雪気候です。\n"); | |
} else if (maxdeg < 10) { | |
printf("ツンドラ気候です\n"); | |
} else { | |
// 乾燥季節型の決定(w/s/f の 3 つから選択) | |
if (deg[0] < deg[7]) { // 北半球の場合 | |
if ((6 < maxrainmonth && maxrainmonth < 9) && (minrain * 10 < maxrain)) { | |
kansou = 'w'; | |
// 冬季乾燥型、w // | |
// 降水量が最多の月が夏にあり、最少雨月降水量の 10倍が最多雨月降水量を下回る。// | |
} else if ((maxrainmonth < 6 || maxrainmonth > 9) && (minrain * 3 < maxrain)) { | |
kansou = 's'; | |
// 夏季乾燥型、s // | |
// 降水量が最多の月が冬にあり、最少雨月降水量の 3倍が最多雨月降水量を下回る。// | |
} else { | |
kansou = 'f'; | |
// 年中湿潤型、f // | |
// 冬季乾燥型(w)と夏季乾燥型(s)のどちらでもない。 // | |
} | |
} else { // 南半球の場合 | |
if ((9 < maxrainmonth || maxrainmonth < 6) && (minrain * 10 < maxrain)) { | |
kansou = 'w'; | |
// 冬季乾燥型、w // | |
// 降水量が最多の月が夏にあり、最少雨月降水量の 10倍が最多雨月降水量を下回る。// | |
} else if ((6 < maxrainmonth && maxrainmonth < 9) && (minrain * 3 < maxrain)) { | |
kansou = 's'; | |
// 夏季乾燥型、s // | |
// 降水量が最多の月が冬にあり、最少雨月降水量の 3倍が最多雨月降水量を下回る。// | |
} else { | |
kansou = 'f'; | |
// 年中湿潤型、f // | |
// 冬季乾燥型(w)と夏季乾燥型(s)のどちらでもない。 // | |
} | |
} | |
// 乾燥限界の決定 | |
switch (kansou) { | |
case 'w' : | |
r = 20 * (degavg + 114); | |
break; | |
case 's' : | |
r = 20 * degavg; | |
break; | |
case 'f' : | |
r = 20 * (degavg + 7); | |
break; | |
} | |
if (rainsum >= r) { | |
if (mindeg >= 18) { // 最寒月の平均気温が18度以上(熱帯)// | |
if (minrain >= 60) { | |
printf("熱帯雨林気候です.\n"); | |
} else { | |
printf("サバナ気候か熱帯モンスーン気候です。グラフをみて判定してください\n"); | |
} | |
} else if ((mindeg >= -3) && (mindeg < 18)) { // 最寒月の平均気温が-3度以上18度未満(温帯) | |
switch (kansou) { | |
case 'w': | |
printf("温暖冬季少雨気候です\n"); | |
break; | |
case 's': | |
printf("地中海性気候です\n"); | |
break; | |
case 'f': | |
// 最暖月平均気温が22度以上である // | |
if (maxdeg >= 22) { | |
printf("温暖湿潤気候です\n"); | |
} else { | |
printf("西岸海洋性気候です\n"); | |
} break; | |
} | |
// 最寒月の平均気温が-3度未満(冷帯) // | |
} else { | |
switch (kansou) { | |
case 'w': | |
printf("冷帯冬季少雨気候です\n"); | |
break; | |
case 's': | |
printf("高地地中海性気候です\n"); | |
break; | |
case 'f': | |
printf("冷帯湿潤気候です\n"); | |
break; | |
} | |
} | |
// 年間降水量>=rではない // | |
} else { | |
if (rainavg >= 0.5 * r) { | |
printf("ステップ気候です\n"); | |
} else { | |
printf("砂漠気候です\n"); | |
} | |
} | |
} | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment