////////////////////////////////////////////////////////////////////
/*

    KAB-studio.h


    (C)KAB-studio 1999 - 2004 ALL RIGHTS RESERVED.
        http://www.kab-studio.biz/
        info@mail.kab-studio.biz

    送信日： 2004/06/14(Mon) No.261
    配信数： 2152
    発行元： まぐまぐ ( URL: http://www.mag2.com/  ID: 0000012198 )
*/
////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////
/*                ２００４年６月１４日（月）の更新                */
http://www.kab-studio.biz/index.html

・ほとはーに一話追加！
　三人合体ホットハーブに「８の７　どっちがいい？」を追加！
[ 三人合体ホットハーブ ]
http://www.kab-studio.biz/Comic/HotHerb/index.html

・KAB-studio.h 縮刷版更新予定
　KAB-studio.h が２６０号に達したので縮刷版を更新します。ダウンロー
ドはダウンロードルームにて。
[ ダウンロードルーム ]
http://www.kab-studio.biz/Freeware/index.html#MailMagazine


////////////////////////////////////////////////////////////////////
/*                        ちょお普通な日記                        */
http://www.kab-studio.biz/nikki2/index.html

2004/06/06 (Sun)
　夜中に本棚セットアップ。朝にアマゾンからのを受け取る。午前中にＨＤ
デッキを受け取る。感電する。ＨＤデッキ復活！　とりあえずダビング。
攻殻５話の謎。おねツイドラマＣＤ２巻。ほとはー裏話コーナー。これから
どうしよう。

2004/06/07 (Mon)
　おしごとは引きつづきバグ取り。あり得ないバグ。このままいけばまた土
日休める？　意欲減ってる？　辛いのがホントに辛い時代。かぶろぐもうす
ぐ１０００ヒット。

2004/06/08 (Tue)
　眠すぎ。眠い。お刺身。寝る。

2004/06/09 (Wed)
　昨日は１２時には寝たのに寝た気がしない。竹ござが原因？　バグと仕様
変更対応。きららとなななな購入。 MONSTER はメリハリが欲しいなー。

2004/06/10 (Thu)
　仕様変更対応とバグ潰し。ダイエット中。絢爛舞踏祭のヒロイン？　タイ
ムレンジャーが面白い。カーレンジャーはＤＶＤ出ないの？

2004/06/11 (Fri)
　まったり風味でバグ潰し。フレームワークは作らないことになりそう。
８時半上がり＆２連休。明日あさっては神保町巡りとかとか？

2004/06/12 (Sat)
　午前中は洗濯。午後はほとはー描き。６時に横浜へ行って色々購入。 UPS
とかバッグとか。 USB ケーブルがハズレ……。２時〜３時にサーバーメン
テします。


////////////////////////////////////////////////////////////////////
/*                         風雅、舞い                             */
http://www.kab-studio.biz/Novel/Fuga/index.html

■　第十章　剣と魔法　−１０−

　ぴく、と舞の手が反応した。
　一瞬、舞の表情がこわばる。それにつられて赤葉の表情が硬くなったとき
には、舞の表情はすでに緩んでいた。
「あ、なんだ……」
「どうした？」
「あ……以前話したＡＰのひとり、リシュネが来たんです。うわ、すごく速
い……」
　赤葉も手をかざす。とてつもない力、以前来た男を遙かに凌ぐ、溢れんば
かりの力。その「力」が、とてつもないスピードで山林を駆けている。
「これが、ＡＰ……」
　雅樹や舞とは違う、異質な感触。普通の術者や泉の洗礼を受けた者は、
『触って』みなければ、その能力は感じ取れない。
　だが。
　このＡＰという存在はなんだ。自らの力を誇示するように、触れようとす
る掌を激しく叩いている。
　赤葉の表情は、硬いまま。
「大丈夫ですよ、リシュネは」
　赤葉は舞を見上げた。
「……今の感触、感じていないのか？」
「あ、ざらっとしたのですか？　前から少し感じてたから、慣れてたのか
も……」
　自分でも計りかねる感覚に想像を巡らせるのをやめて、舞は駆け出す。
「出迎えてきますね、場所わからないかもしれないから」
「しかし」
「それに、私達なら、大丈夫だから」
　大丈夫、だから。
　ふと口をついて出た言葉に、自分自身で驚いていた。
　何が、大丈夫なのか。
　そんな疑問を浮かべながら、それよりも、もうひとつの疑問が頭をよぎっ
ていた。
　なぜここが、わかったのか。
                                                              (続く)


