`/* trad-shapes.cpp. Code generated using Microsoft Visual C++.  Using traditional structured programming, this program creates shapes,  displays their properties, and prints them.*/#include <iostream>#include <math.h>using namespace std;/* printLine is a useful function for line printing.  For simplicity, this implementation outputs the end  points of the line; going into graphics programming  would distract from the purpose of this demonstration.*/void printLine( int x1, int y1, int x2, int y2 ) {    cout << "Line from (" << x1 << "," << y1 << ") ";    cout << "to (" << x2 << "," << y2 << ")n";}/* Rectangle  A rectangle basically looks like this:         |------ length -----|        1 --------------------- 2 -         |                   |   |         |                   |   |         |                   |   | height         |                   |   |       4 --------------------- 3 -  The code for Rectangle follows (28 lines of code).*/struct Rectangle {	int x1, y1, x2, y2, x3, y3, x4, y4;};void createRect( Rectangle* r, int x, int y, int length, int height) {	r->x1 = x;	r->y1 = y;	r->x2 = x + length;	r->y2 = y;	r->x3 = x + length;	r->y3 = y - height;	r->x4 = x;	r->y4 = y - height;}void displayRect( Rectangle r ) { // displays properties    cout << "Rectangle Properties: ";    cout << "Top-left corner is (" << r.x1 << "," << r.y1 << ")n";    cout << "Line 1-2 is " << (r.x2 - r.x1) << " points long.n";    cout << "Line 2-3 is " << (r.y2 - r.y3) << " points long.n";    cout << "Line 3-4 is " << (r.x3 - r.x4) << " points long.n";    cout << "Line 4-1 is " << (r.y1 - r.y4) << " points long.n";}void printRect( Rectangle r ) {    cout << "Rectangle:n";    printLine( r.x1, r.y1, r.x2, r.y2 );    printLine( r.x2, r.y2, r.x3, r.y3 );    printLine( r.x3, r.y3, r.x4, r.y4 );    printLine( r.x4, r.y4, r.x1, r.y1 );}/* Isosceles  An isosceles triangle basically looks like this:                    1                    ^       -                   /       |                  /        | height                 /         |              3 /------- 2 -                |--base-|    The code for Isosceles follows. With 27 lines of code, it about as  long as Rectangle, with some time savings for structure and typing.  However, these time savings were partially negated by the time it took  to debug the bugs introduced by the cut-and-paste method of reuse. For  a small program like this, the typo effect is minor, but in large  programs, the bugs introduced can be quite significant.*/struct Isosceles {	int x1, y1, x2, y2, x3, y3;};void createIso( Isosceles* i, int x, int y, int height, int base) {	if ( base%2 == 1 )        // base is odd, so increment to allow even division by two        base++;    i->x1 = x;	i->y1 = y;	i->x2 = x + (base/2);	i->y2 = y - height;	i->x3 = x - (base/2);	i->y3 = y - height;}void displayIso( Isosceles i ) { // displays properties    cout << "Isosceles Triangle Properties: ";    cout << "Topmost point is (" << i.x1 << "," << i.y1 << ")n";    float slope = sqrt( pow(i.y1-i.y2, 2) + pow(i.x2-i.x1, 2) );  // Pythagoran formula    cout << "Line 1-2 is " << slope << " points long.n";    cout << "Line 2-3 is " << (i.x2 - i.x3) << " points long.n";    cout << "Line 3-1 is " << slope << " points long.n";}void printIso( Isosceles i ) {    cout << "Isosceles Triangle:n";    printLine( i.x1, i.y1, i.x2, i.y2 );    printLine( i.x2, i.y2, i.x3, i.y3 );    printLine( i.x3, i.y3, i.x1, i.y1 );}/* Parallelogram  A parallelogram basically looks like this:         |------ base -----|        1 --------------------- 2                                                                                                                                           4 --------------------- 3  The code for Parallelogram follows. With 29 lines of code, it about as  long as Rectangle and Triangle. Again, the code was primarily composed  by cutting and pasting, which introduced a number of compiler errors  that had to be debugged. By this time, we can tell that each new shape  of this level of simplicity takes just under 30 lines of code.*/struct Parallelogram {	int x1, y1, x2, y2, x3, y3, x4, y4;};void createPar( Parallelogram* p, int x1, int y1, int base, int x4, int y4 ) {	p->x1 = x1;	p->y1 = y1;	p->x2 = x1 + base;	p->y2 = y1;	p->x3 = x4 + base;	p->y3 = y4;	p->x4 = x4;	p->y4 = y4;}void displayPar( Parallelogram p ) { // displays properties    cout << "Parallelogram Properties: ";    cout << "Top-left corner is (" << p.x1 << "," << p.y1 << ")n";    float slope = sqrt( pow(p.y1-p.y4, 2) + pow(p.x1-p.x4, 2) );  // Pythagoran formula    cout << "Line 1-2 is " << (p.x2 - p.x1) << " points long.n";    cout << "Line 2-3 is " << slope << " points long.n";    cout << "Line 3-4 is " << (p.x3 - p.x4) << " points long.n";    cout << "Line 4-1 is " << slope << " points long.n";}void printPar( Parallelogram p ) {    cout << "Parallelogram:n";    printLine( p.x1, p.y1, p.x2, p.y2 );    printLine( p.x2, p.y2, p.x3, p.y3 );    printLine( p.x3, p.y3, p.x4, p.y4 );    printLine( p.x4, p.y4, p.x1, p.y1 );}int main() {		Rectangle r;	createRect( &r, 3,10, 6, 8 ); // anchor point, length, height    cout << "n";    displayRect( r );    cout << "n";    printRect( r );    Isosceles i;	createIso( &i, 3,10, 6, 8 ); // anchor point, height, base    cout << "n";    displayIso( i );    cout << "n";    printIso( i );    Parallelogram p;	createPar( &p, 3,10, 6, 5,7 ); // upper anchor, base, lower anchor    cout << "n";    displayPar( p );    cout << "n";    printPar( p );    return 0;} `