計算機実験 II(塩田・森教官) No.3

  1995年10月20日の課題 : 手続きと関数、引数、局所変数の扱い、 再帰呼出し

[1] procedure(手続き)を覚える。

  1. FORTRAN のサブルーチンにあたるものを PASCAL では procedure と言う。 一般形は

      procedure 手続き名(仮引数の宣言);

       (この手続き宣言部でのみ有効な定義・宣言部)

      begin

       (実行文部)

      end;

  2. 仮引数には値引数( 例えば sample3b の a,b )と 変数引数( 例えば sample3a の a )があり、 変数引数はその手続き実行文部で計算した値を、 手続きを引用したブロックへ持って帰る。 変数引数は var を付けて宣言する。

[2] function(関数)を覚える。

  1. 値を帰す関数を function と言い、 一般形は procedure とほぼ同じで、 頭部が

      function 関数名(仮引数の宣言): 関数の作る値の型;

  2. 関数の値は booleancharintegerreal,列挙型、 部分範囲型(テキスト p.51)のいずれか。

[3] その他の注意

  1. procedurefunction 共に再帰呼出しができる ( sample3asample3b )。

  2. 大域的変数には長い名前を、 局所的変数には短い名前を付けるのが良い。 

[4] サンプル

program sample3a;   { 'た'ぬきプログラム }

type moji=varying[255] of char;
var bun:moji;

procedure tanuki(var a:moji);
var
  i,j:integer;
  b,c:moji;
begin
  i:=index(a,'た');
  j:=length(a);
  if i<>0 then
    begin
      b:=substr(a,1,i-1);
      c:=substr(a,i+2,j-i-1);
      a:=b+c;
    end;
  if index(a,'た')<>0 then tanuki(a);
end;

begin
  bun:='たんたんたぬきのかたたたき';
  writeln(bun);
  writeln('   ↓');   { ↓ は日本語コード入力で 02 & 変換 }
  tanuki(bun);
  writeln(bun);
end. 
program sample3b;   { 最大公約数 }

var tama,koro:integer;

function gcd(a,b:integer):integer;
var
  c:integer;
begin
  if a<b then begin c:=a; a:=b; b:=c end;
  if b=0
    then gcd:=a
    else gcd:=gcd(b,a mod b);
end;

begin
  writeln('最大公約数を計算します。');
  writeln('自然数をふたつ入力してください。');
  readln(tama);
  readln(koro);
  write(tama:1,' と ',koro:1,' の最大公約数は ');
  writeln(gcd(tama,koro):1);
end.