diff options
1 files changed, 44 insertions, 33 deletions
| -rw-r--r-- | src/teaching/upp-2023/week5/index.du | 77 |
diff --git a/src/teaching/upp-2023/week5/index.du b/src/teaching/upp-2023/week5/index.du index 2673077..ba2c114 100644 --- a/src/teaching/upp-2023/week5/index.du +++ b/src/teaching/upp-2023/week5/index.du @@ -1,8 +1,11 @@ -# Задачи - УПП, Седмица 5, 03.11.2023 +'def title Задачи - УПП, Седмица 5, 03.11.2023 +'def desc Условия на задачите за упражнение + +# {title} \n -GitHub classroom: [url https://classroom.github.com/a/3KoIQ71H classroom.github.com/a/3KoIQ71H] +GitHub classroom: {url classroom.github.com/a/3KoIQ71H;https://classroom.github.com/a/3KoIQ71H} ## Задача 1 @@ -10,11 +13,12 @@ GitHub classroom: [url https://classroom.github.com/a/3KoIQ71H classroom.github. Направете функция, която получава два двуизмерни координата, покомпонентно ги сумира и връща резултатните координати. Няма как функцията да върне две стойности, затова добаваете оше два аргумента, които да са указатели към променливи в които да запазим сумираните координати. -От входа получавате два координата, след това връщате тяхната покомпонентна сума [=използвайки функцията=]. +От входа получавате два координата, след това връщате тяхната покомпонентна сума {b използвайки функцията}. -[=Пример:=] +{b Пример:} -:table_2 +:table +:2 |= Вход |= Изход @@ -22,20 +26,22 @@ GitHub classroom: [url https://classroom.github.com/a/3KoIQ71H classroom.github. |: 6.1 -99.241 + ## Задача 2 Използвайки масиви, имплементирайте 30-цифрени цели положителни числа. Трябва да поддържате операциите събиране и изваждане между две такива числа. Първо ще получите 30 цифри, които отговарят на първото числа, после още 30 цифри, които отговарят на втрото число и накрая ще получите знак. -Ако знака е [`+`], трябва да ги съберете и да изкарате резултата на екрана. -Ако знака е [`-`], трябва да ги извадите и да изкарате резултата на екрана. +Ако знака е {` +}, трябва да ги съберете и да изкарате резултата на екрана. +Ако знака е {` -}, трябва да ги извадите и да изкарате резултата на екрана. При изкарване трябва да следвате "нормалните" правила: цифрите са долепени и водещите нули не се пишат. -[=Пример:=] +{b Пример:} -:table_2 +:table +:2 |= Вход |= Изход @@ -72,24 +78,26 @@ GitHub classroom: [url https://classroom.github.com/a/3KoIQ71H classroom.github. |: 999999999999999999999999999999 + ## Задача 3 Получавате редица цифри. Ако имаме поне 3 повтарящи се цифри една след друга, можем да ги премахнем. -Тоест редицата [`0 3 1 2 2 2 4 7`] може да стане [`0 3 1 4 7`]. +Тоест редицата {` 0 3 1 2 2 2 4 7} може да стане {` 0 3 1 4 7}. След едно премахване, трябва да можем после да премахнем новопоявило се премахване. -Тоест редицата [`5 1 3 3 3 3 1 1 1 9 2`] първо става [`5 1 1 1 1 9 2`] и след това [`5 9 2`]. +Тоест редицата {` 5 1 3 3 3 3 1 1 1 9 2} първо става {` 5 1 1 1 1 9 2} и след това {` 5 9 2}. Не е нужно да гледате напред за възможно най-много премахване. -Тоест в случая [`8 1 3 4 4 4 5 5 5 5 4 4`] не се очаква да предвидите, че ако първо премахнете 5-те, после ще може да премахнете всички 4ки. +Тоест в случая {` 8 1 3 4 4 4 5 5 5 5 4 4} не се очаква да предвидите, че ако първо премахнете 5-те, после ще може да премахнете всички 4ки. Премахвате първата валидна повтаряща се редица, връщате се малко назад, поглеждате дали някоя нова редица не се е появила, премахвате нея или отивате на следващата. -От входа първо получавате броя [`N`] на цифрите в редицата, като [`N`] е между 1 и 40. -След това получавате [`N`] на брой цифри и накрая връщате редицата с премахнати повтаряния. +От входа първо получавате броя {` N} на цифрите в редицата, като {` N} е между 1 и 40. +След това получавате {` N} на брой цифри и накрая връщате редицата с премахнати повтаряния. -[=Примери:=] +{b Примери:} -:table_2 +:table +:2 |= Вход |= Изход @@ -108,21 +116,23 @@ GitHub classroom: [url https://classroom.github.com/a/3KoIQ71H classroom.github. |: 7 1 5 2 1 7 2 1 2 1 7 2 6 1 6 7 6 9 7 3 8 6 6 5 1 2 7 4 6 8 3 8 2 2 6 9 4 2 6 5 + ## Задача 4 Получавате редица числа. Всяко число е индекс към друго число в редицата (индексите започва от 0). -Започвайки от всяка цифра, проследяваме всички "скоци", тоест ако имаме [`1 3 0 2`] и започваме от индекс 0, тогава от него скачаме на индекс 1, от него на индекс 3, от него на индекс 2 и от него се връщаме в индекс 0. -Докато прескачаме не може да посетим вече посетен индекс, тоест ако имаме [`1 3 0 1`], от 0 отиваме в 1, от 1 в 3 и от 3 в 1, обаче вече сме посетили индекс 1, така че спираме да скачаме. +Започвайки от всяка цифра, проследяваме всички "скоци", тоест ако имаме {` 1 3 0 2} и започваме от индекс 0, тогава от него скачаме на индекс 1, от него на индекс 3, от него на индекс 2 и от него се връщаме в индекс 0. +Докато прескачаме не може да посетим вече посетен индекс, тоест ако имаме {` 1 3 0 1}, от 0 отиваме в 1, от 1 в 3 и от 3 в 1, обаче вече сме посетили индекс 1, така че спираме да скачаме. Търси се колко най-много скока можем да направим, започайки от който и да е индекс. Ако има няколко индекса с максималния брой скоци, връщаме само първия. -Получавате от входа брой [`N`] на числата (индексите), като [`N`] е между 1 и 30, след това получавате толкова на брой числа (между 0 и N-1) и накрая връщате при кой начален индекс имаме най-много скока и колко са тези скоци. +Получавате от входа брой {` N} на числата (индексите), като {` N} е между 1 и 30, след това получавате толкова на брой числа (между 0 и N-1) и накрая връщате при кой начален индекс имаме най-много скока и колко са тези скоци. -[=Примери:=] +{b Примери:} -:table_2 +:table +:2 |= Вход |= Изход @@ -155,6 +165,7 @@ GitHub classroom: [url https://classroom.github.com/a/3KoIQ71H classroom.github. |: 0 2 + ## Задача 5 sim картите са типове smart-card, това означава че в себе си имат един миниатюрен компютър с миниатюрна памет. @@ -166,12 +177,12 @@ sim картите са типове smart-card, това означава че ### а) валидационни функции .bulleted -- [`isUnblockCode`], приема буква и връща дали е отблокиращ код\n +- {` isUnblockCode}, приема буква и връща дали е отблокиращ код\n Само главни, малки и цифри са валидни отблокиращи кодове -- [`isPhoneNumber`], приема число (10 цифрено) и поглежда най-левите 3 цифри\n +- {` isPhoneNumber}, приема число (10 цифрено) и поглежда най-левите 3 цифри\n Те трябва да са валиден код на държава. Нужно е да приемате поне кодовете за България (359) и за Франция (033). - Ако искате може и други да приемате, пълен списък има [url https://en.wikipedia.org/wiki/List_of_country_calling_codes#Alphabetical_order тук]. + Ако искате може и други да приемате, пълен списък има {url тук;https://en.wikipedia.org/wiki/List_of_country_calling_codes#Alphabetical_order}. ### б) вход и команди @@ -179,20 +190,20 @@ sim картите са типове smart-card, това означава че Ако отблокиращия е в невалиден формат, връщате съответно съобщение за грешка и спирате програмата. След това получавате команди, всяка команда се определя с букви и още някакви стойности. -[=Всяка команда трябва да бъде изкарана в отделна функция!=] +{b Всяка команда трябва да бъде изкарана в отделна функция!} .bulleted -- [`v`] - пробвате се да се "логнете" в сим картата. +- {` v} - пробвате се да се "логнете" в сим картата. След буквата получавате и едно число, което е въведения ПИН код. Ако е правилен, следващите 5 команди, които изискват упълномощение могат да се изпълнят. След 5те команди, упълномощението се "премахва" и трябва пак да се въведе ПИН код при упълномощени команди. Ако е грешен, общо има 3 опита, и след тях картата се блокира. -- [`u`] - отпблокиране на блокирана карта. +- {` u} - отпблокиране на блокирана карта. След буквата получавате отблокиращ код и нов ПИН код. Ако отблокиращия код е в грешен формат или е грешната стойност, премахваме един опит. При 10 неуспешни опита, изкарвате съобщение, че картата е перманентно блокирана и спирате програмата. Ако е успешно отблокирана, тогава променяте ПИН кода и сте се "логнали" автоматично. -- [`i`] - връща информация за СИМ картата, това са общо броя команди които са изпълнявани до сега +- {` i} - връща информация за СИМ картата, това са общо броя команди които са изпълнявани до сега ### в) команди с упълномощение @@ -202,15 +213,15 @@ sim картите са типове smart-card, това означава че Ако някоя търсена стойност е невалидна или не съществува, връщате съответната грешка. .bulleted -- [`c`] - променя ПИН код. +- {` c} - променя ПИН код. Получавате нов ПИН код и го променяте. -- [`a`] - добавя контакт в паметта, общо може да имаме 10 контакта. +- {` a} - добавя контакт в паметта, общо може да имаме 10 контакта. Всеки контакт се определя с буква, неговото "име", и 10-цифрен мобилен номер. Приема допълнително неговото име и тел. номер. Добавяме контакта в първото незаето място, а ако всички са заети, връщаме съобщение с грешка. -- [`r`] - приема и още една буква (име), връща телефонния номер на съответния контакт. +- {` r} - приема и още една буква (име), връща телефонния номер на съответния контакт. Ако той не съществува или телефонния номер е невалиден, връщаме съответно съобщение с грешка. -- [`d`] - приема и още една буква (име), изтрива съответния контакт. +- {` d} - приема и още една буква (име), изтрива съответния контакт. Ако той не съществува, връщаме съответно съобщение с грешка. -- [`o`] - променя контакт, приема допълнително две имена на контакти и телефонен номер. +- {` o} - променя контакт, приема допълнително две имена на контакти и телефонен номер. Променя контакта с първото име, като второто име и тел. номер стават новите му стойности. |