diff options
| Commit | bcd505c99768fd641e21a37970323089cb7f5b78 (patch) | |
|---|---|---|
| Author | 2024-03-06 16:24:57 +0200 | |
| Committer | 2024-03-06 16:24:57 +0200 | |
| Files | 830d650b1d39d0e66bcf97a0b72d9ed0698caff6 /src | |
| syndamia.com-bcd505c99768fd641e21a37970323089cb7f5b78.tar syndamia.com-bcd505c99768fd641e21a37970323089cb7f5b78.tar.gz syndamia.com-bcd505c99768fd641e21a37970323089cb7f5b78.zip | ||
| Parent | 3bb126f0ea52bf6c42ff6d569a83cf81ca5b4af0 (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.md | 55 |
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 Колко структури ще ви трябват? ## Признания |