Website Summary Files Commits Branches @commit @diff @stats
path: root / Sem. 10
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 /Sem. 10
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
2 files changed, 100 insertions, 1 deletions
-rw-r--r--Sem. 10/README.md16
-rw-r--r--Sem. 10/example4.cpp85
diff --git a/Sem. 10/README.md b/Sem. 10/README.md
index 213fb84..7a0b14e 100644
--- a/Sem. 10/README.md
+++ b/Sem. 10/README.md
@@ -89,6 +89,20 @@ void f()
- Да се напише функция, която приема такъв стринг и връща нов стринг с ТОЧНА ГОЛЕМИНА, в който всички цифри са цензурирани. (Всяко число е заменено с '*')
- Да се напише функция, която приема стринг и връща два стринга с ТОЧНА големина. Първият да бъде съставен само от малките букви, а другият да бъде съставен само от главните букви.
- Да се напише функция, която приема два сортирани масива от цели числа и поставя в първия масив елементите от двата масива, но в сортиран вид (приемаме, че в първия има достатъчно място).
-
+ - Напишете програма, която приема от стандартния вход число N. След това се прочитат N реда и всеки ред започва с число M, което е дължината на реда. Да се напие функция, която обработва подадената матрица по следния начин:
+Връща се нова матрица, за което е заделена точна големина. Първият ред е конкатенацията на последния ред с първия ред на подадената матрица. Вторият ред е конкатенацията на предпоследния ред с втория ред на подадената матрица и тн.
<h3>Задачи</h3>
+
+**Задача 1:** Решете 4-та задача от примерните, но приемете, че числата в масивите са в интервала [-100, 100].
+
+**Задача 2:** Напишете функция, която приема масив от цели числа и цяло число и елемент на масива. Функцията да преподрежда елементите, така че всички по-малки елементи от подадения да са в ляво от него, а всички по-големи - в дясно. (Забележка: Задачата да се реши с помощта на допълнителен масив - същестува и решение без допълнителна памет (Hoare's partition, Lomuto partition и други), но то не се изисква)
+
+*Вход: [1, 5, 6, 3, 0, -1, 2, 9, 7] ,3* *Изход: [1, 0, 2, ,-1, 3, 6, 5, 9, 7]*
+
+
+**Задача 3:** Напишете функция, която приема масив и връща масив от масиви, на който елементите му са всички непразни подмасиви на дадения.
+
+*Вход: [1, 2, 3]*
+
+*Изход: [1], [2], [3], [1, 2], [2, 3], [1, 3], [1, 2, 3]*
diff --git a/Sem. 10/example4.cpp b/Sem. 10/example4.cpp
new file mode 100644
index 0000000..8d2105e
--- /dev/null
+++ b/Sem. 10/example4.cpp
@@ -0,0 +1,85 @@
+#include <iostream>
+using namespace std;
+
+
+unsigned input(int**& matrix, int*& sizes)
+{
+ unsigned N;
+ cin >> N;
+
+ matrix = new int*[N];
+ sizes = new int[N];
+
+ for (unsigned i = 0; i < N; i++)
+ {
+ unsigned currentRowSize;
+ cin >> currentRowSize;
+
+ matrix[i] = new int[currentRowSize];
+ sizes[i] = currentRowSize;
+
+ for (unsigned j = 0; j < currentRowSize; j++)
+ cin >> matrix[i][j];
+ }
+
+ return N;
+}
+
+
+int* concat(const int* row1, unsigned row1Size, const int* row2, unsigned row2Size)
+{
+ int* result = new int[row1Size + row2Size];
+
+ for (unsigned i = 0; i < row2Size; i++)
+ result[i] = row2[i];
+
+ for (unsigned i = 0; i < row1Size; i++)
+ result[row2Size + i] = row1[i];
+
+ return result;
+}
+
+void freeMatrix(int** matrix, unsigned rowsSize)
+{
+ for (int i = 0; i < rowsSize; i++)
+ delete[] matrix[i];
+ delete[] matrix;
+}
+
+void task(int** matrix, unsigned N, int* sizes)
+{
+ unsigned resultRowsCount = (N + 1) / 2;
+ int** resultMatrix = new int*[resultRowsCount];
+
+ int* resultSizes = new int[resultRowsCount];
+
+ for (unsigned i = 0; i < resultRowsCount; i++)
+ {
+ resultSizes[i] = sizes[i] + sizes[N - i - 1];
+ resultMatrix[i] = concat(matrix[i], sizes[i], matrix[N - i - 1], sizes[N - i - 1]);
+ }
+
+ //print
+ for (unsigned i = 0; i < resultRowsCount; i++)
+ {
+ for (unsigned j = 0; j < resultSizes[i]; j++)
+ cout << resultMatrix[i][j] << " ";
+ cout << endl;
+ }
+
+ delete[] resultSizes;
+ freeMatrix(resultMatrix, resultRowsCount);
+
+ delete[] sizes;
+ freeMatrix(matrix, N);
+}
+
+int main()
+{
+ int** matrix;
+ int* sizes;
+
+ unsigned N = input(matrix, sizes); //not sure if I need this func
+
+ task(matrix, N, sizes);
+}