第一回-01 何故プログラミングを学ぶのか
工学院大学 1 年生の講義「情報処理概論及演習」では、Visual Basic for Applications (VBA) という言語を学ぶが、
その中には、「If 文による条件分岐」、「For 文や While 文による繰り返し」、「配列」などの内容が含まれている。
これらは、
「手続き型言語」という種類のプログラミング言語 (Basic 以外では C、C++、Java など) では
必ずと言って良いほど登場する考え方
であり、
これらを習得することはプログラミング言語を習得する上で必要不可欠であると言える。
では、そもそもプログラミング言語を学ぶとどういう際に役に立つのであろうか。
ここでは皆さんの大学生活に関連性の高い例を幾つか紹介する。
例1.卒業研究などで画像処理が必要になる場合 (Java)
例2.モーターなどを制御する (C言語)
例3.ニ足歩行のモデルをシミュレートする (Java)
例4.フーリエ変換と音声合成 (VBA)
例1.卒業研究などで画像処理が必要になる場合 (Java)
卒業研究などで画像処理プログラミングが必要になったケースがあるので、簡単に紹介する。
ある実験において、壁に水平に当たったレーザーを読み取る必要があったのだが、
ウェブカメラでパソコンに取り込んだ画像は以下のようであった。
レーザーの径が約 2mm 程度であることが上の図からわかるが、
この実験では、百枚以上ある同様のの画像から、それぞれのレーザーの位置を 1mm 以下の精度で読み取る必要があった。
しかし、人間の肉眼でレーザーの位置を確定することは読み取りに個人差があり、容易なことではない。
そこで、上図からレーザーの位置を読み取るための簡単なアプリケーションを作成した。
このアプリケーションが行うことを流れに従って解説したのが以下である。
1.画像をグレースケール画像に変換した上で、明るいレーザー部を白くする。
2.白いレーザー領域を縦方向に観察し、レーザーの中心位置に赤く点を打つ。
この時点ではまだ赤い線はふらついている。
3.赤線を直線近似するための領域 (緑色の四角) をマウスで定める
4.得られた近似直線を描画する (ここでは見やすいよう太く表示したが、
実際はもっと細い線で表示可能)。この直線の目盛位置を読み取る。
以上が作成したアプリケーションの流れである。
こういうことをやろうとする際、フォトショップのような商用アプリケーションで実現したくなるが、
「レーザーの中心を出す」というこの例のように、
目的が特化している (一般的ではない) 場合は
自分でアプリケーションを書かねばならないことが多い
。
このアプリケーションは Java と呼ばれる言語で書かれているのだが、
皆さんが 1 年生時に学んだ Visual Basic と似たような構文を用いている。
それを例示したのが下図である。
これは近似直線をオレンジ色で描いている記述である。
この内容を理解する必要は全くない
が、
For 文の中に If 文があるという構造は Visual Basic でも学んだ
ことを覚えているだろうか。
なお、この「プログラミング演習I」という講義を学んだ後、皆さんはこのプログラミングの例文を見て、
何を行われているかを(100% とまでは言わないが)「それなりに」理解できるようになるはずである。
この例で言いたかったことは、
目的が特化している (一般的ではない) 場合には、自分でアプリケーションを書かねばならないことがある
様々なプログラミング言語があるが、多くの言語で共通の文法や考え方がある
ということである。
例2.モーターなどを制御する (C言語)
次の例は、モーターなどを制御する場合の例である。
以下の動画は、ホビー用ロボットの関節として使われているサーボモーターに回路 (aruduino) を接続し、
スマートフォンから角度の指令を与えている様子である。
サーボモーターの制御を行う回路上で動くプログラムはC言語で書かれている。
ここで大事なことは、プログラムを書くのは通常のPC上だが、
実際にプログラムが動作するのは、「マイコン」とよばれる小さなコンピュータ上であるということである。
(下の図の「マイコン」は上の動画で使っているマイコンとは別のものだが、流れは同じである)
このように、プログラミングは皆さんが用いている PC 以外にも、
マイコンやあるいは携帯電話など、様々なデバイス上で動いている。
恐らく大学では「ものづくり」という言葉を何度も耳にしたことと思うが、
旋盤やフライスで「もの」を作っただけではその「もの」は動かない
。
ものを動かすには「回路」、「情報」、「プログラミング」などの知識が必須
である。
この例で伝えたかったことは
プログラムはPC上だけではなく、マイコンなどの回路で「もの」を動かすために作られるものもある
(そのような例は携帯、テレビ、HDDレコーダー、iPod などいくらでも挙げられる)
「ものづくり」という言葉からもっと踏み込んで、「ものを動かす仕組み」まで興味を持って欲しい
例3.二足歩行のモデルをシミュレートする (Java)
先程の例は実際のロボットの足を動かすためのプログラムをC言語で作成する、 という話であった。
それとも関連するが、ロボットのモデルをコンピュータ上に構築し、
そのモデルを歩行させるのに最適な歩行パターンを模索する、 という事例を紹介する。
二足歩行モデルの手動制御
を開くと Java で書かれたシミュレータが起動する。
このモデルは、4本の棒で構成した二本の足にかかる重力や摩擦の効果などを運動方程式に取り込んでモデル化し、
それをプログラミングによってコンピュータ上でシミュレートしている。
最近のゲームでは「物理演算」と言って、現実の重力や衝突の効果をゲームに取り入れることが多いようだが、
この例は物理演算による二足歩行のモデル化と言えるだろう。
この例のポイントと一言で述べると以下のようになる。
プログラミング言語により、物理現象をコンピュータ上でシミュレートすることができる
例4.フーリエ変換と音声合成 (VBA)
以上、Java 言語における例と C 言語における例を見た。
最後に、皆さんが学んだことのある Visual Basic for Applications における例を見よう。
大学で学ぶ「フーリエ解析」の考え方を用いると
、
コンピュータにより音声合成
をすることができる。
これは
音声のもつ情報量を減らす
ことになっており、
iPod に膨大な量の音楽を保存できる理由
に関係している。
講義中にデモンストレーションを行うが、下の図は Excel で私の 「あ」という音声を少数の sin 関数で合成したものである。
そもそもフーリエ変換は以下のような定義だった。
VBA によるプグラミングにより、上記の数式をコンピュータ上に翻訳
することで、
音声合成を実現している。
つまり、この例のポイントは
プログラミング言語により、数学理論をコンピュータ上の動作へ翻訳することができる
ということである。
第一回-02 コンソールアプリケーションとGUIアプリケーション→
非情報系学生のための C/C++ 入門
に戻る