Summary Files Commits Branches @commit @diff @stats
path: root / Year 1 / Programming introduction / Practice-20.12.21.cpp
diff options
context:
space:
mode:
Commit120ecb97039bffbea8212601ecb6a377cd793de3 (patch)
Author
 Syndamia <kamen.d.mladenov@protonmail.com>
2021-12-20 14:36:34 +0200
Committer
 Syndamia <kamen.d.mladenov@protonmail.com>
2021-12-20 14:36:34 +0200
Filescd95c15ec3d8e8e18784ea72062f0dcafae99229 /Year 1/Programming introduction/Practice-20.12.21.cpp
uni-projects-120ecb97039bffbea8212601ecb6a377cd793de3.tar
uni-projects-120ecb97039bffbea8212601ecb6a377cd793de3.tar.gz
uni-projects-120ecb97039bffbea8212601ecb6a377cd793de3.zip
Parent751d8082100af1460219e141fd5aa092a3bb98e4 (diff)
Added todays practice
1 files changed, 167 insertions, 0 deletions
-rw-r--r--Year 1/Programming introduction/Practice-20.12.21.cpp167
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();
+}