Part B  Foundations
Compound Types
Workshop 2
In this workshop, you are to define a compound type
with private data and public member functions.
Learning Outcomes
Upon successful completion of this workshop, you will have
demonstrated the abilities
 to design a compound type
 to privatize data within instances of that type
 to access data within an instance of the compound type through
public member functions
Fraction Simplifier  All Groups
Design and code a compound type named Fraction
that has three member functions named
 void set(int n, int d)
 void simplify()
 void display() const
The set() function accepts the
numerator and denomenator from the client and stores simplified
values in a Fraction object.
The simplify() function simplifies
the numerator and denominator, if possible, in a Fraction
object. The display() query displays the
fraction stored in a Fraction object on
standard output.
The main program that uses your compound type contains
the following code. The output from this program looks
something like that shown on the right.
// Workshop 2  Fraction Simplifier
// w2.cpp
#include <iostream>
using namespace std;
#include "Fraction.h"
int main() {
Fraction fraction;
int num, den;
cout << "Fraction Simplifier" << endl;
cout << "===================" << endl;
cout << "Numerator : ";
cin >> num;
cout << "Denominator : ";
cin >> den;
cout << endl;
fraction.set(num, den);
fraction.display();
cout << endl;
}

Fraction Simplifier
===================
Numerator: 4
Denominator: 16
1 / 4

Place your definition of the Fraction
type in a header file named Fraction.h.
Place your member function definitions in an implementation file
named Fraction.cpp.
For a complete solution you need to design an algorithm that simplifies
a fraction. Test several fractions to ensure that your algorithm
works for all cases. Include negative as well as zero values in your
test cases.
Typescript  Group X only
On matrix, create a typescript of your complete solution
using the following commands:
+ At the prompt, type: script w2.txt
+ At the prompt, type: whoami
+ At the prompt, type: cat w2.cpp Fraction.h Fraction.cpp
+ At the prompt, type: g++ o w2 w2.cpp Fraction.cpp
+ At the prompt, type: w2
+ At the input prompt, enter some test data
+ At the prompt, type: w2
+ At the input prompt, enter some other test data
+ At the prompt, type: w2
+ At the input prompt, enter some other test data
+ At the prompt, type: w2
+ At the input prompt, enter some other test data
+ At the prompt, type: exit

These commands will produce a file named w2.txt.
Download your typescript file to your local computer.
For submission instructions, see the
SUBMISSION section below.
Unit Tests  Group Y
Design and code the solution described above. In addition, add
unit testing to your solution. Upgrade the definition of your compound type to include
two more queries:

int numerator() const
 int denominator() const
The numerator() query returns the
numerator stored in a Fraction object.
The denomenator() query returns the
denomenator stored in a Fraction object.
The main program that tests your compound type contains
the following code. The output from this program looks
something like that shown on the right.
// Workshop 2  Fraction Simplifier
// w2.cpp
#include <iostream>
using namespace std;
#include "Fraction.h"
int unitTests(Fraction* f) {
cout << "Fraction Simplifier Tests" << endl;
cout << "=========================" << endl;
// fill in code for unit tests
}
int main() {
Fraction fraction;
bool passed;
passed = unitTests(&fraction);
if (passed)
cout << "Passed All Tests" << endl;
else
cout << "Failed Tests" << endl;
}

Fraction Simplifier Tests
=========================
Test 1 Passed
Input: 4/16
Output: 1/4
Test 2 Passed
Input: 4/16
Output: 1/4
Test 3 Passed
Input: 0/16
Output: 0
Test 4 Passed
Input: 0/0
Output: undefined
Test 5 Passed
Input: 4/0
Output: undefined
Passed All Tests

Place your definition of the Fraction
type in a header file named Fraction.h.
Place your member function definitions in an implementation file
named Fraction.cpp.
Typescript
On matrix, create a typescript of your complete solution
using the following commands:
+ At the prompt, type: script w2.txt
+ At the prompt, type: whoami
+ At the prompt, type: cat w2.cpp Fraction.h Fraction.cpp
+ At the prompt, type: g++ o w2 w2.cpp Fraction.cpp
+ At the prompt, type: w2
+ At the prompt, type: exit

These commands will produce a file named w2.txt.
Download your typescript file to your local computer.
SUBMISSION
Moodle
Upload your typescript file to Moodle:
 Login to Moodle
 Select your course code
 Select W2 under Assignments and Tasks
 Upload w2.txt
 Write a short note to your instructor
 press "Edit"
 enter your conclusions about this workshop in the notes textbox
 press "Save Changes"
 When ready to submit, press "Send for Marking"
Other Submissions
Submit your typescript file as your instructor has specified.
