Skip to content

Instantly share code, notes, and snippets.

@m-hayabusa
Last active May 1, 2018 12:52
Show Gist options
  • Save m-hayabusa/94a3919ef04bb58ed28275a1ab1c8dd9 to your computer and use it in GitHub Desktop.
Save m-hayabusa/94a3919ef04bb58ed28275a1ab1c8dd9 to your computer and use it in GitHub Desktop.
#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",&deg[0],&deg[1],&deg[2],&deg[3],&deg[4],&deg[5],&deg[6],&deg[7],&deg[8],&deg[9],&deg[10],&deg[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