最初のページに戻ります。

総合の目次があるページに戻ります。

よく使うマニュアルです

Wiki

updated on 2004.06.23

17.6.1 特別講義(1) プログラムってなに?

[ Previous ] [ HOME ] [ Upper ] [ Next ]


ここでは、これからプログラムを作成するかたへ、AS/400やRPGとすこし離れて、プログラムとは何か、を説明したいと思います。(できるかなぁ)

きっかけは、RPGのE仕様書です。HFELICOと順番に説明しようと思っていたのですが、宣言関連は、その後のi仕様書、C仕様書、O仕様書と密接に関連するため、妙に説明しづらく、読み返してみると、オブジェクトの次にいきなり、RPGという構成は厳しすぎるぅ、ということに遅蒔きながら気づきました。

というわけで、なにか考えねば、で、このページです。さて、自分は最初になにを勉強したのかな?えーと...

コンピュータってなに?

簡単に言えば、CPUとメモリとディスクでできてものです。プリンターや画面などは、「周辺機器」であって、無くてもコンピュータは動きます。一般的には、コンピュータ+プログラムで、初めて役立つ道具として、コンピュータは動き始めます。

プログラムってなに?

これほど単純で、答えづらい質問って無いですね。いろいろ考えた結果、答えは、

コンピュータを、働かせる、命令の集まったデータのこと。

です。

タクシーに例えれば、「車」がコンピュータで、それを操る「タクシー運転手」がプログラムで、その運転手に行き先を告げる「乗客」が、オペレータです。どれがかけても、タクシーは動きません。また、道順や、ちょっとコンビニに寄ってからとか、もし渋滞していたときの代替ルートなど、様々な場合があります。

さらに、タクシーに乗るのは、「目的地」があることを示唆します。どこにも行きたくなければ、わざわざタクシーには、乗りませんよね。

