CSCI 200 - Foundational Programming Concepts & Design - Fall 2022

Lab 2B - Coordinate Converter

This lab is due by Tuesday, September 27, 2022, 11:59 PM.
As with all labs you may, and are encouraged, to pair program a solution to this lab. If you choose to pair program a solution, be sure that you individually understand how to generate the correct solution.


Pass-by-Value & Pass-by-Reference


One of the limitations of functions is that they can only return a single value. A workaround to this limitation is to pass parameters by reference. When the function completes, the arguments corresponding to these parameters will contain the modified values. A generic function prototype would match the following template:

void function_name( const dataType IN_PARAM_1, const dataType IN_PARAM_2, // input to the function
                    dataType& outParam1, dataType& outParam2 );           // output from the function

This usage of constant pass-by-value input and pass-by-reference output reinforces the procedural programming style.

int value1, value2, value3, value4;           // no variables are initialized
cin >> value1 >> value2;                      // user enters value1 and value2
function_name(value1, value2, value3, value); // function call populates value3 and value4
cout << value1 << " " << value2 << endl;      // all variables now have a value
cout << value3 << " " << value4 << endl;      // all variables now have a value

Instructions


We will create two functions called polar_to_cartesian and cartesian_to_polar that match the above format. Begin by reviewing the Polar to Cartesian Conversion equations.

Your program should first prompt the user which direction they wish to convert, either
(r, θ) -> (x, y)
or
(x, y) -> (r, θ)
Prompt the user to input the values on the left hand side and then call the corresponding function to compute the right hand side. Display these resultant values to the user.

Your functions must match the following specifications:

    • Function Name: polar_to_cartesian
    • Input: double passed by constant value corresponding to the radius, double passed by constant value corresponding to the angle, double passed by reference corresponding to the xCoord, double passed by reference corresponding to the yCoord
    • Output: None
    • Description: Converts polar (r, θ) to cartesian (x, y).

    • Function Name: cartesian_to_polar
    • Input: double passed by constant value corresponding to the xCoord, double passed by constant value corresponding to the yCoord, double passed by reference corresponding to the radius, double passed by reference corresponding to the angle
    • Output: None
    • Description: Converts cartesian (x, y) to polar (r, θ).


Refactor To Multiple Files


Once your solution is working, refactor your code to use multiple files. Your project should consist of the following files with respective contents:

Be sure to update your Makefile to work with the additional files.


Lab Submission


Submit your coordinate_conversion.h, coordinate_conversion.cpp, main.cpp, Makefile file(s).

You will submit your solution to this lab with the rest of Set2. Detailed instructions for doing this are posted in Assignment 2.


This lab is due by Tuesday, September 27, 2022, 11:59 PM.
As with all labs you may, and are encouraged, to pair program a solution to this lab. If you choose to pair program a solution, be sure that you individually understand how to generate the correct solution.