問題が発生したため、プログラムが正しく動作しなくなりました。
Posted: 2015年10月06日(火) 22:15
C++を最近始めました。
VC++ の開発者コマンドプロントプトでケッペンの気候区分判定プログラムを作っている最中です。
ところが乾季を判定するプログラムで
”問題が発生したため、プログラムが正しく動作しなくなりました。”
と表示され、判定がいかなる場合でも 乾季無し となってしまいます。。。
エラーの通知もないのでどこを修正すればいいのかわからんのです。以下にコードを示します。
code
#include <iostream>
using namespace std;
#define NORTH 1
#define SOUTH 2
#define FALSE 0
#define SUMMER 3
#define WINTER 4
class Koppen
{
private:
double Temp[13]; // 1月から12月までの平均気温と年間平均気温
double Rain[13]; //1月から12月までの平均降水量と年間平均降水量
public:
Koppen(); //初期化コンストラクタ
void SetTemp(); //(温度のセット)
void SetRain(); //(降水量のセット)
double Find_TempMax(); //年間最高気温を返す
double Find_TempMin(); //年間最小気温を返す
double Find_RainMax(); //年間最大降水量を返す
double Find_RainMin(); //年間最小降水量を返す
int Check_North_or_South() ; // 北半球だとNORTH、南半球だとSOUTHを返す
int Check_DrySeason() ; // 乾季が夏の場合SUUMERを返し、冬だとWINNTERを返し、判定不能の場合FALSEを返す
};
Koppen :: Koppen() // クラス内変数の初期化コンストラクタ
{
int i ;
for(i=0;i<13;i++)
{
Temp[i+1] = NULL ;
Rain[i+1] = NULL ;
}
}
void Koppen :: SetTemp() //12ヶ月の気温を入力 + 年間平均気温を入力
{
int i;
for(i=0;i<12;i++)
{
cout << i+1 << "月の平均気温:";
cin >> Temp[i+1];
}
cout << "年間平均気温:";
cin >> Temp[13] ;
}
void Koppen :: SetRain() // 12ヶ月の降水量を入力 + 年間平均降水量を入力
{
int i;
for(i=0;i<12;i++)
{
cout << i+1 << "月の平均降水量:" ;
cin >> Rain[i+1];
}
cout << "年間平均降水量:" ;
cin >> Rain[13] ;
}
double Koppen :: Find_TempMax() // 最高気温を返す
{
double tmax = Temp[1] ;
int i;
for(i=0;i<12;i++)
{
if(Temp[i+1] > tmax) tmax = Temp[i+1] ;
}
return tmax;
}
double Koppen :: Find_TempMin() // 最低気温を返す
{
double tmin = Temp[1];
int i;
for(i=0;i<12;i++)
{
if(Temp[i+1] < tmin) tmin = Temp[i+1] ;
}
return tmin ;
}
double Koppen :: Find_RainMax() // 最高降水量を返す
{
double rmax = Rain[1] ;
int i;
for(i=0;i<12;i++)
{
if(Rain[i+1] > rmax) rmax = Rain[i+1] ;
}
return rmax ;
}
double Koppen :: Find_RainMin() // 最低降水量を返す
{
double rmin = Rain[1] ;
int i ;
for(i=0;i<12;i++)
{
if(Rain[i+1] < rmin) rmin = Rain[i+1] ;
}
return rmin ;
}
int Koppen :: Check_North_or_South() // 北半球の場合NORTHを返し、南半球の場合SOUTHを返す
{
int summer,winter ;
int north_or_south ;
summer = Temp[6]+Temp[7]+Temp[8]+Temp[9] ;
winter = Temp[11]+Temp[12]+Temp[1]+Temp[2] ;
if(summer > winter) north_or_south = NORTH ;
if(summer < winter) north_or_south = SOUTH ;
return north_or_south ;
}
int Koppen :: Check_DrySeason() // 乾季が夏の場合SUUMERを返し、冬だとWINNTERを返し、判定不能の場合FALSEを返す
{
int KARI_DrySeason = NULL ;
switch( Check_North_or_South() )
{
case NORTH :
if(Find_RainMin() == Rain[11] || Rain[12] || Rain[1] || Rain[2])
{
KARI_DrySeason = WINTER ;
}
else if(Find_RainMin() == Rain[6] || Rain[7] || Rain[8] || Rain[9])
{
KARI_DrySeason = SUMMER ;
}
else
{
KARI_DrySeason = FALSE ;
}
case SOUTH :
if(Check_North_or_South() == Rain[6] || Rain[7] || Rain[8] || Rain[9])
{
KARI_DrySeason = WINTER ;
}
else if(Check_North_or_South() == Rain[11] || Rain[12] || Rain[1] || Rain[2])
{
KARI_DrySeason = SUMMER ;
}
else
{
KARI_DrySeason = FALSE ;
}
}
int winter_or_summer = NULL ;
switch(KARI_DrySeason)
{
case WINTER :
if(Find_RainMax() >= Find_RainMin() * 10)
{
winter_or_summer = WINTER ;
}
else
{
winter_or_summer = FALSE ;
}
case SUMMER :
if(Find_RainMax() >= Find_RainMin() * 3)
{
winter_or_summer = SUMMER ;
}
else
{
winter_or_summer = FALSE ;
}
case FALSE :
winter_or_summer = FALSE ;
}
return winter_or_summer ;
}
int main() //ここからmain関数
{
Koppen ob ;
ob.SetRain();
ob.SetTemp();
if(ob.Check_DrySeason() == WINTER)
{
cout << "冬乾季\n" ;
}
else if(ob.Check_DrySeason() == SUMMER)
{
cout << "夏乾季\n" ;
}
else if(ob.Check_DrySeason() == FALSE)
{
cout << "乾季なし\n" ;
}
else
{
cout << "エラー\n" ;
}
return 0;
}
/code
まだ未完成なので完全な気候区分はできず、int Koppen :: Check_DrySeason 関数の動作チェックのためのmian関数しか作ってません。。。
VC++ の開発者コマンドプロントプトでケッペンの気候区分判定プログラムを作っている最中です。
ところが乾季を判定するプログラムで
”問題が発生したため、プログラムが正しく動作しなくなりました。”
と表示され、判定がいかなる場合でも 乾季無し となってしまいます。。。
エラーの通知もないのでどこを修正すればいいのかわからんのです。以下にコードを示します。
code
#include <iostream>
using namespace std;
#define NORTH 1
#define SOUTH 2
#define FALSE 0
#define SUMMER 3
#define WINTER 4
class Koppen
{
private:
double Temp[13]; // 1月から12月までの平均気温と年間平均気温
double Rain[13]; //1月から12月までの平均降水量と年間平均降水量
public:
Koppen(); //初期化コンストラクタ
void SetTemp(); //(温度のセット)
void SetRain(); //(降水量のセット)
double Find_TempMax(); //年間最高気温を返す
double Find_TempMin(); //年間最小気温を返す
double Find_RainMax(); //年間最大降水量を返す
double Find_RainMin(); //年間最小降水量を返す
int Check_North_or_South() ; // 北半球だとNORTH、南半球だとSOUTHを返す
int Check_DrySeason() ; // 乾季が夏の場合SUUMERを返し、冬だとWINNTERを返し、判定不能の場合FALSEを返す
};
Koppen :: Koppen() // クラス内変数の初期化コンストラクタ
{
int i ;
for(i=0;i<13;i++)
{
Temp[i+1] = NULL ;
Rain[i+1] = NULL ;
}
}
void Koppen :: SetTemp() //12ヶ月の気温を入力 + 年間平均気温を入力
{
int i;
for(i=0;i<12;i++)
{
cout << i+1 << "月の平均気温:";
cin >> Temp[i+1];
}
cout << "年間平均気温:";
cin >> Temp[13] ;
}
void Koppen :: SetRain() // 12ヶ月の降水量を入力 + 年間平均降水量を入力
{
int i;
for(i=0;i<12;i++)
{
cout << i+1 << "月の平均降水量:" ;
cin >> Rain[i+1];
}
cout << "年間平均降水量:" ;
cin >> Rain[13] ;
}
double Koppen :: Find_TempMax() // 最高気温を返す
{
double tmax = Temp[1] ;
int i;
for(i=0;i<12;i++)
{
if(Temp[i+1] > tmax) tmax = Temp[i+1] ;
}
return tmax;
}
double Koppen :: Find_TempMin() // 最低気温を返す
{
double tmin = Temp[1];
int i;
for(i=0;i<12;i++)
{
if(Temp[i+1] < tmin) tmin = Temp[i+1] ;
}
return tmin ;
}
double Koppen :: Find_RainMax() // 最高降水量を返す
{
double rmax = Rain[1] ;
int i;
for(i=0;i<12;i++)
{
if(Rain[i+1] > rmax) rmax = Rain[i+1] ;
}
return rmax ;
}
double Koppen :: Find_RainMin() // 最低降水量を返す
{
double rmin = Rain[1] ;
int i ;
for(i=0;i<12;i++)
{
if(Rain[i+1] < rmin) rmin = Rain[i+1] ;
}
return rmin ;
}
int Koppen :: Check_North_or_South() // 北半球の場合NORTHを返し、南半球の場合SOUTHを返す
{
int summer,winter ;
int north_or_south ;
summer = Temp[6]+Temp[7]+Temp[8]+Temp[9] ;
winter = Temp[11]+Temp[12]+Temp[1]+Temp[2] ;
if(summer > winter) north_or_south = NORTH ;
if(summer < winter) north_or_south = SOUTH ;
return north_or_south ;
}
int Koppen :: Check_DrySeason() // 乾季が夏の場合SUUMERを返し、冬だとWINNTERを返し、判定不能の場合FALSEを返す
{
int KARI_DrySeason = NULL ;
switch( Check_North_or_South() )
{
case NORTH :
if(Find_RainMin() == Rain[11] || Rain[12] || Rain[1] || Rain[2])
{
KARI_DrySeason = WINTER ;
}
else if(Find_RainMin() == Rain[6] || Rain[7] || Rain[8] || Rain[9])
{
KARI_DrySeason = SUMMER ;
}
else
{
KARI_DrySeason = FALSE ;
}
case SOUTH :
if(Check_North_or_South() == Rain[6] || Rain[7] || Rain[8] || Rain[9])
{
KARI_DrySeason = WINTER ;
}
else if(Check_North_or_South() == Rain[11] || Rain[12] || Rain[1] || Rain[2])
{
KARI_DrySeason = SUMMER ;
}
else
{
KARI_DrySeason = FALSE ;
}
}
int winter_or_summer = NULL ;
switch(KARI_DrySeason)
{
case WINTER :
if(Find_RainMax() >= Find_RainMin() * 10)
{
winter_or_summer = WINTER ;
}
else
{
winter_or_summer = FALSE ;
}
case SUMMER :
if(Find_RainMax() >= Find_RainMin() * 3)
{
winter_or_summer = SUMMER ;
}
else
{
winter_or_summer = FALSE ;
}
case FALSE :
winter_or_summer = FALSE ;
}
return winter_or_summer ;
}
int main() //ここからmain関数
{
Koppen ob ;
ob.SetRain();
ob.SetTemp();
if(ob.Check_DrySeason() == WINTER)
{
cout << "冬乾季\n" ;
}
else if(ob.Check_DrySeason() == SUMMER)
{
cout << "夏乾季\n" ;
}
else if(ob.Check_DrySeason() == FALSE)
{
cout << "乾季なし\n" ;
}
else
{
cout << "エラー\n" ;
}
return 0;
}
/code
まだ未完成なので完全な気候区分はできず、int Koppen :: Check_DrySeason 関数の動作チェックのためのmian関数しか作ってません。。。