Website Summary Files Commits Branches @commit @diff @stats
path: root / pract_KN
diff options
context:
space:
mode:
Commit4fb718f5fc6088641ecad2aeccd321b77b8bd356 (patch)
Author
 Justsvetoslavov <justsvetoslavov@gmail.com>
2021-12-26 02:42:24 +0200
Committer
 Justsvetoslavov <justsvetoslavov@gmail.com>
2021-12-26 02:42:24 +0200
Files7f0abd8e37eed78ccc0b45a65de80450d1c59eef /pract_KN
Introduction_to_programming_FMI-4fb718f5fc6088641ecad2aeccd321b77b8bd356.tar
Introduction_to_programming_FMI-4fb718f5fc6088641ecad2aeccd321b77b8bd356.tar.gz
Introduction_to_programming_FMI-4fb718f5fc6088641ecad2aeccd321b77b8bd356.zip
Parent158370669b24142a71ce7778b46f5a054cafed8a (diff)
Parentb3e29bba94da067984c841d7904887a4bd5995ea (diff)
Merge branch 'main' of https://github.com/Angeld55/Introduction_to_programming_FMI
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<iostream>
+#include<thread>
+#include<chrono>
+
+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/многомерни-масиви.-Указателна-аритметика.pdf b/pract_KN/Pract 10/многомерни-масиви.-Указателна-аритметика.pdf
new file mode 100644
index 0000000..2b8223b
--- /dev/null
+++ b/pract_KN/Pract 10/многомерни-масиви.-Указателна-аритметика.pdf
Binary files 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<iostream>
+
+//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/Указатели и референции. Динамична памет..pdf b/pract_KN/Pract 11/Указатели и референции. Динамична памет..pdf
new file mode 100644
index 0000000..aede287
--- /dev/null
+++ b/pract_KN/Pract 11/Указатели и референции. Динамична памет..pdf
Binary files differ