Summary Files Commits Branches @commit @diff @stats
path: root / src
diff options
context:
space:
mode:
Commitbcd505c99768fd641e21a37970323089cb7f5b78 (patch)
Author
 Syndamia <kamen@syndamia.com>
2024-03-06 16:24:57 +0200
Committer
 Syndamia <kamen@syndamia.com>
2024-03-06 16:24:57 +0200
Files830d650b1d39d0e66bcf97a0b72d9ed0698caff6 /src
syndamia.com-bcd505c99768fd641e21a37970323089cb7f5b78.tar
syndamia.com-bcd505c99768fd641e21a37970323089cb7f5b78.tar.gz
syndamia.com-bcd505c99768fd641e21a37970323089cb7f5b78.zip
Parent3bb126f0ea52bf6c42ff6d569a83cf81ca5b4af0 (diff)
[te/oop-2023/w3] Added hard exercises and added another simple exercise
1 files changed, 53 insertions, 2 deletions
-rw-r--r--src/teaching/oop-2023/week3/index.md55
diff --git a/src/teaching/oop-2023/week3/index.md b/src/teaching/oop-2023/week3/index.md
index 9e947c8..68e226f 100644
--- a/src/teaching/oop-2023/week3/index.md
+++ b/src/teaching/oop-2023/week3/index.md
@@ -82,7 +82,20 @@
Ако N не е поне 5, програмата ви трябва да хвърли грешка.
Не забравяйте да напишете и деструктор.
-## Задача 7
+### Задача 7
+
+Имате затворени интервали от целочислени числа.
+Разглеждаме смесване на интервали:
+
+- смеската на допиращи се интервали е тяхното слепване, тоест смеската на `[0, 3]` и `[3, 5]` е `[0, 5]`
+- смеската на препокриващи се интервали е тяхното обединение, тоест смеската на `[0, 5]` и `[3, 8]` е `[0, 8]`
+
+В противен случай не можем да смесим интервалите (примерно не можем да смесим `[0, 3]` и `[4, 8]`).
+
+Започвайки от някакво множество с интервали, смесете колкото се може повече от тях и изкарайте всичките резултатни интервали, които не могат повече да се смесят.
+Използвайте структури и член-функции.
+
+### Задача 8
"Моделирайте" (тоест сами се сетете за типовете данни и нужните структури) един град със следните харакетристики.
@@ -101,7 +114,45 @@
## Трудни задачи
-*Ще бъдат попълнени в бъдеще*
+### Задача 9
+
+Ще разглеждаме нещо като UNIX-базирана файлова система.
+
+Един файл във файловата система се характеризира с идентификационен номер (цяло неотрицателно число), брой твърди връзки (пак цяло неотрицателно число), тип (определен от цяло число) и данни (масив от цели числа).
+Ще разглеждаме два типа файлове: нормални и директории.
+
+В нормалните файлове, данните се интерпретират като една редица от числа.
+
+Директориите запазват имена на файлове (кодирани в числа, по начин който вие решите) и съответните им идентификационни номера.
+Нека имената да са закодирани на четните индекси в данните, докато идентификационните номера: нечетните.
+Когато една директория е запазила име към някакъв файл, броят твърди връзки на съответния файл се увеличава.
+
+Имплементирайте файловата система, чрез нея трябва да можем да създадем или изтрием файлове.
+При изтриване на файл, броят твърди връзки към него се намалява.
+Ако той стане нула, паметта за файла се освобождава.
+
+Във файловата система, всички файлове са подредени на случаен принцип (затова използваме идентификационен номер, вместо индекс в масив).
+Винаги започваме с една празна начална директория.
+
+Двете функции, за създаване и изтриване, трябва да приемат масив от низове, който определя път от директории към желания файл, започвайки от началния файл.
+Тоест, ако бяха подадени низовете `Documents`, `Personal`, `Health`, `receipt.txt`, тогава от началния файл намираме името `Documents` и "влизаме" в директорията със съответния идентификационен номер, в нея намираме името `Personal` и так. нат.
+
+### Задача 10
+
+Намираме се в равнината, при която всички (двуизмерни) координати са **целочислени**.
+
+В нея имаме стъклени панели (прави отсечки), дефинирани с координатите на двете им крайни точки.
+Допълнително всеки панел си има свой цвят (като проценти, между 0 и 1, от цветовете червено, зелено и синьо) и прозрачност (като процент, между 0 и 1).
+
+Също имаме и един лъч, той се характеризира с началния си координат и единичен двуизмерен вектор, определящ неговата посока на движение.
+Този лъч не се пречупва и винаги се движи напред (преместването на лъча се извършва чрез `позиция = позиция + посока`).
+
+Чрез този лъч трябва да изкарате композитния цвят, след като лъча е минал през всички стъклени панели пред него.
+Нека също композитния цвят винаги да има 100% прозрачност.
+
+Примерно, ако лъча премине през един панел с цветови проценти `0,1,0` и прозрачност `0.5` и още един панел с цветови проценти `0,1,1` и прозрачност `0.5`, тогава композитния цвят е `0,1,0.5`.
+
+&:question Колко структури ще ви трябват?
## Признания