Homework 21 Solution
 

Write a recursive function

 

void rectangle(int rowNum, int colNum, ostream &OUT);

that prints out rectangles of *'s with rowNum rows and colNum columns. In the spirit of bottom-up design, I'll provide you with a function you may want to use:

void rep(char c, int k, ostream& OUT)
{
  for(int i = 0; i < k; i++)
    OUT << c;
}

Test your function with a program that reads the dimensions of the rectangle (you may assume non-negative integer input from the user) and the destination (screen or file) that you’re writing to from the user, something like this:

How many rows? 8
How many columns? 3
(S)creen or (F)ile? S
 
***
***
***
***
***
***
***
***
 

Turn In a printout of your program, hw21.txt, and two screen captures, one showing your program run on the above example with output going to the screen, and another showing the same input with the output going to a file called hw21.txt.

 

Solution

// KGS
// recursive rectangle


#include
<iostream>
#include <fstream>
#include <string>
using namespace
std;

//prototypes
void rectangle(int, int, ostream&);
void rep(char, int, ostream&);

int main (){
    int rows,cols;
    char where;

    cout << "This program was written by KGS." << endl;
    cout << "It prints a rectangle of *'s." << endl;
    cout << "How many rows? ";
    cin >> rows;
    cout << "How many columns? ";
    cin >> cols;
    cout << "(S)creen or (F)ile? ";
    cin >> where;

    if (where == 'F'){
        string name;
        cout << "Enter the name of the output file: ";
        cin >> name;
        ofstream fout(name.c_str());

        rectangle(rows,cols,fout);
    }
    else
        rectangle(rows,cols,cout);
    return 0;
}


void rectangle(int r, int c, ostream & out){
    if (r==0)  // base case, nothing to print
        return;
    else{      // recursive case
        rep('*',c,out);  // print a c number of * on a row
        out << endl;     // newline
        rectangle(r-1,c,out);  // recursive call for 1 less row
    }
}

void rep(char c, int k, ostream& out){
    for(int i = 0; i < k; i++)
    out << c;
}