Impression du triangle de Pascal en C

Le triangle de Pascal est l'un des exemples classiques enseignés aux élèves ingénieurs. Il a de nombreuses interprétations. L'un des plus célèbres est son utilisation avec des équations binomiales.

Toutes les valeurs en dehors du triangle sont considérées comme zéro (0). La première ligne est 0 1 0 alors que seulement 1 acquiert un espace dans le triangle de pascal, les 0 sont invisibles. La deuxième ligne est acquise en ajoutant (0 + 1) et (1 + 0). La sortie est prise en sandwich entre deux zéros. Le processus se poursuit jusqu'à ce que le niveau requis soit atteint.

Le triangle de Pascal peut être dérivé en utilisant le théorème binomial. Nous pouvons utiliser des combinaisons et des factorielles pour y parvenir.

Algorithme

En supposant que nous sommes bien conscients des factorielles, nous examinerons le concept de base consistant à dessiner un triangle pascal étape par étape -

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

Pseudocode

Nous pouvons dériver un pseudocode pour l'algorithme mentionné ci-dessus, comme suit -

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

la mise en oeuvre

Implémentons ce programme dans son intégralité. Nous implémenterons des fonctions pour factorielle (non récursive) ainsi que pour ncr (combinaison).

#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 sortie devrait ressembler à ceci -

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