2007-03-01から1ヶ月間の記事一覧

wc

C

簡単だから残すまでも無いが…… //!gcc -Wall -g -o my_wc test.c #include #define IN 1 #define OUT 0 int main(void) { int nc, nw, nl, c, stat; stat=OUT; nc = nw = nl = 0; while ( (c = getchar()) != EOF) { ++nc; /* EOF以外なら無条件で文字数をイ…

K&R

C

助走期間を完了として、そろそろUNIXプログラミングの学習に移ろうかと思ったのだけれど、その前に総仕上げとしてK&Rを通読してみようと思う。方針としては、説明文とコードの理解を目標とし、演習は解かない。ただし読破に時間が掛かりそうなら先に進むこと…

Emacs YaCompile

.emacsに以下のエントリを追加 ;; YaTeX like compile (add-hook 'c-mode-common-hook '(lambda () (define-key c-mode-map "\C-c\C-c" 'YaCompile) (setq current-comment-prefix "//"))) (defvar current-comment-prefix "#" "*Default prefix string") (m…

ヘッダの補完入力

http://www.bookshelf.jp/elc/cpp-complt.el をダウンロード 設定 (add-hook 'c-mode-common-hook (function (lambda () (require 'cpp-complt) (define-key c-mode-map [mouse-2] 'cpp-complt-include-mouse-select) (define-key c-mode-map "#" 'cpp-compl…

Trampの導入

概要 Emacs上で、リモートのファイルをローカルの要に編集することが出来るようになる。リモートアクセスにはSSHを使用するのが妥当だと思う。 入手先 http://ftp.gnu.org/gnu/tramp/ 導入 ./configure make; make install mkdir -p ~/emacs/tramp cp -a tra…

スタックトレース

1.まず[Alt] + [SysRq]によるデバッグ情報の取得が有効になるようセットする echo 1 > /proc/sys/kernel/sysrq 2.ローカルでテキストコンソールを使用する3.ハングアップしたサーバ上で以下のキーストロークを入力。 [Alt] + [SysRq] + [t] =>全てのプロ…

定義済み識別子

定義済み識別子__func__は、その関数の名前を保持する。 /* 関数内で自分自身の名前を表示 */ #include void funcution(void) { printf("%s\n", __func__); /* functionと表示 */ } int main(void) { printf("%s\n", __func__); /* mainと表示 */ return (0);…

定義済みマクロ

定義済みマクロ__FILE__は、そのプログラムを格納しているソースファイル名と置きかわる。 #include int main(void) { printf("このプログラムを格納しているソースファイル名は%sです。\n", __FILE__); return (0); }

配列の初期化

初期化子を与える配列の宣言では、初期化子が与えられていない要素は0で初期化される。 int array[10] = {0}; /* すべての要素を0で初期化 */

emacs-w3mインストール覚書

環境はSDIC with 英辞郎と同じ w3mのインストール FedoraCoreから ダウンロード http://emacs-w3m.namazu.org/ インストール # ./configure # make # make install # make install-icons .emacs ;; w3m-emacs (setq load-path (cons "/usr/share/emacs/site-…

emacs-w3m

Emacs環境を着々と構築中。次のターゲットは、Emacs上でのウェブブラウジング。その前段階として、まず普通のw3mのインストールを試しているが、うまくいかない!(>_Fedora Coreにはw3mが付属していることを発見。これでいいや♥

SDIC with 英辞郎 覚書

SDIC - Emacs 上で英和/和英辞書を閲覧するためのプログラム 環境 CentOS release 4.3 (2.6.9-34.0.2.EL) sdic 2.1.3 nkf 2.0.7 英辞郎 2nd EDITON nkfのパスを認識しなかったので configure を以下のように変更 NKF="/usr/local/bin/nkf" 以下のディレクト…

線型リスト

/* 〜線型リスト〜 ノードは構造体で定義する。構造体のメンバは数値と次のノードへのポインタ。 リストの数値は常に昇順である。 */ #include #include #include /* 構造体の宣言 */ typedef struct _value{ int num; /* データ */ struct _value *next_ptr…

日本語入力

Emacs上の日本語入力が使い辛いなー。慣れていないからだろうけど……カタカナ変換どうやってやるんだ?これ。

キュー

キューはリングバッファを使用して実現する。 /* キューを実現する構造体 */ typedef struct { int max; /* キューのサイズ */ int num; /* 現在の要素数 */ int front; /* 先頭要素カーソル*/ int rear; /* 末尾要素カーソル */ int *que; /* 配列へのポイ…

Linuxデスクトップ

Windows上で良いLinux開発環境を構築できないものか、暫く調べていたのだけれど、やはり文字コード絡みで苛々することがとても多い。そこで、いままであまり興味が無かったのだけれど、思い切って開発環境をLinuxで構築しようとおもう。いままで気が進まなか…

スタック

スタックを実現する構造体とスタックの概念を学習した段階で取り敢えず実装してみた。スタックはゼロで初期化する。面倒なので全部表示している。 #include #include #define NUM 3 typedef struct { int max; /* スタックサイズ */ int ptr; /* スタックポ…

プログラムの実行時間を計測する関数

double my_clock() { struct rusage RU; getrusage(RUSAGE_SELF, &RU); return RU.ru_utime.tv_sec + (double)RU.ru_utime.tv_usec*1e-6; } int main() { double t1,t2; t1=my_clock(); /* 計測したいものを入れる */ t2=my_clock(); printf("cpu time=%10.6…

クイックソート

平均的には、最も早いソートアルゴリズムである。条件によっては、分布数えソート、逆写像ソート、ラディックスソート(基数)の方が早い。 アルゴリズムの特長 離れた要素を交換する為、安定ではない オーダーは 平均O(n log(n))、最悪ではO(n^2) 方針 適当な…

シェルソート

シャトルソート(単純挿入ソート)の改良版。シャトルソートは配列がソート済或いはそれに近い状態では高速であるが、挿入先が遠く離れている場合は移動回数が多くなる。シェルソートはこれを改良したもの。クイックソートの登場までは、最高速のアルゴリズム…

単純ソートの時間計算量

これまでの3つのソートアルゴリズムはいずれも O(n^2)であり、効率が非常に悪いものである。以後は、これらを改良した効率の良いアルゴリズムの学習を行う。

関数ポインタ

関数ポインタは以下のように宣言する。 int (*sort_func)(int num[], int n); この宣言の意味は以下 sort_funcは関数へのポインタである。 その関数の戻り値はint型である。 その関数はint型の配列へのポインタとint型の変数を引数に持つ。 使用例は以下 sor…

単純ソートについて

上記二つのソートは簡単だし、実際に使えるかどうかは疑問だけれど、Cプログラミングにおける何か大事な物を教わった気がする…… 気のせいかな。

単純選択ソート

配列の中の最小値と先頭を入れ替えるアルゴリズム。シャトルソートとそんなに変わらないな。 int selection_sort(int num[], int n) { int i, j; for (i = 0; i num[j]) min = j; /* 未ソート部分から最小値の添字を取得 */ } swap(int, num[i], num[min]); …

シャトルソート

シャトルソートは以下のようにすれば当初の方針通りに動くようだ int shuttle_sort(int num[], int n) { int i, j; for (i = 1; i 0 && num[j-1] > tmp; j--) { num[j] = num[j - 1]; /* 継続中は配列を後ろにずらしていく */ } num[j] = tmp; /* 挿入先が決…

シャトルソート(単純挿入ソート)

トランプを昇順に並べ替える際に行う方法に似たアルゴリズム。配列のi番目の要素に着目し、i-1番目がより大きければ後ろにずらして挿入する。これを繰り返す。 アルゴリズムの特長 安定的なソートである 比較回数と交換回数 n^2 / 2 オーダーは O(n^2) 作成…

swapマクロ

2値を交換するマクロ。何故交換出来るかは考えるのが面倒だったのでとりあえず放置。 #define swap(type, x, y) do {type t; t=x; x=y; y=t; } while (0)

実装後の指摘事項

きさらさんより。特別な意味がなければ、"n - 2"のように2を引くべきではない、とのこと。どのようにしても同じなので何となく好みでそうしたけれど言われれば納得。よって、以下のように変更。else文は無くても良いけれど、なんとなく何もしないことを明示…

バブルソート(単純交換ソート)

要素数をnとし、昇順にソートするアルゴリズムを考える。 アルゴリズムの特長 安定的なソートである 比較回数は常に n(n - 1) / 2 移動回数の平均は 3n(n - 1) / 4 オーダーはO(n^2) 方針 要素1と要素2を比較し、要素1の方が大きければ入れ替える。 同様に要…

バイナリサーチの追記

このコードの場合、「昇順」にソートされていることが前提となる。 b_search( )の第三引数に配列の要素数を直接入れるのは良くない。sizeof(num)/sizeof(num[0]) の値を渡した方がいい。 バイナリサーチにおいて、検索値が検索対象に複数ある場合、どれがヒ…