2005-01-01から1年間の記事一覧

useless tips

上の find1 プログラムは 実際に 役にたつのか、UNIX の time コマンドを 使って 調べてみた。 検索用の ファイルを 用意、全部で 5100行ほど ある。 http://www4.kcn.ne.jp/~yoitiro/unix_study/book_stk.txt 測定してみると、$ time ./find1 三浦アンナ bo…

はじめての C

C programming note*1 keyword を コマンドライン上で 指定するため、 main() 関数は 次のように なります。main(int argc, char **argv) { char *keyword; FILE *fp; --argc; ++argv; if (argc usage(); /* no return */ --argc; keyword = *argv++; if (ar…

web archive

[リゴベルタ・メンチュ] web page の 消えてしまわないうちに リンク。 1. 「左翼」 デビッド・ストール氏の 奇妙な正義 - 狐崎知己 2. (参考) デビッド・ストール氏 インタビュー 3. (参考) リゴベルタ・メンチュ氏 インタビュー New York Times を 媒体に …

はじめての C

C programming note*1 たとえば、「入力テキストの中で "the" という 文字列が 含まれている 行だけを 選んで 出力する (そうでない行は 出力しない) という 処理は、いろんな場面で ありそうな処理だ。 入力が テキストであるときに、それを 1文字ずつ 処理…

miscellanies

マルクスの遺稿は エンゲルスの遺言によって ベルリンの ドイツ社会民主党文庫に 保存されていた。 その文庫に アジアの人間としては おそらく はじめて 研究のため 出入りした人の 証言が ふるい雑誌に 掲載されている。 今では 取り上げられることもないが…

はじめての C

C programming note*1 あとは、それぞれの 関数を 組み立てていきます。 今回は 1つの ファイルに 納めましたが、長くなるようなら、別々に コンパイルするという 方法も あります。/* ce3r.c */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h>#define MAX_SIZE (</ctype.h></string.h></stdlib.h></stdio.h>…

はじめての C

C programming note*1 関数 carte() を より 一般的な かたちに 改良していきます。int carte(FILE *fp) { char buf[MAX_SIZE]; while (fgets(buf, MAX_SIZE, fp) != NULL) { remove_pre_blank(buf); remove_pos_blank(buf); center(buf, width); if (fputs(…

はじめての C

C programming note*1 今度は、1行に 入る 文字数を、プログラムの中で 定義するかわりに、 コマンドラインの パラメータとして $./ce3r -w30 のように 指定して 実行するだけで、コンパイルして プログラムを つくり直すことなく、既定値の 80 文字の 代わ…

miscellanies

[Patriot Act] Japan.Linux.com の記事を 読んで ... http://japan.linux.com/enterprise/05/12/15/0159242.shtml 期限立法の U.S.A. Patriot Act が、公聴会での 審議を経て、延長される 可能性が でてきた (via Japan Today)。 すでに この法の 存在意義は…

はじめての C

C programming note*1 rmposblank() では うまく 動いてくれてますが、errata によると、そこで 使われる関数に 一部 不具合がある とのことです。 関数 remove_pos_blank(char *) において、元のコード (のまま) では、 「空白 もしくは タブの 連続 のみか…

useless tips

「考えてみると、文字列の後ろに タブや スペースがある 状況というのは よく わからない」 なんて 書いたけど、そんなケースに 即 遭遇してしまった。 http://nobelprize.org/literature/laureates/2005/pinter-lecture-e.html 上の page を テキストブラウ…

はじめての C

C programming note*1 次は、文字列の 後ろ側にある 空白を とり除く関数、void remove_pos_blank(char *buf) { char *q; if (*buf == '\0') return; q = buf + strlen(buf) - 2; /* minus 2 ('\n' + '\0') */ while (ISBLANK(*q)) --q; *(q + 1) = '\n'; *(…

はじめての C

C programming note*1 center() は、タブや スペースのような 空白が 文字列の 前後に 含まれていると、うまく 中央揃いには なりません。 そこで 少し コードを 追加していきます。 まず、文字コードが 空白か 否かを チェックする マクロを つくっておきま…

useless tips

Dennis Ritchie の page を ときどき check してる人は、今 どのくらい いるんだろう ? http://www.cs.bell-labs.com/who/dmr/ 確かに 歴史文書に 準じるものも 多いし、C の 成立ちを 調べてる人 以外、興味が もてないかも しれない。 でも、C 自体 基本は…

はじめての C

C programming note*1 行単位の 入出力が 可能になったので、次は メニューカードのように それぞれの行を 中央揃えにする プログラムを つくっていきます。 それから、エディタ画面に print したときに 中央揃えに なることと、フォントの幅が 全て 同じだ…

web archive

C programming Language Free Books "The New C Standard - A Cultural and Economic Commentary 2005 rev." (pdf.file) http://www.knosof.co.uk/cbook/ (page の 中程に pdf.file への リンクが あります) "Numerical Recipes in C - The Art of Scientifi…

はじめての C

C programming note*1 プログラム cat3 には、入力した文字を そのまま 標準出力する 関数 do_one() が 含まれています。void do_one(FILE *fp) { int c; while )((c = fgetc(fp))( != EOF) fputc(c, stdout); }do_one() を、その入出力を 配列を使って 行単…

web archive

「ミルカさんフラッシュ」だけど、これって net 上にある 興味を引く page の 紹介に 転用できそう。 http://www.hyuki.com/girl/tm_miruka.html さっそく 「結城メソッド*1」を 試してみた。 http://www4.kcn.ne.jp/~yoitiro/binary/index.html (でも、文章…

web archive

おもしろそうなので ajibit さんの つくった 高橋メソッドマシーンを download してみた。 http://lab.ajibit.com/pukiwiki.php?Flash%2F%B9%E2%B6%B6%A5%E1%A5%BD%A5%C3%A5%C9%A5%DE%A5%B7%A1%BC%A5%F3 via http://www.hyuki.com/t/200511.html#i2005112723…

はじめての C

C programming note*1 今回は さらに オプションスイッチを 追加し、"-n" オプションが 指定されたときに 行番号を 出力するように 機能追加して、cat4.c と した。(p111) オプションを 追加する やり方は 同じで、関数 do_one() に 少し 変更を 加えて、新…

はじめての C

C programming note*1 基本に戻って、ちょっと 復習。 プログラム upper3r には、次のような while文が 含まれています。while (argc--) { if )((fp = fopen(*argv, "r"))( == NULL) cant(*argv); do_one(fp); fclose(fp); argv++; }この while文から 抜け出…

はじめての C

C programming note*1 「小文字を 大文字に 変換する」 コードを プログラム cat3 に 組み込んでいきます。 この 2つを 1つの プログラムに まとめて、入力元の ファイルは コマンドで 複数指定でき、かつ オプションスイッチを つけた 場合には 大文字変換…

はじめての C

C programming note*1 toupper() と islower() については、K&R 2nd の 「7.8 雑関数」(p203) に その説明が 載っています。これらの関数を 使用するには ヘッダファイルの ctype.h を インクルードしておきます。 同じような 働きをするものも 含めて、 tou…

はじめての C

C programming note*1 次は、小文字を 大文字に 変える プログラム。 最初の ASCII 依存プログラムでは、大文字と 小文字の コード番号が ちょうど 32 だけ 離れているのを 利用しています。 その部分の コードは、while )((c = getc(fp))( != EOF) { if ('a…

はじめての C

C programming note*1 cat2 を さらに 改良して 「標準入力」 と 「コマンドラインで ファイル名を 指定して 順に それらのファイルを 入力元とする」 両方のスタイルが 使えるようにします。 このとき、関数を 分けたことが 役にたってきます。 このような…

はじめての C

C programming note*1 関数 do_one() の 引数の 説明は、外部変数の 解説のところで でてきます。 「名前の 適用範囲 scope」というものを 説明しよう。 main() 関数内で FILE *fp; と 宣言されている fp という変数は 他の 関数の中では 使えない。 これは …

はじめての C

C programming note*1 複数の 関数に 分けるというのは、よく使われる - 基本になる - 処理を 切り離して 別の関数に したてておく。 それを main() 関数で 呼び出す、ということ。 cat1 を 改良した プログラムでは 2つの 関数が 使われている。 do_one() …

はじめての C

C programming note*1 今度は、ポインタ配列の argv が 使われてる プログラム。(p64-65) これは UNIX の コマンド cat と ほぼ 同じ 働きをする。 つまり こういうことが 可能、$./cat1 file1 file2 file3 > outfileコードは こちら、/* cat1.c */ #include…

はじめての C

C programming note*1 少し戻って、次のような「標準入力の内容を そのまま 標準出力に 出力する」プログラムが でてくる。(p16)/* typ1.c */ #include main() { int c; while )((c = getchar())( != EOF) putchar(c); }これを 標準入力ではなく、ファイルか…

はじめての C

C programming note*1 インクリメント演算子は、整数型の変数に 適用したときは「値を 1つ 増やす」働きをしたが、ポインタ変数に 適用すると「指していたものの 次を 指すようにする」働きをする。(p73) main 関数の 仮引数の 1つ argv は ポインタ関数なの…