補足(いいわけ?)002


単純選択ソートについて(2014/9/15)

掲示板にてご指摘をいただきました。

http://kmaebashi.com/bbs/thread.php?boardid=kmaebashibbs&from=1893&range=1

p.102のFig2-5を見るとわかるように、ここでのアルゴリズムでは、 ふたつの値を交換する際、「未ソートの範囲」の中で交換しています。

ということは、交換が発生するには、 未ソートの範囲が最低ふたつ残っている必要があり、 List2-8の36行目のfor文は、

for (sorted_count = 0; sorted_count < score_count; score_count++) {

ではなく、

for (sorted_count = 0; sorted_count < score_count - 1; score_count++) {

でよいことになります。

元ソースだと、最後の1回の交換について無駄な比較 (同一要素同士の比較)が起きます。 ソート自体はできますが、そのすぐ下に 「境界値の重要性」 と書いてあるにしてはかっこ悪いことになってしまっています。


DOSの改行コードがCR+LFであることについて(2015/01/18)

p.151の補足「DOSの改行コードは何故2バイトなのか?」に、 「C実践プログラミング」を引用して 「ろくに同期の制御もできないような初期のテレタイプにて、 ヘッド移動の時間稼ぎのために改行コードを2文字にした」 と記述しましたが、どうやらこれは都市伝説のようです。

安岡孝一さんの 日記(2010年11月25日)に以下の記載があります。

『コンピュータ端末の元祖になった電信機「テレタイプ」』(電子情報通信学会誌, Vol.93, No.1 (2010年1月), pp.12-16)にも書いたが、CRとLFがテレタイプに導入されたのは、Model 33 (1963年発売)なんかより遥か昔、Morkrum Printing Telegraph (1910年完成)にまで遡る。この時点のテレタイプは、印字速度が回線速度よりかなり遅かったが、それは特に問題とはならなかった。回線直結で使う場合は、送信機と受信機の両方の動作が遅いために、送信機側の動作を待ってからでないと次の文字が送れなかったのだ。あるいは、高速な通信回線を十分に使いたい場合は、送受信には5穴の鑽孔テープを使用して、あとでゆっくりプリントアウトする、ということをおこなった。その場合は、CRの間は鑽孔テープの読み込みを止める、といういわばバッファリング処理がおこなわれたのである。

すなわち、CRに時間がかかったためにCR+LFにした、というOuallineの説には、全く根拠がない。実際には、CRとLFを別々のコードにすることで、テレタイプは、重ね打ちを可能にしていた。初期のテレタイプ(5bitコード)には、BS(Back Space)がなく、1文字だけ戻すという機構も実装されていなかった。そこで、CRとLFを別のコードに分けることで、重ね打ちを可能にしたのである。


「補足(いいわけ?)」の目次に戻る | ひとつ前のページ | ひとつ後のページ | 「C言語 体当たり式徹底入門」のページに戻る | トップページに戻る