例題10 装置指定子、書式指定子、内部ファイル

 例題10では入出力(read,write)文の装置や書式を指定する方法と内部ファイルについて取り上げます。
 例題10 1) と 2) は、次に示す成績データファイル(ファイル名tokuten.d)を読んで書き出すだけのプログラムですが、例題10 1-a)、1-b)では装置指定子と書式指定子の使用例、例題10 2-a)、2-b)では内部ファイルの使用例を示しています。また、例題10 3)は、1) と 2) を応用して、パスカルの3角形(二項係数)を出力するプログラムです。


例題10 1) と 2)

 次に示す成績データファイル(ファイル名tokuten.d)の初めの10人について、学生番号、英字名、英語の得点、数学の得点を読んで、出力例のように出力せよ。


データファイルの内容(目盛りは除く)
 学生番号、氏名、英字名、5科目の得点(英語、数学、国語、理科、社会)
      書式仕様 (i4,1x,a16,1x,a20,3x,5i4)


----+----1----+----2----+----3----+----4----+----5----+----6----+
5001 横山  徹         T.Yokoyama               89  78  63  89  82
5002 関根  茂         S.Sekine                 56  77  38  46  68
         :
         :

例題10 1) と2) の出力例(目盛りは除く)


----+----1----+----2----+----3----+----4----+-
    1     5001 T.Yokoyama               89  78
    2     5002 S.Sekine                 56  77
    3     5003 S.Nakamura               65  66
    4     5004 K.Horie                   0  88
    5     5005 A.Nomura                 65  69
    6     5006 E.Uchiyama               56  58
    7     5007 M.Komori                 75  73
    8     5008 M.Sato                   59  54
    9     5009 Y.Hayashi                53  56
   10     5010 E.Matsuyama              84  74


入出力文と補助入出力文

 入出力文(read文、write文)と補助入出力文のopen文は一般的に次のように書きます。

      read( 制御情報並び ) 入力並び
      write( 制御情報並び ) 出力並び

      open(open情報並び)
 制御情報並びの代表的なもの(よく使用されるもの)には、[unit=]u, [fmt=]f, err=s, end=s があります。また、open情報並びの代表的なものは、[unit=]u, file=fin です。
 [unit=]u は装置指定子、u は外部装置識別子または内部ファイル識別子です。
 [fmt=]f は書式指定子、f は書式識別子です。
 err=s は誤り指定子で入出力の実行中にエラーがあった場合には指定された文番号 s の実行文に制御を移します。
 end=s はファイル終了指定子で、ファイルの終了を検出したときに指定された文番号 s の実行文に制御を移します。
 file=fin は装置と接続するファイル名を指定します。
 各情報並びには、指定子をカンマ , で区切って並べます。
 入出力文、補助入出力文には装置指定子 [unit=]u を必ず指定します。各指定子の指定の順番は任意ですが、[unit=]u を指定子の並びの先頭に指定した場合にはunit=を省略できます。また、書式指定子 [fmt=]f を unit= を省略した装置指定子の次に指定する場合は fmt= を省略できます。


例題10 1-a)

 では、例題10 1-a) のプログラムを見てみましょう。

プログラム
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
c Example 10-1a read文 (外部装置識別子,書式識別子)
c  機械工学科 1年  xxxxxxx  S.M
c         Filename = rei10-1a.f
c ****            (data fine  tokuten.d)     ****   
      character name*20
      integer num,eng,math
      k=13
      open(k,file='tokuten.d',status='old')
      i=0
 1001 continue
      read(k,102) num,name,eng,math
      i=i+1
      write(*,202) i,num,name,eng,math
      if(i.lt.10) go to 1001
      close(k)
      stop
  102 format(i4,18x,a20,3x,2i4)
  202 format(i5,i9,1x,a20,3x,2i4)
      end


 例題10 1-a)のプログラム例について説明します。

 5行目と6行目は型宣言文です。

5行目       character name*20
6行目       integer num,eng,math

5行目のcharacter文で、変数 name を長さが20文字の文字変数と宣言しています。6行目のinteger文で、変数 num,eng,math を整数型変数と宣言しています。

 7行目と8行目でファイルを開きます。

7行目       k=13
8行目       open(k,file='tokuten.d',status='old')

