//File: rect03.cpp
//Date: 02/08/2002
//Authors: Us
////////////////////////////////////////////////////////////
//Problem: define rectangle type and some operations for it
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
// includes
////////////////////////////////////////////////////////////
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
////////////////////////////////////////////////////////////
// type TRectangle definition
////////////////////////////////////////////////////////////
const int TEST_COUNT = 5;
////////////////////////////////////////////////////////////
// type TRectangle definition
////////////////////////////////////////////////////////////
struct TRectangle
{
int length;
int width;
};
////////////////////////////////////////////////////////////
// prototype
////////////////////////////////////////////////////////////
void init(TRectangle &rec, const int a, const int b);
void init(TRectangle &rec, const char ch);
void display(const TRectangle &rec);
bool areEqual(const TRectangle &rec1, const TRectangle &rec2);
bool operator == (const TRectangle &rec1, const TRectangle &rec2);
bool operator != (const TRectangle &rec1, const TRectangle &rec2);
ostream & operator << (ostream &bob, const TRectangle &rec);
////////////////////////////////////////////////////////////
// prototype test functions
////////////////////////////////////////////////////////////
void testInit1(void);
void testInit2(void);
void testOperatorEqual(void);
void testOperatorNotEqual(void);
////////////////////////////////////////////////////////////
// main
////////////////////////////////////////////////////////////
void main(void)
{
srand(time(NULL));
testInit1();
testInit2();
testOperatorEqual();
testOperatorNotEqual();
}
////////////////////////////////////////////////////////////
// init
////////////////////////////////////////////////////////////
void init(TRectangle &rec, const int a, const int b)
{
if (a < 0)
rec.length = -a;
else
rec.length = a;
if (b < 0)
rec.width = -b;
else
rec.width = b;
if (0 == a)
rec.length = 1;
if (0 == b)
rec.width = 1;
}
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
// testInit1
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
void testInit1(void)
{
cout << "init(TRectangle &rec, const int a, const int b)\n";
cout << "===============================================\n";
for (int i=1; i<=TEST_COUNT; i++)
{
TRectangle r1;
int a = -10 + rand()%21;
int b = -10 + rand()%21;
cout << "a= " << a << ", b= " << b << endl;
cout << "Before init(r1, a, b);\n";
cout <<r1;
init(r1, a, b);
cout << "After init(r1, a, b);\n";
cout << r1;
TRectangle *p1;
p1 = new TRectangle;
cout << "Before init(*p1, a, b);\n";
cout << *p1;
init(*p1, a, b);
cout << "Before init(*p1, a, b);\n";
cout << *p1;
delete p1;
cout << "-----------------------\n";
}
}
////////////////////////////////////////////////////////////
// init
////////////////////////////////////////////////////////////
void init(TRectangle &rec, const char ch)
{
if (('r' == ch) || ('R' == ch))
{
rec.length = 1 + rand()%10;
rec.width = 1 + rand()%10;
}
else
{
rec.length = 1;
rec.width = 1;
}
}
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
// testInit2
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
void testInit2(void)
{
cout << "init(TRectangle &rec, const char ch)\n";
cout << "====================================\n";
for (int i=1; i<=TEST_COUNT; i++)
{
TRectangle r1;
char ch;
char characters[] = {'r', 'R', 'x'};
int a = rand()%3;
ch = characters[a];
cout << "ch= " << ch << endl;
cout << "Before init(r1, ch);\n";
cout <<r1;
init(r1, ch);
cout << "After init(r1, ch);\n";
cout << r1;
TRectangle *p1;
p1 = new TRectangle;
cout << "Before init(*p1, ch);\n";
cout << *p1;
init(*p1, ch);
cout << "After init(*p1, ch);\n";
cout << *p1;
delete p1;
cout << "-----------------------\n";
}
}
////////////////////////////////////////////////////////////
// display
////////////////////////////////////////////////////////////
void display(const TRectangle &rec)
{
cout << "rect(" << rec.length << ", "
<< rec.width << ')' << endl;
}
////////////////////////////////////////////////////////////
// areEqual
////////////////////////////////////////////////////////////
bool areEqual(const TRectangle &rec1, const TRectangle &rec2)
{
return (rec1.length == rec2.length)
&& (rec1.width == rec2.width);
}
////////////////////////////////////////////////////////////
// operator ==
////////////////////////////////////////////////////////////
bool operator == (const TRectangle &rec1, const TRectangle &rec2)
{
return (rec1.length == rec2.length)
&& (rec1.width == rec2.width);
}
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
// testOperatorEqual
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
void testOperatorEqual(void)
{
cout << "bool operator == (rec1, rec2)\n";
cout << "=============================\n";
for (int i=1; i<=TEST_COUNT; i++)
{
TRectangle r1, r2;
init(r1, 'r');
init(r2, 'r');
cout << "Initially\n";
cout << "r1=" << r1;
cout << "r2=" << r2;
if (r1 == r2)
cout << "Are Equal\n";
else
cout << "Not Equal\n";
r1 = r2;
cout << "After r1 = r2;\n";
cout << "r1=" << r1;
cout << "r2=" << r2;
if (r1 == r2)
cout << "Are Equal\n";
else
cout << "Not Equal\n";
cout << "-----------------------\n";
}
}
////////////////////////////////////////////////////////////
// operator !=
////////////////////////////////////////////////////////////
bool operator != (const TRectangle &rec1, const TRectangle &rec2)
{
return !(rec1 == rec2);
}
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
// testOperatorNotEqual
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
void testOperatorNotEqual(void)
{
cout << "bool operator != (rec1, rec2)\n";
cout << "=============================\n";
for (int i=1; i<=TEST_COUNT; i++)
{
TRectangle r1, r2;
init(r1, 'r');
init(r2, 'r');
cout << "Initially\n";
cout << "r1=" << r1;
cout << "r2=" << r2;
if (r1 != r2)
cout << "Not Equal\n";
else
cout << "Are Equal\n";
r1 = r2;
cout << "After r1 = r2;\n";
cout << "r1=" << r1;
cout << "r2=" << r2;
if (r1 != r2)
cout << "Not Equal\n";
else
cout << "Are Equal\n";
cout << "-----------------------\n";
}
}
////////////////////////////////////////////////////////////
// operator << for output
////////////////////////////////////////////////////////////
ostream & operator << (ostream &bob, const TRectangle &rec)
{
bob << "rect(" << rec.length << ", "
<< rec.width << ')' << endl;
return bob;
}
/**********************************************************/
// SAMPLE OUTPUT
/**********************************************************/
/*
init(TRectangle &rec, const int a, const int b)
===============================================
a= -2, b= 8
Before init(r1, a, b);
rect(-858993460, -858993460)
After init(r1, a, b);
rect(2, 8)
Before init(*p1, a, b);
rect(-842150451, -842150451)
Before init(*p1, a, b);
rect(2, 8)
-----------------------
a= 8, b= -5
Before init(r1, a, b);
rect(2, 8)
After init(r1, a, b);
rect(8, 5)
Before init(*p1, a, b);
rect(-842150451, -842150451)
Before init(*p1, a, b);
rect(8, 5)
-----------------------
a= 7, b= 8
Before init(r1, a, b);
rect(8, 5)
After init(r1, a, b);
rect(7, 8)
Before init(*p1, a, b);
rect(-842150451, -842150451)
Before init(*p1, a, b);
rect(7, 8)
-----------------------
a= -9, b= 8
Before init(r1, a, b);
rect(7, 8)
After init(r1, a, b);
rect(9, 8)
Before init(*p1, a, b);
rect(-842150451, -842150451)
Before init(*p1, a, b);
rect(9, 8)
-----------------------
a= 4, b= -1
Before init(r1, a, b);
rect(9, 8)
After init(r1, a, b);
rect(4, 1)
Before init(*p1, a, b);
rect(-842150451, -842150451)
Before init(*p1, a, b);
rect(4, 1)
-----------------------
init(TRectangle &rec, const char ch)
====================================
ch= R
Before init(r1, ch);
rect(-858993460, -858993460)
After init(r1, ch);
rect(1, 4)
Before init(*p1, ch);
rect(-842150451, -842150451)
After init(*p1, ch);
rect(10, 5)
-----------------------
ch= x
Before init(r1, ch);
rect(1, 4)
After init(r1, ch);
rect(1, 1)
Before init(*p1, ch);
rect(-842150451, -842150451)
After init(*p1, ch);
rect(1, 1)
-----------------------
ch= r
Before init(r1, ch);
rect(1, 1)
After init(r1, ch);
rect(5, 5)
Before init(*p1, ch);
rect(-842150451, -842150451)
After init(*p1, ch);
rect(9, 1)
-----------------------
ch= x
Before init(r1, ch);
rect(5, 5)
After init(r1, ch);
rect(1, 1)
Before init(*p1, ch);
rect(-842150451, -842150451)
After init(*p1, ch);
rect(1, 1)
-----------------------
ch= x
Before init(r1, ch);
rect(1, 1)
After init(r1, ch);
rect(1, 1)
Before init(*p1, ch);
rect(-842150451, -842150451)
After init(*p1, ch);
rect(1, 1)
-----------------------
bool operator == (rec1, rec2)
=============================
Initially
r1=rect(6, 3)
r2=rect(9, 1)
Not Equal
After r1 = r2;
r1=rect(9, 1)
r2=rect(9, 1)
Are Equal
-----------------------
Initially
r1=rect(10, 2)
r2=rect(4, 9)
Not Equal
After r1 = r2;
r1=rect(4, 9)
r2=rect(4, 9)
Are Equal
-----------------------
Initially
r1=rect(8, 9)
r2=rect(10, 6)
Not Equal
After r1 = r2;
r1=rect(10, 6)
r2=rect(10, 6)
Are Equal
-----------------------
Initially
r1=rect(5, 4)
r2=rect(9, 8)
Not Equal
After r1 = r2;
r1=rect(9, 8)
r2=rect(9, 8)
Are Equal
-----------------------
Initially
r1=rect(4, 8)
r2=rect(10, 5)
Not Equal
After r1 = r2;
r1=rect(10, 5)
r2=rect(10, 5)
Are Equal
-----------------------
bool operator != (rec1, rec2)
=============================
Initially
r1=rect(8, 9)
r2=rect(7, 6)
Not Equal
After r1 = r2;
r1=rect(7, 6)
r2=rect(7, 6)
Are Equal
-----------------------
Initially
r1=rect(7, 6)
r2=rect(3, 10)
Not Equal
After r1 = r2;
r1=rect(3, 10)
r2=rect(3, 10)
Are Equal
-----------------------
Initially
r1=rect(8, 2)
r2=rect(6, 4)
Not Equal
After r1 = r2;
r1=rect(6, 4)
r2=rect(6, 4)
Are Equal
-----------------------
Initially
r1=rect(6, 5)
r2=rect(6, 7)
Not Equal
After r1 = r2;
r1=rect(6, 7)
r2=rect(6, 7)
Are Equal
-----------------------
Initially
r1=rect(6, 8)
r2=rect(2, 4)
Not Equal
After r1 = r2;
r1=rect(2, 4)
r2=rect(2, 4)
Are Equal
-----------------------
Press any key to continue
*/ |