Website Summary Files Commits Branches @commit @diff @stats
path: root / Sem. 01
diff options
context:
space:
mode:
1 files changed, 122 insertions, 0 deletions
-rw-r--r--Sem. 01/triangles.cpp122
diff --git a/Sem. 01/triangles.cpp b/Sem. 01/triangles.cpp
new file mode 100644
index 0000000..f85e73c
--- /dev/null
+++ b/Sem. 01/triangles.cpp
@@ -0,0 +1,122 @@
+#include <iostream>
+
+struct Point
+{
+ int x;
+ int y;
+};
+
+void readPoint(Point& p)
+{
+ std::cin >> p.x >> p.y;
+}
+
+void printPoint(const Point& p)
+{
+ std::cout << p.x << " " << p.y <<;
+}
+
+double getDist(const Point& p1, const Point& p2)
+{
+ double dx = p1.x - p2.x;
+ double dy = p1.y - p2.y;
+
+ return sqrt(dx*dx + dy*dy);
+}
+
+struct Triangle
+{
+ Point p1;
+ Point p2;
+ Point p3;
+};
+
+void readTriangle(Triangle& tr)
+{
+ readPoint(tr.p1);
+ readPoint(tr.p2);
+ readPoint(tr.p3);
+}
+void printTriangle(const Triangle& tr)
+{
+ printPoint(tr.p1);
+ std::cout << " ";
+ printPoint(tr.p2);
+ std::cout << " ";
+ printPoint(tr.p3);
+ std::cout << std::endl;
+}
+
+double getArea(const Triangle& tr)
+{
+ double sideA = getDist(tr.p1, tr.p2);
+ double sideB = getDist(tr.p2, tr.p3);
+ double sideC = getDist(tr.p3, tr.p1);
+
+ double halfPer = (sideA + sideB + sideC) / 2;
+
+ return sqrt(halfPer*(halfPer - sideA)*(halfPer - sideB)*(halfPer - sideC));
+}
+
+void swap(int& a, int& b)
+{
+ int temp = a;
+ a = b;
+ b = temp;
+}
+void swap(Triangle& tr1, Triangle& tr2)
+{
+ Triangle temp = tr1;
+ tr1 = tr2;
+ tr2 = temp;
+}
+
+void selectionSort(int* areas, Triangle* triangles, unsigned size)
+{
+ for (unsigned i = 0; i < size - 1; i++)
+ {
+ //findMin
+ int minElementIndex = i;
+ for (unsigned j = i + 1; j < size; j++)
+ {
+ if (areas[j] < areas[minElementIndex])
+ minElementIndex = j;
+ }
+ if (minElementIndex != i)
+ {
+ swap(areas[i], areas[minElementIndex]);
+ swap(triangles[i], triangles[minElementIndex]);
+ }
+ }
+}
+
+int* calculateAreas(const Triangle* arr, int n)
+{
+ int* areas = new int[n];
+
+ for (int i = 0; i < n; i++)
+ areas[i] = getArea(arr[i]);
+
+ return areas;
+}
+
+int main()
+{
+ int n;
+ std::cin >> n;
+
+ Triangle* triangles = new Triangle[n];
+
+ for (int i = 0; i < n; i++)
+ readTriangle(triangles[i]);
+
+ int* areas = calculateAreas(triangles,n);
+
+ selectionSort(areas, triangles, n);
+
+ for (int i = 0; i < n; i++)
+ printTriangle(triangles[i]);
+
+ delete[] triangles, areas;
+
+}