Hi there. I had to make a code to print out a Pascal Triangle. But I'm not getting it to display properly.

For example, if the user types in 4, then it will print:
1
1
1 2
1 3 3

But it should print
1
1 1
1 2 1
1 3 3 1


And the last thing I'm trying to figure out is how to make it show a sum of the numbers.
So it should add:
.. 1
.. 1 + 1
.. 1 + 2 + 1
+ 1 + 3 + 3 + 1
.. 15 <-----------and display this as the sum.

Any help is appreciated. Thank you!

#include <stdlib.h>
#include <stdio.h>
#include <fstream>
#include <iostream>
#include <ctype.h>  // I know some of these may be unnecessary 
#include <string> // but our teacher wants us to include
#include <iomanip> // these in all our code.
#include <math.h> 
using namespace std;
int sum, i, size;
void inputSize();
void sumNumbers();
 
void main(int size) 
{
	int sum=0;
	cout<<"Pascal Triangle:\n";
	inputSize();
}

void inputSize()
{
	cout<< "Enter the amount of rows (between 1 and 9) you would like in the triangle."<<endl;
	cin >>size;
	cout<<"\n";	

	if (size > 0 && size <10)
	{	
		int *rowA = new int[1];
		rowA[0] = 1;
		cout <<setw(6)<<rowA[0] <<endl;
 
		for (int x = 1; x < size; x++) 
		{
			int *rowB = new int[x+1];
			rowB[0] = rowA[0];
			for (int y = 1; y < x; y++)
				rowB[y] = rowA[y-1] + rowA[y];
				rowB[x] = rowA[x-1];
														 
			delete [] rowA;
			rowA = rowB;
 
			for (int y = 0; y < x; y++)
			cout <<setw(6)<< rowB[y];
			cout <<"\n";
		}
		delete [] rowA;

		sumNumbers();
	}

	else
	{ cout<< "Number is not between 1-9.\n"<<endl; }
}
		
void sumNumbers()                           
{
	for (int x=0; x<size; x++)
	{
		for (int y=0; y<size; y++)
		{
			sum +=y;  // This is totally wrong, 
                }                         // I can't figure out how to 
		cout<<sum<<"\n"<<endl; //make a sum of the numbers
	}
}

You can figure out your first problem just by looking at your results. You're not printing the last 1 of each row. Why? Well, you're stopping too early in your loop that prints out the row's numbers.

For your second problem, if you temporarily added a few cout statements that showed the numbers you're adding, you'd see your problem very quickly.

You might not have to go through this effort -- I'm sure some shmuck will come along to tell you exactly what's wrong with your code.

commented: Guided me in the right direction. +1

Thanks. I actually just now figured out how to make the triangle print properly. I kept trying to add +1 in different places before. And then I realized, woops - I should have made it <= (less than or equal to) instead of < (less than)
for (int y = 0; y <= x; y++)

But I'm still having issues with the sum.

You might observe that each row in the triangle is equal to 2 raised to n. Where n starts at zero.
Your example : 2^0+2^1+2^2+2^3=15
I wonder why those binaries always pop up when we talk computer and why Pascal is also a computerlanguage.?.?.?

commented: Guided me in the right direction. +1

You're right, I was thinking about how all this math ties together. It's crazy to think about sometimes!

Okay, so thank you for pointing out the power thing. I think this is where I got stuck before. I'm trying to figure out how to raise something to the power. We didn't go over this in class and all the things I could find online showed it in printf form and not cout. And so I'm having trouble figuring out how to do it. I think basically what I need to do is:

for (int x=0; x<size; x++)
	{
		sum += pow (2, x); - // trying to figure 
                                               //  out how to 
                                               //translate this to code.
                                              // 2 to the x power

		for (int y=0; y<size; y++)
		{

		}
		cout<<sum<<"\n"<<endl;
	}
}

I'm going to keep searching.

You're right, I was thinking about how all this math ties together. It's crazy to think about sometimes!

Okay, so thank you for pointing out the power thing. I think this is where I got stuck before. I'm trying to figure out how to raise something to the power. We didn't go over this in class and all the things I could find online showed it in printf form and not cout. And so I'm having trouble figuring out how to do it. I think basically what I need to do is:

for (int x=0; x<size; x++)
	{
		sum += pow (2, x); - // trying to figure 
                                               //  out how to 
                                               //translate this to code.
                                              // 2 to the x power

		for (int y=0; y<size; y++)
		{

		}
		cout<<sum<<"\n"<<endl;
	}
}

I'm going to keep searching.

pow (int, int) doesn't exist.

http://www.cplusplus.com/reference/clibrary/cmath/pow.html

Make one or both a double:

pow (2.0, x); // or pow (2.0, (double) x);

pow is from cmath, which you have as math.h. You may want to change those #include statements to include C++ libraries (cstdlib, cctype, cmath, cstdio) rather than the .h files. I'm not sure whether the compiler cares or not (probably not), but at least it makes clear that you are using C++ to the reader.

commented: Guided me in the right direction. +1

pow (int, int) doesn't exist.

Quite right, but it might that some C++ compilers implicitly convert an int to a double.

Oh, thank you guys all so much. I got it to work using the "pow (2.0, x)" method (using Visual C++ Express, just fyi).

#include <stdlib.h>
#include <stdio.h>
#include <fstream>
#include <iostream>
#include <ctype.h> 
#include <string>
#include <iomanip>
#include <math.h>
using namespace std;
int sum, i, size;
void inputSize();
void sumNumbers();
 
void main(int size) 
{
	int sum=0;
	cout<<"Pascal Triangle:\n";
	inputSize();
}

void inputSize()
{
	cout<< "Enter the amount of rows (between 1 and 9) you would like in the triangle."<<endl;
	cin >>size;
	cout<<"\n";	

	if (size > 0 && size <10)
	{	
		int *rowA = new int[1];
		rowA[0] = 1;
		cout <<setw(6)<<rowA[0] <<endl;
 
		for (int x = 1; x < size; x++) 
		{
			int *rowB = new int[x+1];
			rowB[0] = rowA[0];
			for (int y = 1; y < x; y++)
				rowB[y] = rowA[y-1] + rowA[y];
				rowB[x] = rowA[x-1];
														 
			delete [] rowA;
			rowA = rowB;
 
			for (int y = 0; y <= x; y++)
			cout <<setw(6)<< rowB[y];
			cout <<"\n";
		}
		delete [] rowA;

		sumNumbers();
	}

	else
	{ cout<< "Number is not between 1-9.\n"<<endl; }
}
		
void sumNumbers()
{
	for (int x=0; x<size; x++)
	{
		[B]sum += pow (2.0, x);[/B]

		for (int y=0; y<size; y++)
		{
		}
	}
	cout<<"\nThe sum of the values: "<<sum<<"\n"<<endl;
}
Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.