# Printing Patterns

• 11-17-2008
ferniture
Printing Patterns
I've tried many ways to do this, but can't seem to find out how to make patters such as these in a C program. I've tried most things I've learned about C so far, but still no cigar. Last time I came here I got outstanding help from you guys, so thanks very much for that! If any more information is needed then feel free to ask for it. I have the rest of the program but it is quite long now so I thought I'd simplify it a bit.

Here's the basics of my program:
1. User see's options of patterns.
2. User chooses an option.
3. User chooses a size (more details on this below).
4. The correct pattern & size is printed.
Size can be [ 2 - 9 ]

Here are what the functions should look like after printing.
Pattern One:
if size is 5:

1 * * * *
5 2 * * *
5 5 3 * *
5 5 5 4 *
5 5 5 5 5

if the size is 6:

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

Pattern Two:
(random numbers within the range 0 to size, inclusive)
if size is 5:
*********
* 0 4 3 *
* 1 2 5 *
* 3 0 1 *
*********
if size is 6:
***********
* 3 6 2 0 *
* 5 3 0 2 *
* 4 5 3 1 *
* 1 2 0 3 *
***********

Pattern Three:
The printed pattern does not include the - 's. I put those in because it is all aligned to the right, and this forum does not allow me to use spaces like that. However I just saw the Align Right button.... oh well you know what I was getting at.
if size is 5:
and the first number is 0:
--- 0 1 2 3 4
----- 5 6 7 8
------- 9 0 1
--------- 2 3
----------- 4

f size is 5:
--- 5 6 7 8 9
----- 0 1 2 3
------- 4 5 6
--------- 7 8
----------- 9
and the first number is 5:
The first number in the pattern is a random integer between 0 and 9 inclusive. All numbers in the pattern are integers within the same range. Notice that they are consecutive integers as you read the pattern one row at a time, left to right, and when you get to ten, the number changes back to 0.

Thanks for any help, this one has got me stumped.
• 11-17-2008
tabstop
Let's start easy. Do you know how to print a grid of (say) random numbers? Once you have that, then you can look at putting conditionals (if statements) inside that structure to print specific things based on where you are (you'll need to be able to print spaces in certain cases; fixed numbers in certain cases).
• 11-17-2008
ferniture
I know how to print random numbers, but as a grid I'm not sure. I get the feeling that it takes more than simply making a lot of printf lines printing spaces, *'s and integers.

Also, would it be possible to do this with loops of any sort?
• 11-17-2008
Sebastiani
>> I've tried many ways to do this, but can't seem to find out how to make patters such as these in a C program.

Rather than simply saying that you have tried and failed, post the actual code you are struggling with.
• 11-17-2008
tabstop
Quote:

Originally Posted by ferniture
Also, would it be possible to do this with loops of any sort?

Only in the sense that it would be impossible to do it any other way.
• 11-17-2008
ferniture
Quote:

Originally Posted by Sebastiani
>> I've tried many ways to do this, but can't seem to find out how to make patters such as these in a C program.

Rather than simply saying that you have tried and failed, post the actual code you are struggling with.

The code I used was simply me making multiple efforts to change the value of "size" to be able to print it differently, whether it be adding or subtracting 1 from it and using another holding int to keep the original number. Problem is I couldn't get the pattern to work right with it. I'm getting a few ideas as I type this though, so I'll post my results in a bit. But still any help is appreciated, and thanks for the replies so far.
• 11-17-2008
Consider the line. It has a total width. It needs a variable computer for that. It has a width (in char's of course), for the number of letters (char's), that it will need to print as a *, it also needs a variable for the number of times it will print anything else.

Total width of line = width of stars to print + width of anything else.

If I print one more star, the width to print out anything else must decrement by 1.

That will definitely get you thinking in the right direction.
• 11-17-2008
ferniture
How can I set the width of a line? I tried using Google, but came up with nothing. I found a page that said something about "maxoutput" but didn't go into any real detail other than saying that it exists.

I'm sorry, but I didn't follow your post very well. Could you go into a little more detail?

What I did for the first pattern is the code below, which is very "primitive" so to speak.
Code:

