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.







  Designed by Chris Szalwinski   Copying From This Site   
Logo
Creative Commons License