# 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*.