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

    KAB-studio.h


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

    送信日： 2004/03/01(Mon) No.246
    配信数： 2390 ( Mag2 + Pubzine )
    発行元： まぐまぐ ( URL: http://www.mag2.com/  ID: 0000012198 )
*/
////////////////////////////////////////////////////////////////////

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

・「ほとはーのつくりかた」スタート！
　三人合体ホットハーブ特別企画、ほとはーのつくりかたがスタート！
　初回は「1.準備段階」。４コマ作成用のテンプレートファイルがダウン
ロードできます！
[ ほとはーのつくりかた ]
http://www.kab-studio.biz/Comic/HotHerbMaking/index.html


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

2004/02/22 (Sun)
　午前中は横浜へ。お昼からずっと Fate 。ネタバレは日記にて。

2004/02/23 (Mon)
　仕事中も眠かった。内容はいつも通りのバグ取り。ダイエットのためにお
でんを晩ごはんに。

2004/02/24 (Tue)
　今日もバグ取り。眠すぎる。まんがタイムきららＣａｒａｔをなんとか見
つける。ホントに眠い。でも今は調子いい？　仕事が増えるとテンパってく
るんだけど。いつの間にか攻性モード？

2004/02/25 (Wed)
　仕事休みました。夕方くらいにほとはーのつくりかたを。その後 Fate 。
内容は日記にて。

2004/02/26 (Thu)
　休んだからか体調良かった。バグ取りしても障害は増えていく……。そし
てペン型マウス。ペンタブの代わりにはならないけど。

2004/02/27 (Fri)
　いつも通りバグ潰し。助っ人、去る。新しいウイイレ。爆笑オンエアバト
ルはスピードワゴンがかなり面白い。羽一位。

2004/02/28 (Sat)
　午前中はほとはーのつくりかたを作ったり。明日はお休み〜。午後はおし
ごと。なんかもう完成しなさそう（泣）。環境最悪だし……。


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

■　第九章　四人　−２３−

　炎が、止んだ。
　頭を抱えて震えていた赤葉は、腕の間から泉の奥を見ようとする。が、砂
埃ばかりで何も見えない。
「ひっ」
　その中から出てくる人影は、雅樹。左手には先ほどの男が血を垂れ流した
まま掴まれている。
　が、それでも震えは止まらない。
「まさ……き……」
　見開かれた眼が赤葉を捉えている。標的として認識している眼。猛禽の
眼。
　右腕が上がる。
『あっ赤き炎よ！！』
　咄嗟に放った炎が雅樹に直撃する。雅樹の体が燃え上がる。
「あ……あ……ご、ごめんなさ」
　降ろさなかった右手から炎が舞った。




　気が付いたとき、赤葉はまだそこにいた。
　泉の入り口。先には瓦解した朱き泉。もう、祖母の遺体は見えない。
　自分の体を確認する。少しのやけどと、男にされた肩と足の他に痛みはな
い。
　立ち上がり、泉を出る。
　中にも外にも、雅樹はいなかった。
「……」
　ただただ、涙だけが止まらなかった。
                                                        (第九章　完)


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
『ほとはーのつくりかた、始まったね』
「初回はなんだか無難だね……」
『２回目からは結構本格的っぽいよ』
「コマ割りの基本とかタブレットの使い方とか……」
『って、語れるほどうまくなったんかい！！』
http://www.kab-studio.biz/index.html
_______________________________________________________________[KCM]

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


　Version 13.10
文字列のソート

「前回は、バブルソートを実際に実装してみました」
『思ったより難しくなかったよーな』
「でも自分で１から作るときっと大変だと思うよ」
『う”……』
「さて、前回の最後に、ソートの機能のバリエーションには次のようなもの
があるって紹介しました」

・配列かそれ以外か。
・各要素の型。
・比較方法。

『前回は最後の〈比較方法〉を変えてみたりしたんだね』
「そう。ということで、今回は」

・各要素の型。

「について見てみます」
『型を変えるって、たとえば int を double にとか？』
「そういう変化だと、特に大きな違いはないかな。 > で簡単に比較できる
しね」
『文字列は？』
「そうだね、文字列のソートが例としてはいいかも。たとえば、文字列の配
列をソートする場合」

void Use_DoBubbleSortToString()
{
    const char *ppchAry[5];
    ppchAry[0] = "CCC";
    ppchAry[1] = "BBB";
    ppchAry[2] = "AAA";
    ppchAry[3] = "EEE";
    ppchAry[4] = "DDD";

    // ソートします。
    DoBubbleSortToString( ppchAry, 5 );

    for( int iF1 = 0; iF1 < 5; ++iF1 )
    {
        TRACE( "%s ", ppchAry[iF1] );
    }
    TRACE( "\n" );
}

「 DoBubbleSortToString() はこれから作る関数だから」
『ソートする関数本体ってことね。文字列の配列ってこうするんだ……』
「この辺はちょっと難しいかもね。文字列ポインタは const char * だか
ら」
『その配列、ってことね』
「じゃ、次はソート本体」

// p_pchL > p_pchR なら true を、
// それ以外は false を返すようにしてください。
bool CompareTo( const char *p_pchL, const char *p_pchR )
{
    if( strcmp( p_pchL, p_pchR ) > 0 )
    {
        return true;
    }

    return false;
}

void DoBubbleSortToString( const char **p_ppchAry, int p_iSize )
{
    // 「入れ替え先」のループです。
    for( int iOut = 0; iOut < p_iSize - 1; iOut++ )
    {
        // 最後から先頭方向へのループです。
        // ただし「入れ替え先」までです。
        for( int iIn = p_iSize - 1; iOut < iIn; iIn-- )
        {
            if( CompareTo( p_ppchAry[iIn - 1], p_ppchAry[iIn] )
                == true )
            {
                // 前の方が大きいので入れ替えます。
                const char *pchTemp = p_ppchAry[iIn];
                p_ppchAry[iIn] = p_ppchAry[iIn - 1];
                p_ppchAry[iIn - 1] = pchTemp;
            }
        }
    }
}

「まずソート本体、 DoBubbleSortToString() から。注意点は４つ」

void DoBubbleSortToString( const char **p_ppchAry, int p_iSize )

「まずこの引数」
『ポインタのポインタだ……』
「難しく考えない方がいいかも」

    const char *ppchAry[5];

「これは配列だから、 [] を取ると？」
『ポインタになる、だから const char ** ってことね』
「そういうこと。次に、ループ部分」

    // 「入れ替え先」のループです。
    for( int iOut = 0; iOut < p_iSize - 1; iOut++ )
    {
        // 最後から先頭方向へのループです。
        // ただし「入れ替え先」までです。
        for( int iIn = p_iSize - 1; iOut < iIn; iIn-- )
        {

「ここはまったく変えてません」
『そういえば Version 13.09 ( No.245 ) でそういってたね』
「このループ部分は、バブルソートのアルゴリズム本体。ここを変えるとバ
ブルソートじゃなくなるし、バブルソートならここは固定」
『そーゆーもんなんだね』
「次は比較関数」

            if( CompareTo( p_ppchAry[iIn - 1], p_ppchAry[iIn] )

「バブルソートのアルゴリズムは固定なので、比較関数のコントラクトも固
定にする必要があります」
『左の方が大きかったら true を返す、ってわけね』
「そういうこと。実際の比較関数はこんな感じ」

// p_pchL > p_pchR なら true を、
// それ以外は false を返すようにしてください。
bool CompareTo( const char *p_pchL, const char *p_pchR )
{
    if( strcmp( p_pchL, p_pchR ) > 0 )
    {
        return true;
    }

    return false;
}

『 strcmp() って初見だけど、ランタイム？』
「そう、文字列比較をしてくれるランタイム関数。 strcmp() は第１引数の
方が小さいとマイナス、逆に大きいとプラス、同じなら 0 の数字が返りま
す」
『数字？』
「そう、数字。この数字は特に決まってないから〈マイナス〉ってことで
チェックするようにしてください」
『はーい』
「それと、今回は英数字しか考えないけど、それ以外の文字が混ざると面倒
な話になるから」
『え、そうなの？』
「一番簡単な話が、漢字」
『あー、そういえばソートできないよね……』
「この〈比較〉っていうのは、実はかなり複雑。構造体を使って複数のデー
タを比較したり、計算が絡んだりするとさらに複雑になるから」
『難しそう……』
「最後に、入れ替え箇所」

                // 前の方が大きいので入れ替えます。
                const char *pchTemp = p_ppchAry[iIn];
                p_ppchAry[iIn] = p_ppchAry[iIn - 1];
                p_ppchAry[iIn - 1] = pchTemp;

『つか普通じゃない、別になんか特別なことある？』
「あるよ」

                const char *pchTemp = p_ppchAry[iIn];

「この pchTemp には何が入ってる？」
『文字列』
「正確に言うと？」
『文字列のポインタつかアドレス……あ、アドレスを入れてるだけ……』
「そういうこと。ここでの入れ替えは、ポインタを入れ替えてるだけ。文字
列そのものはコピーとか全然してません」
『そういえば……』
「この文字列もそうだし、構造体をソートするときもそうだけど、この入れ
替え部分は〈まとめてコピー〉とかすると大変だから、ポインタで持って、
そのポインタだけを入れ替えます」
『文字列のコピーだと大変だよね。ってゆーか、サイズ違うんだから 
malloc() で再確保、ってゆーか CString 使った方がいいのかな？』
「そうだね。次の次の回で説明するけど、 CString を使う時には配列じゃ
ない、便利なクラスがあるからそれを使うのがいいかな」
『へー』
「文字列の配列っていうのはよく使うからね。話を戻して、基本的にこうい
う場合にはポインタだけ入れ替えます」
『コピーは大変だもんね。でも〈こういうとき〉って？』
「普通の変数だけの配列じゃなかったら、ポインタの方が楽かも。ソートは
それができるし」
『どういうこと？』
「前に言ったでしょ、ソートは単に入れ替えるだけだから、要素が増えたり
減ったりしないんです」
『 new したり delete したり、ってことを考えなくていい』
「そういうこと。だから、ソートの時にはポインタの配列が普通、って思っ
た方がいいかも」

/*
    Preview Next Story!
*/
『基本的にはこれまでと同じよね』
「ソートの機能そのものは変わらないからね」
『構造体とかクラスになるとやっぱ大変？』
「どの変数でソートするかとか、安定ソートとか色々とね」
『というわけで次回』
＜ Version 13.11 構造体のソート ＞
「につづく！」
『構造体も < とかで簡単に比較できたらいいのに』
「そういう方法もあるよ」
『え！？』
「教えるのはまだ先だけどね……」


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

・ほとはーのつくりかた 「2. コンテ」追加予定！
　ほとはーのつくりかたに「 2.コンテ」を追加予定。
　下描きの描き方、４コママンガの構図やストーリーテリングのセオリーに
ついて説明します。


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

・このメールを返信しないでください。
・ご意見・ご希望・ご感想は[チョー普通な日記]よりお送りください。
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
*/
////////////////////////////////////////////////////////////////////

