ログイン
kid's world

バグとアルゴリズム

バグ

プログラムが意図したとおりに動かないのは,プログラムの記述ミスか,アルゴリズムの間違いによる場合がほとんどである(アルゴリズムについては後述する)。プログラムが意図しない動作をするとき,「バグがある」という。

プログラムを書き始めた初心者がよく起こすミスは「打ち忘れ」である。たとえば,文は必ずセミコロンで終わるが,それが抜けてしまう場合がよくある。また,「打ち間違い」もよくあるミスである。たとえば「printf」と書くところを「pritnf」と書いてしまうなどである。またカッコの対応がとれていないなど,文法的な間違いがある場合もある。これらのミスは,ほとんどの場合「コンパイル時にエラー」となるので,気づきやすいミスであるが,エラーメッセージが間違いそのものを指摘している場合は意外と少ないので,どのような場合にどのようなメッセージが出るのかを,わざと間違えて学んでいくとよいだろう。

コンパイルができても,バグが潜んでいる場合もある。たとえばif文の中で,比較演算子「==」で同等関係を調べるつもりが代入演算子「=」を使ってしまったり,割り算をするときに整数の型で計算してしまって,答えが実数にならない場合などである。これらはコンパイル時にエラーとはならないので,非常にわかりにくいバグとなってしまう。

アルゴリズム

基本的にプログラムは何らかの目的を達成するために作られるわけだが,その目的を達成するための手順のこと,また,何らかの問題を解くための解法をアルゴリズムという。

アルゴリズムはTable 11に示すような記号を用いたフローチャートによって視覚的に表現することができる。自分で考えたアルゴリズムが正しく動作するのかどうかは,フローチャートで記述してみるとよくわかることが多い。

Table 11: 代表的なフローチャート記号

/c/algorithm-table1.png

データの並び換えや,データの圧縮など,ひとつの問題をとっても非常にさまざまなアルゴリズムが存在する。それぞれのアルゴリズムに得手/不得手があるので,利用する際に何を優先するのかでアルゴリズムを取捨選択しよう。

おわりに

最終回ということで,総まとめの意味で駆け足で振り返ってみたわけだが,いかがだっただろうか。今回振り返ってみて初めて気づいたことも多かったかもしれない。

C言語を自由に操るには,それぞれの機能を知るだけではだめで,それぞれの機能をどううまく組み合わせていくかにかかっている。文法をしっかりと熟知したうえで,さまざまな組み合わせ方を考えてみよう。どういう場合にどの機能を使えばいいのかを考えるために,今回の内容をリファレンスとして使ってみてもいいかもしれない。

1年間,筆者におつきあいいただいたみなさまには最大限に感謝申し上げたい。また,この連載をきっかけにして,優秀なプログラマがひとりでも増えることを願いつつ,連載を終えることとしたい。

広告


©Toshio Koide 1996-2007.

目次

リンクについて

リンクは御自由にどうぞ。

メール

mail.gif

広告