diff options
| Commit | 7f41e8381c291c227a4cd8df99f5d0edae5ddae7 (patch) | |
|---|---|---|
| Author | 2024-04-17 22:08:44 +0300 | |
| Committer | 2024-04-17 22:08:44 +0300 | |
| Files | c325c830e817df247c797d117c3405bcc21114b1 /src | |
| syndamia.com-7f41e8381c291c227a4cd8df99f5d0edae5ddae7.tar syndamia.com-7f41e8381c291c227a4cd8df99f5d0edae5ddae7.tar.gz syndamia.com-7f41e8381c291c227a4cd8df99f5d0edae5ddae7.zip | ||
| Parent | 398ccf01d01096afba6b53bc2b782e2e92375c83 (diff) | |
[te/oop-2023/w9] Added exercises
2 files changed, 105 insertions, 0 deletions
| -rw-r--r-- | src/teaching/oop-2023/index.md | 1 | ||||
| -rw-r--r-- | src/teaching/oop-2023/week9/index.md | 104 |
diff --git a/src/teaching/oop-2023/index.md b/src/teaching/oop-2023/index.md index 039e302..be1fd3c 100644 --- a/src/teaching/oop-2023/index.md +++ b/src/teaching/oop-2023/index.md @@ -22,3 +22,4 @@ |6 |28.03.2024|[Задачи](./week6/) \|\| [Решения](https://github.com/Syndamia/oop-2023-solutions/tree/main/week06) \|\| [GitHub classroom](https://classroom.github.com/a/rzSTn5pu)| |7 |04.04.2024|[Задачи](./week7/) \|\| [Решения](https://github.com/Syndamia/oop-2023-solutions/tree/main/week07) \|\| [GitHub classroom](https://classroom.github.com/a/vvZENbkX)| |8 |11.04.2024|[Задачи](./week8/) <!-- \|\| [Решения](https://github.com/Syndamia/oop-2023-solutions/tree/main/week07) --> \|\| [GitHub classroom](https://classroom.github.com/a/7d0MBjcK)| +|9 |18.04.2024|[Задачи](./week9/) <!-- \|\| [Решения](https://github.com/Syndamia/oop-2023-solutions/tree/main/week07) \|\| [GitHub classroom](https://classroom.github.com/a/7d0MBjcK) -->| diff --git a/src/teaching/oop-2023/week9/index.md b/src/teaching/oop-2023/week9/index.md new file mode 100644 index 0000000..0138320 --- /dev/null +++ b/src/teaching/oop-2023/week9/index.md @@ -0,0 +1,104 @@ +# Задачи - ООП, Седмица 9, 18.04.2024 + +На днешното упражнение ще решаваме [задачата от Контролно 1](https://learn.fmi.uni-sofia.bg/mod/resource/view.php?id=311448), затова задачите ще са в същия дух (макар и да не включват най-новия материал). + +<!-- GitHub classroom: [classroom.github.com/a/7d0MBjcK](https://classroom.github.com/a/7d0MBjcK) --> + +## Преговорни + +### Задача 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`. |