Impresión del triángulo de Pascal en C

El triángulo de Pascal es uno de los ejemplos clásicos que se enseñan a los estudiantes de ingeniería. Tiene muchas interpretaciones. Uno de los famosos es su uso con ecuaciones binomiales.

Todos los valores fuera del triángulo se consideran cero (0). La primera fila es 0 1 0 mientras que solo 1 adquiere un espacio en el triángulo de Pascal, los ceros son invisibles. La segunda fila se adquiere sumando (0 + 1) y (1 + 0). La salida se intercala entre dos ceros. El proceso continúa hasta que se alcanza el nivel requerido.

El triángulo de Pascal se puede derivar usando el teorema del binomio. Podemos utilizar combinaciones y factoriales para conseguirlo.

Algoritmo

Suponiendo que conocemos bien los factoriales, analizaremos el concepto central de dibujar un triángulo pascal paso a paso:

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

Pseudocódigo

Podemos derivar un pseudocódigo para el algoritmo mencionado anteriormente, de la siguiente manera:

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

Implementación

Implementemos este programa en su totalidad. Implementaremos funciones para factorial (no recursivo) y ncr (combinación).

#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;
}

La salida debería verse así:

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