diff options
minor fixes
2 files changed, 145 insertions, 108 deletions
| -rw-r--r-- | Sem. 01/task1.cpp | 127 | ||||
| -rw-r--r-- | Sem. 01/task1/task1.cpp | 126 |
diff --git a/Sem. 01/task1.cpp b/Sem. 01/task1.cpp index 67ad5b1..e6f4661 100644 --- a/Sem. 01/task1.cpp +++ b/Sem. 01/task1.cpp @@ -3,124 +3,35 @@ using namespace std; - -struct point -{ - int x; - int y; -}; -void print(const point& ptr) -{ - cout << ptr.x << " " << ptr.y << endl; -} -point readPoint() -{ - int x, y; - cin >> x >> y; - return{ x, y }; -} -double getDist(const point& origin, const point& dest) -{ - double dx = origin.x - dest.x; - double dy = origin.y - dest.y; - - return sqrt(dx*dx + dy*dy); -} - - -struct triangle -{ - point p1; - point p2; - point p3; -}; - -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 halfP = (sideA + sideB + sideC) / 2; - return sqrt(halfP * (halfP - sideA) * (halfP - sideB) * (halfP - sideC)); - -} - -void print(const triangle& tr) -{ - cout << "Point1: "; - print(tr.p1); - cout << "Point2: "; - print(tr.p2); - cout << "Point3: "; - print(tr.p3); - cout << getArea(tr) << endl << endl; -} - -void swap(int * arr, int i, int j) -{ - int temp = arr[i]; - arr[i] = arr[j]; - arr[j] = temp; -} -void swap(triangle* arr, int i, int j) -{ - triangle temp = arr[i]; - arr[i] = arr[j]; - arr[j] = temp; -} -void selectionSort(int* areas, triangle* triangles, int len) +bool checkIfObratim(size_t element, size_t Z) { - for (int i = 0; i < len-1; i++) + for (int i = 1; i < Z; i++) { - int currPos = i; - int min = i; - - for (int j = i; j < len; j++) + if ((i * element) % Z == 0) { - if (areas[j] < areas[min]) - min = j; + std::cout << "Obratniq element na " << element << " e " << i << std::endl; + return true; } - - if (min != i) + } + return false; +} +size_t countDivisers(size_t Z) +{ + size_t count = 0; + for (int i = 1; i < Z; i++) + { + if (checkIfObratim(i,Z)) + count++; + else { - swap(areas, i, min); - swap(triangles, i, min); + std::cout << "Neobratim " << i << std::endl; } } + return count; } int main() { - - int n; - cin >> n; - - triangle* triangles = new triangle[n]; - - for (int i = 0; i < n; i++) - { - point p1 = readPoint(); - point p2 = readPoint(); - point p3 = readPoint(); - - triangles[i].p1 = p1; - triangles[i].p2 = p2; - triangles[i].p3 = p3; - } - - int* areas = new int[n]; - - - for (int i = 0; i < n; i++) - areas[i] = getArea(triangles[i]); - - selectionSort(areas, triangles, n); - - for (int i = 0; i < n; i++) - print(triangles[i]); - - delete[] triangles; - delete[] areas; + cout << countDivisers(4096) << endl; } diff --git a/Sem. 01/task1/task1.cpp b/Sem. 01/task1/task1.cpp new file mode 100644 index 0000000..67ad5b1 --- /dev/null +++ b/Sem. 01/task1/task1.cpp @@ -0,0 +1,126 @@ +#include <iostream> +#include <chrono> + +using namespace std; + + +struct point +{ + int x; + int y; +}; +void print(const point& ptr) +{ + cout << ptr.x << " " << ptr.y << endl; +} +point readPoint() +{ + int x, y; + cin >> x >> y; + return{ x, y }; +} +double getDist(const point& origin, const point& dest) +{ + double dx = origin.x - dest.x; + double dy = origin.y - dest.y; + + return sqrt(dx*dx + dy*dy); +} + + +struct triangle +{ + point p1; + point p2; + point p3; +}; + +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 halfP = (sideA + sideB + sideC) / 2; + return sqrt(halfP * (halfP - sideA) * (halfP - sideB) * (halfP - sideC)); + +} + +void print(const triangle& tr) +{ + cout << "Point1: "; + print(tr.p1); + cout << "Point2: "; + print(tr.p2); + cout << "Point3: "; + print(tr.p3); + cout << getArea(tr) << endl << endl; +} + +void swap(int * arr, int i, int j) +{ + int temp = arr[i]; + arr[i] = arr[j]; + arr[j] = temp; +} +void swap(triangle* arr, int i, int j) +{ + triangle temp = arr[i]; + arr[i] = arr[j]; + arr[j] = temp; +} +void selectionSort(int* areas, triangle* triangles, int len) +{ + for (int i = 0; i < len-1; i++) + { + int currPos = i; + int min = i; + + for (int j = i; j < len; j++) + { + if (areas[j] < areas[min]) + min = j; + } + + if (min != i) + { + swap(areas, i, min); + swap(triangles, i, min); + } + } +} +int main() +{ + + + int n; + cin >> n; + + triangle* triangles = new triangle[n]; + + for (int i = 0; i < n; i++) + { + point p1 = readPoint(); + point p2 = readPoint(); + point p3 = readPoint(); + + triangles[i].p1 = p1; + triangles[i].p2 = p2; + triangles[i].p3 = p3; + } + + int* areas = new int[n]; + + + for (int i = 0; i < n; i++) + areas[i] = getArea(triangles[i]); + + selectionSort(areas, triangles, n); + + for (int i = 0; i < n; i++) + print(triangles[i]); + + delete[] triangles; + delete[] areas; + +} |
