Exercise 2-0
Compile and run the program presented in this chapter.
Solution
Note: The comprehensive program and explanation are documented very clearly in chapter 2 of the book. Refer to the chapter for details.
This is what the program does:
- Ask user for his first name.
- Display a framed greeting message that looks like this:
****************** * * * Hello, Johnny! * * * ******************
Specification as follows:
- The greeting message is in the middle of the frame.
- We add a padding of 1 (space character) all the way around the greeting message.
- We display the frame with asterisk (*).
This is the full code as described in the chapter. I have added some extra brackets for clarity purpose.
#include <iostream>
#include <string>
// say what standard-library names we use
using std::cin;
using std::endl;
using std::cout;
using std::string;
int main()
{
// ask for the person's name
cout << "Please enter your first name: ";
// read the name
string name;
cin >> name;
// build the message that we intend to write
const string greeting = "Hello, " + name + "!";
// the number of blanks surrounding the greeting
const int pad = 1;
// the number of rows and columns to write
const int rows = ( pad * 2 ) + 3;
const string::size_type cols = greeting.size() + ( pad * 2 ) + 2;
// write a blank line to separate the output from the input
cout << endl;
// write 'rows' rows of output
// invariant: we have written r rows so far
for ( int r = 0; r != rows ; ++r )
{
string::size_type c = 0;
// invariant: we have written c characters so far in the current row
while ( c != cols)
{
// is it time to write the greeting?
if ( ( r == pad + 1 ) && ( c == pad + 1 ) )
{
cout << greeting;
c += greeting.size();
}
else
{
// are we on the border?
if (
( r == 0 ) // top row
|| ( r == rows - 1 ) // or bottom row
|| ( c == 0 ) // or left-most column
|| ( c == cols - 1 ) // or right-most column
)
{
cout << "*";
}
else
{
cout << " ";
}
++c;
}
}
cout << endl;
}
return 0;
}
Result
The program compiles successfully and produce the following output in the standard console output window.
Please enter your first name: Johnny ****************** * * * Hello, Johnny! * * * ****************** Process returned 0 (0x0) execution time : 2.699 s Press any key to continue.