もう一つ、このプログラムも、コンピュータの基本的な動作をさせるためにメーカーが作る、システムプログラム基本プログラムとかとも言う)と、その土俵の上で、ユーザー自身が作るユーザープログラムがあります。システムプログラムは、メーカーが準備して、バグもメーカーが取り除きます。よって、そのコンピュータのユーザーは、そのシステムプログラムを修正することはありません。(こういうデバッグされたシステムプログラムをPTFといって、それを間違えている(バグのある)プログラムと置き換える作業は、ユーザーがやります。

(※ 「ユーザー」という言葉は、相対的概念を指す言葉です。社内のシステム部門から見れば、彼らがサポートする対象は、ユーザーとなります。でも、メーカー(たとえば、IBM)から見れば、そのシステム部門の人も、ユーザーです。どこを中心と見るかで、ユーザーの範囲は変わります。)

そして、二番目に挙げた、ユーザー自身が作るユーザープログラムこそ、あなた方に学んでほしいプログラムです。このプログラムを作成するために、「プログラム言語」が準備されています。(そのメーカから買います)。種類はたくさんあります。RPG (RPG400 RPG ILE)、COBOL、PL/I、BASIC、C...これは、コンピュータを擬人化した表現ですね。言語を使って、コンピュータに話しかけるイメージですから。(話しかけるだけでなく、場合によっては、祈ったり、脅したり、する事もあります。)

これらは、共通の目的=コンピュータを働かせて、成果物を得る、を持っています。※ 成果物とは、コンピュータの上でプログラムを流した結果、得られる形のある成果です。たとえば、印刷された帳票がいい例です。(リンゴ(青果物)ではありませんよ。) その言語を利用して、コンピュータを使役するためには、その言語のどれかに、精通しなくてはなりません。

コンピュータの使い道

山ほどあります。事務計算、CG(コンピュータグラフィックス)、音楽関連、交通管制、医療機器制御、はたまた、人工衛星の姿勢制御等々。まあ、最近、マイコン(マイクロコンピュータ)という言葉があまり使われませんが、炊飯器にもプログラムが仕掛けられているようです。ここでみなさんが、このサイトで、勉強してほしいのは、「事務計算」です。

さて、事務計算には、それに適したコンピュータと、それに適したプログラムがあります。COBOLやRPGは、事務計算に適しています。ここから、プログラムの概論を述べます。

プログラムの始まりと終わり

プログラムは、必ず、始まりがあり、終わりがあります。必ずあります。例外はありません。もちろん、電気を切って、コンピュータの電源を落として「終わる」のではなく、プログラム自体が、作法に則り「始め」て、作法に則り「終わる」のです。これは、一直線の矢印のように、始まりから終わりまで、一本の流れ(フロー)で、プログラムは動くことを意味します。但し、始めと終わりの間の部分は、紆余曲折します。こーゆ場合は、このように動き、このよーな場合、ああゆう風に動く、という感じです。この動きは、「条件分岐」といって、プログラムの要素の一つでもあります。

試しに、加算電卓を作ろう

例の、BASICで電卓を作りましょう。でも、動かせませんけど。(覚えてるかなー私。この前、雑誌の広告見てたら、まだ、F-BASIC健在で、NTでも動くらしい。ちょっと、怖い。)これが、電卓です。足し算だけです。

10   data=0

20  INPUT data

30  IF data = 0 then GOTO 70

40  LET ans = ans + data

50  PRINT ans;

60  GOTO 10

70  END

解説

右端の数字は、行番号といって、小さい方から大きい方へ進みます。大文字は「命令語」です。小文字は「変数」です。「変数」は後で説明します。大文字で出ているのは、BASICが持つ、「命令語」です。人間の言葉で言うなら、動詞です。すべて、命令ですので、主語はありません。命令されるのは、コンピュータです。上のプログラムも、コンピュータに命令を出して、作業をさせているのです。(プログラムとは「コンピュータを、働かせる命令の集まり」と言いましたよね。)上のプログラムは、小さいけど、立派なプログラムです。

なお、覚える必要はありません。(私もやや自信がないので)。

  • 行番号 10

    変数dataを0にしています。

  • 行番号 20

    命令語、INPUTは、プログラムがデータを受け取る入り口を画面に出します。ここでユーザーが何か入力すれば、プログラムの中にその数字が入ってきます。その入力値は「変数」dataに入ります。

  • 行番号 30

    分岐条件で、日本語で読むと、もし、入力値が0ならば、行番号70へ分岐する、となります。

  • 行番号 40

    これは、プログラム特有の式です。(数学の等式とは違います)日本語でいうと、変数ansに、変数ans と変数dataを加算して、代入せよ、です。このLETは使役のLETと同じですが、省略できます。省略する方が普通です。行番号10も、本来はLET data = 0と表記するのが正しいのです。

  • 行番号 50

    PRINTは、指定した「変数」を画面に表示します。

  • 行番号 60

    GOTOは、分岐(条件分岐ではなく、単純な分岐)で、行番号を指定すると、処理がそこへ戻ります。

  • 行番号 70

    終了を意味する命令語です。これも、省略できます。

「変数」について

さて、ここで、プログラムの例を出したのは、変数の説明をしたかったからです。上で、data、ansの二つが変数です。これを必ず理解してください。

変数」とは、データの蓄積場所です。どんなプログラムも、この変数は必ずあります。基本的には、どんな言葉でもいいのですが、たいてい、英語です。ローマ字表記でもいいです。早い話、アルファベットで、文字を作るのです。(※確か、BASICでは、命令語と同じでは、変数と見なしてはくれません。RPGでは、変数の宣言をするし、命令語を記入する位置と、変数を記入する位置が明確に分かれているので、問題ありません。このあたりが、プログラム言語によって異なる部分です。)

上のプログラムに、データを入力した場合の、変数dataとansの内容を見てみましょう。

命令語

data ans
10   data = 0 0 0
20  INPUT data 50 0
30  IF data = 0 then GOTO 70 50 0
40  LET ans = ans + data 50 50
50  PRINT ans; 50 50
60  GOTO 10 50 50
10   data = 0 0 50
20  INPUT data 80 50
30  IF data = 0 then GOTO 70 80 50
40  LET ans = ans + data 80 130
50  PRINT ans; 80 130
60  GOTO 10 80 130
10   data = 0 0 130
20  INPUT data 30 130
30  IF data = 0 then GOTO 70 30 130
40  LET ans = ans + data 30 160
50  PRINT ans; 30 160
60  GOTO 10 30 160
10   data = 0 0 160
20  INPUT data 40 160
30  IF data = 0 then GOTO 70 40 200
40  LET ans = ans + data 40 200
50  PRINT ans; 40 200
60  GOTO 10 40 200
10   data = 0 0 200
20  INPUT data 0 200
30  IF data = 0 then GOTO 70 0 200
70  END 0 200

2つの変数、dataとansに注目してください。プログラム上では、ただの単語だったものの中に、数字が入って、演算(加算)されていますね。このように、プログラムでは、変数に対して演算を行えます。さらに、その変数の内容を見て、動きが変わってますね。行番号30で、dataが0の場合、終了判定しています。このように、条件判定の対象ともなります。

ここでは、BASICを例に取りましたが、すべての言語で、このように変数がプログラムの大事な部分を占めます。というより、プログラムはこの変数を、加工して、我々に表示しているのですね。それから、固定情報(リテラル)を命令語の対象にもできます。たとえば、

(LET) ans = data + 100

とすれば、なにを入力しても、100を加算したものが表示されます。

変数には、数字や文字を含めることも可能で、文字の足し算(?)もできます。

test = test1 + test2 で、test1に「私は」入っていて、test2に「日本人です」が入っていると、testは「私は日本人です」になります。

プログラムにとっては、変数はデータの入った箱のようなものです。プログラムは、コンピュータに対して、どのようにその箱の中身を扱うか命令しているのです。

RPGの変数

RPGでは、変数を「フィールド」という言い方で呼びます。覚えてください。ファイルのフィールドとか、画面フィールドとか、計算用のワークフィールド、などと言います。いずれも、数字や文字などデータを格納する変数のことです。また、このほかに変わりどころとして、配列があります。これは、格納するデータに、扱いやすい様に、番号をつけてしまうものです。これも、データを格納する変数の一種です。

ここで理解してほしかったこと

  • コンピュータを、動かすのは、様々なプログラムであること。
  • プログラムは、コンピュータに対する命令語の集まりであること。
  • プログラムの中では、データ(数字や文字)を、格納する「変数」があり、RPGでは、「フィールド」と呼んだり、特殊な形態として「配列」もあるということ。
  • プログラムは、そのフィールドの中のデータを加工して、成果物を出すということ。

さて、特別講義はこれで終わりです。プログラムを身近に感じてきましたか?

 


[ Previous ] [ HOME ] [ Upper ] [ Next ]

You are at K's tips-n-kicks of AS/400

 

SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送