II. PASCAL 文法概略

  1. PASCAL プログラムの基本形
       program  名前(input,output);   <-- ここにセミコロンがある。
       宣言部                         <-- 変数などの宣言をする。
       begin
         文 ; 文, ...; 文             <-- 本体。文を ; で区切って
       end.                               並べる。
                            <-- 最後のピリオドが
                                プログラムの終りを示す。
    

    [上の説明 ]

         
    1. プログラムの「名前」はなんでもよい。
    2. 宣言部で、必要な変数、手続き文などを定義して用意する。
    3. 本体は文と文をセミコロンで区切ったものの列である。
    4. 最後のピリオドがプログラムの終わりを示す。
    5. { } ではさんでコメント文を書くことができ、これは プログラム中のどこにおいても良い。
      コメント文はプログラムの働き自体には何の影響もしない。注釈や読みやすさのために挿入する。

  2. Pascal はフリーフォーマットである

    Pascal プログラムの書式では、空白はいくつあってもひとつ の空白と同じである。行というまとまりに意味はない。頭下げ (インデント)をしたりして形を整えるのは、プログラムの働き自体 には関係ない。プログラムを読みやすくするためには、形を 整えておくのが望ましい。文字列の途中で改行したり、空白を入れ たりしてはいけない。

    例 1. 以下は Hello World! という文字列を打ち出して終る プログラムの例。

    program first(output);
    begin
    writeln('Hello World!')
    end.

    上の例を以下のようにしても、プログラムとしては 同じ働きをする。
               program 
               first(output);  begin
               writeln ( 'Hello World!'
                )   end. 

    [演習] 上のプログラム例1を入力してファイルを作り、それを実行させて みる。

  3. 文の定義

    Pascalの文には、単純文と複文の2種類がある。

    単純文
    これから説明する、入出力文や代入文、if 文などのひとつひとつが、 単純文である。

    複文
    複数の文を次の形に begin  end でくくったものが

      文 = begin 文; 文;...; 文 end (複文) 複文である。
    「複文自体がひとつの文である」ので begin end のかこみの 中の文が複文であってもよく、さらにその中の文が複文であってもよ いというように、何重にも入れ子構造にできる。

    例 入れ子構造をした複文の形の例。

             begin  begin 文; 文 end; 
                   文; 文;
                   begin  文; 
                          begin 文 ; 文 end ;
                          文
                   end;
             end   

  4. 入出力文

    ・出力文 - write, writeln

    write, writeln 文は、変数、式などの値、文字列などを(通常) ディスプレイに出力する。

    1. ( ) 内に出力したいものをカンマ , で区切って並べる。
    2. 変数はそのまま書けばよい。
    3. 式、関数を ( ) 内に書いてもよく、そのときは値が計算されて 出力される。
    4. 文字列は ' ' でくくれば、そのまま出力する。
    write( ) は改行なし、writeln( ) は出力後改行するという 点だけが違っている。単独の writeln は、何も出力しないで 改行する。

    writeln(a, b, (a+b-c)div 3 )
    writeln('Hello ','World !', '余り =', i mod j)

    ・入力文 - read, readln

    read, readln 文は、キーボードからの入力を読み込んで、変数に 代入する。値を読み込みたい変数を、次のように順にカンマで 区切って並べればよい。

    read(変数, 変数,..., 変数) 又は readln(変数,..., 変数)

    * read文と readln 文は読み込み後に改行のあるなしの 区別がもとはあったが、今は同じとして扱われる。  

    たとえば、readln(i,j,k) に実行が移ると、kterm でプロンプトが止まり 入力待ちになる。
    そこにキーボードから3つ数を入力する。 「 入力するとき、数の間に空白を入れて区切る。カンマは打たない。」
    するとキーボードから入力した3つの数が、順に i, j, k に代入される。
    最後にエンターキーを打つ。

  5. 変数の宣言

    プログラムの実行のためには、様々な変数を利用する。プログラム中で 必要な変数は、
    プログラムの宣言部であらかじめ宣言しておかなければならな い

    変数とは、何かを記憶しておくための箱のようなもの、もしくはそれに つけられた名前のことである。
    箱の中にどのような種類のものを収めることが できるかは、箱ごとに決まっている。
    これを変数の型(タイプ)という。たとえば、

    var x : integer ;

    とすると整数型の変数がひとつ x という名前で宣言されて確保される。これ によりプログラム中で整数変数 x を使えるようになる。

    名前の付け方 --- Pascal では 任意の長さの英数字列を変数名として 使える。ただし、begin, end, readln, if など、すでに特定の役割を持って いる予約語は、使えない。(また、Pascal では大文字小文字は区別されない ことに注意しておく。)

    変数の型 --- Pascal には様々な変数の型が用意されており、かつそれらを組み合 わせることにより新しく型を定義することもできる。ここで、基本的な型を 挙げると、

    integer 整数型 real 実数型 char 文字型 Boolean 論理型

    などがある。

    宣言の一般的な書式は、次の通りである。

    var 変数名,..., 変数名 : 型名 ;

    複数の型の変数を一度に宣言するには、例えば

    var a,b : integer ; x, y, z : real; ans : char ;

    のようにひとつの var のあとに並べれば良い。また、必要なだけ複数の var 宣言を宣言部に書くことができる。たとえば、次は宣言部に書かれた 変数宣言の一例である。

    var a, b, c : integer ; x, y : real ;
    var Flag : Boolean ; Z01,Z02, Z03 : integer ;

    *これにより a, b, c という整数型の変数、x, y という実数型の 変数、Flag という名前の論理型変数、Z01,Z02,Z03 という整数型 の変数が宣言される。

  6. 代入文

    変数に新たにあたいを入れる操作を代入という。代入により変数のもとの あたいは消えて、新しいあたいに置き換えられる。
    代入文は次の形をしている。

    変数 := 定値 または 変数 または 式

    代入文によって := の右辺の値もしくは計算結果が、左辺の変数に代入さ れる。( ここで等号 = ではなく := (コロンが頭につく。)が使われているのは、 これが等式ではなく、代入であることを明らかにするためである。)

    例 代入文の例。
    x := 3.14 ----- x という変数の値を 3.14 にする。
    a := b --------変数 a に変数 b の値を代入する。
    m := (a+b+c) div 3 -----右辺の計算結果を左辺 m に代入する。

    例 次の代入文は、現在の k の値に 2 を足した値を新しい k の 値とする、という作業をする。

    k := k + 2

    この例を見れば、代入文と恒等式がまったく別物であることがわかる。

  7. 整数と実数

    整数と実数は計算機内部でのデータの表現の仕方が まったく違っており、計算機にとってはまったくの 別なものである。(だから昔の FORTRAでは混ぜて 計算することができなかった。) 整数は固定長のビッ ト表示なのに対して、実数は浮動小数点表示である。
    Pascal では混ぜて計算すると実数型になる。

  8. 出力表示の桁数の指定

    実数は、桁数の指定をしないと指数表示で出力される。 例をあげると、

    3.1415920000e+5

    のような形になる。これは 3.141592×10の5乗 を表す。
    * 入力のときも、絶対値が大きな値または小さな値のときは、 指数表字を用いると良い。

    一般に実数の出力として指数表示のままでは読みづらいときには 桁数を指定すると見やすくなる。変数 x を、桁数を指定したい ときは、write 文の中で次のように書く。

    write( x: m: n)<--- m は全体の出力幅、n は小数点以下の桁数。

    例 x = 123.456789 のときの出力。
    write(x:10:0) ------> 123
    write(x:10:1) -----> 123.4
    write(x:10:2) ----> 123.45
    write(x:10:3) ---> 123.456
    write(x:10:4) --> 123.4567

  9. 四則演算

    1. 数の加算、減算、乗算の表記は以下の通り:

      a + b aとbの足し算
      a - b 引き算
      a * b 掛け算

      ここで整数と実数を混ぜて計算してもよいが、そのときの 計算結果は実数型になる。

    2. わり算については結果が整数型と実数型になるものとがある。

       / 普通の意味の割算で、結果は常に実数型になる
      div 整数と整数の割算で、余りを除いた整数部が 演算結果になる。結果は整数型である。

      18 /3 = 6.0 (実数)
      20/3 = 6.666666...
      17 div 5 = 3
      20 div 3 = 6

    3. このほかに、関連して次の演算が用意されている。

      a mod b ---- 整数aをbで割ったわり算の余り
      trunc(x) ---- 実数 x の小数部を切り捨てた整数
      round(x) ---- 実数 x の小数部を四捨五入した整数


      17 mod 5 = 2,
      18 mod 5 = 3,
      trunc(3.4) = 3,
      trunc(3.6) = 3,
      round(3.4) = 3,
      round(3.6) = 4

    例 5. 2つの整数を入力して、その四則演算などの結果を 出力するプログラム例。

    (例 1)
    program sisoku(input,output);
    var i,j:integer;
    wa,sa,seki,syou,amari:integer;
    begin

    write(' i, j ? '); readln(i, j);
    wa:=i + j; sa := i - j; seki:= i*j ;
    syou:= i div j ; amari := i mod j ;
    writeln('和=', wa,'差=',sa,'積=',seki);
    writeln('商=',syou,'余り=',amari)
    end.

    (例 2)
    program sisoku(input,output);
    var i, j: integer ;
    begin

    write(' i, j ? '); readln(i, j);
    writeln('和=',i+j,'差=',i-j,'積=',i*j);
    writeln('商=',i div j,'余り=', i mod j)
    end.

    [演習問題]

    [1]* 価格 x (整数型)を入力して、消費税(5%) こみの 金額(整数型)を示す。
    [2]* 与えられた金額を100円、10円、1円玉だけで 支払うとして、それに必要なそれぞれの
    硬貨の枚数を計算する。
    [3] BMI = 体重(kg)/((身長m)の2乗) で、 BMI>=25 であれば、肥満である。体重、身長を
    入力して、肥満であるかどうか示せ。 さらに、BMI< 18.5 であれば、やせすぎである。
    肥満であるか、やせすぎであるか、正常範囲内であるかを計算して示せ。