Solved

junk output with pascal triangle generation

Posted on 2008-10-28
4
756 Views
Last Modified: 2012-05-05
when i used larger numbers of rows for pascal triangle, junk appears.
i think the compiler cannot hold the big values in my constructPascal function.
/* Title: Using Binomial Coefficients                                 */                 
/* Purpose: Program ask user to enter the number of rows for the      */
/* Pascal Triangle. Program then generate the Pascal Triangle required*/
/* using binomial coeffients method.                                  */                  
/**********************************************************************/
 
#include <stdio.h>
 
//declaring function prototype//
void constructPascal(int numRows);
int binomialCoefficent(int n, int k);
int factorial(int n);
 
//main function//
int main(void)
{       
   //declare variable//
   int numRows;
 
   //user input//
   printf("Enter the number of rows of the Pascal Triangle: ");
   scanf("%i", &numRows);
   
   //call for constructPascal function//
   constructPascal(numRows);
 
   system("PAUSE");
   //exit program//
   return 0;
}
 
//defines constructPascal function//
void constructPascal(int numRows)
{
     //declare variables///
     int k,n;
     //generate each row//
     for(n=0;(n+1)<=numRows;n++)
         {
         //generate each column//
         for(k=0;k<=n;k++)
         //print out the colummn//
         printf("%i ", binomialCoefficient(n,k));
 
         //prints a newline every row//
         printf("\n");
         }    
}
 
//defines binomialCoefficient function//
int binomialCoefficient(int n, int k)
{
    //return the value of each element using n and k.//
    //factorial function is used here//
    return (factorial(n))/((factorial(k))*(factorial(n-k))); 
 
}
 
//defines factorial function//
//n!//
int factorial(int n)
{
    //declare variable//
    int z = 1;
    
    while (n>1)
    {
          z = z*n;
          n--;
    }
    
    //return the value//
    return z;
 
}

Open in new window

0
Comment
Question by:Zhongcai
  • 3
4 Comments
 

Author Comment

by:Zhongcai
ID: 22823595
i'm now trying to change my binomialCoefficient function so that the top term gets divided by the bottom term as the terms gets bigger. but i can't seem to put it in language.
//defines binomialCoefficient function//
int binomialCoefficient(int n, int k)
{
    int top=1, bottom1=1;
    
    while(n>1)
    {
    top = top*(n);
    bottom1 = bottom1*k;
    
    if(!(top%bottom1))
    top = top/bottom1;
    
    n--;
    k--;
     
    }
    
   return top;          
}

Open in new window

0
 
LVL 53

Accepted Solution

by:
Infinity08 earned 500 total points
ID: 22823960
>>     return (factorial(n))/((factorial(k))*(factorial(n-k)));

That is due to the way you calculate the values. 13! alreadt overflows a 32bit integer.
But your second post indicates that you already realized that :)


>> so that the top term gets divided by the bottom term as the terms gets bigger. but i can't seem to put it in language.

You can write a loop. n! / k! is the same as n * (n - 1) * (n - 2) * ... * (k + 1). So, you multiply the terms n through (k + 1) in a loop. That will already get you further down the Pascal triangle.


There are of course alternative ways of calculating the values in the triangle. Each value is the sum of the two values above it.
0
 

Author Comment

by:Zhongcai
ID: 22832377
i managed to think about a solution already!
int binomialCoefficient(int n, int k)
{
    int x=1,z=1,count;
    count = k;
    
    while(count>0)
    {             
                  x = x*n/z;
                  n--;
                  z++;
                  count--;
    } 
             
    return x;
    
}

Open in new window

0
 

Author Comment

by:Zhongcai
ID: 22832398
solution using arrays
/**********************************************************************/
/* Matric Number: U083773L                                            */
/* Userid: u0803773                                                   */
/* Lab: COM1/B11                                                      */
/* Lab Group Number: 19                                               */
/* Lab TA's Name: Lin Cai Quan                                        */
/* Lab Session Date: 29 Oct 2008                                      */
/* Lab Session Time: 1100 - 1200                                      */
/* Title: Using Array                                                 */                 
/* Purpose: Program ask user to enter the number of rows for the      */
/* Pascal Triangle. Program then generate the Pascal Triangle required*/
/* using arrays to store values.                                      */                  
/**********************************************************************/
 
#include <stdio.h>
 
//declaring function prototype//
void constructPascal(int numRows);
 
//main function//
int main(void)
{       
   //declare variable//
   int numRows;
 
   //user input//
   printf("Enter the number of rows of the Pascal Triangle: ");
   scanf("%i", &numRows);
   
   //call for constructPascal function//
   constructPascal(numRows);
 
   system("PAUSE");
   //exit program//
   return 0;
}
 
//defines constructPascal function//
void constructPascal(int numRows)
{
     //declare variables///
     int k,n[23]={1},hold=0,hold2,count;
     //generate each row//
     for(count=0;(count+1)<=numRows;count++)
     {
         hold =0;                                   
         
         for(k=0;k<=count;k++)
         {
         hold2 = hold + n[k];
         printf("%i ", hold + n[k]);
         hold = n[k];
         n[k]= hold2;
         
         }
         //prints a newline every row//
         printf("\n");
             
     }
}

Open in new window

0

Featured Post

Announcing the Most Valuable Experts of 2016

MVEs are more concerned with the satisfaction of those they help than with the considerable points they can earn. They are the types of people you feel privileged to call colleagues. Join us in honoring this amazing group of Experts.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
countHi challenge 25 140
Re-position sub-options beneath the TAB 7 98
What language/protocol is the Angular Chat? 2 83
Problem to error 4 67
Have you thought about creating an iPhone application (app), but didn't even know where to get started? Here's how: ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ Important pre-programming comments: I’ve never tri…
Examines three attack vectors, specifically, the different types of malware used in malicious attacks, web application attacks, and finally, network based attacks.  Concludes by examining the means of securing and protecting critical systems and inf…
This theoretical tutorial explains exceptions, reasons for exceptions, different categories of exception and exception hierarchy.
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.

789 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question