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