Второ домашно
Второто домашно се състои от 10 задачи за самостоятелна работа отСборник от задачи по програмиране на C++ на М. Тодорова, П. Армянов, Д. Петкова, К. Георгиев. Всяка правилно решено задача носи 2 т.
По-долу са дадени условията на задачите, както и страница и номер в сборника.
Моля, изпращайте решенията си като ZIP файл, който съдържа точно по един .cpp файл за всяка задача. Решението на всяка задача трябва да бъде във файл с име progX.cpp (с малки латински букви), където 1 ≤ X ≤ 10 е номерът на съответната задача. Моля, не слагайте в ZIP архива други файлове освен .cpp файловете с решенията!
Внимание: всички задачи ще бъдат тествани автоматично, затова е важно извеждането на екрана да спазва абсолютно точно това, което е указано в задачата! На лекции ще получите повече информация.
Внимание: всички задачи ще бъдат проверени автоматично за преписване. Файловете с голямо съвпадение ще бъдат проверени ръчно от лектора и при установено взаимстване ще бъдат анулирани.
Задача 1 (стр. 184 / зад. 27). Дадени са три сортирани във възходящ ред едномерни масива a, b и c, всеки с по n елемента (1 ≤ n ≤ 5000). Да се напише програма, която слива масивите, т.е. създава четвърти масив d, който съдържа елементите на дадените и също е сортиран във възходящ ред. Вход: числото n, нов ред, след което три реда, като на всеки ред има n цели числа разделени с интервал и указващи елементите съответно на масивите a, b и c. Изход:3n на брой числа, разделени с интервал и указващи елементите на масива d.
Задача 2 (стр. 185 / зад. 39). Дадени са n триъгълника (1 ≤ n ≤ 20) с дължини на страните ai, bi и ci (0 ≤ i ≤ n - 1). Да се напише програма, която намира номера на триъгълника с най-голямо лице. Вход: числото n, нов ред, след което n реда, като на всеки ред има три положителни цели числа, разделени с интервал и задаващи страните на поредния триъгълник. Изход: цяло число i (0 ≤ i ≤ n - 1), означаващо поредния номер на триъгълника с най-голямо лице. Да не се извежда знак за нов ред.
Задача 3 (стр. 185 / зад. 43). Два реда на една матрица си приличат, ако съвпадат множествата от числата, съставящи редовете. Да се напише програма, която намира номерата на всички редове на матрица от цели числа A с размерност m x n (1 ≤ m ≤ 20 и 1 ≤ n ≤ 30), които приличат на зададен чрез поредния си номер k (0 ≤ k ≤ m - 1) ред на А. Вход: числото m, интервал, числото n, интервал, числото k, нов ред, m реда с по n цели числа на всеки, отделени с интервал. Изход: Номерата на всички редове, които си приличат с k-тия ред, подредени във възходящ ред и разделени с интервал. Номерът на самия k-ти ред да не се извежда. Да не се извежда знак за нов ред.
Задача 4 (стр. 186 / зад. 56). Квадратна матрица A с размерност n (1 ≤ n ≤ 20) е триъгълна, ако за елементите ѝ е в сила едно от следните две условия за
ai,j = 0, ако i > j и ai,j ≠ 0, ако i ≤ j за 0 ≤ i,j ≤ n - 1
ai,j = 0, ако i < j и ai,j ≠ 0, ако j ≤ i за 0 ≤ i,j ≤ n - 1
Да се напише програма, която определя дали дадена матрица A е триъгълна. Вход: числото n, нов ред, n реда с по n цели числа на всеки, отделени с интервал. Изход: числото 1, ако A е триъгълна, числото 0 в противен случай. Да не се извежда знак за нов ред.
Задача 5 (стр. 187 / зад. 62). Дадена е квадратна таблица A с размерност n x n (1 ≤ n ≤ 20) от низове, съдържащи думи с максимална дължина 9. Да се напише програма, която намира изречението, получено след обхождане на A по спирала в посока обратна на движението на часовниковата стрелка, започвайки от долния десен ъгъл. Вход: числото n, нов ред, n2 реда с по един низ ред, описващи елементите на матрицата по редове (т.е. по реда (0, 0), (0, 1), ... (0, n - 1), (1, 0), (1, 1), .... (1, n - 1), ... (n - 1, 0), (n - 1, 1), ... (n - 1, n - 1)). Изход: Точно един ред с полученото изречение, в което думите са разделени с по един интервал.
Задача 6 (стр. 296 / зад. 16). Да се дефинира функция char* letters(char* str), която връща символен низ, който се получава от низа str, като от него са изтрити всички символи, които не се латински букви. Вход: Входен низ до 1000 символа, записан на един ред. Изход: Резултатът от функцията, записан на един ред.
Задача 7 (стр. 296 / зад. 20). Да се дефинира функция char* reverseWordsOnly(char* str), която получава като параметър символен низ и обръща в него отделните думи (и само тях). Думите са произволни редици от символи. За разделители служат ' ', ',', ';' и '.'. Да се напише програма, която въвежда низ до 1000 символа от клавиатурата и извежда получения резултат от функцията reverseWordsOnly на екрана. Вход: Входният низ, записан на един ред. Изход: Резултатът от функцията, записан на един ред.
Задача 8 (стр. 297 / зад. 26). Да се дефинира функция char* deleteLast(char* str, const char* what), която връща указател към символния низ str (до 1000 символа), в който последното срещане на низа what (до 100 символа) е изтрито. Вход: Низът str, нов ред, низът what. Изход: Резултатът от функцията, записан на един ред.
Задача 9 (стр. 297 / зад. 31). Нека alpha е редица от 26 знака. Да се дефинира функция char* encode(char* str, char const* alpha), която заменя всяка малка латинска буква в символния низ str със съответен символ от символния низ alpha. Съответствието е следното: 'a' се заменя alpha[0], 'b' се заменя с alpha[1], ..., 'y' се заменя с alpha[24], 'z' се заменя с alpha[25]. Останалите символи не се променят. Да се напише програма, която въвежда низ str до 1000 символа от клавиатурата и низ alpha и извежда получения резултат от функцията encode на екрана. Вход: Низът str, нов ред, низът alpha. Изход: Резултатът от функцията, записан на един ред.
Задача 10 (стр. 298 / зад. 37). Да се напише програма, която за дадена числова редица a0, a1, ..., an-1 (1 ≤ n ≤ 20) намира дължината на най-дългата ѝ ненамаляваща подредица ai1, ai2, ..., aik (ai1≤ ai2 ≤ ... ≤ aik), където i1 < i2 < ... < ik. Вход: числото n, нов ред, целите числа от a0 до an-1, разделени със интервали. Изход: Дължината на най-дългата ненамаляваща подредица като цяло число.