2013年10月22日火曜日

【なでしこ】カレンダーを作ってみる

今、gnakoを使って少し大きめのアプリ書いてるんですが…。
gnakoの問題点が色々分かって、やっぱりGUIのエディタは
別のモノを使ったほうがいいんじゃないかと。通信DLLは
大体出来てるので、この辺り片付けたら、次はWinAPIを
もうちょっとダイレクトに触れるDLLなりexeなり作ろうかなあ。

さて、今回は「少し大きめのアプリ」でも使ってるカレンダー
機能のお話し。なでしこのくみこみ関数使ってある程度は
できるんですが、GUI用に使うならこれぐらいは欲しいかなあ
と言う部分を補完。

------ここから------

 ■GRP年月日
 ・{整数}年
  ・{整数}月
  ・{整数}日数
  ・日
  ・日数設定~
   日数=月日数判断(年、月)
  ・曜日設定~
  日数回
     年月日=「{年}」&「/」&「{月}」&「/」&「{回数}」
   日\回数=年月日の曜日

●二月日数判断(Yの)
 もしYを4で割った余り=0ならば
   もしYを100で割った余り=0ならば
     もしYを400で割った余り=0ならば
       日数=29
      違えば
       日数=28
    違えば
     日数=29
  違えば
   日数=28

 日数で戻る

●月日数判断(Y、M)
 Mで条件分岐
   1ならば
     日数=31
    2ならば
     日数=Yの二月日数判断
  3ならば
     日数=31
  4ならば
     日数=30
  5ならば
     日数=31
  6ならば
     日数=30
  7ならば
     日数=31
  8ならば
     日数=31
  9ならば
     日数=30
  10ならば
     日数=31
  11ならば
     日数=30
  12ならば
     日数=31
    違えば
     日数=0
   
  日数で戻る

------ここまで------

こんなもんでしょうか。「■GRP年月日」がカレンダー情報を
保持していて、要素「日」は配列です。「年」と「月」を設定して
「日数設定」メソッドと、「曜日設定」メソッドを呼べば、「日数」
にその月が何日あるかと、「日」にそれぞれの日が何曜日か
を代入します。「日」は配列の添え字(0~)が日(1~)に対応
してます。

アルゴリズム的にはC言語とそんなに変わらない感じ。なでしこは
グループ昨日を使いこなしていけばそこそこ複雑なことも出きる
ので、「なでしこでアルゴリズム」みたいな本があれば面白いのに
なあ。