【Pascalプログラムの実行】 この章では次のプログラム(ファイル名daikei.p)を実行することを目標としま す。 program daikei(input,output); var a,b,h,s:real; begin write('a b = '); read(a,b); write('h = '); read(h); writeln('s = ', (a+b)*h/2.0) end. このプログラムは、キーボードから入力された実数値aとbとhに対して、 aを上辺の長さ、bを底辺の長さ、hを高さとする台形の面積 a + b s = -----×h 2 を計算し、その値を出力するというプログラムです。プログラムの内容の説明 は後回しにして、このプログラムを実行します。 Pascalプログラムの実行は次の手続きによります。 (1) Pascalプログラムの作成 Muleなどのエディターを用いて、Pascalのプログラムのファイルを作成します。 ファイル名は、daikei.p のように、名前の最後がピリオド・ピーで終るよう なものにすることになってます。 % mule daikei.p ※ファイルの保存は、C-xC-s で、Muleの終了は C-xC-c です。 (2) Pascalプログラムから機械語プログラムへの翻訳(コンパイル) Pascalのプログラムを実際に計算機上で実行するためには、機械語プログラム にしなければなりません。この翻訳の作業を担当するのが、コンパイラと呼ば れるソフトウェアで、pcという名前のコマンドです。コマンドの引数として Pascalプログラムのファイル名を与えます。 % pc daikei.p 但し、次のように、ファイル名の指定は、ピリオド・ピーより前の部分だけで も構いません。 % pc daikei このとき、Pascalプログラムに何らかの文法的な誤りがあった場合は、英文で メッセージが出力されます。文法的な誤りがなかった場合は、なにもメッセー ジは出力されずに、実行可能な機械プログラムのファイル作成されます。作成 されるファイルの名前は、ピリオドピーより前の部分になります。Pascalプロ グラムの名前が、daikei.pであるときには、daikeiという名前の機械語プログ ラムが生成されます。 (3) プログラムの実行 このプログラムを実行するためには、コマンド入力状態から、機械語プログラ ムのファイル名を打込めば、実行されます。 % daikei[リターンキー] このプログラムの実行の様子は次のようになります。 % daikei a b = 5.0 9.0 h = 4.0 s = 2.8000000e+01 % 実行した後、daikeiなどの機械語プログラムは大きいので、できるだけ消去し ましょう。 % rm daikei 【Pascalプログラムの文法】 「言語」といえば、日本語や英語、ドイツ語、フランス語などを思い出します。 これらは、文法と意味という二つの側面から成りたちます。文法は、どのよう に文字をならべるのかいう規則であり、意味はそれがなんであるのかというこ とです。プログラミング言語Pascalも同様に「言語」であり、文法と意味の二 つの側面を持ちます。日本語などの言語は「自然言語」であり、文法は歴史の なかで自然にできあがっていったものです。それに対してPascalなどのプログ ラミング言語は「人工言語」であり、文法は少数の人間が定めたもので、その 規則は厳格に決ってます。実際に、トイレットペーパーの幅やネジの太さのよ うにPascalは、ISO(国際工業規格)やJIS(日本工業規格)により定義されていま す。そして、Pascalのプログラムを解読するのは、人間以外にも、コンパイラ というソフトウェアによってもなされます。文法を守って書いていなくても人 間はなんとなく意味を想像できますが、コンパイラはそんなことはできません。 プログラムを正しく動作させるところまでこぎつくには、とにかく正しい文法 でプログラムを書かなければなりません。 この演習では、Pascalの初等的な使いかたの習得はもちろんこと、正しく文法 を理解するということを学びます。これは、他のプログラミング言語を習得す るときに必ずや役にたつことでしょう。 前に紹介したプログラムdaikei.pを説明しながら、Pascalプログラムの文法を 見ていきましょう。 Pascalのプログラム全体は基本的には次のような構造になってます。 プログラム頭部 変数宣言部 実行文部. 【プログラム頭部】 プログラム頭部は次のように書きます。 program プログラム名(input,output); (例) program daikei(input,output); program houteishiki(input,output); プログラム名は、プログラムの名前です。どんな名前をつけてもプログラムの 動作には影響しません。わかりやすい名前をつけましょう。名前で許されるの は、一文字目が英字で、それ以降が英文字もしくは数字であるような文字の並 びです。 (例) x y z x1 x2 z3 hankei nagasa kakudo 【変数宣言部】 変数とは、整数、実数、文字列などのデータを記憶するための「箱」の様なも ので、名前がつけられています。 Pascalでは、どのような変数を使用するのか、あらかじめいっておかなければ なりません。それをするのが変数宣言部です。変数宣言部では、使用する変数 の名前と型(データの種類)を記述します。 型(データの種類)には、整数型(型名 integer)、実数型(型名 real)を初めと して、いろいろあります。 書き方は次のとおりです。 var 変数名,変数名, ... , 変数名 : 型名 ; 変数名,変数名, ... , 変数名 : 型名 ; ... 変数名,変数名, ... , 変数名 : 型名 ; これは、コロンの左側の変数がコロンの右側の型であることを意味しています。 変数名は、プログラム名と同様に、最初の一文字が英字、二文字目以降は英字 か数字でなければなりません。 プログラム名、変数名、型名は、ある一定の規則の元に重複することが許され ますが、ここで規則を説明するのは大変ですから、説明しません。とりあえず、 重複しないようにプログラムを書いてください。 プログラムdaikeiのように、名前がおのおのa,b,h,sであるような実数型の変 数を4つ宣言するときには、次のように書くわけです。 var a,b,h,s : real; これは var a : real; b : real; h : real; s : real; と書いてもかまわないのですが、ちょっと長ったらしいですね。 2つの整数型の変数i,jを宣言する場合、次のように書くことになります。 var i,j : integer; (問題) 4つの実数型変数a,b,h,sと2つの整数型変数i,jを宣言する変数宣言部 はどのように書けばよいのでしょうか? 【実行文部】 実行文部は、 begin 文 ; 文 ; ... ; 文 end という形、すなわち、文というものが、セミコロンで区切られて1個以上並ん でいるという形です。 文というものは、「整数を出力せよ」とか「変数に…という値を記憶せよ」と いうような、計算機に対する命令です。 上の台形のプログラムの実行文部は次の5つの文から成り立ってます。 write('a b = ') 意味:「a b =」を画面に出力せよ。 read(a,b) 意味:利用者にキーボードから変数a,bに値を入力してもらいなさい。 write('h = ') 意味:「h =」を画面に出力せよ。 read(h) 意味:利用者にキーボードから変数hに値を入力してもらいなさい。 writeln('s = ', (a+b)*h/2.0) 意味:「s =」を画面に出力したのちに、式(a+b)*h/2.0を計算して、 その計算結果を画面に出力する。そして、改行する。 次にこれらを一般的に解説します。 【write文】 (※厳密には、write手続きの手続き呼び出し文といいます) write(式) または write(式, 式, ... , 式) と書きます。(式を何個か書いて間にコンマを書く) これは、小括弧のなかの式を左から順に計算して、その計算結果を画面に出力 せよ!ということを意味する文です。 'h = 'も「文字列」という式の一種です。 write('h =')は「h =」という3個の文字からなる文字列を画面に出力します。 【writeln文】 writeln(式) または writeln(式, 式, ... , 式) と書きます。その意味もwrite文とほとんど同じで、違いは、最後に改行を表 示するということです。 【read文】 read(変数) または read(変数,変数, ... , 変数) と書きます。これは、「小括弧の中の変数にキーボードから値を(端末の前の 人間から)入力してもらえ!」という意味です。