Задачи - УПП, Седмица 9, 01.12.2023

GitHub classroom: classroom.github.com/a/lGXxCRZO

warn Освен ако не е казано друго, може да зачитате, че максималната дължина на един низ е 1024 знака.

Задача 1

Получавате от входа два низа. Трябва да изкарате на екрана низ, при който има знакът “_” на индексите, където буквите между двата низа се различават, и съответната буква, когато не се различават.

Пример:

Вход Изход
ABCDE
AKDDCP
A__D__

Задача 2

От входа получавате число N и на следващия ред получавате низ с толкова на брой знака. Изкарайте на екрана втората половина от низа и след това директно долепена първата половина. Ако низа е с нечетна дължина, зачитаме средния елемент като част от втората половина.

important Трябва да използвате динамична памет

Примери:

Вход Изход
6
A CM N
M NA C
7
ABCKLMN
KLMNABC

Задача 3

От входа получаввате един низ, трябва да изкарате броя думи в него. Думите се разделят с една или повече шпации, като знаци (точка, запетая, удивителна, …) не са думи.

Примери:

Вход Изход
abc 1
abc def 2
This , is ,      a , sentence    .!
4

Задача 4

Една от ранните програми за Apple I компютърът, написана от Steve Wozniak в упътването на компютъра, е така наречената “Woz Monitor”, или wozmon за картко. Тя позволява да погледнеш стойностите в клетки от паметта, да запишеш стойности и да стартираш програми.

Игнорирайки последната му възможност, нека да го имплементираме. За нашите цели, паметта на компютъра е просто един масив, които ще расте когато е нужно. Ще адресираме (индексираме) стойностите от масива с числа от 16-тична бройна система.

Когато въведем низ във формата:

Примери:

Вход Изход
0 0: 0
2.8 2: 0 0 0 0 0 0 0
2: FF
2
2: 0
2: FF
2: FF 0 A 5
2.5
2: 0 0 0 0
2: FF 0 A 5
1: FA 0 9 3 5 6 1 2 ABB 8A 99
1.12
1: 0 0 0 0 0 0 0 0
9: 0 0 0
1: FA 0 9 3 5 6 1 2
9: ABB 8A 99 0

Задача 5

Перфокартите са стар формат за съхраняване на текст (код) върху хартиен носител, който е четим от машини. Разделени са на някакъв брой редове и колони, всяка колона определя една буква, и всеки ред определя битовите стойности на всяка буква, като дупката означава бит 1, а липсата и бит 0.

За удобство на програмиста, почти винаги най-отгоре на колоната се изписва с мастило каква е буквата на съответната колона.

Трябва да имплементирате програма, която получава перфо карти в стандартния IBM формат: 12 реда и 80 колони и изкарва съответния ред, който е закодиран.

Тоест, от входа получавате 12 низа, всеки низ е с дължина 80, и са съставени от 0 и 1.
Стойностите по колони:

Пример:

Вход Изход
100000000000111111111000000000000000000
010000000000000000000111111111000000000
001000000000000000000000000000111111111
000100000000100000000100000000100000000
000010000000010000000010000000010000000
000001000000001000000001000000001000000
000000100000000100000000100000000100000
000000010000000010000000010000000010000
000000001000000001000000001000000001000
000000000100000000100000000100000000100
000000000010000000010000000010000000010
000000000001000000001000000001000000001
&-0123456789ABCDEFGHIJKLMNOPQR/STUVWXYZ

Задача 6

Регулярните изрази са низове, които позволяват да опишем шаблони, с които да филтрираме/приемаме низове. Вие ще ги изучавате много подробно в “Езици, автомати и изчислимост”, но за нашите цели ще се абстрахираме от детайлите.

Правилата за регулярни изрази са следните:

  1. Какво описва регулярният израз aa*bcd?

    Първата буква от нашия низ трябва да бъде а. След това имаме a*, след тази първа буква може да имаме 0 или повече a-та. Тоест втората буква може да бъде a или b, ако е a, третата буква може да бъде a или b, обаче ако втората буква е b, тогава продължаваме напред и останалите букви трябва да са bcd.

    Тоест, този регулярен израз приема низове, които започват с a, след това имат 0 или повече a-та и завършват на bcd. Следните низове ще бъдат приети: “abcd”, “aabcd”, “aaabcd”, “aaaabcd” и так. нат.

  2. Какво описва регулярният израз b*cd??

    В началото имаме b нула или повече пъти, след това имаме c и накрая имаме нула или едно d. Следните низове ще бъдат приети: “c”, “bc”, “bbc”, “bbbc”, …, “cd”, “bcd”, “bbcd”, …

От входа получавате число N и след това ще получите 2N на брой редове. Един ред ще бъде регулярен израз, следващия ще бъде низ за проверка, след това пак регулярен израз, след това пак низ за проверка и така се редуват.

След всеки регулярен израз и низ за проверка, проверявате дали низа се приема от регулярния израз, и изкарвате “Matched”. В противен случай изкарвате “No match”. Ако регулярния израз е в грешен формат (срещнете “?” или “*” като първи знак), трябва да изкарате “Bad regex”.

Пример: Смесен вход/изход

9
text
text
Matched
text
test
No match
a*
a
Matched
ca*
c
Matched
ca*
caaaa
Matched
n?
n
Matched
mn?
m
Matched
0*573
0000005723
No match
*abc
ops
Bad regex