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


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

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

Задача 1

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

Пример:

ВходИзход
ABCDE AKDDCPA__D__

Задача 2

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

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

Примери:

ВходИзход
6 A CM NM NA C
7 ABCKLMNKLMNABC

Задача 3

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

Примери:

ВходИзход
abc1
abc def2
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 22: 0 2: FF
2: FF 0 A 5 2.52: 0 0 0 0 2: FF 0 A 5
1: FA 0 9 3 5 6 1 2 ABB 8A 99 1.121: 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.

[image https://upload.wikimedia.org/wikipedia/commons/thumb/4/4c/Blue-punch-card-front-horiz.png/1024px-Blue-punch-card-front-horiz.png

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

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

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

Пример:

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

Задача 6

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

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

От входа получавате число 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