diff options
Added solutions from oop seminar 1
1 files changed, 83 insertions, 0 deletions
| -rw-r--r-- | Year 1/Object-oriented Programming/Solutions Sem. 01/exercise01.cpp | 83 |
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; +}; |
