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

    KAB-studio.h


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

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

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

・ほとはー１話追加
　三人合体ホットハーブに７の１１「想い余って」を追加。援護射撃。
[ 三人合体ホットハーブ ]
http://www.kab-studio.biz/Comic/HotHerb/index.html


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

2004/02/08 (Sun)
　横浜で EasyDisk とか購入。オイルヒーター大きい……。あと同人誌多数
他購入。１時頃帰っておしごと関係のメールとか寮のとか。のーんびりほと
はー描き。ぷらとわと風雅、舞いのスケジュール。これからどうなるんだろ
う……。

2004/02/09 (Mon)
　接続不良。質問攻め。最悪な悪夢、課題夢。おかげで１日ダウナー。
今日の Fate 。時間欲しいなぁ。

2004/02/10 (Tue)
　今日は調子良かった。でも明日も仕事。吉野家に行列が。そしてサーバン
ト派遣。そして家にサーバー。

2004/02/11 (Wed)
　祭日だけどおしごと。午前中にほとはーの主線を。２時からおしごと。何
がなにやら。そして使い捨て。

2004/02/12 (Thu)
　毎日でバッグ、平行でコーディング。マジ眠い。京浜東北止まるし。今日
は短い。

2004/02/13 (Fri)
　久しぶりに拠点へ。意味なかったけど。プログラムひとつ完成。週末の予
定。

