Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
Commit3927d3fb3fb427996da1a651b643dedd5235b61b (patch)
Author
 Syndamia <kamen@syndamia.com>
2025-11-26 22:28:46 +0200
Committer
 Syndamia <kamen@syndamia.com>
2025-11-26 22:28:46 +0200
Filesb51c773d185e21a0329474fcbce4d2686bc40fab
syndamia.com-3927d3fb3fb427996da1a651b643dedd5235b61b.tar
syndamia.com-3927d3fb3fb427996da1a651b643dedd5235b61b.tar.gz
syndamia.com-3927d3fb3fb427996da1a651b643dedd5235b61b.zip
Parentfd3df635a72e7c7491a447ba5adea5167cfa38b8 (diff)
feat(teaching/upp-2025/w09): Add exercises
3 files changed, 219 insertions, 0 deletions
-rw-r--r--meta/meta.tsv1
-rw-r--r--src/teaching/upp-2025/index.du10
-rw-r--r--src/teaching/upp-2025/week09/index.du208
diff --git a/meta/meta.tsv b/meta/meta.tsv
index ce42c0e..2370fea 100644
--- a/meta/meta.tsv
+++ b/meta/meta.tsv
@@ -105,6 +105,7 @@ teaching/upp-2025/week05/index.html Задачи - УПП, Седмица 5, 30.
teaching/upp-2025/week06/index.html Задачи - УПП, Седмица 6, 06.11.2025 Условията на задачите за упражнение.
teaching/upp-2025/week07/index.html Задачи - УПП, Седмица 7, 13.11.2025 Условията на задачите за упражнение.
teaching/upp-2025/week08/index.html Задачи - УПП, Седмица 8, 20.11.2025 Условията на задачите за упражнение.
+teaching/upp-2025/week09/index.html Задачи - УПП, Седмица 9, 27.11.2025 Условията на задачите за упражнение.
blog/connect-to-mysql-in-dotnet-ef/index.html Connect to MySql in .NET and Entity Framework Connecting a .NET application to a MySql database (with Entity Framework) can be tricky. Here is what works for me.
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 клетки (хоризонтално, диагонално и вертикално), всички ракетни силози изтрелват ядрени бойни глави към най-близата си точка на интерес от другата суперсила.
+
+Нужна е симулация, която по подадена таблица и първоначален удар (унищожена точка на интерес), връща дали резултата ще бъде взаимно самоунищожение, определено с разрушаването на над половината от точките на интерес във всяка суперсила.