Summary Files Commits Branches @commit @diff @stats
path: root / Year 1 / Object-oriented Programming / Solutions Sem. 01 / exercise01.cpp
diff options
context:
space:
mode:
1 files changed, 83 insertions, 0 deletions
-rw-r--r--Year 1/Object-oriented Programming/Solutions Sem. 01/exercise01.cpp83
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;
+};