diff options
Create triangles.cpp
1 files changed, 122 insertions, 0 deletions
| -rw-r--r-- | Sem. 01/triangles.cpp | 122 |
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; + +} |
