La stampa triangolare di Pascal in C
Il triangolo di Pascal è uno dei classici esempi insegnati agli studenti di ingegneria. Ha molte interpretazioni. Uno dei più famosi è il suo utilizzo con equazioni binomiali.
Tutti i valori al di fuori del triangolo sono considerati zero (0). La prima riga è 0 1 0 mentre solo 1 acquisisce uno spazio nel triangolo di Pascal, gli 0 sono invisibili. La seconda riga si acquisisce aggiungendo (0 + 1) e (1 + 0). L'output è racchiuso tra due zeri. Il processo continua fino al raggiungimento del livello richiesto.
Il triangolo di Pascal può essere derivato usando il teorema binomiale. Possiamo usare combinazioni e fattoriali per ottenere questo risultato.
Algoritmo
Supponendo che siamo ben consapevoli dei fattoriali, esamineremo il concetto centrale di disegnare un triangolo pascal in modo graduale -
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
Pseudocodice
Possiamo derivare uno pseudocodice per l'algoritmo sopra menzionato, come segue:
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
Implementazione
Implementiamo questo programma per intero. Implementeremo funzioni per fattoriali (non ricorsive) e ncr (combinazione).
#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;
}
L'output dovrebbe essere simile a questo:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1