diff options
4 files changed, 179 insertions, 1 deletions
| -rw-r--r-- | README.md | 2 | ||||
| -rw-r--r-- | Sem. 01/README.md | 52 | ||||
| -rw-r--r-- | Sem. 01/notes_1.pdf | bin | 0 -> 113291 bytes | |||
| -rw-r--r-- | Sem. 01/task1.cpp | 126 |
@@ -1,4 +1,4 @@ ### Код от �еминарите по СДП - �пец. Компютърни науки - летен �еме�тър 2020/2021 - - **Тема 1**
\ No newline at end of file + - **Тема 1** Структури. Декалраци� и използване на �труктури. Предговор на н�кои теми от УП (динамична памет, �ортировки).
\ No newline at end of file diff --git a/Sem. 01/README.md b/Sem. 01/README.md new file mode 100644 index 0000000..b59d8ac --- /dev/null +++ b/Sem. 01/README.md @@ -0,0 +1,52 @@ + + +## Ñðóêòóðè + +Ñòðóêòóðèòå â C++ ñå èçïîëçâàò çà ãðóïèðàíå íà åëåìåíòè. Åëåìåíòèòå, íàðè÷àíè îùå ÷ëåíîâå, ìîãàò äà áúäàò îò ðàçëè÷åí òèï è ñ ðàçëè÷íà äúëæèíà. + + struct Box + { + int height; + int weight; + } + + +### Äåêëàðèðàíå íà îáåêòè îò íîâèÿ òèï + + Box b; //default values to height and weight + + Box b2 = {3, 4} // height = 3, weight = 3; + + Box b3; + b3.height = 13; + b3.weight = 14; + + +### Ïîäàâàíå âúâ ôóíêöèè +Àêî íÿìà äà ïðîìåíÿìå îáåêòà ãî ïîäàâàìå ïî **êîíñòàíòíà ðåôåðåíöèÿ.** + + void calculcateArea(const Box& b) + { + return b.height * b.weight; + } + Ìîæå è ñàìî ïî **ðåôåðåíöèÿ**, íî òîãàâà ïðîìåíèòå ùå ñå îòðàçÿò âúðõó ïîäàäåíèÿ àðãóìåíò. + + + void readBox(Box& b) + { + cin >> b.height >> b.weight; + } +.Ìîæå è äà ãî ïîäàâàìå ïî **êîïèå**. + + Box revertBox(Box b) + { + int temp = b.height; + b.height = b.weight; + b.weight = temp; + + return b; + } +**Çàäà÷à**: +Âõîä: Âúâåæäà ñå öÿëî ÷èñëî **N** è ïîñëå **N** òðèãúãúëíèêà â ðàâíèíàòà, îïðåäåëåíè îò 3 òî÷êè ( 6 êîîðäèíàòè). + +Îòïå÷àòàéòå òðèãúëíèöèòå **ñîðòèðàíè ïî ëèöàòà èì.**
\ No newline at end of file diff --git a/Sem. 01/notes_1.pdf b/Sem. 01/notes_1.pdf Binary files differnew file mode 100644 index 0000000..6110f89 --- /dev/null +++ b/Sem. 01/notes_1.pdf diff --git a/Sem. 01/task1.cpp b/Sem. 01/task1.cpp new file mode 100644 index 0000000..67ad5b1 --- /dev/null +++ b/Sem. 01/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; + +} |