7行目で k に整数 13 を代入して、8行目の open文で、外部装置識別子に k を指定しています。このように外部装置識別子には整数式または * を指定します。
 8行目の open文は次のようにも書けます。unit= を省略してない例と指定子の順番を変えた例です。

      open(unit=k,file='tokuten.d',status='old')

      open(file='tokuten.d',status='old',unit=k)

 9行目から15行目は10人分のデータを読んで書き出す部分です。

  9行目       i=0
10行目  1001 continue
11行目       read(k,102) num,name,eng,math
12行目       i=i+1
13行目       write(*,202) i,num,name,eng,math
14行目       if(i.lt.10) go to 1001
15行目       close(k)
   :
17行目   102 format(i4,18x,a20,3x,2i4)
18行目   202 format(i5,i9,1x,a20,3x,2i4)

9行目の i=0 で、人数を数える変数 i に 0 を代入します。
11行目の read文で、外部装置識別子 k のファイルから変数 num, name, eng, math に17行目の文番号 102 のformat文の書式仕様(i4,18x,a20,3x,2i4)で学生番号、英字名、英語の得点、数学の得点を読み込みます。
12行目では変数 i に 1 を加え、人数を数えます。
13行目の write文では、外部装置識別子 * のファイル(ここではディスプレイ)に変数 i, num, name, eng, math の値を18行目の文番号 202 のformat文の書式仕様(i5,i9,1x,a20,3x,2i4)で書き出します。
14行目の if文でデータを読み込んだ人数が10未満の時には、10行目の文番号 1001 の continue文へ制御を戻します。データを読み込んだ人数が10の時には次の実行文、15行目の close文を実行します。

 11行目の read文は次のようにも書けます。unit= と fmt= を省略してない例と指定子の順番を変えた例です。


      read(unit=k,fmt=102) num,name,eng,math

      read(fmt=102,unit=k) num,name,eng,math


例題10 1-b)

 例題10 1-b) のプログラムの例を示します。

プログラム
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
c Example 10-1b read文 (書式識別子)
c  機械工学科 1年  xxxxxxx  S.M
c         Filename = rei10-1b.f
c ****            (data fine  tokuten.d)     ****   
      character name*20, fmt*30
      integer num,eng,math
      k=11
      open(k,file='tokuten.d',status='old')
      fmt='(i5,i9,1x,a20,3x,2i4)'
      i=0
 1001 continue
      read(k,'(i4,18x,a20,3x,2i4)') num,name,eng,math
      i=i+1
      write(*,fmt) i,num,name,eng,math
      if(i.lt.10) go to 1001
      close(k)
      stop
      end


 例題10 1-b)のプログラムで例題10 1-a)と異なる部分を説明します。

 5行目の character文に、長さが30文字の文字変数 fmt を追加します。この変数は書式を指定する文字列を代入するために用意したものです。

5行目       character name*20, fmt*30

 7行目と8行目でファイルを開きます。

7行目       k=11
8行目       open(k,file='tokuten.d',status='old')

7行目で k に整数 11 を代入して、外部装置識別子 k を 11 にしています。

9行目       fmt='(i5,i9,1x,a20,3x,2i4)'

では、文字変数 fmt に文字列 (i5,i9,1x,a20,3x,2i4)を代入しています。この文字変数はwrite文で使用します。

 10行目から16行目は10人分のデータを読んで書き出す部分です。プログラムの構成は例題10 1-a)と変わりませんが、read文と write文の書き方に注意してください。

10行目       i=0
11行目  1001 continue
12行目       read(k,'(i4,18x,a20,3x,2i4)') num,name,eng,math
13行目       i=i+1
14行目       write(*,fmt) i,num,name,eng,math
15行目       if(i.lt.10) go to 1001
16行目       close(k)

12行目の read文で、外部装置識別子 k のファイルから変数 num, name, eng, math に書式識別子'(i4,18x,a20,3x,2i4)'で学生番号、英字名、英語の得点、数学の得点を読み込みます。
14行目の write文では、外部装置識別子 * のファイル(ここではディスプレイ)に変数 i, num, name, eng, math の値を書式識別子 fmt の内容 (i5,i9,1x,a20,3x,2i4)で書き出します。
 このように書式指定子 [fmt=]f の書式識別子 f には、* や format文の文番号のほかに、文字配列名や文字式を書くことができます。

