- ベストアンサー
悩んでいます
今年のカレンダーを表示(1月~12月)する方法なんですが 今自分の中では 1月 2月 3月 日月火水木金土 月火水木金土 月火水木金土 12345 12 1 678・・・ 3456・・・2345・・・ といった感じで作っていこうと考えています。 考え方としては 月初めの空白 日付の表示 土曜日で改行 最後に改行 これを3か月分繰り返しで表示させる。 といったところで煮詰まっています。あとは何が足りないのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
月によっては6週にまたがることがあります(例:2008年3月)。 そこで、1ヶ月分の表示エリアを42日分(6週間分)固定で設けます。 Zellerの公式か何かを使うと、2008年1月1日は火曜日とわかります。 そうすると、2008年1月のカレンダーを出力する際、 見かけ上は-1日~40日の42日分を出力しようとします。 ところが、2008年1月は1日~31日です。 というわけで、-1日、0日、32日~40日に相当する場所は空白で埋めます。
その他の回答 (1)
ターミナル開いて #> cal -y とか、何気なしに表示させている万年カレンダーですが・・・ いざ学校の宿題になって翌週までに仕上げるとか、実習の進捗度が芳しくないまま中間テストなり期末テストを迎えて答案用紙にコーディングするなんていうことになったら、悩ましいことになってしまいますねぇ。 曜日の判定はグレゴリオ暦、ユリウス暦、ツェラーの公式などを調べていただくとして。 空白は空白文字つまり'\s'を書き出せばいいです。 「月初めの空白」は何個'\s'を書き出せば桁がそろうか考えればOKですね。 日付をfputc()で1文字ずつかきだすか、sprintf()などで1週間分の文字列を作るかはお好み次第です。 1月だけ表示できるようになれば、3ヶ月縦に並べるのも容易なのですが・・・・ 横に3ヶ月並べるとなると、「さてどうしたものだろう。」となってしまうところにあるとおもいます。 横に3月分並べると・・・・ 1: April May June 2: Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 3: 1 2 3 4 5 1 2 3 1 2 3 4 5 6 7 4: 6 7 8 9 10 11 12 4 5 6 7 8 9 10 8 9 10 11 12 13 14 5: 13 14 15 16 17 18 19 11 12 13 14 15 16 17 15 16 17 18 19 20 21 6: 20 21 22 23 24 25 26 18 19 20 21 22 23 24 22 23 24 25 26 27 28 7: 27 28 29 30 25 26 27 28 29 30 31 29 30 などとなるのですが、ますは行ごとにどのような特徴があるか考えてみましょう。 1行目は月が3つ。2行目は曜日しかかいていない。3行目は、其々の月で1週目しか書いていない。・・・・ ということに気がつけば、後もう一ふんばりです。
お礼
色々とヒントをくださってありがとうございます やってみますね