# 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

string name;
cin >> name;

// build the message that we intend to write
const string greeting = "Hello, " + name + "!";

// the number of blanks surrounding the greeting

// 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.


# Reference

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