Задачи - УПП, Седмица 7, 13.11.2025

GitHub Classroom: https://classroom.github.com/a/clYBilXQ

important

Както при if-ове, следното е лоша практика и ще се вземат точки:

bool f() {
    if (condition)
        return true;
    else
        return false;
}
important

Следното е грешно и ще се вземат точки:

int* f() {
    int numbers[5] = { 0 };
    return numbers;
}

За решаване

Задача 1

Напишете функция, която приема цяло число и връща дали е четно и положително. Нека вашата функция да следва декларацията:

bool evenAndPositive(int x);

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

Вход Изход
6 Even and positive
-4 Not even and positive
15 Not even and positive

Задача 2

Напишете функция, която приема цяло неотрицателно число n и връща n-тото число на фибоначи. Припомняме, че нулевото число на фибоначи е 0, първото число е 1 и всяко следващо е сумата на предходните две.

Нека вашата функция да следва декларацията:

unsigned int fib(unsigned int n);

От входа получавате цяло неотрицателно число. Използвайки fib, трябва да изкарате n-тото число на фибоначи.

Вход Изход
0 0
1 1
2 1
3 2
12 144
33 3524578

Задача 3

Напишете функция, която приема масив от 15 цели числа и намира средното аритметично на всички тях. Нека вашата функция да следва декларацията:

double average(int numbers[15]);

От входа получавате 15 цели числа. Използвайки average, трябва да изкарате средното аритметично на всички тях.

Вход Изход
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 8
1 2 3 4 5 6 7 8 9 10 0 0 0 0 0 5.5
-77 21 -78 -55 53 -19 51 81 77 -73 -26 51 79 -73 -86 -4.933

Задача 4

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

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

Нека вашата функция да следва декларацията:

void calc(float number, double &half, int* integer);

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

Вход Изход
3.14 1.57 3
-9.99 -4.995 -9

Задача 5

Напишете функция maxElem, която приема масив от числа с плаваща запетая и негов размер поотделно! Това означава, че на функцията може да ѝ бъде подаден масив с 10, 15, 2 или ... елемента.

Нека вашата функция да върне най-големия елемент в масива.

От входа получавате една редица от 5 реални числа и втора редица от 7 реални числа. Използвайки maxElem, върнете най-големия елемент в първата и във втората редица.

Вход Изход
1 2 3 4 5
1 2 3 4 5 6 7
5 7
12.01 28 50.5 -16.4 -72.22
37.4 0.9 -100.34 19 -1 37.9 -52
50.5 37.9

Задача 6

Напишете функция, която приема масив с произволна дължина (масива и размера се подават поотделно), съствен от цели числа, и върнете най-големия и най-малкия му елемент. Нека вашата функция да следва декларацията:

void minmaxElems(int* arr, unsigned size, int *min, int *max);

От входа получавате две редици от по 10 и 8 цели числа съответно. Използвайки minmaxElems, върнете най-големия и най-малкия елемент на всяка редица.

Вход Изход
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8
10 1
8 1
98 42 -86 81 -27 98 46 -48 8 -48
14 22 -65 10 -3 -97 -76 86
98 -86
86 -97

Задача 7

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

unsigned sumElems(int* arr, unsigned size);

От входа получавате 11 цели числа. Трябва да върнете първата последователност от 3 елемента, чиято сума е 0, използвайки sumElems.

Ако няма такава, не изкарвайте нищо.

Вход Изход
5 12 -3 1 2 6 -10 4 7 11 -2 -3 1 2
1 2 3 4 5 6 7 8 9 10 11
-2 -1 0 1 -1 3 4 -4 -4 5 8 0 1 -1

Задача 8

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

Тоест, ако масива е 1 2 3 4, тогава след ротация с една позиция, масива ще е 4 1 2 3. Ако имахме две ротации, тогава щяхме да получим 3 4 1 2.

Не модифицирайте оригиналния масив! Трябва да върнете друг масив със завъртяните елементи.

От входа получавате две редици от по 6 и 7 цели числа. След всяка редица получавате ротация. Трябва да изкарате двете редици, обаче завъртяни, използвайки вашата функция.

Вход Изход
1 2 3 4 5 6 1
1 2 3 4 5 6 7 0
6 1 2 3 4 5
1 2 3 4 5 6 7
1 2 3 4 5 6 8
1 2 3 4 5 6 7 17
5 6 1 2 3 4
5 6 7 1 2 3 4

Задача 9

warn НЕ може да използвате "вградената" функция pow!

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

