カレンダーの作成って難しそう。。
こんな風に思う方がいるかもしれませんが、繰り返し文を習った方なら誰でも作成できます!
繰り返し処理について学びたい方はこちら↓を参考にしてください。
それでは、カレンダーを作成する時にどんなことを気にすればいいのか考えつつ、実際に作ってみましょう♪
ステップ1:大枠を決める
「カレンダーを作るぞ!」と思ってすぐにコードを書こうとしてもうまくいきません。
まずは、「何を入力して」「何が出力されるのか」を決めましょう。
今回はカレンダーを作りたいので、「1日が何曜日から始まるのか」と「月末が何日で終わるのか」を入力すれば、「1ヶ月分のカレンダー」が出力できそうだと考えました。
これで、プログラミングを実行して何を入力したら何が出てくるのかがイメージできました!
ステップ2:実際に書きながら変更していく
プログラムを細かい部分まで考えてから書くのも良いですが、私は実際に書いて考えていく方が修正しやすく楽しいので、大枠さえ決めればもう書いていきましょう。
/*ある月のカレンダーを画面に印字するプログラム*/
#include <stdio.h>
int main(void) {
return 0;
}
この部分は簡単なプログラムを書くときでは変えなくて良いので、ささっと書きましょう。
そして、先ほど決めた「入力」を促すために画面に案内を表示させましょう。
printf("1日の曜日は?");
ここで相手に何を入力させるのかを考えます。
曜日を入力させるのもいいですが、「土曜」や「土曜日」と人によって入力が変わるとめんどくさいので、数字で入力させましょう。
int a;
printf("1日の曜日は?: 日(1) 月(2) 火(3) 水(4) 木(5) 金(6) 土(7);");
scanf("%d",&a);
変数「a」を用意してここに曜日を入力させましょう。
月末も同じようにして決めましょう。
int b;
printf("月末の日付は?: 28日以上, 31日以下:");
scanf("%d",&b);
それでは入力してもらう部分は書けたので、出力部分を書きましょう。
まずは曜日を一番上に表示させます。
printf("SUN MON TUE WED THU FRI SAT \n");
続いて、一日がくる部分まで空白を入れます。
int i;
for(i=1;i<a;i++)
printf(" ");
そして、土曜日までいったら改行して日曜の下に書くことに注意しながら日にちを書きます。
int k;
for (k=1; k<=b; k++) {
printf("%3d ",k);
if((a+k)>6 && ((a+k-1)%7)==0)
printf("\n");
}
これで出力部分も書けたので、一度まとめてみましょう。
/*ある月のカレンダーを画面に印字するプログラム*/
#include <stdio.h>
int main(void) {
int a,b,i,k;
printf("1日の曜日は?: 日(1) 月(2) 火(3) 水(4) 木(5) 金(6) 土(7);");
scanf("%d",&a);
}
printf("月末の日付は?: 28日以上, 31日以下:");
scanf("%d",&b);
printf("\n");
printf("SUN MON TUE WED THU FRI SAT \n");
for(i=1;i<a;i++)
printf(" ");
for (k=1; k<=b; k++) {
printf("%3d ",k);
if((a+k)>6 && ((a+k-1)%7)==0)
printf("\n");
}
return 0;
}
ステップ3:細かい部分を直していく
ステップ2で最後に作ったプログラムで終わらせるのも良いですが、エラーが起きることが容易に想定されます。
数字が1~7以外を入力された時、ちゃんとしたカレンダーが作成されません。
while文での条件で、1~7以内でない時は繰り返し尋ねるようにしましょう。
また、見栄えをよくするために改行も入れておきましょう。
ステップ4:完成!!
これで完成です。
/*ある月のカレンダーを画面に印字するプログラム*/
#include <stdio.h>
int main(void) {
int a,b,i,k;
printf("1日の曜日は?: 日(1) 月(2) 火(3) 水(4) 木(5) 金(6) 土(7);"); scanf("%d",&a);
while(a<1 || a>7){
printf("1日の曜日は?: 日(1) 月(2) 火(3) 水(4) 木(5) 金(6) 土(7);"); scanf("%d",&a);
}
printf("月末の日付は?: 28日以上, 31日以下:"); scanf("%d",&b);
while(b<28 || b>31){
printf("月末の日付は?: 28日以上, 31日以下:"); scanf("%d",&b);
}
printf("\n");
printf("SUN MON TUE WED THU FRI SAT \n");
for(i=1;i<a;i++)
printf(" ");
for (k=1; k<=b; k++) {
printf("%3d ",k);
if((a+k)>6 && ((a+k-1)%7)==0)
printf("\n");
}
printf("\n");
return 0;
}
一度プログラムを実行してうまくいくか確認しましょう。
また、1~7以外の数字を入れてもエラーが起こらないかも確認しましょう。
まとめ
カレンダーを作成プログラムをどのように作っていくのかを解説しました。
他のプログラムを作る場合でも、このように考えていきましょう。