Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
Commit3a02b16a7ad534540f9d439e9fd35dee984eebb7 (patch)
Author
 Syndamia <kamen.d.mladenov@protonmail.com>
2021-12-06 14:05:18 +0200
Committer
 Syndamia <kamen.d.mladenov@protonmail.com>
2021-12-06 14:05:18 +0200
Files4d971a01f34f394736db50fd679fc53142c323f1
uni-projects-3a02b16a7ad534540f9d439e9fd35dee984eebb7.tar
uni-projects-3a02b16a7ad534540f9d439e9fd35dee984eebb7.tar.gz
uni-projects-3a02b16a7ad534540f9d439e9fd35dee984eebb7.zip
Parent666ad1f4d3649f2e3248bd85112e91c67145d510 (diff)
Added today's practice
1 files changed, 204 insertions, 0 deletions
-rw-r--r--Year 1/Programming introduction/Practice-06.12.21.cpp204
diff --git a/Year 1/Programming introduction/Practice-06.12.21.cpp b/Year 1/Programming introduction/Practice-06.12.21.cpp
new file mode 100644
index 0000000..ca83a7c
--- /dev/null
+++ b/Year 1/Programming introduction/Practice-06.12.21.cpp
@@ -0,0 +1,204 @@
+#include <iostream>
+#include <cstring>
+
+using namespace std;
+
+const int MAX_SIZE = 50;
+
+void cinMatrix(int matrix[MAX_SIZE][MAX_SIZE], int n) {
+ for (int i = 0; i < n; i++)
+ for (int j = 0; j < n; j++)
+ cin >> matrix[i][j];
+}
+
+void coutMatrix(int matrix[MAX_SIZE][MAX_SIZE], int n) {
+ for (int row = 0; row < n; row++) {
+ for (int col = 0; col < n; col++)
+ cout << matrix[row][col] << " ";
+ cout << endl;
+ }
+}
+
+// Задача първа:
+// Да се въведе квадратна матрица n x n, където 3 ≤ n ≤ 50
+// и да се изведе сумата на всички четни елементи под главния диагонал (без него).
+
+
+int sumOfEvenUnderDiag(int matrix[MAX_SIZE][MAX_SIZE], int n) {
+ int sum = 0;
+ for (int row = 1, col = 0; row < n && col < n; row++, col++) {
+ if (!(matrix[row][col] & 1))
+ sum += matrix[row][col];
+ }
+
+ return sum;
+}
+
+void ex1() {
+ int n;
+ cin >> n;
+
+ int matrix[MAX_SIZE][MAX_SIZE];
+ cinMatrix(matrix, n);
+
+ cout << sumOfEvenUnderDiag(matrix, n) << endl;
+}
+
+// Задача втора:
+// Да се въведе квадратна матрица n x n, където 3 ≤ n ≤ 50
+// и да се изведе сумата на всички нечетни елементи над главния диагонал (с него).
+
+int sumOfOddAboveDiag(int matrix[MAX_SIZE][MAX_SIZE], int n) {
+ int sum = 0;
+ for (int row = 0, col = 1; row < n && col < n; row++, col++) {
+ if (matrix[row][col] & 1)
+ sum += matrix[row][col];
+ }
+
+ return sum;
+}
+
+void ex2() {
+ int n;
+ cin >> n;
+
+ int matrix[MAX_SIZE][MAX_SIZE];
+ cinMatrix(matrix, n);
+
+ cout << sumOfOddAboveDiag(matrix, n) << endl;
+}
+
+// Задача трета:
+// Да се въведе квадратна матрица n x n, където 3 ≤ n ≤ 50
+// и да се изведе същата матрица, но елементите по вторичния диагонал да са на
+// квадрат.
+
+void squareSecDiag(int matrix[MAX_SIZE][MAX_SIZE], int n) {
+ for (int row = 0, col = n - 1; row < n && col >= 0; row++, col--)
+ matrix[row][col] *= matrix[row][col];
+}
+
+void ex3() {
+ int n;
+ cin >> n;
+
+ int matrix[MAX_SIZE][MAX_SIZE];
+ cinMatrix(matrix, n);
+
+ squareSecDiag(matrix, n);
+
+ coutMatrix(matrix, n);
+}
+
+// Задача четвърта:
+// Да се въведе квадратна матрица n x n, където 3 ≤ n ≤ 50
+// и да се реализират функции, които я "завъртат" наляво и надясно.
+//
+// Бонус: Функция, която "завърта" матрицата по главния й диагонал.
+
+void flipLeft(int matrix[MAX_SIZE][MAX_SIZE], int n) {
+ for (int row = 0; row < n; row++) {
+ for (int col = 0; col <= n / 2; col++) {
+ int tmp = matrix[row][col];
+ matrix[row][col] = matrix[row][n - 1 - col];
+ matrix[row][n - 1 - col] = tmp;
+ }
+ }
+}
+
+void flipDiagonal(int matrix[MAX_SIZE][MAX_SIZE], int n) {
+ for (int row = 0; row < n; row++) {
+ for (int col = 0; col < n - row - 1; col++) {
+ int tmp = matrix[row][col];
+ matrix[row][col] = matrix[n - 1 - col][n - 1 - row];
+ matrix[n - 1 - col][n - 1 - row] = tmp;
+ }
+ }
+}
+
+void rotateClockwise(int matrix[MAX_SIZE][MAX_SIZE], int n) {
+
+}
+
+void ex4() {
+ int n;
+ cin >> n;
+
+ int matrix[MAX_SIZE][MAX_SIZE];
+ cinMatrix(matrix, n);
+
+ flipLeft(matrix, n);
+
+ coutMatrix(matrix, n);
+
+ flipDiagonal(matrix, n);
+
+ coutMatrix(matrix, n);
+}
+
+// Задача пета:
+// Въведено е изречение. Изведете на стандартния изход неговите думи. На отделен
+// ред изведете думите подредени в лексикографски ред.
+
+const int LINE_SIZE = 1024;
+
+int separateIntoWords(char str[LINE_SIZE], char words[LINE_SIZE][LINE_SIZE]) {
+ int strLen = strlen(str), row = 0, col = 0;
+ for (int i = 0; i < strLen; i++) {
+ if (str[i] == ' ') {
+ row++;
+ col = 0;
+ }
+ else {
+ words[row][col++] = str[i];
+ }
+ }
+ return row + 1;
+}
+
+void assignFromTo(char str1[LINE_SIZE], char str2[LINE_SIZE], int str1len, int str2len) {
+ for (int i = 0; i < str2len; i++) {
+ if (i < str1len)
+ str2[i] = str1[i];
+ else
+ str2[i] = '\0';
+ }
+}
+
+void swapStrValues(char str1[LINE_SIZE], char str2[LINE_SIZE]) {
+ char strtmp[LINE_SIZE];
+ int str1len = strlen(str1), str2len = strlen(str2);
+
+ assignFromTo(str1, strtmp, str1len, str1len);
+ assignFromTo(str2, str1, str2len, str1len);
+ assignFromTo(strtmp, str2, str1len, str1len);
+}
+
+void bubbleSortWords(char words[LINE_SIZE][LINE_SIZE], int wordsCount) {
+ for (int i = 0; i < wordsCount - 1; i++)
+ for (int j = i + 1; j < wordsCount; j++)
+ if (strcmp(words[i], words[j]) > 0)
+ swapStrValues(words[i], words[j]);
+}
+
+void ex5() {
+ char str[LINE_SIZE];
+ cin.getline(str, LINE_SIZE);
+
+ char words[LINE_SIZE][LINE_SIZE];
+ int wordsCount = separateIntoWords(str, words);
+
+ for (int row = 0; row < wordsCount; row++) {
+ cout << words[row] << endl;
+ }
+
+ bubbleSortWords(words, wordsCount);
+
+ for (int row = 0; row < wordsCount; row++) {
+ cout << words[row] << endl;
+ }
+}
+
+int main() {
+ ex5();
+}