カテゴリー
C++

関数で星座判定を作ってみよう

「if文で星座の判定をしよう」の章ではif文で星座判定のプログラムを作成しましたが、これを関数を使って書き換えてみましょう。
この例にはポインタ、2次元配列、関数、グローバル変数が含まれていますので、理解を深めてください。
では例をみてみましょう。111111 1111例えばmonthに1が入り、dayに19が入っているとします。
そうすると1の箇所はiが0の時にifの条件式がtrueになりますので、以下の入れ子のif文の条件式の判定に入ります。1 「day <= day1[i]」の中のdayには19が入り、1周目の1にはday1の0番目の要素である19が入っていますので、条件式はtrueになり、nameにはnames配列の0番目の要素である「やぎ座」が入ります。
例えばdayに19ではなく23が入っていると仮定すると1はFALSEになるので、1の条件式の判定に入ります。
ここでday2[i]にはday2の0番目の要素である31が入っていますのでTRUEになり、name には1に該当する星座が入ります。
1周目では1のiには0が入っていますので1で余りを求めると1になります。
結果、1となり「みずがめ座」が入ることになります。
では1をさらに詳しく説明します。
「i + 1」の箇所の説明をしますと例えばmonthが1で、day が23の場合には11になりFALSEになるので、else ifのブロックに入ります。
そして1月は やぎ座と水瓶座しかなく、やぎ座ではないのならば水瓶座しかないのでnames配列を1つ進めるために1で1を足しています。
「%12」を記述している理由は例えば1の中のiに11が入ると1の箇所が12になりますが、「%12」の箇所が無いと仮定すると1となってしまいます。
しかし、実際に1という要素はありません。
そこで「%12」で余りを0(12割る12で余り0)にして「やぎ座」が出るようにしています。
つまり、以下の余りの数字がnames配列の添え字になり、その該当するデータがnameに入ります。1 1グローバル変数ですので、プログラムの中のどこからでも使用することが出来ます。そして、最後にmain関数の中でnameに入っている星座を出力しています。
結果は以下の通りです。1