unsigned int topower(double x, unsigned int a);

От входа получавате 11 реални числа. Първите 10 са коефициентите в полином от 10та степен. 11тото е потенциален корен.

Трябва да върнете дали 11тото действително е корен на уравнението, използвайки topower.

Припомняме, че едно число x е корен на полином от 10та степен, когато:

./img/polynomial.png

Вход Изход
0 0 0 0 0 0 0 0 0 5 5 Is a root
0 0 0 0 0 0 0 0 0 5 9 Not a root
0 0 0 0 0 0 2 3 -11 -6 -0.5 Is a root
0 0 0 0 0 0 2 3 -11 -6 -2 Not a root
1 7 -38 -192 209 -1009 5768 -19002 -2580 -99792 -120960 5.56706 Is a root
1 7 -38 -192 209 -1009 5768 -19002 -2580 -99792 -120960 -0.986779 Is a root
1 7 -38 -192 209 -1009 5768 -19002 -2580 -99792 -120960 2.14882 Not a root

Задача 10

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

Нека вашата функция да следва декларацията:

unsigned int countSameElementsOnSameIndecies(int* arr1, unsigned int size1, int* arr2, unsigned int size2);

От входа получавате две редици от по 10 и 15 цели числа. Трябва да върнете бройката на съвпадащи стойности на съвпадащи индекси, използвайки countSameElementsOnSameIndecies.

Вход Изход
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
10
1 2 3 4 5 6 7 8 9 10
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
0
33 12 -97 -28 -48 -11 68 -42 88 -97
51 12 -97 -36 -47 -11 69 -42  6  88 -100 -79 -74
4

За самоподготовка

Задача 11

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

От входа получавате две естествени числа. Трябва да върнете бройката на всички прости числа между тези две числа (включително), използвайки вашата функция.

Вход Изход
2 5 3
1 10 4
17 832 139

Задача 12

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

Получавате две редици от по 10 и 9 елемента. Трябва да върнете двете редици, обаче всеки елемент е инкрементиран, използвайки вашата фунцкия.

Вход Изход
1 2 3 4 5 6 7 8 9 10
10 20 30 40 50 60 70 80 90
2 3 4 5 6 7 8 9 10 11
11 21 31 41 51 61 71 81 91
-70 93 -39 99 21 -86 48 70 -53 0
25 100 28 -32 32 -70 -95 -98 -86
-69 94 -38 100 22 -85 49 71 -52 1
26 101 29 -31 33 -69 -94 -97 -85

Задача 13

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

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

Вход Изход
a 0 a 0 a 0 a 0 a 0 a 0 Follows pattern
a b c d e f g h i j k l Does not follow pattern
k 912 h 84 m 10 q 7 q 7 i 19 Follows pattern

Задача 14

Напишете функция, която получава масив от 10 реални числа и връща масив от 5 реални числа. Резултатния масив се формира по следния начин:

  1. Първия елемент на върнатия масив е разликата на втория от първия елемент на входния (получения) масив.
  2. Втория елемент на върнатия масив е разликата на четвъртия от третия елемент на входния масив.
  3. И така нататък.

От входа получавате масив с 10 елемента. Трябва да върнете резултатния 5-елементен масив от вашата функция.

Вход Изход
1 2 3 4 5 6 7 8 9 10 1 1 1 1 1
1 2 3 5 6 9 10 14 15 20 1 2 3 4 5
1 1 1 1 1 1 1 1 1 1 0 0 0 0 0
38 70 -34 84 -84 -15 10 92 27 -22 32 118 69 82 -49

Задача 15

Напишете две функции, всяка от които приема масив с 5 естествени числа. Нека първата да повдига всяко число на втора степен и втората да умножава всяко число по 3. Тези операции трябва да се извършват върху входните за функциите елементи (inplace).

От входа получавате 5 неотрицателни цели числа и 6то целево число. Започвайки с 5те числа, първо ги повдигате на втора степен, след това умножавате по 3, след това повдигате пак, след това умножавате пак, и така докато целевото число не се срещне в редицата.

Когато това се случи, изкарайте редицата с 5 числа. Допуснете, че винаги ще срещнете целевото число. Използвайте вашите функции.

Вход Изход
1 2 3 4 5 6 48 3 12 27 48 75
1 2 3 4 5 6 47775744 729 186624 4782969 47775744 284765625
6 5 3 6 7 3586355551445647360 3586355551445647360 2189469451904296875 617673396283947 3586355551445647360 15687628237922985707