diff options
Added solutions from oop seminar 1
3 files changed, 122 insertions, 0 deletions
diff --git a/Year 1/Object-oriented Programming/Solutions Sem. 01/README.md b/Year 1/Object-oriented Programming/Solutions Sem. 01/README.md new file mode 100644 index 0000000..d8f112c --- /dev/null +++ b/Year 1/Object-oriented Programming/Solutions Sem. 01/README.md @@ -0,0 +1,3 @@ +My solutions to all of the exercises from Seminar 01. + +[Task descriptions](https://github.com/Angeld55/Object-oriented_programming_FMI/tree/master/Sem.%2001#%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8) diff --git a/Year 1/Object-oriented Programming/Solutions Sem. 01/exercise01.cpp b/Year 1/Object-oriented Programming/Solutions Sem. 01/exercise01.cpp new file mode 100644 index 0000000..4a6ac1c --- /dev/null +++ b/Year 1/Object-oriented Programming/Solutions Sem. 01/exercise01.cpp @@ -0,0 +1,83 @@ +#include <iostream> // cin, cout +#include <cmath> // sqrt + +struct Point { + double x; + double y; +}; + +double calcDistance(Point a, Point b) { + return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y)); +} + +Point cinPoint() { + Point temp; + std::cin >> temp.x >> temp.y; + return temp; +} + +struct Triangle { + Point A; + Point B; + Point C; + + double Area; +}; + +double calcArea(Triangle tri) { + double a = calcDistance(tri.B, tri.C); + double b = calcDistance(tri.A, tri.C); + double c = calcDistance(tri.A, tri.B); + + double p = (a + b + c) / 2; + return sqrt(p*(p-a)*(p-b)*(p-c)); // Heron's formula +} + +Triangle createTriangle(Point A, Point B, Point C) { + return { A, B, C, calcArea({A, B, C}) }; +} + +Triangle cinTriangle() { + Point tempA = cinPoint(), + tempB = cinPoint(), + tempC = cinPoint(); + return createTriangle(tempA, tempB, tempC); +} + +void coutTriangle(Triangle tri) { + std::cout << "(" << tri.Area << ")" << std::endl; +} + +int cmpByArea(Triangle tri1, Triangle tri2) { + return (tri1.Area > tri2.Area) ? 1 : ((tri1.Area < tri2.Area) ? -1 : 0); +} + +void sortTriangleArr(Triangle* triangles, int N, int (compare)(Triangle, Triangle)) { + int indOfSmallest = 0; + for (int i = 0; i < N - 1; i++, indOfSmallest = i) { + for (int j = i + 1; j < N; j++) { + if (compare(triangles[j], triangles[indOfSmallest]) < 0) + indOfSmallest = j; + } + + Triangle temp = triangles[i]; + triangles[i] = triangles[indOfSmallest]; + triangles[indOfSmallest] = temp; + } +} + +int main() { + int N; + std::cin >> N; + + Triangle* triangles = new Triangle[N]; + for (int i = 0; i < N; i++) + triangles[i] = cinTriangle(); + + sortTriangleArr(triangles, N, cmpByArea); + + for (int i = 0; i < N; i++) + coutTriangle(triangles[i]); + + delete[] triangles; +}; diff --git a/Year 1/Object-oriented Programming/Solutions Sem. 01/exercise02.cpp b/Year 1/Object-oriented Programming/Solutions Sem. 01/exercise02.cpp new file mode 100644 index 0000000..78b7616 --- /dev/null +++ b/Year 1/Object-oriented Programming/Solutions Sem. 01/exercise02.cpp @@ -0,0 +1,36 @@ +#include <iostream> + +struct Rational { + int m; + int n; +}; + +Rational sum(Rational a, Rational b) { + int divisor = a.n * b.n; + return { a.m * divisor + b.m * divisor, divisor }; +} + +Rational sub(Rational a, Rational b) { + b.m *= -1; + return sum(a, b); +} + +Rational mult(Rational a, Rational b) { + return { a.m * b.m, a.n * b.n }; +} + +Rational div(Rational a, Rational b) { + int temp = b.m; + b.m = b.n; + b.n = temp; + + return mult(a, b); +} + +bool isValid(Rational a) { + return a.n != 0; +} + +bool isWholeNumber(Rational a) { + return a.n % a.m == 0; +} |