```printf( "Pattern One\n\n" );     if (size == 2)     {       printf("1 *\n");       printf("2 2\n");       }       else if (size == 3)     {       printf("1 * *\n");       printf("3 2 *\n");       printf("3 3 3\n");       }       else if (size == 4)     {       printf("1 * * *\n");       printf("4 2 * *\n");       printf("4 4 3 *\n");       printf("4 4 4 4\n");       }       else if (size == 5)       {           printf("1 * * * *\n");           printf("5 2 * * *\n");           printf("5 5 3 * *\n");           printf("5 5 5 4 *\n");                    printf("5 2 5 5 5\n");                    }           else if (size == 6)           {                 printf("1 * * * * *\n");                 printf("6 2 * * * *\n");                    printf("6 6 3 * * *\n");                    printf("6 6 6 4 * *\n");                 printf("6 6 6 6 5 *\n");                 printf("6 6 6 6 6 6\n");                 }                 else if (size == 7)                 {                     printf("1 * * * * * *\n");                     printf("7 2 * * * * *\n");                        printf("7 7 3 * * * *\n");                     printf("7 7 7 4 * * *\n");                     printf("7 7 7 7 5 * *\n");                     printf("7 7 7 7 7 6 *\n");                     printf("7 7 7 7 7 7 7\n");                     }                     else if (size == 8)                     {                           printf("1 * * * * * * *\n");                           printf("8 2 * * * * * *\n");                           printf("8 8 3 * * * * *\n");                           printf("8 8 8 4 * * * *\n");                           printf("8 8 8 8 5 * * *\n");                           printf("8 8 8 8 8 6 * *\n");                           printf("8 8 8 8 8 8 7 *\n");                           printf("8 8 8 8 8 8 8 8\n");                           }                           else if (size == 9)                           {                               printf("1 * * * * * * * *\n");                               printf("9 2 * * * * * * *\n");                               printf("9 9 3 * * * * * *\n");                               printf("9 9 9 4 * * * * *\n");                               printf("9 9 9 9 5 * * * *\n");                               printf("9 9 9 9 9 6 * * *\n");                               printf("9 9 9 9 9 9 7 * *\n");                               printf("9 9 9 9 9 9 9 8 *\n");                               printf("9 9 9 9 9 9 9 9 9\n");                               }```
• 11-17-2008
zacs7
That is not what they want you to do. If I was marking it, you'd probably get a 1 out of 10 (for effort).

To control the width of a line, just print however many characters you want, then a "\n".
• 11-17-2008
ferniture
Quote:

Originally Posted by zacs7
That is not what they want you to do. If I was marking it, you'd probably get a 1 out of 10 (for effort).

I'm aware of this, which is why I made the thread here. Please let me know if you have an idea of how to do it another way.

Quote:

Originally Posted by zacs7
To control the width of a line, just print however many characters you want, then a "\n".

I thought Adak was talking about some way to set the max characters on a line, and if there was more characters than the set max then it would only show the characters up until the max.

Ex:
max = 10 //however it is actually set is beyond me
printf( "012345678910" );

output: 0123456789

I may have read his post wrong though.
• 11-17-2008
zacs7
Okay...

Code:

```int  widthOfAnythingElse = 0,       widthOfLine = 0,       stars = 0; /* I want a line width of 10 in total, with 3 stars */ stars = 3; widthOfLine = 10; widthOfAnythingElse = widthOfLine - stars; for(i = 0; i < widthOfAnythingElse; i++) {   putchar(' '); } for(i = 0; i < stars; i++) {   putchar('*'); } putchar('\n');```
Of course there are many ways to do it
• 11-17-2008
```/* Printing some lines,  Adak if (size == 6)   {       printf("1 * * * * *\n");       printf("6 2 * * * *\n");          printf("6 6 3 * * *\n");          printf("6 6 6 4 * *\n");       printf("6 6 6 6 5 *\n");       printf("6 6 6 6 6 6\n");   } */ #include <stdio.h> int main(void)  {   int i, j, k, size, totalsize, number, gar;   totalsize = 6;   printf("\n");   //Outer for loop represents and controls the total number of sets to be printed     for(k = 1; k <= totalsize; k++)  {       size = k;       printf("\n");       //This for loop represents the total number of lines to be printed, in each       //set size, and the width of that line, in char's.       for(i = 1; i <= size; i++)  {             for(j = size-1; j > size - i; --j)  //controls printing set size number             printf("&#37;d ", size);                                                 printf("%d ", i);                  //prints the last digit of each line         for(j = 1; j <= size - i; j++)    //controls the asterisks             printf("* ");         printf("\n");       }   }   printf("\n\n                                Press Enter to Quit ");   gar = getchar(); gar++;   return 0; }```