フリーソフトの小道   

コンピュータ・プログラマー養成講座(入門編)
   第1回  プログラムとはどんなもの?


電子計算機の創成期の日本

 管理人(志)が初めてコンピュータプログラムに触れたのは大学1年のときであった。 当時は、大学の授業でもコンピュータについてほとんど触れない時代であったし、一般書籍、専門書籍を含めて少ない時代だった。

 当時は、中央の大型コンピュータに多数の端末が接続された「集中・大型」電子計算機の時代だった。 日本のコンピュータの技術水準はアメリカのコンピュータメーカーIBMから圧倒的に遅れており、 コンピュータが社会に導入されだし始める時期にあったが、国策に守られなければ成り立たない時代だったのだ。 日本政府(通産省)は如何にして日本のメーカーの水準を世界に対抗できるように育てるかに意欲的に取り組んでいた。 その当時の通産省官僚がいかに行動したかは日本のコンピュータ開発の歴史で語り継がれている話が多い。 政府(当時の通産省)が国内メーカー(日立、富士通、NECなど)を協力に後押ししていたのだ。 当時は大型コンピュータが大学などに導入され始めた時代で、東大に日立製、京大に富士通製、阪大にNEC製と政策的に決められ、 公的な機関については、国内メーカー毎に納入先を割り当てるなどしていた。 各大学の利用者からすれば、性能が優れ、安定運用の実績があるIBMのコンピュータを欲しがったのだが、そうはならなかった。 政府はヨーロッパ各国でIBMが国内メーカーを全滅させ、独占してしまった状況を見て、 日本の国内メーカが全滅するのを避けたかったのだ。

 現在のIBMは当時とは比較にならないくらい弱々しくなってしまい、 国内メーカー各社が十分対抗できる(追い越している)状況にまでに成長している。 しかし、現在は当時のような大型コンピュータの時代は既に無く、 多数のパソコンがネットワークで結ばれた「小型・分散・協調型」のコンピュータの時代となってしまったのだ。

 コンピュータの歴史については書籍にも詳しく載っているので図書館で探してみればよい。 面白い話を見つけたときには教えてください。


コンピュータ・プログラミングの姿

 コンピュータという機器は人間が指示をしたことを忠実に行う。この指示を記述する作業をプログラミングという。 記述するためには表記方法を決める必要がある。 コンピュータに直接指示を出すには2進数でかかれた指示(オブジェクト)というモノが必要になる。 しかし、指示を作成する人間はこのような2進数表記のオブジェクトは理解できない。 そこで人間が理解できる表記(プログラミング言語)を考え、それを翻訳することでオブジェクトに変換することを考えたのだ。

 2進数のオブジェクトに近いプログラミング言語として「アセンブラ」がある。 パソコン創成期(8ビットCPUの時代)では、アセンブラが中心でソフト作成を行っていた。 筆者も当時、i8080やZ80のアセンブラでプログラミングを行っていた関係で良く分かるが、 「アセンブラ」は2進数のオブジェクトに1対1対応しているため、 CPUの動作の1ステップ毎に記述する非効率なプログラミングを強いられる。 人間が理解可能なプログラミング言語だが、この非効率性のため現在ではほとんど使われない。 なお、「アセンブラ」について詳しいことを知りたい人は専門書籍を調べてください。


BASIC言語の登場

 「アセンブラ」より人間の言語に近い記述方法として、「高級言語」と呼ばれるプログラミング言語が多数作られた。 筆者が最初に知ったのは、「FORTRAN」という言語で1960年代から使われて現在でも生き残っている 科学技術計算のプログラミングを得意とする言語である。
これから派生した「BASIC」言語は、随時翻訳型(インタープリタ)のプログラミング言語だ。 BASICはシステム全体が小規模で記憶容量が小さなパソコンでも実行可能であったこと、 FORTRANを修得している人には容易に理解できたことなどのため、初期のパソコンでは常用言語といえる地位を築いた。 ビルゲーツがこの言語システムをパソコン用に販売したことで、今のマイクロソフト社があることも有名だ。 また、大学センター試験(数学)にも登場する入門言語であり、高校生でも修得している人も多い。

 BASIC言語のプログラム例を示してみよう。

   100 PRINT "HELLO BASIC!"

 上の1行のプログラムはパソコン画面に「HELLO BASIC!」と表示する最も簡単なプログラムだ。

 もう少し複雑なもの(センター試験レベル)のプログラム(進研模試 センター型)を示してみよう。

   100 INPUT "X=";X
   110 INPUT "N=";N
   120 Y=0
   130 IF N-INT(N/X)*X<>0 THEN GOTO 150
   140 Y=Y+X
   150 X=X+1
   160 IF N>X THEN GOTO 130
   170 PRINT Y
   180 END

上のプログラムを詳しく説明してみよう。

  最初に、変数 X、N に値を入力、変数Yにゼロに初期化(行番号100、110,120)する。
  次に、NがXで割り切れないかの判定する(行番号130)。割り切れなければ行番号150に移る。
  割り切れれば行番号140の指示、変数YにXを加える。(約数を足す!)
  行番号150でXに1を加える(Xを1増やす)。
  変数XがNを超えないかどうかを判定し、超えなければ行番号130に戻る。
  超えていればYの値を表示すし(行番号170)、プログラム実行を終える(行番号180)。

以上のような処理をするプログラムなのだが、行番号130が理解しづらい部分だろう。 プログラミングでよく使われるテクニックで、INT(N/X) のINTは割り算して切り捨てる処理の関数(問題中に説明有) なのだが、N-INT(N/X)*X が割り算の余りになるのだということを理解できるか、どうかがこの問題のポイントだ。 具体的な数値を入れて割り算してみるとよい。例えば、Nが58、Xが5のとき、

  N/X は58/5 だから、N/X は11.6 になる。したがって、INT(11.6)は切捨てだから 11 である。
  これをX(=5)倍するのだから、11*5=55 である。
  N-INT(N/X)*X は 58-55=3 すなわち 58 を 5 で割った余り 3 になる。

 実用的なプログラムではないが、センター試験ではこの程度のプログラムが出題されているが、皆さんの感想はどうだろうか? BASIC言語のプログラムとしては初歩の初歩というレベルになります。 次に示すプログラムは何をしているのでしょうか。考えてみてください。

プログラム例1
   100 INPUT "X=";X
   130 Y=1
   140 IF X>1 THEN Y=Y*X
   150 X=X-1
   160 GOTO140
   170 PRINT Y
   180 END

 BASIC言語ではない他のプログラミング言語で表すと次のようになります。

 pascal での例を下に示します。 pascalでは行番号が不要で、goto文を使わないのがpascal流の作法です。 なお、BASIC言語と違ってプログラムで利用する変数は必ず使用前に宣言が必要です。 邪魔くさそうに見えるのですが、この宣言により正しいプログラムを作成するときに役立つのです。
   var x,y: integer;
   readln(x);
   y=1;
   while(x>1) do begin y=y*x; dec(x); end;
   writeln(y);
   exit;

物理の小道 管理人(志)


このページは2003/12/25に作成されました。