aboutsummaryrefslogtreecommitdiff
path: root/week09/README.md
diff options
context:
space:
mode:
authorSyndamia <kamen@syndamia.com>2024-04-22 13:52:55 +0300
committerSyndamia <kamen@syndamia.com>2024-04-22 13:52:55 +0300
commitf7ed9a8a6c31b17d54d2f37cc0f12b64f8e4b6d2 (patch)
tree866abf46779f63a2fd1c8cfc70f7ff5f3bc11752 /week09/README.md
parenta2e284b0056075e2365deaa2455be567c3b3c945 (diff)
downloadoop-2023-solutions-f7ed9a8a6c31b17d54d2f37cc0f12b64f8e4b6d2.tar
oop-2023-solutions-f7ed9a8a6c31b17d54d2f37cc0f12b64f8e4b6d2.tar.gz
oop-2023-solutions-f7ed9a8a6c31b17d54d2f37cc0f12b64f8e4b6d2.zip
[w9] Added exercise descriptions and solution to exam 1
Diffstat (limited to 'week09/README.md')
-rw-r--r--week09/README.md104
1 files changed, 104 insertions, 0 deletions
diff --git a/week09/README.md b/week09/README.md
new file mode 100644
index 0000000..bbb5121
--- /dev/null
+++ b/week09/README.md
@@ -0,0 +1,104 @@
+# Задачи - ООП, Седмица 9, 18.04.2024
+
+*Този файл е копие на задачите от: [syndamia.com/teaching/oop-2023/week9](https://syndamia.com/teaching/oop-2023/week9)*
+
+На днешното упражнение ще решаваме [задачата от Контролно 1](https://learn.fmi.uni-sofia.bg/mod/resource/view.php?id=311448), затова задачите ще са в същия дух (макар и да не включват най-новия материал).
+
+## Преговорни
+
+### Задача 1 - Голяма петица
+
+Реализирайте клас Printer, който съдържа модел като низ с произволна дължина и брой принтирани страници като неотрицателно цяло число.
+Имплементирайте голяма петица.
+
+### Задача 2 - Файлове и класове
+
+Реализирайте клас Date, който съдържа номера на деня, месеца и годината в три отделни целочислени член-данни.
+Имплементирайте член-методи `storeText`, `storeBinary`, които съответно запазват данните в текстов файл (във формата "YEAR MONTH DAY") и в двоичен файл с подадени имена.
+Аналогично имплементирайте `loadText` и `loadBinary`, които презаписват член-данните с тези от подадените (имена на) файлове.
+
+В главната функция създайте 5 дати, запазете всяка в **един и същ текстов файл**, след това прочетете датите в **нови** 5 променливи и изкарайте датите в обратен ред.
+
+## Лесни
+
+### Задача 3
+
+Реализирайте клас Train, който съдържа:
+
+- модел като низ с максимална дължина от 127 знака
+- идентификационен номер на релсовата линия върху която се намира, като целочислена неотрицателна стойност
+- име на текстов файл, съдържащ всички райони от сегашната релсова линия, всеки на нов ред.
+ Самото име представяйте като низ с произволна дължина.
+- сегашна локация (район) от релсовата линия като низ с произволна дължина.
+ Тази локация не се подава, и при създаване на обекта винаги е първата във файла.
+
+Имплементирайте методите:
+
+- от голямата петица
+- `TransferNextRegion`, който променя сегашната локация на следващата по ред в текстовия файл (чието име е подадено в конструктор).
+ Ако няма следващо по ред, тогава локацията да си остане същата и да се хвърли грешка.
+ Ако се срещнат проблеми с файла, хвърлете грешка.
+- `SwitchRailLine`, който приема идентификационен номер на релсовата линия и име на текстов файл, и променя вътрешните стойности.
+ Съответно локацията трябва да бъде първата в подадения файл.
+ Ако се срещнат проблеми с файла, хвърлете грешка.
+
+Реализирайте клас TrainNetwork, който съдържа:
+
+- идентификационен код, като низ с максимална дължина от 7 знака
+- масив, запазващ максимум 511 влака (типа се оставя по ваша преценка)
+
+За този клас имплементирайте методите:
+
+- `HaveCollided`, който приема индекс на два влака и връща дали са се блъснали.
+ Това се случва ако в една и съща релсова линия и един и същи регион, когато регионът не е последния възможен.
+- `RunTrains`, който придвижва напред всички влакове, докато не стигнат финалната си възможна дестинация.
+ Влакове които са се ударили не се придвижват напред.
+ Връщате броя ударили се влакове.
+
+Да се имплементира главна функция, в която приемате име на двоичен файл от потребителя.
+В този файл имате някакъв брой редици с идентификационен номер на релсова линия, брой локации върху съответната линия и всички локации като нормални низове, разделени с нови редове.
+
+Допълнително в главната функция приемайте от потребителя влаковете, като имената на текстовите файлове се избират от програмата (**НЕ** от потребителя) според идентификационния номер на релсовата линия и информацията във файла с редиците.
+**Не може да променяте Train класа!**
+
+Последно в главната функция създайте обект от тип TrainNetwork и изкарайте резултата от `RunTrains` на екрана.
+
+## Трудни
+
+### Задача 4
+
+Реализирайте клас Car, в който се запазват:
+
+- марка като низ с максимум 31 знака
+- модел като низ с произволна дължина
+- брой седалки като положително цяло число
+- гладност на човека на всяка седлка като целочислен масив с размер броя седалки
+
+Имплементирайте методи:
+
+- от голямата петица
+- `AddPassenger`, който добавя нов човек на дадения индекс на седалка
+- `RemovePassenger`, който премахва човека от дадения индекс
+- `TotalHunger`, който връща общото количество гладност в колата
+- `StoreData`, който запазва всички данни от колата в **двоичен** файл с подадено име
+- `LoadData`, който презаписва всички данни с тези от подадения по име **двоичен** файл
+
+Реализирайте клас DriveThrough, в който се запазват:
+
+- име на ресторант, към който е свързано съответния проход, като низ с произволна дължина
+- коли на опашка, като масив с коли с произволна дължина
+
+Имплементирайте методи:
+
+- от голяма петица
+- `QueueUp`, който приема кола и я вкарва в края на опашката.
+ Разбира се, масивът се уголемява ако е нужно.
+- `Serve`, който изпълнява поръчката на най-предната кола в опашката.
+ За единица глад, ресторанта може да сготви достатъчно храна (за да нахрани клиента с "единица" храна) за единици време между половината от дължината на името на ресторанта и три пъти дължината на името на ресторанта време.
+ Максималното възможно количество време за изпълнение на поръчката варира и според броя коли в опашка: ако са под 6 на брой, тогава тогава се увеличава с 10%, а ако са над 10 тогава се намалява с по 5% за всяка кола след десетата.
+- `EfficiencyService`, който изпълнява поръчките на всички коли в опашката и връща средно колко време е отнело на поръчка.
+- `StoreData`, който запазва всички данни в **текстов** файл с подадено име
+- `LoadData`, който презаписва всички данни с тези от подадения по име **текстов** файл
+
+Имплементирайте главна функция, в която от потребителския вход приемате име на текстов файл.
+Създайте обект от тип DriveThrough, който да запълни своите стойности с тези от подадения файл и изкарайте на екрана стойността от `EfficiencyService`.