2004/02/14 (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.08
バブルソートのコーディング

「今回は、前回説明したバブルソートを実際にコーディングしてみます」
『それって結構難しそう』
「かもね。アルゴリズムは、頭ではわかってても実際にコードにするとうま
くいかないことが結構あるから」
『とりあえず作っていって慣れないとね』
「そうだね。まず、バブルソートのおさらいから」

4 9 3 5 8 

「こう数字が並んでいる場合。右から２つずつ見ていって、左の方が大きか
ったら入れ替える、ってしていきます」

4 9 3 5 8 → 4 9 3 5 8 
      ^ ^          ^ ^
4 9 3 5 8 → 4 9 3 5 8 
    ^ ^          ^ ^
4 9 3 5 8 → 4 3 9 5 8 
  ^ ^          ^ ^
4 3 9 5 8 → 3 4 9 5 8 
^ ^          ^ ^

「こうすることで、一番左に〈一番小さい数〉が来るようになります。で、
２周目」

3 4 9 5 8 → 3 4 9 5 8 
      ^ ^          ^ ^
3 4 9 5 8 → 3 4 5 9 8 
    ^ ^          ^ ^
3 4 5 9 8 → 3 4 5 9 8 
  ^ ^          ^ ^

『一番左まで見ないんだね』
「一番左にはもう〈一番小さい数〉が来てるからね。これで、左から二番目
に〈二番目に小さな数〉が来ました。３周目はこう」

3 4 5 9 8 → 3 4 5 8 9 
      ^ ^          ^ ^
3 4 5 8 9 → 3 4 5 8 9 
    ^ ^          ^ ^

「同じく４周目はこう」

3 4 5 8 9 → 3 4 5 8 9 
      ^ ^          ^ ^

『こうやって見ていくと簡単だよね』
「そう、これだけならね」
『そか、これをコードに落とすのが大変なんだ……』
「そういうこと。じゃあ、ひとつずつ見ていこうか。まずはこの部分」

4 9 3 5 8
      ~ ^
4 9 3 5 8
    ~ ^  
4 9 3 5 8
  ~ ^    
4 3 9 5 8
~ ^      

「わかりにくくなるから、入れ替える部分は削除しました。それと、両方 ^
だとわかりにくいから、左は ~ にしてみました」
『右から左に見ていくんだよね』
「だから、配列だと後ろから見ていくことになります」
『うしろ……』
「今回は要素の数が５つ、だから配列のサイズは 5 」

    int iAry[5];

「その場合、配列の一番後ろは」

    iAry[4] = 8;

『サイズから 1 引けばいいんだね』
「配列は 0 から始まるからね」
『右端が 4 で、左端は 0 ね』
「ちょっと待って、その辺注意しないといけないから」
『え？』

4 9 3 5 8
      ~ ^

「このとき、 ~ は iAry[3] で、 ^ は iAry[4] に当たるでしょ」
『そだね』
「この ~ と ^ の値は、右から左に移るに従って」

^ : 4 3 2 1
~ : 3 2 1 0

「というふうに減っていきます」
『あ…… ^ は 1 までしかいかないし、~ は 3 からなんだね』
「これをきっちりとした言葉で書くと」

^ : 配列の最後から、先頭 - 1 まで。
~ : ^ - 1

『あ、 ~ は ^ から 1 引いたの、でいいんだ 』
「これができるのは、 ^ が 0 まで行かないからだからね」
『行ったら iAry[-1] ではみ出ちゃう……』
「そういうこと。この部分だけプログラムで書くと、こうなります」

    // p_piAry : 配列。
    // p_iSize : 配列のサイズ。
    for( int iIn = p_iSize - 1; 0 < iIn; iIn-- )
    {
        if( p_piAry[iIn - 1] > p_piAry[iIn] )
        {
            // 前の方が大きいので入れ替えます（実装はあとで）。
        }
    }

『 for で、配列の最後から…… 0 < iIn 、だから 0 まで行かないんだ
ね。入れ替えのチェックは iIn と iIn - 1 、つまりさっきのだと ~ と ^ 
で比較して、 ~ の方が大きかったら入れ替え……』
「そういうこと。基本的に、配列をひとつずつ見ていくときには for を使
えばいいから」
『入れ替え部分は？』
「それは簡単にできるからあとで。説明も必要ないし。それよりも、 if の
条件の方が重要かも。もしこれを」

        if( p_piAry[iIn - 1] >= p_piAry[iIn] )

「ってしたらどうなると思う？」
『 = が付いただけだよね。でも同じだったら入れ替えても関係ないんじ
ゃ……あ、安定ソートにならない？』
「そういうこと。 = を付けると安定ソートじゃなくなるんです。今回の例
では関係ないけど、配列の要素が構造体やクラスの場合には」
『安定ソートかそうじゃないか、って大きいもんね』
「そういうこと。それともうひとつ」

        if( p_piAry[iIn - 1] < p_piAry[iIn] )

『 > が < になった』
「こうすると降順、つまり大きい順に並びます」
『逆になるんだ……』
「つまり、この【条件式】はとても重要。これをちょっと間違えるだけで並
び方が全然違います」
『ちょっと怖いね……』
「一番いいのは、この条件文を関数化して、チェック用のテストも作ること
かな」
『そうすれば確実だもんね』
「それに、関数化しておけば、あとから付け替える時に便利だからね。昇順
と降順を変えることとか」
『多そうだもんね。それが関数切り替えるだけでできるなら楽だよね』
「そういうこと。ま、今回はこのままで。さて、ここまでは〈１周目〉につ
いて見てきました」
『そういえば、それがあと３回あるんだよね』
「そう。そこで、各周の最後だけ並べてみます」

4 3 9 5 8 ←１周目最後
^ ^      
3 4 5 9 8 ←２周目最後
  ^ ^    
3 4 5 8 9 ←３周目最後
    ^ ^  
3 4 5 8 9 ←４周目最後
      ^ ^
『これは左から右に移動してるんだね……』
「このあたりの考え方はいくつかあるんだけど、一番簡単なのは〈入れ替え
先〉を考えることかな」
『入れ替え先？』
「各周で、一番小さな数を入れておく場所があるでしょ」
『１周目が 0 番目で、２周目が 1 番目で、ってゆーのね。そか、それが 1 
ずつ増えていくから』
「それを for ループにすればいいわけ。一番右端は見ないから、配列のサ
イズ - 2 までループすればいいから、こうなります」

    // 「入れ替え先」のループです。
    for( int iOut = 0; iOut < p_iSize - 1; iOut++ )
    {
        // この中にさっきのループを入れます。
    }

『あれ？　中の条件って iOut <= p_iSize - 2 の方がよくない？』
「その辺は好みかな。僕は for の条件式は〈止まるところ + 1 〉に決めて
るから」
『なんで？』
「 for ループの代わりに使える STL っていうライブラリがあって、それが
この方法で統一されてるから」
『私もそうした方がいい？』
「ってこともないと思うよ。今は〈自分にとってわかりやすい方法〉で書く
ことが重要だから」
『まだ初心者ってことね』
「う”、そういうわけじゃないけど……じゃ、今回の関数をまとめてみま
す」

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

『おー』
「というわけで次回に続く！」
『ええっ！？』


/*
    Preview Next Story!
*/
『完成したら終わりじゃないの？』
「それじゃ、本当にこの形でしか使えないでしょ」
『この形？』
「 int の配列で、普通の比較でのソート」
『つまり、 int 以外で、特殊な比較ができないとだめ？』
「そういうこと」
『というわけで次回』
＜ Version 13.09 ソートの中身のバリエーション ＞
「につづく！」
『応用力付けなきゃ意味ないもんね』
「本当に使えるプログラムじゃなきゃ意味ないからね」


////////////////////////////////////////////////////////////////////
/*                ２００４年２月２３日（月）の更新                */
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
*/
////////////////////////////////////////////////////////////////////

