# Задачи - УПП, Седмица 11, 11.12.2025 'define expected-reading 7 min 'define created 10 December 2025 'define edited 10 December 2025 [$pagenav] :question Има два начина да приемем низ от входа: ```c++ cin.getline(char*, size_t, char); ```c++ cin.get(char&); Кога бихме избрали всеки от тях? GitHub Classroom: [url https://classroom.github.com/a/z_C3UMi8] ## За решаване ### Задача 1 От входа получавате 20 буквен низ: име. Трябва да изкарате съобщението "Hello *[[име]]*!" :table_2 |= Вход |= Изход |: John |: Hello John! |: Aleksandur |: Hello Aleksandur! ### Задача 2 От входа получавате изречение: низ, завършващ на точка. Трябва да изкарате броя букви (малки или големи) в изречението. :table_2 |= Вход |= Изход |: This is a very long sentence. |: 23 |: I'm 73 years old. |: 10 ### Задача 3 От входа получавате изречение: низ, завършващ на точка. Трябва да изкарате броя полета в низа. Поле наричаме всяка последователност от букви, която не съдържа знака шпация. :table_2 |= Вход |= Изход |: `[first second third fourth]` |: 4 |: `[I'm glad you're here!]` |: 4 |: `[ a b c d 8 k * * ]` |: 8 ### Задача 4 От входа получавате текст, докато не срещнете първия празен ред. Трябва да изкарате броя редове в текста. :table_2 |= Вход |= Изход |: ``` First line Second line Third line |: 3 |: ``` Day had broken cold and grey, exceedingly cold and grey, when the man turned aside from the main Yukon trail and climbed the high earth-bank, where a dim and little-travelled trail led eastward through the fat spruce timberland. |: 4 ### Задача 5 От входа получавате низ, завършващ на двоеточие и след това две реални числа. За всяко срещане на думата "sum" в низа, трябва да изкарате сумата на числата, и за всяко срещане на "sub" в низа, трябва да изкарате разликата на числата. :table_2 |= Вход |= Изход |: sum: 5.5 0.5 |: 6 |: sub: 2 3 |: -1 |: Here is the sum of the two numbers: 3.14 4.13 |: 7.27 |: We can sum, subtract and sum again: 1 2 |: 3 -1 3 ### Задача 6 От входа получавате ред, обозначаващ число в 16-тича бройна система. Тоест, реда започва с `[0x]` и останалото са 16-тични цифри. Трябва да изкарате стойността на числото в 10-тична бройна система, =[като направите конвертирането ръчно!]= Тоест =[не е позволено да използвате функционалност от стандартната библиотека!]= Приемете, че буквите A-F са главни и че няма да имате водещи нули (напр. `[0x0001]`). :table_2 |= Вход |= Изход |: 0x8 |: 8 |: 0x9 |: 9 |: 0xA |: 10 |: 0xF |: 15 |: 0x10 |: 16 |: 0xFF |: 255 |: 0xABCDEF |: 11259375 |: 0x5F3759DF |: 1597463007 ### Задача 7 От входа получавате 5 буквен низ и след това един ред текст. Трябва да изкарате всички срещания на първия низ във втория (като препокривания са позволени). :table_2 |= Вход |= Изход |: ``` abcde One abcde twoabcdethree four five abcde |: 3 |: ``` aaaaa aaaaaaaaaaaaaaaaaaaa |: 16 ### Задача 8 От входа получавате букви, докато не срещнете низа "end". Трябва да изкарате всички полета в обратен ред. Поле наричаме всяка последователност от букви, която не съдържа шпация. :table_2 |= Вход |= Изход |: One two three end |: end three two One |: They said he is free on the weekend |: weekend the on free is he said They ### Задача 9 От входа получавате две полета, съставени от главни и малки латински букви. Трябва да върнете общата бройка срещания на всяка буква от второто поле в първото. :table_2 |= Вход |= Изход |: aAAbbbb aA |: 3 |: z ZZ |: 0 ## За упражнение ### Задача 10 От входа получавате ред с текст. Трябва да върнете дали е [url https://bg.wikipedia.org/wiki/%D0%9F%D0%B0%D0%BD%D0%B3%D1%80%D0%B0%D0%BC%D0%B0 панграма] на латинската азбука: дали всяка буква се среща поне веднъж (без значение дали е главна или малка). :table_2 |= Вход |= Изход |: The quick brown fox jumps over the lazy dog. |: Pangram |: Pack my box with five dozen liquor jugs. |: Pangram |: Echo-changes every Thursday |: Not a pangram ### Задача 11 От входа получавате два реда. Трябва да премахнете всяко срещане на втория ред в първия и да изкарате резултата. :table_2 |= Вход |= Изход |: ``` This is a very nice evening i |: ``` Ths s a very nce evenng |: ``` Buffalo buffalo Buffalo buffalo buffalo buffalo Buffalo buffalo buffalo |: ``` Buffalo Buffalo Buffalo ### Задача 12 От входа получавате ред с текст. Зачитайки го за парола, трябва да върнете колко силна е паролата. Това са следните критерии, като всеки критерии добавя единица към общата оценка на паролата: .numbered 1. Съдържа поне 15 букви 2. Не съдържа съседни еднакви знаци 3. Да съдържа поне една малка и главна латинска буква 4. Да съдържа поне една цифра 5. Да съдържа поне един знак, различен от цифра или буква Накрая тряба да върнете оценката на паролата. :table_2 |= Вход |= Изход |: hi |: 1 |: aa |: 0 |: Hello@World15 |: 4 |: Ny$wtgYH62uTy@d |: 5 ### Задача 13 Хешираща функция е функция, която превръща низ в число. Една много често използвана е функцията на [url https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function Fowler-Noll-Vo]. Тя работи по следния начин: .bulleted - началната стойност за хеша се нарича "offset basis" - за всяка буква (без терминиращата нула): .numbered 1. умножаваме текущия хеш по простото число на FNV (и обновяваме текущя хеш) 2. на текущия хеш, пресмятаме неговото побитово изключващо или с текущата буква Използвайки 32-битовите offset basis (2166136261) и FNV простото число (16777619), изкарайте хешираната стойност на подадения ред текст. :table_2 |= Вход |= Изход |: `[Hello World]` |: 310551791 |: `[Nothing]` |: 383317984 |: `[!]` |: 84696382 |: `[The most effective debugging tool is still careful thought, coupled with judiciously placed print statements.]` |: 2174003109 ### Задача 14 От входа получавате два реда с текст. Трябва да върнете дали първия ред е [url https://en.wikipedia.org/wiki/Anagram анаграма] на втория, тоест дали втория низ може да се получи след някакво разместване на всички (латински) букви в първия низ. Игнорирайте дали буквата е главна или малка. :table_2 |= Вход |= Изход |: ``` New York Times monkeys write |: Anagram |: ``` barn yarn |: Not an anagram |: ``` evil vile |: Anagram |: ``` manually by hand |: Not an anagram |: ``` Tom Marvolo Riddle I am Lord Voldemort |: Anagram ## За любознателните ### Задача 15 От входа получавате два реда с текст. Трябва да пресметнете [url https://en.wikipedia.org/wiki/Levenshtein_distance разстоянието на Ливенщайн] между тях. То се пресмята така: .numbered 1. Ако един от двата текущи низа е празен, връщаме 0 2. Ако първата буква от двата низа е еднаква, връщаме разстоянието на Ливенщайн от остатъка от низовете 3. Иначе, връщаме 1 плюс най-малкото от разстоянията на Лиевнщайн между: .bulleted - първия низ и остатъка на втория низ (без първата буква) - остатъка на първия низ (без първата буква) и втория низ - остатъците на двата низа (без първите им букви)