normyp
normyp

Reputation: 184

How would I print more blocks horizontally?

#include <iostream>

using namespace std;

void TimesTable(int count)
{
    for (int j = 1; j < 13; j++)
    {
        cout << count << " x " << j << " = " << count*j << " " << endl;
    }
}

int main()
{
    for (int count = 1; count < 13; count++)
    {
        TimesTable(count);
        cout << endl;
    }

        system("Pause");
}

This prints

"1 x 1 = 1
 1 x 2 = 2

 2x1 = 2
 2x2 = 4

 3x1 = 3
 3x2 = 6"

and so on. But the thing I want to do is so instead of having them all print in a line downwards, I want to have it in blocks so,

 "1 x 1 = 1   2 x 1 = 2   3 x 1  = 3  4 x  1 = 4  5 x 1  = 5
  1 x 2  = 2  2 x 2 = 4   3 x 2 = 6   4 x 2 = 8   5 x 2 = 10"

and so on. But obviously it would look better if it didn't then go to 12 horizontally or otherwise you'd have to grab the bar at the bottom of the console window and drag to see the other timestables. I'd like it so that it went to 5 on block line 1 then on the 2nd line of blocks it would be 6 to 10 and the final line 10 to 12.

Yes it's random that it only goes up to 12 but it was an exercise and I've just adapted it into some other monster.

And I guess I could just have more than one cout in the for loop but I swear in the past I've seen someone do this with just a clever way of passing through a variable so that it printed a block of asterisks side by side instead of pretending to do it.

Desired Result (make it easier with symbols instead):

" ***** ^^^^^ &&&&&
  ***** ^^^^^ &&&&&
  ***** ^^^^^ &&&&& "

Result as of now:

" *****
  *****
  *****

  ^^^^^
  ^^^^^
  ^^^^^

  &&&&&
  &&&&&
  &&&&& "

Upvotes: 0

Views: 154

Answers (2)

rnrneverdies
rnrneverdies

Reputation: 15657

To format columns, use std::setw from <iomanip>

Sets the field width to be used on output operations.

now.

outside, iterate over the lines.

inside, iterate over the columns.

CODE

#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
    int cols_per_line = 5;
    for (int line = 1; line < 13; line++)
    {
        for (int col = 1; col <= cols_per_line; col++)
        {
            cout << setw(2) << col << " x " << setw(2) << line << " = " << setw(3) << line*col << "   ";
        }
        cout << endl;
    }
}

OUTPUT

[root@rnrlabs ~]# ./a.out
 1 x  1 =   1    2 x  1 =   2    3 x  1 =   3    4 x  1 =   4    5 x  1 =   5
 1 x  2 =   2    2 x  2 =   4    3 x  2 =   6    4 x  2 =   8    5 x  2 =  10
 1 x  3 =   3    2 x  3 =   6    3 x  3 =   9    4 x  3 =  12    5 x  3 =  15
 1 x  4 =   4    2 x  4 =   8    3 x  4 =  12    4 x  4 =  16    5 x  4 =  20
 1 x  5 =   5    2 x  5 =  10    3 x  5 =  15    4 x  5 =  20    5 x  5 =  25
 1 x  6 =   6    2 x  6 =  12    3 x  6 =  18    4 x  6 =  24    5 x  6 =  30
 1 x  7 =   7    2 x  7 =  14    3 x  7 =  21    4 x  7 =  28    5 x  7 =  35
 1 x  8 =   8    2 x  8 =  16    3 x  8 =  24    4 x  8 =  32    5 x  8 =  40
 1 x  9 =   9    2 x  9 =  18    3 x  9 =  27    4 x  9 =  36    5 x  9 =  45
 1 x 10 =  10    2 x 10 =  20    3 x 10 =  30    4 x 10 =  40    5 x 10 =  50
 1 x 11 =  11    2 x 11 =  22    3 x 11 =  33    4 x 11 =  44    5 x 11 =  55
 1 x 12 =  12    2 x 12 =  24    3 x 12 =  36    4 x 12 =  48    5 x 12 =  60

Upvotes: 2

mesut
mesut