////////////////////////////////////////////////////////////////////
/*                       #pragma twice                            */
http://www.kab-studio.biz/Programing/PragmaTwice/index.html

　Version 13.25
日時の計算

「今回は日時の計算をします」
『計算？』
「たとえば……」

・今日の３日後の日にち
・2004/04/01 から今日までの日にち
・今月の月末の日にち
・今月の第１月曜日

「などなど」
『ぱっと見、簡単そうだけど』
「そこが危険なんです。こういう日時の取得は簡単そうだけど、実際にプロ
グラムで求めるときには色々なコツが必要なんです」
『そういうものなの？』
「たとえば」

・今日の３日後の日にち

「これをプログラムで求めるとしたら？」
『 tm 構造体作って tm_wday に 3 足す……あ、繰り上がり……』
「そういうこと」
『 tm_wday が 29 とかだと月に繰り上がるし、その月が１２月だった
ら……あ、そういえば、そういう計算はのべ秒でするって言ってたね』
「そう、計算はのべ秒、つまり time() の戻り値で計算すると、繰り上がり
を考えなくていいから簡単なんです」

void ThreeDaysLater()
{
    setlocale( LC_ALL, "japanese" );
    char pchTime[256];
    tm *pstTm;

    // 現在の日付を取得。
    time_t lTime_t;
    time( &lTime_t );
    pstTm = localtime( &lTime_t );
    strftime
        ( pchTime
        , 255
        , "%Y年%#m月%#d日%a曜日%H時%M分%S秒"
        , pstTm 
        );
    TRACE( "%s\n", pchTime );
    // 2004年5月18日火曜日12時41分01秒

    // 「３日後」を足します。
    const int DAYS = 3;
    lTime_t += DAYS * 24 * 60 * 60;
    pstTm = localtime( &lTime_t );
    strftime
        ( pchTime
        , 255
        , "%Y年%#m月%#d日%a曜日%H時%M分%S秒"
        , pstTm 
        );
    TRACE( "%s\n", pchTime );
    // 2004年5月21日金曜日12時41分01秒
}

『ちゃんと３日後になってる！』
「ポイントはここ」

    // 「３日後」を足します。
    const int DAYS = 3;
    lTime_t += DAYS * 24 * 60 * 60;

「３日後×２４時間×６０分×６０秒、で〈３日間ののべ秒〉が出るから」
『それを足せばいいわけね』
「基本的にはこの要領でだいたい計算できるんだけど、ちょっと難しい場合
もあります。たとえば〈３ヶ月後〉とか」
『え？　それって難しい？　 3 * ……あ、１ヶ月の日数って変わる……』
「でしょう。一般的に〈３ヶ月後〉って言ったら、３ヶ月後の同じ日のこと
を差します。ところがのべ秒での計算の場合、１ヶ月の日数は月によって違
うから」
『普通に足せないね……』
「そういう場合には tm 構造体で計算します」

void ThreeMonthsLater()
{
    setlocale( LC_ALL, "japanese" );
    char pchTime[256];
    tm *pstTm;

    // 現在の日付を取得。
    time_t lTime_t;
    time( &lTime_t );
    pstTm = localtime( &lTime_t );
    strftime
        ( pchTime
        , 255
        , "%Y年%#m月%#d日%a曜日%H時%M分%S秒"
        , pstTm 
        );
    TRACE( "%s\n", pchTime );
    // 2004年5月18日火曜日12時52分35秒

    // 「３ヶ月後」を足します。
    const int MONTHS = 3;
    pstTm->tm_mon += MONTHS;
    const int DECEMBER = 11;
    if( DECEMBER < pstTm->tm_mon )
    {
        // １２月より大きい場合には繰り上がりを計算します。
        pstTm->tm_year += 1;
        pstTm->tm_mon -= 12;
    }
    strftime
        ( pchTime
        , 255
        , "%Y年%#m月%#d日%a曜日%H時%M分%S秒"
        , pstTm 
        );
    TRACE( "%s\n", pchTime );
    // 2004年8月18日火曜日12時52分35秒
}

「まず」

    // 「３ヶ月後」を足します。
    const int MONTHS = 3;
    pstTm->tm_mon += MONTHS;

