From b3e29bba94da067984c841d7904887a4bd5995ea Mon Sep 17 00:00:00 2001 From: Stoycho Kyosev <68247567+stoychoX@users.noreply.github.com> Date: Fri, 24 Dec 2021 14:35:42 +0200 Subject: add pract 10 and 11 --- pract_KN/Pract 10/solutions.cpp | 191 +++++++++++++++++++++ ...74\320\265\321\202\320\270\320\272\320\260.pdf" | Bin 0 -> 68330 bytes pract_KN/Pract 11/solutions.cpp | 183 ++++++++++++++++++++ ... \320\277\320\260\320\274\320\265\321\202..pdf" | Bin 0 -> 57974 bytes 4 files changed, 374 insertions(+) create mode 100644 pract_KN/Pract 10/solutions.cpp create mode 100644 "pract_KN/Pract 10/\320\274\320\275\320\276\320\263\320\276\320\274\320\265\321\200\320\275\320\270-\320\274\320\260\321\201\320\270\320\262\320\270.-\320\243\320\272\320\260\320\267\320\260\321\202\320\265\320\273\320\275\320\260-\320\260\321\200\320\270\321\202\320\274\320\265\321\202\320\270\320\272\320\260.pdf" create mode 100644 pract_KN/Pract 11/solutions.cpp create mode 100644 "pract_KN/Pract 11/\320\243\320\272\320\260\320\267\320\260\321\202\320\265\320\273\320\270 \320\270 \321\200\320\265\321\204\320\265\321\200\320\265\320\275\321\206\320\270\320\270. \320\224\320\270\320\275\320\260\320\274\320\270\321\207\320\275\320\260 \320\277\320\260\320\274\320\265\321\202..pdf" (limited to 'pract_KN') diff --git a/pract_KN/Pract 10/solutions.cpp b/pract_KN/Pract 10/solutions.cpp new file mode 100644 index 0000000..7ba42bd --- /dev/null +++ b/pract_KN/Pract 10/solutions.cpp @@ -0,0 +1,191 @@ +#include +#include +#include + +const int N = 30; //game of life grid +const int RFIRST = 4; //rows first +const int RSEC = 4; //rows second +const int CFIRST = 4; //cols first +const int CSEC = 4; //cols second +const int DIM = 4; //used for three dimentional array +//First-> +void plusFive(int* a) { + *a += 10; +} + +//Second-> +void iterateOverMatrix(int matrix[RFIRST][CFIRST]) { + for (int i = 0; i < RFIRST; i++) + for (int j = 0; j < CFIRST; j++) + *(*(matrix + i) + j) = rand() % 100 + 1; +} + +//Third-> +void iterateOverThreeDimentionalArray(int matrix[DIM][DIM][DIM]) { + for (int i = 0; i < DIM; i++) { + for (int j = 0; j < DIM; j++) { + for (int k = 0; k < DIM; k++) { + *(*(*(matrix + i) + j) + k) = rand() % 100 + 1; + } + } + } +} + +//Fourth -> +//Assume that we have correct first and second matrix +void sumMatrices(const int first[RFIRST][RSEC], const int second[CFIRST][CSEC], int result[RFIRST][CSEC]) { + for (int i = 0; i < RFIRST; i++) { + for (int j = 0; j < CFIRST; j++) { + result[i][j] = first[i][j] + second[i][j]; + } + } +} + +//Fifth -> +void multiplyMatrices(const int first[RFIRST][CFIRST], const int second[RSEC][CSEC], int result[RFIRST][CSEC]) { + for (int i = 0; i < RFIRST; i++) { + for (int j = 0; j < CSEC; j++) { + for (int k = 0; k < RSEC; k++) { + result[i][j] += first[i][k] * second[k][j]; + } + } + } +} + +//Sixth -> +void evolveCell(const int matrix[N][N], int matrixCopy[N][N], int i, int j) { + int cnt = -matrix[i][j]; //because we add matrix [i][j] as well + + bool iStartingPosAtZero = (i == 0); //Fix start point corner case for (i == 0) + bool jStartingPosAtZero = (j == 0); //Fix start point corner case for (j == 0) + bool iEndingPosAtLimit = (i == N - 1); //Fix end point corner case for (i == N-1) + bool jEndingPosAtLimit = (j == N - 1); //Fix end point corner case for (j == N-1) + + //Iterate among the neighbours: + for (int x = -1 + iStartingPosAtZero; x < 2 - iEndingPosAtLimit; x++) + for (int y = -1 + jStartingPosAtZero; y < 2 - jEndingPosAtLimit; y++) + cnt += matrix[i + x][j + y]; + + //evolve: + if (matrix[i][j] && cnt != 2 && cnt != 3) { + matrixCopy[i][j] = 0; + } + else if (!matrix[i][j] && cnt == 3) { + matrixCopy[i][j] = 1; + } + else { + matrixCopy[i][j] = matrix[i][j]; + } +} + +void evolve(int matrix[N][N]) { + int copyMatrix[N][N] = { 0 }; + for (int i = 0; i < N; i++) + for (int j = 0; j < N; j++) + evolveCell(matrix, copyMatrix, i, j); + + for (int i = 0; i < N; i++) + for (int j = 0; j < N; j++) + matrix[i][j] = copyMatrix[i][j]; +} + +void printMatrix(const int matrix[N][N]) { + for (int i = 0; i < N; i++) { + for (int j = 0; j < N; j++) { + std::cout.width(2); + if (matrix[i][j]) + std::cout << "*" << " "; + else + std::cout << " " << " "; + } + std::cout << std::endl; + } +} + +void start(int matrix[N][N]) { + //moving pattern: + //matrix[1][1] = 1; + //matrix[2][2] = 1; + //matrix[3][0] = 1; + //matrix[3][1] = 1; + //matrix[3][2] = 1; + + //flipping ones: + //matrix[2][1] = matrix[2][2] = matrix[2][3] = 1; + + //pattern: + /*matrix[10][10] = matrix[10][14] = 1; + matrix[11][12] = 1; + matrix[12][11] = matrix[12][13] = 1; + matrix[13][12] = 1; + matrix[14][10] = matrix[14][14] = 1;*/ + + + //random pattern: + /*matrix[10][10] = matrix[10][14] = 1; + matrix[11][12] = 1; + matrix[12][11] = matrix[12][13] = 1; + matrix[13][13] = 1; + matrix[14][10] = matrix[14][14] = 1;*/ +} + +void gameOfLife() { + int matrix[N][N] = { 0 }; + start(matrix); //-> Remove comments on the patterd you'd like to run, or make one yourself! + while (true) { + system("cls"); + printMatrix(matrix); + evolve(matrix); + std::this_thread::sleep_for(std::chrono::milliseconds(300)); //Making the terminal sleep for 300 mseconds + } +} + +void testsOnFirst() { + int a = 5; + plusFive(&a); + std::cout << a; +} + +void testsOnSecond() { + int matrix[RFIRST][CFIRST] = { 0 }; + iterateOverMatrix(matrix); + for (int i = 0; i < RFIRST; i++) { + for (int j = 0; j < RSEC; j++) + std::cout << matrix[i][j] << " "; + std::cout << std::endl; + } +} + +void testsOnThird() { + int matrix3d[DIM][DIM][DIM] = { 0 }; + iterateOverThreeDimentionalArray(matrix3d); + for (int i = 0; i < DIM; i++) { + for (int j = 0; j < DIM; j++) { + for (int k = 0; k < DIM; k++) + std::cout << matrix3d[i][j][k] << " "; + std::cout << std::endl; + } + std::cout << std::endl; + } +} + +void testsOnFourth() { + int firstMatrix[RFIRST][CSEC] = { {1, 2, 3, 0}, {4, 5, 6, 1}, {7, 8, 9, 2}, {7, 6, 39, 5} }; + int secondMatrix[RFIRST][CSEC] = { {10, 11, 12, 1}, {13, 14, 15, 3}, {0, 21, 22, 23}, {7, 8, 9, 2} }; + int result[RFIRST][CFIRST] = { 0 }; + sumMatrices(firstMatrix, secondMatrix, result); + multiplyMatrices(firstMatrix, secondMatrix, result); + for (int i = 0; i < RFIRST; i++) { + for (int j = 0; j < CFIRST; j++) + std::cout << result[i][j] << " "; + std::cout << std::endl; + } +} + +int main() { + //testsOnFirst(); + //testsOnSecond(); + //testsOnThird(); + //testsOnFourth(); + //gameOfLife(); +} \ No newline at end of file diff --git "a/pract_KN/Pract 10/\320\274\320\275\320\276\320\263\320\276\320\274\320\265\321\200\320\275\320\270-\320\274\320\260\321\201\320\270\320\262\320\270.-\320\243\320\272\320\260\320\267\320\260\321\202\320\265\320\273\320\275\320\260-\320\260\321\200\320\270\321\202\320\274\320\265\321\202\320\270\320\272\320\260.pdf" "b/pract_KN/Pract 10/\320\274\320\275\320\276\320\263\320\276\320\274\320\265\321\200\320\275\320\270-\320\274\320\260\321\201\320\270\320\262\320\270.-\320\243\320\272\320\260\320\267\320\260\321\202\320\265\320\273\320\275\320\260-\320\260\321\200\320\270\321\202\320\274\320\265\321\202\320\270\320\272\320\260.pdf" new file mode 100644 index 0000000..2b8223b Binary files /dev/null and "b/pract_KN/Pract 10/\320\274\320\275\320\276\320\263\320\276\320\274\320\265\321\200\320\275\320\270-\320\274\320\260\321\201\320\270\320\262\320\270.-\320\243\320\272\320\260\320\267\320\260\321\202\320\265\320\273\320\275\320\260-\320\260\321\200\320\270\321\202\320\274\320\265\321\202\320\270\320\272\320\260.pdf" differ diff --git a/pract_KN/Pract 11/solutions.cpp b/pract_KN/Pract 11/solutions.cpp new file mode 100644 index 0000000..d6d4d0a --- /dev/null +++ b/pract_KN/Pract 11/solutions.cpp @@ -0,0 +1,183 @@ +#include + +//helpers: +void initMatrix(int** matrix, int n, int m) { + for (int i = 0; i < n; i++) + for (int j = 0; j < m; j++) + matrix[i][j] = (i + j) * (i + j + 1) / 2 + j; +} + +void initArray(int* arr, int length) { + for (int i = 0; i < length; i++) + arr[i] = rand() % 100; +} + +void printArray(const int* arr, int length) { + for (int i = 0; i < length; i++) + std::cout << arr[i] << " "; +} + +void printMatrix(int** matrix, int n, int m) { + for (int i = 0; i < n; i++) { + for (int j = 0; j < m; j++) + std::cout << matrix[i][j] << " "; + std::cout << std::endl; + } +} + +void freeMatrix(int** arr, int n, int m) { + for (int i = 0; i < n; i++) + delete[] arr[i]; + delete[] arr; +} + +void freeArray(int* arr) { + delete[] arr; +} + +//Task 1 +void deleteElementAtIndex(int* arr, int index, int& length) { + for (int i = index; i < length - 1; i++) + arr[i] = arr[i + 1]; + arr[length - 1] = -1; + --length; +} + +//Task 2: +int findSum(int* row, int length) { + int res = 0; + for (int i = 0; i < length; i++) + res += row[i]; + return res; +} + +int rowWithBiggestSum(int** arr, int n, int m) { + int biggestSum = findSum(arr[0], m); + int row = 0; + for (int i = 1; i < n; i++) { + int currentSum = findSum(arr[i], m); + if (biggestSum < currentSum) { + biggestSum = currentSum; + row = i; + } + } + return row; +} + +//Task 3: +void removeRow(int** arr, int k, int& n) { + delete[] arr[k]; + for (int i = k; i < n - 1; i++) + arr[i] = arr[i + 1]; + --n; +} + +//Task 4: +void cycle(int* arr, int n, int k) { + int* copyArr = new int[n]; + for (int i = 0; i < n; i++) + copyArr[i] = arr[(i + k) % n]; + memcpy(arr, copyArr, n * sizeof(int)); + delete[] copyArr; +} + +//Task 5: +void removeElements(int* arr, int& length) { + for (int i = 1; i < length - 1;) { + if (arr[i] < arr[i - 1] && arr[i] < arr[i + 1]) { + deleteElementAtIndex(arr, i, length); + i--; + if(i == 0) { //We don't want to deal with i == 0 case. Its always true in our solution. + i = 1; + } + } + else { + ++i; + } + } +} + +void testsOnTaskOne() { + int length = 0; + std::cin >> length; + int* arr = new int[length]; + initArray(arr, length); + printArray(arr, length); + std::cout << std::endl; + deleteElementAtIndex(arr, 5, length); + printArray(arr, length); + freeArray(arr); +} + +void testsOnTaskTwo() { + int n = 0; + int m = 0; + std::cin >> n >> m; + //Create dynamic array: + int** darray = new int* [n]; + for (int i = 0; i < n; i++) + darray[i] = new int[m]; + + //Initialize: + initMatrix(darray, n, m); + + int biggestSum = rowWithBiggestSum(darray, n, m); + + printArray(darray[biggestSum], m); + + freeMatrix(darray, n, m); +} + +void testsOnTaskThree() { + int n = 0; + int m = 0; + std::cin >> n >> m; + //Create dynamic array: + int** darray = new int* [n]; + + for (int i = 0; i < n; i++) + darray[i] = new int[m]; + + //Initialize: + initMatrix(darray, n, m); + + printMatrix(darray, n, m); + removeRow(darray, 0, n); + removeRow(darray, 3, n); + std::cout << std::endl; + printMatrix(darray, n, m); + + freeMatrix(darray, n, m); +} + +void testsOnTaskFour() { + int length = 0; + std::cin >> length; + int* arr = new int[length]; + initArray(arr, length); + printArray(arr, length); + std::cout << std::endl; + cycle(arr, length, 1); + printArray(arr, length); + freeArray(arr); +} + +void testsOnTaskFive() { + int length = 0; + std::cin >> length; + int* arr = new int[length]; + initArray(arr, length); + printArray(arr, length); + std::cout << std::endl; + removeElements(arr, length); + printArray(arr, length); + freeArray(arr); +} + +int main() { + //testsOnTaskOne(); + //testsOnTaskTwo(); + //testsOnTaskThree(); + //testsOnTaskFour(); + //testsOnTaskFive(); +} diff --git "a/pract_KN/Pract 11/\320\243\320\272\320\260\320\267\320\260\321\202\320\265\320\273\320\270 \320\270 \321\200\320\265\321\204\320\265\321\200\320\265\320\275\321\206\320\270\320\270. \320\224\320\270\320\275\320\260\320\274\320\270\321\207\320\275\320\260 \320\277\320\260\320\274\320\265\321\202..pdf" "b/pract_KN/Pract 11/\320\243\320\272\320\260\320\267\320\260\321\202\320\265\320\273\320\270 \320\270 \321\200\320\265\321\204\320\265\321\200\320\265\320\275\321\206\320\270\320\270. \320\224\320\270\320\275\320\260\320\274\320\270\321\207\320\275\320\260 \320\277\320\260\320\274\320\265\321\202..pdf" new file mode 100644 index 0000000..aede287 Binary files /dev/null and "b/pract_KN/Pract 11/\320\243\320\272\320\260\320\267\320\260\321\202\320\265\320\273\320\270 \320\270 \321\200\320\265\321\204\320\265\321\200\320\265\320\275\321\206\320\270\320\270. \320\224\320\270\320\275\320\260\320\274\320\270\321\207\320\275\320\260 \320\277\320\260\320\274\320\265\321\202..pdf" differ -- cgit v1.3.1-23-gd82d