# Exercise 4-2

Write a program to calculate the squares of int values up to 100. The program should write two columns: The first lists the value; the second contains the square of that value. Use setw to manage the output so that the values line up in columns.

# Solution

To keep the code as simple as possible, for the sake of solving this particular problem, I will have some kind of hard-code values in the codes. Of course, the code can be made more intelligent later on and remove the need of hard-coding!

The setw(n) function returns a value of type streamsize that, when written on an output stream s, has the effect of calling s.width(n).

After doing some experiments in Code::Block I learn that, if (say) the integer width is smaller than n, the outputstream will simply align the numbers to the right, and pad the left side with leading empty spaces. Likewise for strings.

We are asked to output two columns.

Column 1 contains a list of integers defined by this symmetric range [0,100] – i.e. between 0 and 100 inclusively. We therefore require n = 3 for this, so we can fit in the max integer 100.

Column 2 contains a list of integers defined by this symmetric range [0, 10000] – i.e. between 0 and 10000 inclusively. We therefore require n = 6 for this, so we can fit in the max integer 10000 (which takes up a width of 5), plus 1 leading empty space to separate this column from column 1.

The program will look like this:

#include <iostream>
#include <iomanip>

using std::cout;
using std::endl;
using std::setw;

int main()
{
for (int i = 0; i != 101; ++i)
{
cout << setw(3) << i << setw(6) << (i * i) << endl;
}
}


# Result

  0     0
1     1
2     4
3     9
4    16
5    25
6    36
7    49
8    64
9    81
10   100
11   121
12   144
13   169
14   196
15   225
16   256
17   289
18   324
19   361
20   400
21   441
22   484
23   529
24   576
25   625
26   676
27   729
28   784
29   841
30   900
31   961
32  1024
33  1089
34  1156
35  1225
36  1296
37  1369
38  1444
39  1521
40  1600
41  1681
42  1764
43  1849
44  1936
45  2025
46  2116
47  2209
48  2304
49  2401
50  2500
51  2601
52  2704
53  2809
54  2916
55  3025
56  3136
57  3249
58  3364
59  3481
60  3600
61  3721
62  3844
63  3969
64  4096
65  4225
66  4356
67  4489
68  4624
69  4761
70  4900
71  5041
72  5184
73  5329
74  5476
75  5625
76  5776
77  5929
78  6084
79  6241
80  6400
81  6561
82  6724
83  6889
84  7056
85  7225
86  7396
87  7569
88  7744
89  7921
90  8100
91  8281
92  8464
93  8649
94  8836
95  9025
96  9216
97  9409
98  9604
99  9801
100 10000


# Reference

Koenig, Andrew & Moo, Barbara E., Accelerated C++, Addison-Wesley, 2000

## One thought on “Accelerated C++ Solution to Exercise 4-2”

1. Anonymous says:

I used vector and typedef just to improve my skills. This is what I got:
int main()
{
vector sq;

typedef vector<int>::size_type vc_sz; vc_sz size = 100;

 for (vc_sz i = 0; i != size; i++) { sq.push_back(i+1); cout << setw(3) << sq[i] << setw(10) << sq[i] * sq[i] << endl; } 

return 0; 

}