1. ## C Diamond

This program is supposed is to take the input of a odd integer and print a symmetrical diamond. The thing is, is that I've created a diamond but it isn't symmetrical. If the user enters '5' it should be five *s on the third line not six. Can give me any suggestions. I have a general understanding of nested loops as a whole nested for loops are the worse for me. Thanks in advance.
Code:
```#include <stdio.h>

int main ()
{

int Height;
int x, y, z;
printf("What is the Height of the Diamond:\n");
scanf("%d", &Height);
for (x=(Height-1); x>0; --x)
{
printf("%*s",x,"");
for (y=x; y<Height; ++y)
{

for (z=(Height-1); z>y; z--)
{
printf("*");
}

}
printf("\n");

}

// Beginning of bottom half of the diamond...

for (x=(Height-1)/2; x<Height; ++x)
{
printf("%*s",x,"");
for (y=x; y<=Height; y++)
{
for (z=(Height-1); z>y; z--)
{
printf("*");
}

}

printf("\n");

}

return 0;
}```

2. Use just two (not three) nested for loops for each half of the diamond pattern. Get the top half done, THEN start working on the lower half.

Print nothing in the outer for loop - that's just for getting the row number and setting up the inner for loop - where ALL the printing is done.

Use one or more if statements inside the inner for loop.

Personally, I do these working from 0 to N, working upward, (incrementing), never decrementing. That just seems confusing to me. (If you like it, fine).

Isn't the height of the diamond, the WHOLE height of the diamond? Seems like drawing the height of the diamond, and drawing half the height of the diamond, is going to give you 150% of what you should be drawing, yes?

Variable names are important - please don't call your row variable X, since X is used for the horizontal column variable in all the gotoxy(x,y) statements, (and math and other functions in programming).

Maybe row, rows, or rowNum?

Same with y - it's confusing when you use it for the column variable, since it's always been used for the vertical (in math and programming).
Maybe col or cols, or colNum?

Sit down with pen and paper and draw this out a few times, by hand. SLOWLY. BECOME the tip of the pen. Think "what is the row number, and what is the column number", for every time you move the tip of the pen.

If you concentrate on it, and BECOME the tip of the pen, you will see the patterns you follow, to draw this - and those patterns will also form the logic for your program.

Try that, and see if that doesn't help.

3. Thanks for the advice. I appreciate it a lot. I sat down and drew it out a couple of times and I see the pattern. The stars increase by 1+ each Col Number, but I can't figure out how to get the inner loop to read the Col Numbers so it can increment the row correctly and print that number of stars.

4. Originally Posted by C_Nik
Thanks for the advice. I appreciate it a lot. I sat down and drew it out a couple of times and I see the pattern. The stars increase by 1+ each Col Number, but I can't figure out how to get the inner loop to read the Col Numbers so it can increment the row correctly and print that number of stars.
You're not there yet - get INTO it - you are now the cursor on your monitor or printer. You ONLY print across a single row of text, at any time. You NEVER back up, you NEVER move down to another row without having printed out a newline or running out of space.

Ask yourself : "On the 1st row, how many stars? (should you print)"

"On the 2nd row, how many stars?"

"On the 3rd row, how many stars?"

C'mon, work it out!