feat: finish chapter 3 lab 1
This commit is contained in:
parent
6eea0acaea
commit
3e99bb5443
2 changed files with 174 additions and 0 deletions
|
@ -19,3 +19,5 @@ c_2_lab_1_arg = executable(
|
|||
c_2_lab_2 = executable('c_2_lab_2', 'src/chapter_2/lab_2/main.cpp', install: true)
|
||||
c_2_lab_3 = executable('c_2_lab_3', 'src/chapter_2/lab_3/main.cpp', install: true)
|
||||
c_2_program_1 = executable('c_2_program_1', 'src/chapter_2/program_1/main.cpp', install: true)
|
||||
|
||||
c_3_lab_1 = executable('c_3_lab_1', 'src/chapter_3/lab_1/main.cpp', install: true)
|
||||
|
|
172
src/chapter_3/lab_1/main.cpp
Normal file
172
src/chapter_3/lab_1/main.cpp
Normal file
|
@ -0,0 +1,172 @@
|
|||
#include <iostream>
|
||||
|
||||
using namespace std;
|
||||
|
||||
// Rational Class declaration
|
||||
class Rational {
|
||||
private:
|
||||
int numerator;
|
||||
int denominator;
|
||||
|
||||
public:
|
||||
Rational(int numerator = 0, int denominator = 1);
|
||||
Rational add(const Rational &) const;
|
||||
Rational subtract(const Rational &) const;
|
||||
Rational multiply(const Rational &) const;
|
||||
Rational divide(const Rational &) const;
|
||||
void simplify();
|
||||
void display() const;
|
||||
|
||||
private:
|
||||
int gcd(int, int) const;
|
||||
};
|
||||
|
||||
// Implement Rational class member functions here
|
||||
Rational::Rational(int numerator, int denominator) {
|
||||
this->numerator = numerator;
|
||||
this->denominator = denominator;
|
||||
}
|
||||
|
||||
Rational Rational::add(const Rational &frac) const {
|
||||
return Rational(this->numerator * frac.denominator +
|
||||
frac.numerator * this->denominator,
|
||||
this->denominator * frac.denominator);
|
||||
}
|
||||
|
||||
Rational Rational::subtract(const Rational &frac) const {
|
||||
return Rational(this->numerator * frac.denominator -
|
||||
frac.numerator * this->denominator,
|
||||
this->denominator * frac.denominator);
|
||||
}
|
||||
|
||||
Rational Rational::multiply(const Rational &frac) const {
|
||||
return Rational(this->numerator * frac.numerator,
|
||||
this->denominator * frac.denominator);
|
||||
}
|
||||
|
||||
Rational Rational::divide(const Rational &frac) const {
|
||||
return Rational(this->numerator * frac.denominator,
|
||||
this->denominator * frac.numerator);
|
||||
}
|
||||
|
||||
void Rational::display() const {
|
||||
cout << this->numerator << " / " << this->denominator;
|
||||
}
|
||||
|
||||
int Rational::gcd(int a, int b) const {
|
||||
if (a == b)
|
||||
return a;
|
||||
|
||||
int temp;
|
||||
if (a < b) {
|
||||
temp = a;
|
||||
a = b;
|
||||
b = temp;
|
||||
}
|
||||
|
||||
int remainder;
|
||||
|
||||
do {
|
||||
remainder = a % b;
|
||||
a = b;
|
||||
b = remainder;
|
||||
} while (remainder != 0);
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
void Rational::simplify() {
|
||||
int gcd = this->gcd(this->numerator, this->denominator);
|
||||
this->numerator /= gcd;
|
||||
this->denominator /= gcd;
|
||||
}
|
||||
|
||||
// Do not change any of the code below this line!!
|
||||
|
||||
Rational getRational();
|
||||
void displayResult(const string &, const Rational &, const Rational &,
|
||||
const Rational &);
|
||||
|
||||
int main() {
|
||||
Rational A, B, result;
|
||||
char choice;
|
||||
|
||||
cout << "Enter Rational A:" << endl;
|
||||
A = getRational();
|
||||
cout << endl;
|
||||
|
||||
cout << "Enter Rational B:" << endl;
|
||||
B = getRational();
|
||||
cout << endl;
|
||||
|
||||
cout << "Enter Operation:" << endl
|
||||
<< "a - Addition (A + B)" << endl
|
||||
<< "s - Subtraction (A - B)" << endl
|
||||
<< "m - Multiplication (A * B)" << endl
|
||||
<< "d - Division (A / B)" << endl
|
||||
<< "y - Simplify A" << endl;
|
||||
cin >> choice;
|
||||
cout << endl;
|
||||
|
||||
if (choice == 'a') {
|
||||
result = A.add(B);
|
||||
displayResult("+", A, B, result);
|
||||
} else if (choice == 's') {
|
||||
result = A.subtract(B);
|
||||
displayResult("-", A, B, result);
|
||||
} else if (choice == 'm') {
|
||||
result = A.multiply(B);
|
||||
displayResult("*", A, B, result);
|
||||
} else if (choice == 'd') {
|
||||
result = A.divide(B);
|
||||
displayResult("/", A, B, result);
|
||||
} else if (choice == 'y') {
|
||||
A.simplify();
|
||||
A.display();
|
||||
} else {
|
||||
cout << "Unknown Operation";
|
||||
}
|
||||
cout << endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Rational getRational() {
|
||||
int choice;
|
||||
int numer, denom;
|
||||
|
||||
cout << "Which Rational constructor? (Enter 2, 1, or 0)" << endl
|
||||
<< "2 - 2 parameters (numerator & denominator)" << endl
|
||||
<< "1 - 1 parameter (numerator)" << endl
|
||||
<< "0 - 0 parameters (default)" << endl;
|
||||
cin >> choice;
|
||||
cout << endl;
|
||||
|
||||
if (choice == 2) {
|
||||
cout << "numerator? ";
|
||||
cin >> numer;
|
||||
cout << endl;
|
||||
cout << "denominator? ";
|
||||
cin >> denom;
|
||||
cout << endl;
|
||||
return Rational(numer, denom);
|
||||
} else if (choice == 1) {
|
||||
cout << "numerator? ";
|
||||
cin >> numer;
|
||||
cout << endl;
|
||||
return Rational(numer);
|
||||
} else {
|
||||
return Rational();
|
||||
}
|
||||
}
|
||||
|
||||
void displayResult(const string &op, const Rational &lhs, const Rational &rhs,
|
||||
const Rational &result) {
|
||||
cout << "(";
|
||||
lhs.display();
|
||||
cout << ") " << op << " (";
|
||||
rhs.display();
|
||||
cout << ") = (";
|
||||
result.display();
|
||||
cout << ")";
|
||||
}
|
Loading…
Reference in a new issue