「で月を足します」
『そのあとの if の中で繰り上がりの計算してるのね』
「ただし、このプログラムには重要なバグが潜んでいます」
『ええっ！？』
「このプログラムを１１月３０日に実行したら？」
『２月……３０日なんてないし』
「そういうこと。〈一般的な三ヶ月後〉も、こういうイレギュラーな場合に
は、場面によってどうするか違ってくるでしょ」
『２月２８日にしたり３月１日にしたり……あ、うるう年もあるし』
「まずは、そういう場合にどうするか決めて、それにあわせてプログラムを
作る、という形になります」
『……決める？』
「そう、決めるの」
『……なんか難しくない？』
「そうなんだよね、そういうルールって明確に決まってないことが多いか
ら。でもプログラムで、特にアルゴリズムで自動化する場合には」
『これを決めないとどうしようもない、と』
「そういうこと。それが決まったら、計算して２月の場合には処理を変えれ
ば大丈夫」
『２月２８日の時は？　うるう年の時は変えないと』
「そうだね。うるう年かどうかの判別は、次の法則を使って調べます」

1. 400 で割り切れる年はうるう年。
2. 1 に当てはまらず、 100 で割り切れる年はうるう年。
3. 2 に当てはまらず、 4 で割り切れる年はうるう年。

『へー、 3 だけじゃないんだ』
「ちょっと複雑だけど、プログラムにすればわかりやすいかも」

bool isLeapYear( int p_iYear )
{
    if( p_iYear % 400 == 0 )
    {
        // 400 で割り切れたら閏年。
        return true;
    }
    else if( p_iYear % 100 == 0 )
    {
        // 100 で割り切れたら違います。
        return false;
    }
    else if( p_iYear % 4 == 0 )
    {
        // 4 で割り切れたら閏年。
        return true;
    }

    // それ以外は違います。
    return false;
}

『 % って？』
「 % は割り算の【余り】を計算する演算子」
『そか、割り切れたらあまり 0 だもんね』
「まぁ、普通に使う分には〈 100 で割り切れたら〉っていうのはまず関係
ないからあまり必要ないかもしれないけどね。あ、ちなみに使う時には」

    if( isLeapYear( pstTm->tm_year + 1900 ) )
    {
        TRACE( "うるう年です。" );
    }
    else
    {
        TRACE( "うるう年ではありません。" );
    }

「というふうに、 tm 構造体の tm_year を渡す時には 1900 を付けるのを
忘れないようにね」
『うわ、これ危ないね……』
「こうやって 1900 を加えるのも危険だし、〈 tm 構造体から年を取り出す
関数〉とか用意しておくのもいいかも」
『それはそれで面倒……』
「クラスにすれば、メンバ関数を呼ぶようにできるんだけどね……さて、最
後に月末の日付について」
『そだね、２月２８日とか２月２９日とか』
「って言っても、これはどの月かチェックして、月ごとに別の日付を返すよ
うにするしかないかな……」
『めんどい……』

/*
    Preview Next Story!
*/
『月ごとに違うのとか、コーディングすんのめんどいね』
「ところが、実はそんなに面倒じゃないんです」
『え？　ひとつずつ打ち込まなくていいの？』
「そう、だいたいの部分は自動化できるんです」
『というわけで次回』
＜ Version 13.26 手作業撲滅！ ＞
「につづく！」
『って、日時の話は！？』
「次回は番外編！」


////////////////////////////////////////////////////////////////////
/*                ２００４年６月２１日（月）の更新                */
http://www.kab-studio.biz/index.html

・ほとはーに１話追加予定
　三人合体ホットハーブに１話追加予定。


////////////////////////////////////////////////////////////////////
/*                          ご注意！！                            */

・このメールを返信しないでください。
・ご意見・ご希望・ご感想は[チョー普通な日記]よりお送りください。
http://www.kab-studio.biz/nikki2/
・購読登録を解除したいときにはこのページで行なってください。
http://www.mag2.com/m/0000012198.htm
・解除は自分で行なってください。
・バックナンバーはこれらのページにあります。
http://backno.mag2.com/reader/Back?id=0000012198
http://www.kab-studio.biz/Freeware/index.html#MailMagazine


////////////////////////////////////////////////////////////////////
/*
    KAB-studio.h
      Weekly Mail Magazine.
      Written by Kaburaya Seiden.
      http://www.kab-studio.biz/Info/MailMagazine/

    (C)KAB-studio 1999 - 2004 ALL RIGHTS RESERVED.
        http://www.kab-studio.biz/
        info@mail.kab-studio.biz
*/
////////////////////////////////////////////////////////////////////

