diff options
Added todays practice
1 files changed, 167 insertions, 0 deletions
| -rw-r--r-- | Year 1/Programming introduction/Practice-20.12.21.cpp | 167 |
diff --git a/Year 1/Programming introduction/Practice-20.12.21.cpp b/Year 1/Programming introduction/Practice-20.12.21.cpp new file mode 100644 index 0000000..a975299 --- /dev/null +++ b/Year 1/Programming introduction/Practice-20.12.21.cpp @@ -0,0 +1,167 @@ +#include <iostream> + +using namespace std; + +// Задача първа: +// Да се напише функция която изтрива елемент от масив по даден индекс. + +void delElem(int *src, int srcSize, int *dst, int ind) { + for (int i = 0, j = 0; i < srcSize; i++, j++) { + if (i == ind) i++; + dst[j] = src[i]; + } +} + +void ex1() { + int src[] = { 1, 2, 3, 4, 5 }, srcSize = sizeof(src)/sizeof(*src), + *dst = new int[srcSize - 1]; + + delElem(src, srcSize, dst, 1); + + for (int i = 0; i < srcSize - 1; i++) { + cout << dst[i] << " "; + } + cout << endl; + + delete[] dst; +} + +// Задача втора: +// От стандартния вход се четат две цели числа n и m. След това се чете матрица с n +// колони и m реда. Да се напише функция, която връща реда, чийто сбор от +// елементи е най - голям. + +void cinMatrix(int **matrix, int n, int m) { + for (int i = 0; i < n; i++) { + for (int j = 0; j < m; j++) + cin >> matrix[i][j]; + } +} + +void findBigRowSum(int **matrix, int n, int m, int **bigRowSum) { + int sum = -1024, tmpSum; + for (int i = 0; i < n; i++) { + tmpSum = 0; + + for (int j = 0; j < m; j++) + tmpSum += matrix[i][j]; + + if (tmpSum > sum) { + sum = tmpSum; + *bigRowSum = matrix[i]; + } + } +} + +void ex2() { + /* Allocate matrix */ + int n, m, **matrix; + cin >> m >> n; + + matrix = new int*[n]; + for (int i = 0; i < n; i++) + matrix[i] = new int[m]; + + /* Input matrix */ + cinMatrix(matrix, n, m); + + /* Find and print row */ + int *bigRowSum; + findBigRowSum(matrix, n, m, &bigRowSum); + + for (int i = 0; i < m; i++) + cout << bigRowSum[i] << " "; + cout << endl; + + /* Free memory */ + for (int i = 0; i < n; i++) + delete[] matrix[i]; + delete[] matrix; +} + +// Задача трета: +// Да се напише функция, която приема като аргумент число "k" и матрица n x m и +// да изтрива от нея k-тия ред. + +void delRow(int **src, int n, int m, int **dst, int ind) { + for (int i = 0, j = 0; i < n; i++, j++) { + if (i == ind) i++; + dst[j] = src[i]; + } +} + +void ex3() { + /* Allocate matrix */ + int n, m, **src, **dst; + cin >> m >> n; + + src = new int*[n]; + for (int i = 0; i < n; i++) + src[i] = new int[m]; + + dst = new int*[n - 1]; + + /* Input matrix */ + cinMatrix(src, n, m); + + /* Find and remove row */ + delRow(src, n, m, dst, 1); + + for (int i = 0; i < n - 1; i++) { + for (int j = 0; j < m; j++) + cout << dst[i][j] << " "; + cout << endl; + } + + /* Free memory */ + for (int i = 0; i < n; i++) + delete[] src[i]; + delete[] src; + + delete[] dst; +} + +// Задача четвърта: +// От стандартния вход се чете цяло число n и масив с дължина n. Да се дефинира +// следната функция: +// void cycle(int* x, int n, int k), която преобразува едномерния масив x с n елемента, +// като циклично ги премества на k позиции наляво. k е дадено естествено число, k > 0. + +void cycle(int *x, int n, int k) { + int *helper = new int[n]; + + for (int i = 0; i < n; i++) + helper[(abs(n - k) + i) % n] = x[i]; + + for (int i = 0; i < n; i++) + x[i] = helper[i]; + + delete[] helper; +} + +void ex4() { + int n, k; + cin >> n >> k; + + int *arr = new int[n]; + for (int i = 0; i < n; i++) + cin >> arr[i]; + + cycle(arr, n, k); + + for (int i = 0; i < n; i++) + cout << arr[i] << " "; + cout << endl; + + delete[] arr; +} + +// Задача пета: +// Да се напише функция, която отстранява всички елементи от едномерен масив от +// цели числа, които са по-малки едновременно от двата си съседа, без да се използва +// помощен масив. За отстраняване на елемент от масива да се използва отместване +// наляво. След края на програмата в масива не трябва да има такива елементи. + +int main() { + ex4(); +} |