内部ファイル

 内部ファイルは内部メモリ間でデータを転送したり変換したりするのに用いられる。変数の値を画面に表示する代わりに、その文字列をそのまま内部メモリに記憶させることを内部ファイルに出力するという。また逆に、内部ファイルに記憶されている文字列を(キーボードから入力するように)変数に読み込むことを内部ファイルから入力するという。

  • 内部ファイルは文字変数、文字配列要素、文字配列、文字部分列のいずれかである。
  • 内部ファイルが文字変数、文字配列要素、文字部分列のときには、その長さの1つの記録となる。ファイルが文字配列のときには配列要素の列として扱われ、各配列要素がファイルの1つの記録となる。各記録の長さはその配列要素の長さとなる。
  • 内部ファイルには入出力文以外でも値を記録させることができる(代入文など)。


例題10 2-a)

 では、例題10 2-a) のプログラムを見てみましょう。内部ファイルの read文を使用した例です。

プログラム
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
c Example 10-2a    内部ファイル read文
c  機械工学科 1年  xxxxxxx  S.M
c         Filename = rei10-2a.f
c ****            (data fine  tokuten.d)     ****   
      character name*20, data1*65
      integer num,eng,math
      k=12
      open(k,file='tokuten.d',status='old')
      i=0
 1001 continue
      read(k,101) data1
      read(data1,102) num,name,eng,math
      i=i+1
      write(*,202) i,num,name,eng,math
      if(i.lt.10) go to 1001
      close(k)
      stop
  101 format(a65)
  102 format(i4,18x,a20,3x,2i4)
  202 format(i5,i9,1x,a20,3x,2i4)
      end


 例題10 2-a)のプログラムで、例題10 1-b)と異なる部分を説明します。

 5行目の character文の fmt*30 を取り除き、長さが65文字の文字変数 data1 を追加します。この変数はデータファイル tokuten.d の1レコードを記憶するために用意したものです。read文、write文の書式仕様は、例題10 1-a) と同じように format文を使用するため、変数 fmt は必要ないので除きます。

5行目       character name*20, data1*65

 7行目と8行目でファイルを開きます。

7行目       k=12
8行目       open(k,file='tokuten.d',status='old')

7行目で k に整数 12 を代入して、外部装置識別子 k を 12 にしています。

 9行目から16行目は10人分のデータを読んで書き出す部分です。プログラムの構成は例題10 1-a,b)と変わりませんが、read文に内部ファイルを使用しています。

 9行目       i=0
10行目  1001 continue
11行目       read(k,101) data1
12行目       read(data1,102) num,name,eng,math
13行目       i=i+1
14行目       write(*,202) i,num,name,eng,math
15行目       if(i.lt.10) go to 1001
16行目       close(k)
   :
18行目   101 format(a65)
19行目   102 format(i4,18x,a20,3x,2i4)
20行目   202 format(i5,i9,1x,a20,3x,2i4)

11行目の read文で、外部装置識別子 k のファイルから変数 data1 に18行目の文番号 101 の format文の書式仕様(a65)で1レコード(1人分のデータ)を読み込みます。data1 にはデータファイル tokuten.d の1レコード分がそのまま文字列として記録されています。
12行目の read文で、内部ファイル識別子 data1 の内部ファイルから変数 num, name, eng, math に19行目の文番号 102 の format文の書式仕様(i4,18x,a20,3x,2i4)で学生番号、英字名、英語の得点、数学の得点を読み込みます。例題 10 1-a,b) で外部ファイルから読み込んだのとまったく同様に各変数に値が読み込まれます。
このように装置指定子 [unit=]u の内部ファイル識別子 u には、参照する内部ファイル(文字変数名、文字配列要素名、文字配列名、文字部分列名)を書きます。装置指定子 [unit=]uu は指定されたものにより、外部装置識別子または内部ファイル識別子となります。
14行目の write文では、外部装置識別子 * のファイル(ここではディスプレイ)に変数 i, num, name, eng, math の値を20行目の文番号 202 のformat文の書式仕様(i5,i9,1x,a20,3x,2i4)で書き出します。


