diff options
| Commit | 3927d3fb3fb427996da1a651b643dedd5235b61b (patch) | |
|---|---|---|
| Author | 2025-11-26 22:28:46 +0200 | |
| Committer | 2025-11-26 22:28:46 +0200 | |
| Files | b51c773d185e21a0329474fcbce4d2686bc40fab /src | |
| syndamia.com-3927d3fb3fb427996da1a651b643dedd5235b61b.tar syndamia.com-3927d3fb3fb427996da1a651b643dedd5235b61b.tar.gz syndamia.com-3927d3fb3fb427996da1a651b643dedd5235b61b.zip | ||
| Parent | fd3df635a72e7c7491a447ba5adea5167cfa38b8 (diff) | |
feat(teaching/upp-2025/w09): Add exercises
2 files changed, 218 insertions, 0 deletions
| -rw-r--r-- | src/teaching/upp-2025/index.du | 10 | ||||
| -rw-r--r-- | src/teaching/upp-2025/week09/index.du | 208 |
diff --git a/src/teaching/upp-2025/index.du b/src/teaching/upp-2025/index.du index bc0dfb6..e447bc0 100644 --- a/src/teaching/upp-2025/index.du +++ b/src/teaching/upp-2025/index.du @@ -121,3 +121,13 @@ [url ./week08 Задачи] || [url https://github.com/Syndamia/upp-2025-solutions/tree/main/Week08 Решения] || [url https://classroom.github.com/a/rhpKbNmH GitHub Classroom] + +|: 9 +|: 27.11.2025 +|: Подготовка за архитектурно контролно + +|: +|: +|: +[url ./week09 Задачи] +|| [url https://classroom.github.com/a/ZYFDdLi4 GitHub Classroom] diff --git a/src/teaching/upp-2025/week09/index.du b/src/teaching/upp-2025/week09/index.du new file mode 100644 index 0000000..57435d1 --- /dev/null +++ b/src/teaching/upp-2025/week09/index.du @@ -0,0 +1,208 @@ +# Задачи - УПП, Седмица 9, 27.11.2025 + +'define expected-reading 12 min +'define created 24 November 2025 +'define edited 26 November 2025 +[$pagenav] + +.important +Реализирайте единствено архитектурни решения! + +GitHub Classroom: [url https://classroom.github.com/a/ZYFDdLi4] + +## За решаване + +### Задача 0 + +Община на малък град иска да въведе система за измерване на влажността сред целия град. +За целта те са поставили общо 16 хигрометъра, разположени в квадратна решетка, покриваща цялата градска област. + +Нуждаят се от програма, която взема влажностите на всички хигрометри (от един момент на времето) и връща: +.numbered +1. Средната влажност в града +2. Влагата в най-сухия и най-влажния квадрант + +#### Примерно архитектурно решение + +По условие, хигрометрите са разположение в квадратна решетка и то с размер който е точен корен. +Това показва, че квадратна матрица е подходяща структура от данни за тяхното съхранение. + +Всеки хигрометър измерва процента влажност. +В условието не са дадени подробности относно формата на тази стойност, затова ще използваме тип с плаваща запетая, който ще покрие всички реални стойности. + +Ще изведем в глобална константа `[SIZE]` размера на едно измерение на матрицата, и самата матрица ще съдържа влажността в стойности от тип `[double]`. + +За намиране на средната влажност в града, ще изградим функцията `[average]`, която изглежда по следния начин: + +```c++ +double average(const double hygrometers[SIZE][SIZE]); + +Функцията приема матрицата със стойности на влажност от всеки хигрометър и връща средната стойност. +Реализацията изисква линейно итериране през цялата матрица, като се пази сума на всички елементи. +Върнатата стойност е сумата, разделена на броя хигрометри. + +За намиране на най-влажен и най-сух квадрант ще реализираме функцията `[quadrantHumidity]`, чиято декларация е: + +```c++ +double quadrantHumidity(const double hygrometers[SIZE][SIZE], unsigned startRow, unsigned startCol); + +Функцията приема матрицата с влажности и начални индекси по ред и колона на съответния квадрант. +Знаем, че един квадрант ще бъде една четвърт от размера на матрицата (половината височина и ширина), затова не е нужно той да бъде подаден. + +В имплементацията, ще итерираме през матрицата, като започнем от началните редове и колона, и обиколим точно `[SIZE / 2]` реда и колони. +Ще пазим сума на всички елементи и накрая ще разделим на броя елементи, т.е. ще върнем средната стойност на влажност в квадранта. + +В заглавната функция ще дефинираме матрицата и ще попълним входните влажности. +След това ще изкараме стойността, върната от извикване на `[average]`. + +За сух и влажен квадрант, ще създадем две променливи за най-голяма и най-малка стойност. +След това ще извикваме `[quadrantHumidity]`, като ще запазим върната стойност като най-голяма и най-малка спрямо текущите стойности. + +Началните ред и колона ще подаваме с вложен цикъл, който ще итерира колоните и редовете от най-първите (на индекси 0,0) и ще увеличава всеки индекс с размера на страната на квадрант (`[SIZE / 2]`). + +След цикъла и всички извиквания ще имаме стойностите в нашите променливи и ще ги изкараме. + +### Задача 1 + +Сграда разполага с два асансьора и 5 етажа. +Инженерите на асансьорите са забелязали, че асансьора се качва по-бързо отколкото слиза. + +Техниците на сградата се нуждаят от програма, която получава позицията на всеки асансьор и на кои от всичките етажи е натиснат бутон за извикване на асансьор, и връща кой асансьор на кой етаж ще отиде. +Приоритизирайте скорост! + +### Задача 2 + +Автобусна фирма в един град трябва да замени всички свои автобуси. +В града има 6 автобусни линии и всяка линия има между 5 и 17 спирки. + +Фирмата е събрала статистика в час пик, средно колко хора слизат и колко хора се качват на всяка спирка. +Цената на един автобус нараства с броя места, като производителя предлага модел с най-малко 14 места и всеки следващ размер съдържа с 6 места повече от предходния. + +Използвайки статистиката, изберете най-евтината комбинация от автобуси, която отговаря на нуждите в час пик. + +### Задача 3 + +Фабрика купува 5 нови машини, всяка от които изработва по 10000 градивни елемента на час. +Всеки час от 8 часов работен ден, работниците във фабриката отбелязват в счетоводни таблици дали всеки един елемент е дефектен или не. + +Документацията на производителя гарантира, че дефектите на една изправна машина са най-много 0.03%. +Допълнително, скорошни научни изследвания твърдят, че когато една машина произведе дефект, следващия елемент е почти сигурно да бъде дефектен. + +Собствениците на фабриката се съмняват, дали машините са в изправно положение и дали работници крадат елементи, отбелязвайки ги като дефектни. + +Опишете програма, която получава данните за всеки елемент от всяка машина в един стандартен работен ден и връща дали средно през деня, всяка машина е работила коректно, не е работила коректно или е имала кражба. + +### Задача 4 + +Фирма за доставки се нуждае от нова система за менажиране на пратки. + +Всяка пратка се идентифицира с номер и за нея се запазва тегло, начален адрес, адрес на местозначение и чупливост. + +Всеки офис се идентифицира с различен номер и съдържа адреса си (като низ), както и ограничено количество пратки. +Всяка пратка се съхранява по идентификационен номер в офисите. + +Допълнително, за всяка пратка има 6 буквен код за проследяване. +Трябва да пазите съответствие между кода и номера на пратката. + +Администратор на системата трябва да може да: +.bulleted +- добави пратка +- премахне пратка от офис +- добави пратка в офис + +Стандартен потребител трябва да може да получи локацията на пратка по подаден код за проследяване. +Ако кода не съответства на никоя пратка, системата трябва да зачете кода за невалиден. +Ако пратката не се намери в никой офис, тогава пратката трябва да се зачете за загубена. + +### Задача 5 + +Магазин иска да вдигне печалбата си на редица продукти. +Статистика от купувачи показва, че увеличение с 50 стотинки намаля количеството купувачи с 0.0003%. +Обаче, за всеки 20 стотинки над тези 50, количеството купувачи намалява двойно повече от преди това. + +Магазина се нуждае от програма, която приема цените на 100 продукта и средно колко хора купуват всеки от тези продукти и връща цената, която носи максимална печалба за всеки от тях. + +### Задача 6 + +Фермер се нуждае от система, която следи цените на зеленчуци в 24-часов период. + +Всеки зеленчук се идентифицира с пет главни букви, и за него допълнително трябва да се пази наименование и сорт. + +На всеки 30 минути, системата ще получи заявка за обновяване на цени, която съдържа подаден брой обновени цени. +Данните в заявката са във формата "идентификатор нова_цена". + +В края на деня трябва да изкарате справка за всички зеленчуци, която съдържа: + +:ordered +1. За всеки един зеленчук: + .bulleted + - средната цена + - в кои периоди от време е най-скъп + - с колко цената най-много се различава от средната + +2. За всички зеленчуци: + .bulleted + - топ 3 най-скъпи зеленчуци + - топ 3 най-евтини зеленчуци + - средната цена на зеленчуци на всеки 4 часа от денонощието + + +В справката използвайте наименованието и сорта на зеленчука, вместо неговия идентификатор. + +## За самоподготовка + +### Задача 7 + +Онлайн платформа планира да въведе нова функционалност, която ще очужди голяма част от потребителската база. +Икономисти твърдят, че всеки ден платформата ще загуби 68% от количеството клиенти, които са загубили предходния ден, но този процент ще се намаля с 1% всеки следващ ден. + +Допълнително, икономистите твърдят, че ще получава с 1.3% повече клиенти от предходния ден, и този процент ще се увеличава с 0.5% всеки следващ ден. + +Нужна е реализация, която ще изчисли след колко дни платформата ще има повече потребители от преди въвеждането на функционалността, по подадени загубени и спечелени клиенти директно след въвеждане на функционалността. + +### Задача 8 + +Стартъп решава да изгради социална мрежа. +В нея ще има потребители с имейли, потребителски имена, парола, екранни имена (такива, които се показват на профила им) и профилна снимка. + +Всеки потребител може да има приятели и постове. +Един пост съдържа текст и/или изображение. +На всеки пост може само да се пишат коментари. +На всеки коментар може да се отговаря. + +Изградете система, която поддържа стандартните потребителски операции: +.bulleted +- регистриране и вход в профил +- създаване на пост +- показване на пост и всички негови коментари +- показване на най-новите 10 поста от приятели +- създаване на коментар в пост + +За изображения, приемайте пътища във файловата система. +Потребителския интерфейс е нужно да има валидация на входа. + +### Задача 9 + +Държава се намира в началните стадии на пандемия. +Органите, отговарящи за статистически изследвания, откриват че без значение в коя община вируса се разпространява, всеки ден броя ваксинирани се увеличава с по 5.2% спрямо предходния ден. +Едновременно, броя заразени (и неваксинирани) се увеличава с по 3.1% спрямо предходния ден. + +Законодателството се нуждае от система, която може да изчисли след колко дена броя ваксинирани ще надвиши броя заразени (и неваксинирани), по подадени начални стойности за определена община. + +### Задача 10 + +Две суперсили се намират в политическа безизходица. +Военните сили на суперсила 1 разглеждат света като една таблица с 2048 колони и 1024 реда. + +Във всяка клетка на таблицата има една от пет възможни стойности: +.numbered +1. нищо, +2. ракетен силоз на суперсилa 1 +3. точка на интерес (за суперсила 2) в територията на суперсила 1 +4. ракетен силоз на суперсила 2 +5. точка на интерес (за суперсила 1) в територията на суперсила 2 + +Знае се, че всеки ракетен силоз (и на двете страни) е снабден с автоматична отмъщителна система. +Когато точка на интерес в територията на една суперсила е унищожена, в радиус от 3 клетки (хоризонтално, диагонално и вертикално), всички ракетни силози изтрелват ядрени бойни глави към най-близата си точка на интерес от другата суперсила. + +Нужна е симулация, която по подадена таблица и първоначален удар (унищожена точка на интерес), връща дали резултата ще бъде взаимно самоунищожение, определено с разрушаването на над половината от точките на интерес във всяка суперсила. |