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_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_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_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