例題10 2-b)

 では、例題10 2-b) のプログラムを見てみましょう。内部ファイルの write文を使用した例です。

プログラム
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
c Example 10-2b    内部ファイル write文
c  機械工学科 1年  xxxxxxx  S.M
c         Filename = rei10-2b.f
c ****            (data fine  tokuten.d)     ****   
      character name*20, data1*65, data2*70
      integer num,eng,math
      k=10
      open(k,file='tokuten.d',status='old')
      i=0
 1001 continue
      read(k,101) data1
      read(data1,102) num,name,eng,math
      i=i+1
      write(data2,202) i,num,name,eng,math
      write(*,201) data2
      if(i.lt.10) go to 1001
      close(k)
      stop
  101 format(a65)
  102 format(i4,18x,a20,3x,2i4)
  201 format(a70)
  202 format(i5,i9,1x,a20,3x,2i4)
      end


 例題10 2-b)のプログラムで、例題10 2-a)と異なる部分を説明します。

 5行目の character文に、長さが70文字の文字変数 data2 を追加します。この変数は画面に出力する文字列を、内部ファイルに一旦出力するために用意したものです。

5行目       character name*20, data1*65, data2*70

 9行目から17行目は10人分のデータを読んで書き出す部分です。プログラムの構成は例題10 1-a,b)、2-a)と変わりませんが、write文で内部ファイルを使用しています。

 9行目       i=0
10行目  1001 continue
11行目       read(k,101) data1
12行目       read(data1,102) num,name,eng,math
13行目       i=i+1
14行目       write(data2,202) i,num,name,eng,math
15行目       write(*,201) data2
16行目       if(i.lt.10) go to 1001
17行目       close(k)
   :
19行目   101 format(a65)
20行目   102 format(i4,18x,a20,3x,2i4)
21行目   201 format(a70)
22行目   202 format(i5,i9,1x,a20,3x,2i4)

9行目から13行目までは 例題10 2-a)とまったく同じです。
14行目の write文では、内部ファイル識別子 data2 の内部ファイルに変数 i, num, name, eng, math の値を22行目の文番号 202 のformat文の書式仕様(i5,i9,1x,a20,3x,2i4)で書き出します。装置指定子 [unit=]u の内部ファイル識別子 u の指定の方法は read文と同じです。
15行目の write文では、外部装置識別子 * のファイル(ここではディスプレイ)に変数 data2 の値を21行目の文番号 201 のformat文の書式仕様(a70)でそのまま出力します。


 例題 10 1)と2)では、書式仕様を format文を使用せずに文字式で指定する方法と、内部ファイルの使用法を説明してきました。この例題では何故このような使用法が便利なのかは示されていません。
 例題10 3)ではこれらを使用したプログラム例を示します。


例題10 3)

 パスカルの三角形を出力するプログラムを作成せよ。

出力例(パスカルの三角形)


                                      1
                                   1     1
                                1     2     1
                             1     3     3     1
                          1     4     6     4     1
                       1     5    10    10     5     1
                    1     6    15    20    15     6     1
                 1     7    21    35    35    21     7     1
              1     8    28    56    70    56    28     8     1
           1     9    36    84   126   126    84    36     9     1
        1    10    45   120   210   252   210   120    45    10     1
     1    11    55   165   330   462   462   330   165    55    11     1
  1    12    66   220   495   792   924   792   495   220    66    12     1 



例題10 3-a)

 次に示す例題10 3-a) のプログラムは、二項係数の次数が5の場合のパスカルの三角形を出力したものです。

プログラム
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
c Example 10-3a 二項係数 
c  機械工学科 1年  xxxxxxx  S.M
c         Filename = rei10-3a.f
      parameter  (js=12) 
      integer a(0:js), b(0:js)
      a(0) = 1
c  **   input  二項係数の次数  ** 
      njs=5
c ****
      do 100 j=0,njs 
c  ***  係数を求める ** 
        b(j) = 1
        do  200  i=1, j-1
          b(i) = a(i) + a(i-1) 
  200   continue  
c  ***  出力        *** 
        write(*,'( 1x, 13i6)') (b(i),i=0,j)
c  ***  入れ替え       *** 
        do  300  i=1, j
          a(i) = b(i)
  300   continue
  100 continue
      stop
      end 


 例題10 3-a)のプログラム例について説明します。

 4行目と5行目は宣言文です。

