# How to print a pascal’s triangle in C with explanation

# Pascal’s triangle in C program:

Pascal’s triangle is a triangle where each entry is the sum of the two numbers directly above it. This is a symmetric triangle, i.e. the left side numbers are identical to the right side numbers. Below is a pascal’s triangle of height 10 :

1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1

In this tutorial, we will learn how to print *Pascal’s triangle* in C program. The program will take the height as an input from the user and print it out.

## Algorithm to print it :

It looks complex, but if you do understand the algorithm properly, you can write a program. Let’s divide the problem :

– We need to print numbers

– We need to print blank spaces

Consider one small triangle of height 5 :

1 1 1 1 2 1 1 3 3 1 1 4 6 4 1

If we print *** instead of *blank space*, it will look like :

****1 ***1*1 **1*2*1 *1*3*3*1 1*4*6*4*1

Here,

height = 5

– for row = *1*, total number of elements = *5*, number is printed on position *5*

– for row = *2*, total number of elements = *6*, number is printed on position *4,6*

– for row = *3*, total number of elements = *7*, number is printed on position *3,5,7*

– for row = *4*, total number of elements = *8*, number is printed on position *2,4,6,8*

– for row = *5*, total number of elements = *5*, number is printed on position *1,3,5,7,9*

so,

– The program will start *i* from *1* to *rows*

– *j* will run from *1* to *i + rows – 1*

– If the total number of elements is *odd*, the numbers are also *odd*. Else these are *even*.

– If the value of *j* is greater than or equal to *rows – i*, we are starting to print numbers.

– One blank space is printed between two numbers.

The *nth* entry of Pascal’s triangle for *row* is :

row! / (n! * (row - n)!);

## C program :

The complete *C program* to print the pascal triangle is as below :

#include <stdio.h> long findFactorial(long); long findEntry(long, long); void printEntry(long); int main() { long rows; long i, j, current; long entry; printf("Enter the number of rows : \n"); scanf("%ld", &rows); for (i = 1; i <= rows; i++) { current = 0; for (j = 1; j <= i + rows - 1; j++) { if ((i + rows - 1) % 2 != 0) { if (j >= (rows - i) && j % 2 != 0) { printEntry(findEntry(i - 1, current)); current++; } else { printf(" "); } } else { if (j >= (rows - i) && j % 2 == 0) { printEntry(findEntry(i - 1, current)); current++; } else { printf(" "); } } } printf("\n"); } return 0; } void printEntry(long value) { if (value < 10) { printf(" %ld", value); } else if (value < 100) { printf(" %ld", value); } else { printf("%ld", value); } } long findEntry(long row, long position) { return findFactorial(row) / (findFactorial(position) * findFactorial(row - position)); } long findFactorial(long n) { if (n == 0) { return 1; } else { return n * findFactorial(n - 1); } }

### Sample Output :

Enter the number of rows : 5 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 Enter the number of rows : 10 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1 Enter the number of rows : 15 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1 1 10 45 120 210 252 210 120 45 10 1 1 11 55 165 330 462 462 330 165 55 11 1 1 12 66 220 495 792 924 792 495 220 66 12 1 1 13 78 286 715 1287 1716 1716 1287 715 286 78 13 1 1 14 91 364 1001 2002 3003 3432 3003 2002 1001 364 91 14 1

Note that the triangle will not print properly if the height is very high. We are using *long* and it will overflow the length of *long*.

## 0 Comments