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.