Reputation: 2177

Just remove the endl at the end of TimeTable for inner "for" and add another counter for splitter say:

Edit: change j with count.

 int splitter = 0;
 for (int j = 1; j < 13; j++, splitter++)
 {
    cout << j << " x " << count  << " = " << count*j << "\t";
    if (splitter == 5)
    {
       cout << endl;
       splitter=-1;
    }
 }


1 x 1 = 1   2 x 1 = 2   3 x 1 = 3   4 x 1 = 4   5 x 1 = 5   6 x 1 = 6   
7 x 1 = 7   8 x 1 = 8   9 x 1 = 9   10 x 1 = 10 11 x 1 = 11 12 x 1 = 12 

1 x 2 = 2   2 x 2 = 4   3 x 2 = 6   4 x 2 = 8   5 x 2 = 10  6 x 2 = 12  
7 x 2 = 14  8 x 2 = 16  9 x 2 = 18  10 x 2 = 20 11 x 2 = 22 12 x 2 = 24 

1 x 3 = 3   2 x 3 = 6   3 x 3 = 9   4 x 3 = 12  5 x 3 = 15  6 x 3 = 18  
7 x 3 = 21  8 x 3 = 24  9 x 3 = 27  10 x 3 = 30 11 x 3 = 33 12 x 3 = 36 

1 x 4 = 4   2 x 4 = 8   3 x 4 = 12  4 x 4 = 16  5 x 4 = 20  6 x 4 = 24  
7 x 4 = 28  8 x 4 = 32  9 x 4 = 36  10 x 4 = 40 11 x 4 = 44 12 x 4 = 48 

1 x 5 = 5   2 x 5 = 10  3 x 5 = 15  4 x 5 = 20  5 x 5 = 25  6 x 5 = 30  
7 x 5 = 35  8 x 5 = 40  9 x 5 = 45  10 x 5 = 50 11 x 5 = 55 12 x 5 = 60 

1 x 6 = 6   2 x 6 = 12  3 x 6 = 18  4 x 6 = 24  5 x 6 = 30  6 x 6 = 36  
7 x 6 = 42  8 x 6 = 48  9 x 6 = 54  10 x 6 = 60 11 x 6 = 66 12 x 6 = 72 

1 x 7 = 7   2 x 7 = 14  3 x 7 = 21  4 x 7 = 28  5 x 7 = 35  6 x 7 = 42  
7 x 7 = 49  8 x 7 = 56  9 x 7 = 63  10 x 7 = 70 11 x 7 = 77 12 x 7 = 84 

1 x 8 = 8   2 x 8 = 16  3 x 8 = 24  4 x 8 = 32  5 x 8 = 40  6 x 8 = 48  
7 x 8 = 56  8 x 8 = 64  9 x 8 = 72  10 x 8 = 80 11 x 8 = 88 12 x 8 = 96 

1 x 9 = 9   2 x 9 = 18  3 x 9 = 27  4 x 9 = 36  5 x 9 = 45  6 x 9 = 54  
7 x 9 = 63  8 x 9 = 72  9 x 9 = 81  10 x 9 = 90 11 x 9 = 99 12 x 9 = 108    

1 x 10 = 10 2 x 10 = 20 3 x 10 = 30 4 x 10 = 40 5 x 10 = 50 6 x 10 = 60 
7 x 10 = 70 8 x 10 = 80 9 x 10 = 90 10 x 10 = 100   11 x 10 = 110   12 x 10 = 120   

1 x 11 = 11 2 x 11 = 22 3 x 11 = 33 4 x 11 = 44 5 x 11 = 55 6 x 11 = 66 
7 x 11 = 77 8 x 11 = 88 9 x 11 = 99 10 x 11 = 110   11 x 11 = 121   12 x 11 = 132   

1 x 12 = 12 2 x 12 = 24 3 x 12 = 36 4 x 12 = 48 5 x 12 = 60 6 x 12 = 72 
7 x 12 = 84 8 x 12 = 96 9 x 12 = 108    10 x 12 = 120   11 x 12 = 132   12 x 12 = 144   

Upvotes: 0

Related Questions