1.プログラミングに入る前の予備知識 |
ここでは,プログラミングに役立つ最小限の予備知識を紹介します。
|
1.1) コンピュータについて |
パソコン(PC)が現在のように発達し,ポピュラーな道具になる以前(’80年代),コンピュータは、人間よりも遥かに速いスピードで,かつ正確に計算処理する機械として使われていました。パソコンの登場以前は,コンピュータは,特別な人の使う装置で,大学,大企業,官公庁,その他の特別な機関などに設置され,しかも,その中の特別な人達しか使えませんでした.しかし,電子技術の発達で,CPUやメモリーが小さなICチップに収まるようになって,PCが登場,今では,誰でもその気になればコンピュータを手に入れることができるようになったのです。それとともに,用途も広がり,いまや多くの人がインターネットや事務処理のための便利なツールのイメージを持っているのではないでしょうか。
良く知られているように,規模こそ違え,洗濯機,炊飯器,携帯電話,テレビ,...,数え上げればきりがほど身の回りの電器製品の多くには,コンピュータが組み込まれています.PCといういかにもコンピュータという形ではなく,電化製品に部品としてコンピュータが組み込まれ,多くの人が,無意識のうちに日常的にコンピュータを操作しているのです.よく,PCのキーボードを見ておそれをなす人がいますが,炊飯器や電子レンジのボタンなどは,PCのキーボードそのもなのです.(笑)
驚くべき事に,大型コンピュータから電化製品に組み込まれた小さなコンピュータまで,基本的構造は全く同じでなのです。どのようなコンピュータも、それが内部で行っている処理は計算のみです。そして、扱うのは数値のみです。私たちが,デスプレイ上で見る文字,画像,スピーカから聞こえくる音楽,それらはすべてコンピュータ内部では数値で表現されます.膨大な量の数値が集まって画像になったり音になったりして私達の目の前に形(結果)となって現れるのです。
パソコンが誰でも簡単に入手できることに加え,コンピュータに関する各種の情報が書籍やその他のメディアをとおして,比較的簡単に入手できるようになりました。専門家でも,素人でも,コンピュータを勉強,あるいは活用するための環境は,ほぼ同じなのです。その気になれば,素人でも,様々なプログラムの作成にチャレンジすることができるのです。
|
1.2) コンピュータの基本構成 |
前節で,大型コンピュータから組み込みコンピュータまで,その構造は同じだと述べましたが,ここでは,
コンピュータの構成について簡単に説明しましょう.
下図に示すようにコンピュータは,CPU,記憶装置(主記憶装置と補助記憶装置),入力装置,出力装置などの電子装置で構成されています.通常,メモリーと呼ばれるのは主記憶装置のことです.補助記憶装置とは,ハードディスクなどのことです.
CPUは中央演算処理装置ともよばれ,演算処理装置と制御装置で構成されています.
素人目には,コンピュータは自発的に物事を判断し,人間に代わって,いろんな事をしてくれる装置のように思われがちですが,それは大きな誤解です.コンピュータに何らかの仕事をさせるには,その仕事の手順を逐一コンピュータに教えなければなりません. この仕事の手順を書き連ねた「仕事の手順書」がプログラムであり.プログラムを,記憶する装置がメモリー(主記憶)の役目です.メモリーに保存されたプログラムを読み込み,それを解読し,忠実に実行するのがCPUです.メモリーが単に,仕事の手順を書き込んだメモ帳の役割しかないないのに比べ,CPUは人間のように,手順書を読んで書いてあるとおりに忠実に実行するという人間的な機能を持っています.
入力装置とは,パソコン(PC)で言えばキーボード,マウス,モデム,携帯電話で言えば,マイクや各種のボタン類のようなものです.
出力装置とは,PCで言えば,デスプレィ,スピーカーなどのことで,携帯電話で言えば,着信を知らせるランプ,デスプレィ,スピーカーなどでのことです.入力装置から入力される情報を読みとったり,出力装置へ情報を出力するのもCPUの仕事です.
フロッピーやハードディスク類は,「入力装置」兼「「出力装置」と考えられますが,補助記憶装置あるいは外部記憶装置とも呼ばれます。
| CPU (中央演算処理装置)
|
| |
| | | |
|
メモリー (主記憶装置)
|
|
|
コンピュータは,与えられたプログラムを実行するだけの機能しか持ちませんが,ただし,指示された仕事は忠実に実行します.しかも,それが,何時間あるいは何年かかる仕事であろうとも,疲れることを知らず,機械が壊れるまで(正確に)に実行してくれます.
人間には,とてもまね出来ることではありません.
|
1.3) アルゴリズム |
今、半径 r (cm)の円があったとします。この円の面積(S)を求めるには
S = 0.5 × π × r × r
という公式を用います。この公式は,円の面積を求める手順を示しています.すなわち,円の面積を求めるには,次のような作業をすればよいということを示します.
(1)0.5にπをを掛け,
(2)それに半径rを掛け,
(3)もういちど,半径rを掛ける.
この公式がこの円の面積を求める際のアルゴリズムとなります。
ビデオで録画をする時はどうしますか?(笑)
(1)新聞を見る
(2)録画したい番組の開始時間、終了時間を調べる
(3)リモコンで、チャンネルをまず設定する (4)開始時刻を設定する
(5)終了時刻を設定する (6)等速/3倍速のモードの切り替えをする
(7)リモコンで設定した内容をビデオデッキに送信する
録画一つにとっても、上のような処理の流れがあります。 「アルゴリズム」は数学的には計算の手順のことを指しますが、一般的には問題解決(目的達成)のための段階的手法のことを指します。よって、後者的な考え方だとビデオの録画の手順も一種のアルゴリズムだと言うことが出来ます。アルゴリズムが大体どういうものかは分かっていただけたでしょうか?また,録画の例ですが、Gコードを使えば(3)〜(5)が一つにまとめられます。こういった風に、一つの目的を達成するには何通りもの手順が考えられるのが普通です。一般的にはアルゴリズムは考える人により無限の方法が考えられます。よって、これからお話しますが、プログラムを作成する素質がある人は簡潔な無駄の無いアルゴリズムが頭にすぐに思い浮かんでくる人だということが言えます。
|
1.4) プログラムとアルゴリズム |
コンピュータは所詮計算機です。
最近は技術も進歩し、計算するだけの機械なのに画像を扱えたり音を扱えたり通信できたりと、ますます魅力的なものに変わりつつあります。
しかし、先程も述べましたが、これは複雑な計算のたまものです。私達がコンピュータを利用して何かを得たい時は、
その結果を得るまでのアルゴリズムをコンピュータに教えてあげなくてはなりません。コンピュータは教えられたアルゴリズム通りに計算を行い、結果を教えてくれます。この、アルゴリズムをコンピュータが理解出来るように表現したものがプログラムなのです。言い換えれば、人間の思考をそのままコンピュータの分かる言葉で書き写したものがプログラムだと言えます。そして、このプログラムを書く作業をプログラミングと言います。 プログラムといっても、その記述方法は世界にたくさんあります。ここでいう記述方法と言うのは、人間の言語(日本語、英語、ドイツ語、・・・・)のような、体系的な違いです。そういった言語をコンピュータの世界ではプログラミング言語と呼びます。たくさんのプログラミング言語が歴史的に出来た背景には様々な要因があります。それぞれの言語にはそれぞれの特徴があり、長所・短所を兼ね揃えています。しかし、歴史的に見て、ここ10数年来、実質コンピュータ界の主導権を握ってきたのがC言語と呼ばれる言語です。この言語は他の言語に比べ、アルゴリズムをプログラムとして表現しやすいという点からも(つまり、人間にも理解しやすいプログラミング言語)重宝されてきました。
|
1.5) ソフトウェアの種類 |
プログラムはソフト,あるいはソフトウェアともよばれます。(でも,ソフトウェア=プログラムではありません。)
コンピュータで何らかの目的を実現するには,ハードウェアとソフトウェアが必要となります.ハードウェアとソフトウェアを一体として、コンピュータシステムと呼びます。また,ソフトウェアにも大きく分けて2種類のソフトウェアがあります。
みなさんが,コンピュータ実習室へ行けば,コンピュータはスイッチON状態で,ディスプレィには必ず何かが表示されています.そのような状態は,何もソフトが稼働していない状態だと思っているかもしれませんが,実は,もっとも基本的なソフトウェアが稼働している状態なのです.例えば,UNIX教室では,UNIXというソフトウェアが,情報処理実習室のPCではWindowsと呼ばれるソフトウェアが,ハードウェアに載って働いている状態なのです.このような基本となるソフトウェアを基本ソフト,あるいはオペレーティング・システム(OS)と呼びます。
個人でPCを所有している人は,よくわかると思いますが,PCの電源をONにすると.コンピュータは自動的にPCのOSであるWindowsを読み込みます.基本ソフトが載ってないとPCは,何もできません.LinuxもUNIX系の基本ソフトです。
基本ソフトに対して,ワープロソフト,表計算ソフト,ゲームソフト,インターネット関連ソフトなどは,アプリケーション・ソフトと呼ばれます.私たちがプログラムを作成するというのは,普通には,アプリケーション・ソフトを作成することを意味します。
ここで,基本ソフトとアプリケーションの関係をPCの場合を例に説明しましょう.
PCの電源をONにすると自動的にWindowsが読み込まれ稼働します.Windowsの主記憶への読み込みが終了すると,ディスプレィ上に,アイコンと呼ばれる四角形のマークが表示されます.これらは,ワープロ,表計算ソフト,ゲームソフト,インターネット関連ソフト,…などのアプリケーションを絵で表現したものです.もし,PCをワープロとして機能させようと思えば,ワープロのアイコンをクリックすれば,Windowsはハードディスクに保存されたワープロソフトを捜し出して,メモリーに載せ稼働させてくれます.
ここで,注意して欲しいのは,ワープロソフトのアイコンをクリックすることで,「ワープロソフトを使いたいからそれを立ち上げてくれ」と基本ソフトであるWindowsに頼んでいることになるということです.また,アプリケーションを終了するときも、実はWindowsに依頼しているのです.ということは,アプリケーションは,基本ソフトWindowsの管理下で動作するように作られているのです.
ここで述べたことは,ほんの1例で,皆さんがPCを使うとき,意識することなしに頻繁に基本ソフトの機能を使っています。アプリケーション上での様々な作業は,実は,アプリケーションをとおして間接的に基本ソフトを使っている場合が殆どです。一見,何のためにWindowsが必要なのだろうかと思うかも知れませんが,実は,無くてはならない存在なのです。したがって、私たちがコンピュータを利用するときは、常にOSとアプリケーションの少なくとも2種のプログラムが、コンピュータ上で走っていることになるのです。
次の3つの図は,基本ソフト,アプリケーションのメモリー中での関係を示す.
|
CPU
|
| |
CPU
|
| |
CPU
|
|
|
メモリー
|
| |
基本ソフトウェア
_______
|
| |
基本ソフトウェア
_______
アプリケーション _______
|
|
電源OFF時 |
| |
電源ONで,基本ソフ トを読み込む |
| |
基本ソフトにアプリケ ーションの起動を依頼 |
|
1.6) CPUとメモリーとプログラム |
最後に,ここまでの要点をまとめてみましょう.
まず,コンピュータを擬人化して,再度,コンピュータにビデオの録画予約させることを考えてみましょう.
そうすると,
1)「問題」は「コンピュータに目的の番組を録画させること」ということになります.
2)次に「問題解決の手順」,すなわち「アルゴリズム」を書いてみます。
(1) 新聞を手に取る.
(2) テレビ番組のページを開く.
(3) 録画したい番組の開始時間を調べる
(4) 終了時間を調べる
(5) リモコンを取る.
(6) 録画の開始時刻を設定する
(7) 終了時刻を設定する
(8) 録画速度を設定する
(9) リモコンの設定をデッキに送信する
ここで,注意しなければならいのは,手順が合理的でなければ,ならないということです.たとえば,アルゴリズムの
(9)をトップにもってきたらどうなるでしょうか。全く意味のないアルゴリズムになってしまいます。
3)このアルゴリズムをコンピュータが理解できるようにC言語などの文法で記述し,マシン語に変換したものが プログラムです。ここでは,アルゴリズムそのものがプログラムであるとして話を進めます.
4)作成したプログラムを,下図のようにコンピュータのメモリーに載せます.
5)このメモリーに載せられたプログラムを,解読実行するのはCPUの役目です。
CPUは,機械的に,上から順にメモリーの内容を読み込み,その意味を解読し,実行します。
たとえ,アルゴリズムにミスがあったとしてもCPU自身が適当に判断して,ちゃんと処理することはあり得ません。
| CPU
|
|
| 新聞を取る
|
| 番組のページを開く
|
| 開始時間を調べる
|
| 終了時間を調べる
|
| リモコンを取る
|
| 開始時刻を設定
|
| 終了時刻を設定
|
| 録画速度を設定
|
| 設定をデッキに送信
|
|
|
|
|
|
1.7) プログラミングに必要なもの |
プログラムを作成するには,プログラムを作成するプログラム(アプリケーション)を使います。このようなアプリケーションを
コンパイラーと呼びます。たとえば,C言語でプログラムを作成するアプリ(アプリケーション)を「Cのコンパイラー」などと呼びます.
プログラムは,編集,コンパイル,リンクの3段階の作業を経て作成されます。具体的なことは,このサイトの「VC++の使い方」を
参考にしてください。
1)編集の段階では,
アルゴリズムをC言語などの文法で記述しファイルとして保存します。この時できるファイルを「ソース・ファイル」とよびます。
2)コンパイルの段階では,
ソース・ファイルに文法的に誤りがないかどうかをチェックし,誤りが無ければ,マシン語のファイルに変換します。この段階でコンパイラーによって作成されるファイルを「オブジェクト・ファイル」とよびます。オブジェクト・ファイルは,プログラムとして完全なものではありません。(はじめての人には,わからないと思いますが)ライブラリー関数などが組み込まれないからです。
3)リンク(ビルド)の段階では,
オブジェクト・ファイルのライブラリー関数部分をライブラリからコピーして組み込みます。 ここで,実行可能ファイル,すなわちプログラムが生成されます。
|