Pascalの三角形 #1

二項係数の列、いわゆるPascalの三角形をgvprで計算する。

pascal1.g
BEGIN {
  if (ARGC != 1) {
    print("usage: gvpr -fpascal1.g -a <step>");
    exit(0);
  }
  int step = ARGV[0];
  int p[], q[];
  int i, j;
  for (i = 0; i <= step; i++) {
# calc i-th step
    for (j = 1; j < i; j++) {
      q[j] = p[j - 1] + p[j];
    }
    q[i] = q[0] = 1;
# print i-th step and prepare for next step
    for (j = 0; j < i; j++) {
      printf("%d ", q[j]);
      p[j] = q[j];
    }
    print(q[i]);
    p[i] = q[i];
  }
}

ここでは単に係数の列を標準出力に出力する。

$ gvpr -fpascal1.g -a10
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