Задачи - УПП, Седмица 5, 03.11.2023

GitHub classroom: classroom.github.com/a/3KoIQ71H

Задача 1

Дефинираме двуизмерен координат като две числа с плаваща запетая. Направете функция, която получава два двуизмерни координата, покомпонентно ги сумира и връща резултатните координати. Няма как функцията да върне две стойности, затова добаваете оше два аргумента, които да са указатели към променливи в които да запазим сумираните координати.

От входа получавате два координата, след това връщате тяхната покомпонентна сума използвайки функцията.

Пример:

Вход Изход
8.0 1.5 -1.9 -100.741 6.1 -99.241

Задача 2

Използвайки масиви, имплементирайте 30-цифрени цели положителни числа. Трябва да поддържате операциите събиране и изваждане между две такива числа.

Първо ще получите 30 цифри, които отговарят на първото числа, после още 30 цифри, които отговарят на втрото число и накрая ще получите знак. Ако знака е +, трябва да ги съберете и да изкарате резултата на екрана. Ако знака е -, трябва да ги извадите и да изкарате резултата на екрана.

При изкарване трябва да следвате “нормалните” правила: цифрите са долепени и водещите нули не се пишат.

Пример:

Вход Изход
0 0 0 0 0 0 4 6 9 2 7 5 2 2 3 3 4 2 9 5 7 4 2 3 3 7 1 9 2 6
0 0 0 0 0 0 0 0 0 9 3 4 2 1 6 0 3 3 5 5 1 0 1 3 0 0 0 6 3 2
+
470209439376508436372558
0 0 0 0 0 0 4 6 9 2 7 5 2 2 3 3 4 2 9 5 7 4 2 3 3 7 1 9 2 6
0 0 0 0 0 0 0 0 0 9 3 4 2 1 6 0 3 3 5 5 1 0 1 3 0 0 0 6 3 2
-
468341007309406410371294
9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
+
0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
-
999999999999999999999999999999

Задача 3

Получавате редица цифри. Ако имаме поне 3 повтарящи се цифри една след друга, можем да ги премахнем. Тоест редицата 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.

Не е нужно да гледате напред за възможно най-много премахване. Тоест в случая 8 1 3 4 4 4 5 5 5 5 4 4 не се очаква да предвидите, че ако първо премахнете 5-те, после ще може да премахнете всички 4ки. Премахвате първата валидна повтаряща се редица, връщате се малко назад, поглеждате дали някоя нова редица не се е появила, премахвате нея или отивате на следващата.

От входа първо получавате броя N на цифрите в редицата, като N е между 1 и 40. След това получавате N на брой цифри и накрая връщате редицата с премахнати повтаряния.

Примери:

Вход Изход
16
1 3 8 8 7 5 5 5 5 7 7 8 8 8 8 6
1 3 6
40
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
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, така че спираме да скачаме.

Търси се колко най-много скока можем да направим, започайки от който и да е индекс. Ако има няколко индекса с максималния брой скоци, връщаме само първия.

Получавате от входа брой N на числата (индексите), като N е между 1 и 30, след това получавате толкова на брой числа (между 0 и N-1) и накрая връщате при кой начален индекс имаме най-много скока и колко са тези скоци.

Примери:

Вход Изход
9
4 6 2 1 5 0 0 3 8
7 7
20
16 10 6 11 1 1 9 12 15 17 0 0 9 15 8 16 7 0 16 18
4 9
30
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
0 1
30
29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 2

Задача 5

sim картите са типове smart-card, това означава че в себе си имат един миниатюрен компютър с миниатюрна памет. Нека да имплементираме съвсем опростено една сим карта.

Трябва да запазите един четири-цифрен ПИН код и един еднобуквен отблокиращ код. В тази задача се изисква коректно валидиране на входни данни, така че ще направим:

а) валидационни функции

б) вход и команди

От входа първо получавате ПИН кода и отблокиращия код. Ако отблокиращия е в невалиден формат, връщате съответно съобщение за грешка и спирате програмата.

След това получавате команди, всяка команда се определя с букви и още някакви стойности. Всяка команда трябва да бъде изкарана в отделна функция!

в) команди с упълномощение

Всички от следните команди изискват упълномощение. Ако преди това сме били логнати, директно изпълняваме командата (и декрементираме броя упълномощени команди), ако обаче не сме упълномощени, трябва да поискаме ПИН код и след това да продължим както нормално.

Ако някоя търсена стойност е невалидна или не съществува, връщате съответната грешка.