Learn-c-by-examples-pascals-triangle-program-in-c

提供:Dev Guides
移動先:案内検索

Cでのパスカルの三角形印刷

パスカルの三角形は、工学の学生に教えられる古典的な例の1つです。 多くの解釈があります。 有名なものの1つは、二項方程式での使用です。

パスカルの三角形

三角形の外側のすべての値はゼロ(0)と見なされます。 最初の行は0 1 0ですが、パスカルの三角形のスペースを取得するのは1つだけで、0は表示されません。 2行目は、(0 + 1)と(1 + 0)を追加して取得されます。 出力は2つのゼロで挟まれています。 このプロセスは、必要なレベルに達するまで続きます。

パスカルの三角形は、二項定理を使用して導出できます。 これを実現するために、組み合わせと階乗を使用できます。

アルゴリズム

私たちが階乗をよく知っていると仮定して、ステップバイステップ方式でパスカル三角形を描くというコアコンセプトを見ていきます-

START
  Step  1 - Take number of rows to be printed, n.
  Step  2 - Make outer iteration I for n times to print rows
  Step  3 - Make inner iteration for J to (N - 1)
  Step  4 - Print single blank space " "
  Step  5 - Close inner loop
  Step  6 - Make inner iteration for J to I
  Step  7 - Print nCr of I and J
  Step  8 - Close inner loop
  Step  9 - Print NEWLINE character after each inner iteration
  Step 10 - Return
STOP

疑似コード

次のように、上記のアルゴリズムの擬似コードを導出できます-

procedure pascals_triangle

   FOR I = 0 to N DO
      FOR J = 0 to N-1 DO
         PRINT " "
      END FOR

      FOR J = 0 to I DO
         PRINT nCr(i,j)
      END FOR

      PRINT NEWLINE
   END FOR

end procedure

実装

このプログラムを完全に実装しましょう。 階乗(非再帰)およびncr(組み合わせ)の関数を実装します。

#include <stdio.h>

int factorial(int n) {
   int f;

   for(f = 1; n > 1; n--)
      f *= n;

   return f;
}

int ncr(int n,int r) {
   return factorial(n)/( factorial(n-r) * factorial(r) );
}

int main() {
   int n, i, j;

   n = 5;

   for(i = 0; i <= n; i++) {
      for(j = 0; j <= n-i; j++)
         printf("  ");

      for(j = 0; j <= i; j++)
         printf(" %3d", ncr(i, j));

      printf("\n");
   }
   return 0;
}

出力は次のようになります-

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