そのため、マヤのカレンダーを C++ でコーディングすることになっている割り当てがあり、カレンダーに次の機能が含まれるようにします。
argv[1] | argv[2] | argv[3] | output
m+d | Mayan date | number of days | Mayan date
m-d | Mayan date | number of days | Mayan date
m-m | Mayan date | Mayan date | number of days
g= | Gregorian date | | Mayan date
m= | Mayan date | | Gregorian date
最初の操作 m+d には、マヤの日付と日数が必要です。この操作は、マヤの日付に日数を加算して、マヤの日付を出力として生成します。2 番目の操作 md は、マヤの日付から日数を減算して、出力としてマヤの日付を生成します。3 番目の操作 mm は、マヤの 2 つの日付の間の日数を計算します。4 番目の演算 g= は、グレゴリオ暦の日付をマヤ暦の日付に変換します。最後の操作 m= は、マヤの日付をグレゴリオ暦の日付に変換します。
マヤ暦の単位は、次のように設定されています。
Days Long Count period Long Count unit
1 1 Kin
20 20 Kin 1 Uinal
360 18 Uinal 1 Tun
7,200 20 Tun 1 Ka'tun
144,000 20 Ka'tun 1 Bak'tun
2,880,000 20 Bak'tun 1 Pictun
57,600,000 20 Pictun 1 Kalabtun
1,152,000,000 20 Kalabtun 1 K'inchiltun
23,040,000,000 20 K'inchiltun 1 Alautun
マヤ暦オブジェクトの初期化に問題があります。これが私がこれまでに持っているものです:
class MayanDate {
// Bak'tun, Ka'tun, etc stuff ...
unsigned int Kin = 1;
unsigned int Uinal = 20;
unsigned int Tun = 360;
unsigned int Katun = 7200;
unsigned int Baktun = 144000;
unsigned int Pictun = 2880000;
unsigned int Kalabtun = 57600000;
unsigned long Kinchiltun = 1152000000;
unsigned long Alautun = 23040000000;
public:
MayanDate();
MayanDate( unsigned int, unsigned int, unsigned int, unsigned int, unsigned int);
void set( unsigned int, unsigned int, unsigned int, unsigned int, unsigned int);
MayanDate &operator++();
int operator-( const MayanDate &) const;
MayanDate operator+( unsigned int ) const;
MayanDate operator-( unsigned int) const;
bool operator==( const MayanDate & ) const;
bool operator!=(const MayanDate & m ) const;
void get_string( char*, unsigned int) const;
};
クラスを初期化するときに、ユニットが表す日数と等しくなるようにユニットを設定できるようにしたいので、ユニットを操作しやすくなります。
上記のコードはコンパイルされておらず、その理由がわかりません。私が間違っていることへの指針は非常に役に立ちます。