4行目       parameter  (js=12) 
5行目       integer a(0:js), b(0:js)

4行目は parameter文で、整定数 12 に js と名前を付けています。5行目の integer文で寸法が 0 から js の一次元配列 a と b を宣言しています。
配列 a には、ひとつ前の次数の二項係数を入れておき、配列 a の値を用いて次の次数の係数を配列 b に計算します。

 6行目では、次数 0 の係数 1 を配列要素 a(0)に代入しておきます。

6行目       a(0) = 1

 8行目では、変数 njs に求める二項係数の次数を定めます。ここでは5にしました。

8行目       njs=5

 10行目から22行目までの doループでは、次数 0 から njs まで係数を求めながら出力します。

10行目       do 100 j=0,njs 
    :
22行目   100 continue

 12行目から15行目までは、次数 j の係数を求めます。

12行目         b(j) = 1
13行目         do  200  i=1, j-1
14行目           b(i) = a(i) + a(i-1) 
15行目   200   continue

12行目で配列要素 b(j)に次数 j の j番目の係数1を入れ、13行目から15行目までの doループで、配列要素 b(i) から b(j-1) に前の係数 a(i) と a(i-1) の和を求め代入します。

 17行目で次数 j の係数を出力します。

17行目   200   write(*,'( 1x, 13i6)') (b(i),i=0,j)

17行目の write文は do型並びの配列要素b(0)からb(j)を装置 * (ここではディスプレイ)に書式仕様( 1x, 13i6)で出力します。

 19行目から21行目までは、次の次数の係数を求めるため、配列 b の内容を配列 a に入れ替えます。

19行目         do  300  i=1, j
20行目           a(i) = b(i)
21行目   300   continue

 例題10 3-a)の出力結果は次のようになります。


      1
      1     1
      1     2     1
      1     3     3     1
      1     4     6     4     1
      1     5    10    10     5     1

 17行目の write文の書式仕様( 1x, 13i6)では、初めに示したような三角形に出力することができません。

 次の例題10 3-b) と例題10 3-c)に、係数の個数によって書式仕様を変更する方法を示します。


例題10 3-b)

 例題10 3-b) のプログラムの例を示します。

プログラム
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
c Example 10-3b 二項係数 write文 (書式仕様の変更)
c  機械工学科 1年  xxxxxxx  S.M
c         Filename = rei10-3b.f
      parameter  (js=12) 
      integer a(0:js), b(0:js)
      character fmt*40
      a(0) = 1
c  **   input  二項係数の次数  ** 
 1010 continue
      write(*,*) ' Input  二項係数の次数  ='
      read(*,*) njs 
      if(njs.gt.js) then
        write(*,*)  '*** 次数が大きすぎます  ***'
        go to  1010
      end if
c ****
      do 100 j=0,njs 
c  ***  係数を求める ** 
        b(j) = 1
        do  200  i=1, j-1
          b(i) = a(i) + a(i-1) 
  200   continue  
c  ***  出力        *** 
        ii=(njs-j)*3
        write(fmt,'(a1,i2,a8)') '(', ii,'x, 13i6)' 
        write(*,fmt) (b(i),i=0,j)
c  ***  入れ替え       *** 
        do  300  i=1, j
          a(i) = b(i)
  300   continue
  100 continue
      stop
      end 


 例題10 3-b)のプログラムで、例題10 3-a)と異なる部分を説明します。

 6行目に、character文を追加します。

5行目       character fmt*40

変数 fmt を長さが40文字の文字変数と宣言しています。この変数は書式仕様を定義するために用意したもので、この文字変数を内部ファイルとして書式仕様の文字列をwrite文で書き込みます。

 9行目から15行目は、例題10 3-a) の8行目の njs=5 の代わりに挿入した部分で二項係数の次数をキーボードから読み込んで指定します。

 9行目  1010 continue
10行目       write(*,*) ' Input  二項係数の次数  ='
11行目       read(*,*) njs 
12行目       if(njs.gt.js) then
13行目         write(*,*)  '*** 次数が大きすぎます  ***'
14行目         go to  1010
15行目       end if

