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 11/solutions.cpp | 183 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 183 insertions(+) create mode 100644 pract_KN/Pract 11/solutions.cpp (limited to 'pract_KN/Pract 11/solutions.cpp') 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(); +} -- cgit v1.3.1-23-gd82d