diff options
Added today's practice
1 files changed, 204 insertions, 0 deletions
| -rw-r--r-- | Year 1/Programming introduction/Practice-06.12.21.cpp | 204 |
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(); +} |