12行目から15行目の ifブロックでは読み込んだ次数 njs が 12 より大きければもう一度次数を読み込み直すようにしています。配列 a と b の寸法が 0〜12 であるため、次数が 13 以上の計算はできないからです。次数 12 は、ディスプレイ表示の一行文が折り返さない範囲です。
この部分は書式仕様とは直接関係ありません。

24行目から26行目は、二項係数の一行分の出力の部分です。

24行目         ii=(njs-j)*3
25行目         write(fmt,'(a1,i2,a8)') '(', ii,'x, 13i6)'
26行目         write(*,fmt) (b(i),i=0,j)

24行目で、出力する行の先頭の桁移動の数を、整変数 ii に計算しています。j が 0 のときには njs×3、1 のときには (njs-1)×3、2 のときには (njs-2)×3 のように桁移動の桁数が3桁づつ減っていきます。
25行目の write文では内部ファイル fmt に 出力並びの文字定数 '(' と整変数 ii と文字定数 'x, 13i6)' を書式仕様(a1,i2,a8)で書き出します。次数 njs が 5 のとき、内部ファイル fmt の内容は、j が 0 のときには(15x, 13i6)、1 のときには(12x, 13i6)、2 のときには( 9x, 13i6)となります。


例題10 3-c)

 例題10 3-c) では、文字部分列を使用して書式仕様を変更するプログラムの例を示します。

プログラム
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
c Example 10-3c 二項係数 write文 (書式仕様の変更)
c  機械工学科 1年  xxxxxxx  S.M
c         Filename = rei10-3c.f
      parameter  (js=12) 
      integer a(0:js), b(0:js)
      character fmt*40
      fmt='( ??x, 13i6)'
      a(0) = 1
c  **   input  二項係数の次数  ** 
 1010 continue
      write(*,*) ' Input  二項係数の次数  ='
      read(*,*) njs 
      if(njs.gt.js) then
        write(*,*)  '*** 次数が大きすぎます  ***'
        go to  1010
      end if
c ****
      do 100 j=0,njs 
c  ***  係数を求める ** 
        b(j) = 1
        do  200  i=1, j-1
          b(i) = a(i) + a(i-1) 
  200   continue  
c  ***  出力        *** 
        ii=(njs-j)*3
        write(fmt(3:4),'(i2)') ii
        write(*,fmt) (b(i),i=0,j)
c  ***  入れ替え       *** 
        do  300  i=1, j
          a(i) = b(i)
  300   continue
  100 continue
      stop
      end 


 例題10 3-c)のプログラムで、例題10 3-b)と異なる部分を説明します。

 7行目で文字変数 fmt に書式仕様の元となる文字列を代入します。

7行目       fmt='( ??x, 13i6)'

文字変数 fmt の初期値を、ここでは代入文で与えていますが、data文で定義しても構いません。

25行目から27行目は、例題10 3-b) と同様に(1行分ずれていますが)、二項係数の一行分の出力の部分です。

25行目         ii=(njs-j)*3
26行目         write(fmt(3:4),'(i2)') ii
27行目         write(*,fmt) (b(i),i=0,j)

26行目の write文では内部ファイル fmt(3:4) に整変数 ii を書式仕様(i2)で書き出します。文字部分列 fmt(3:4) の値は、初めは ?? になっています。この部分を 整変数 ii の値によって書き換えて、そのときの書式仕様の文字列を文字変数 fmt に完成させます。次の27行目の write文では、この書式仕様を用いて係数 b(0)〜b(j) を出力します。


 例題10 3-b,c)の出力結果は次のようになります。

次数が3の場合


  Input  二項係数の次数  =
3
              1
           1     1
        1     2     1
     1     3     3     1

次数が12の場合


  Input  二項係数の次数  =
12
                                         1
                                      1     1
                                   1     2     1
                                1     3     3     1
                             1     4     6     4     1
                          1     5    10    10     5     1
                       1     6    15    20    15     6     1
                    1     7    21    35    35    21     7     1
                 1     8    28    56    70    56    28     8     1
              1     9    36    84   126   126    84    36     9     1
           1    10    45   120   210   252   210   120    45    10     1
        1    11    55   165   330   462   462   330   165    55    11     1
     1    12    66   220   495   792   924   792   495   220    66    12     1


Fortranの文法参照