プログラムロジック

プログラムの授業で ロジックが解らない との声を良く聞きます。 (^_^;
このページでは「アルゴリズム」と「プログラムロジック」に付いて考えて見ます。
2005年11月に若干15歳の浅田真央がスケートのフランス杯で優勝しましたが、仮に私たちが 優秀なコーチからスケートを習ったとしても短期間ではジャンプどころか満足に滑走できるか怪しいものです。 (^_^;)
プログラムも同じで、習ったからと言ってすぐにベテランと同じように組めるようにはなりません。
スポーツほどでは無いにしても、プログラミングにも訓練(練習)が必要で、訓練を積み重ねて経験を 積むことにより難しいプログラムも作成できるようになるのです。 \(^o^)/
浅田真央さんも小さい頃から何年間も練習を重ねてきたに違いありません。
プログラムも ちょこっと練習して、すぐ組めるようになる などと言う 安易な考えは捨てて下さい。 (;_;)

前田稔(Maeda Minoru)の超初心者のプログラム入門

漠然と「プログラム(ロジック)が解らない」と言っても、その意味は様々です。
  1. 何をプログラムしたら良いのか問題自身が解からないとき。
  2. アルゴリズム(解法)が解らないとき。
  3. アルゴリズムは理解できても、それをプログラムできないとき。
  4. プログラムは作成できても、思うように動作しないとき。
問題自身が解からないときは聞くしかないので除外して、アルゴリズム(解法)に付いて考えてみます。
アルゴリズムはコンピュータと一体と思われ勝ちですが、コンピュータが出来る以前から有名な数学者達に よって研究されてきました。
一例を挙げれば次のようなものがあります。
  1. ユークリッドの互除法
    EditControl を使ったデータ入力と表示
  2. プレゼンハムのアルゴリズム
    プレゼンハムで円を描画する
  3. 座標の回転
    座標を回転しながら星を描きます
  4. エラトステネスのふるいで素数を求める
    素数の一覧を表示する
  5. バイナリツリーソート
  6. クイックソート
  7. 平方根を求めるニュートンラプソン法
    平方根の計算
  8. ルドルフが考案した、円に内接する正多角形による円周率の計算
    正多角形で円周率を計算
  9. 円周率を求めるマーチンの公式
    4000桁の円周率を求める
まだまだ多くのものが知られていますが、有名な解法には作者の名前が付けられているぐらいで、 我々凡人が関与する余地はなさそうです。 (^◇^;)
これらの解法を習うことは頭脳を鍛える意味では有益でしょうが、あまり応用は期待できません。
例えば、プレゼンハムのアルゴリズムを習ったとしても円の座標を求める以外に応用は考えられないし、 ユークリッドの互除法を習ったとしても最大公約数を求める以外の応用は思いつきません。
難しいアルゴリズムは専門家に任せておいて、必要なときに調べることができれば十分でしょう。
私達は、普通のプログラム(ゲームを含む)で必要になるような解法を考える能力を鍛えなければなりません。

アルゴリズム(解法)は 問題の数だけ存在する ので「これだけ覚えたら十分です」 なんてものはありません。 (^_^;)
従って個々の問題の解法を丸覚えする勉強方法は全く意味が無いのです。
覚えるよりも応用する(始めての問題でも考えられる)能力を鍛えることが重要になります。
Aの問題がプログラムできる力があるならば、BやCの問題もプログラムできるであろうと言う予測はつきます。
と言う事はしっかり訓練を積めば多くの問題を解けるようになると言うことです。
要は思考回路を鍛えて、問題に対応できる能力を養うしか方法はありません。
実はこれがプログラムの勉強で、最も難しいことかも知れません。 (^_^;)

プログラミングには解法をコンピュータに実行させる命令(関数)の知識もかかせませんが、これは授業や 教科書やネットを通じて勉強していかなければなりません。
プログラムは作成できても思うように動作しない原因は、アルゴリズムが間違っているか、命令の使い方が間違って いるからでしょう。 (;_;)

プログラミングの作業でデバッグ(間違いを発見して正しく修正)することも非常に重要な作業です。
これも訓練を繰り返して、経験を積むしか方法は無いでしょう。
いくら頭では解かったような気がしていても、実際に作成する段になると訓練ができていないと思うようになりません。
頭では解かりきっているようなことでも「繰り返し繰り返し体に覚えこませる」ことが重要です。
また何度かプログラミングしていると、今まで無かったような思わぬ事態(エラー/現象)に遭遇することがあります。
原因は千差万別で教えられるものでは無く、各自が経験を積んでノーハウを蓄積するしか方法はありません。
各ページに掲載している 【演習】 をしっかりやっていただければ訓練が出来るように構成しています。 (-.-;)

超初心者のプログラム入門(Win32API C++)