Website Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
Commitaf6c667bc6e299340d5b6bb73ced21d7c3650627 (patch)
Author
 Angel Dimitriev <achi_d@abv.bg>
2021-11-15 12:09:17 -0500
Committer
 GitHub <noreply@github.com>
2021-11-15 12:09:17 -0500
Filesed8ef6b37f2d3434552b82468f6182e91358da2a
Introduction_to_programming_FMI-af6c667bc6e299340d5b6bb73ced21d7c3650627.tar
Introduction_to_programming_FMI-af6c667bc6e299340d5b6bb73ced21d7c3650627.tar.gz
Introduction_to_programming_FMI-af6c667bc6e299340d5b6bb73ced21d7c3650627.zip
Parent01e6aca881c0e66907f00e000ab9ec4f903c63e1 (diff)
Create README.md
1 files changed, 134 insertions, 0 deletions
-rw-r--r--Sem. 06/README.md134
diff --git a/Sem. 06/README.md b/Sem. 06/README.md
new file mode 100644
index 0000000..9f609c8
--- /dev/null
+++ b/Sem. 06/README.md
@@ -0,0 +1,134 @@
+
+# Масиви (с фиксирана дължина)
+
+**Масивът** е наредена последователност от елементи от един тип. Отделен елемент на масива се достъпва посредством името на масива, последвано от поредния номер (индекс) на елемента в квадратни скоби
+
+
+
+## Инициализация на масиви
+
+ ```c++
+ int arr[6]; // Създава масив от 6 елемента, всеки от които е цяло число.
+ int arr2[] = {0, 1, 2, 3, 4, 5}; // Създава масив от 6 елемента.
+ int arr3[6] = {1,2,3}; //Останалите елементи се запълват с defaut-на стойност.
+ int arr[]; //грешка
+ int arr[4] = {1, 2, 3, 4, 5} // грешка
+```
+
+ Задължително големината на масива трябва да е константа, чиято стойност е ясна преди да се компилира програмата
+
+ ```c++
+ int n;
+ cin >> n;
+ int arr[n]; //грешка!
+```
+
+ ```c++
+ const int SIZE = 4;
+ int arr[SIZE]; //ok!
+```
+
+## Достъп на елемент
+ В масивите имаме константен достъп до всеки един елемент.
+Достъпът става посредством индекси. Индексацията започва от 0. (защо?)
+
+ ```c++
+ int arr[] = {1, 2, 400, 4, 5}
+ arr[3] = 44; //Присвоява на елементът на индекс 3 стойността 44.
+ // [1, 2, 400, 44, 5]
+ cout << arr[2]; //Отпечатва на стандартния изход елементът на индекс 2 (400)
+
+```
+arr не е самият масив, а указател към първия елемент.
+ ```c++
+ int arr[] = {1, 2, 400, 4, 5}
+ cout << arr; //ще се отпечата АДРЕСА на масива, но не и самия масив.
+```
+
+Достъпът до елемент става, чрез смятането адреса му:
+
+Адресът на arr[i] е: arr + i * sizeof(type of array)
+
+i е брой "отмествания" надясно.
+
+
+
+
+
+## Подаване на масиви във функции
+ ```c++
+ #include <iostream>
+ using namespace std;
+ void print(const int arr[], int len)
+ {
+ for(int i = 0; i < len; i++)
+ {
+ cout << arr[i] << " ";
+ }
+ }
+ void increment(int[] arr, unsigned size)
+ {
+ for(unsigned i = 0; i < size; i++)
+ arr[i]++;
+ }
+ int main()
+ {
+ const int SIZE = 4;
+ int arr[SIZE] {1,2,3,4};
+
+ increment(arr, SIZE);
+ print(arr,SIZE);
+
+ return 0;
+ }
+```
+ Масивите се подават във функциите по адрес!
+ Т.е промените, които се правят върху масива във функцията, ще се отразят върху подадения като параметър масив!
+## Примери
+
+ - Отпечатване на масив
+ - Линейно търсене в масив
+ - Решето на Ератостен
+ - Двоично търсене
+ - Обръщане на масив
+
+<h3>Задачи</h3>
+
+**Задача 1:** Да се напише функция, която приема масив и връща дали е палиндром.
+
+*Вход: [1 2 3 2 1], Изход: true*
+
+**Задача 2** Да се напише функция, която приема масив и връща най-малкият общ делител на числата в масива.
+
+*Вход: [9 18 6 12], Изход: 36*
+
+**Задача 3 :** Да се напише функция, която приема масив и връща дали е конкатенация на два масива, които са палиндроми.
+
+*Вход: [1 2 3 2 1 4 5 5 4], Изход: true*
+
+*Вход: [1 2 3 4 5], Изход: false*
+
+*Вход: [1 2 3 2 1], Изход: true*
+
+
+**Задача 4 :** Въвежда се число N (N <= 1000) и N цели числа (елементи на масив).
+Да се отпечатат броя на инверсиите в масива.
+
+Инверсия ще наричаме двойка индекси (i,j), където i < j и arr[i] > arr[j]
+
+*Вход: 6 5 4 3 2 10 Изход: 15* //в масива [5 4 3 2 1 0] има 15 инверсии.
+
+*Вход: 5 10 11 12 13 14 15, Изход: 0*
+
+
+**Задача 5:**
+От даден масив от сортирани последнователни числа са премахнати някои числа.
+Напишете фунцкия, която приема такъв масив и връща най-малкото премахнато число.
+
+Решението ви трябва да работи с **логартмична сложност** ( а не с лиейно минаване през масива).
+
+*Вход: [5 6 7 9 10 12 13], Изход: 8* //премахнатите числа са 8 и 11.
+
+*Вход: [10 12 13 14 16], Изход: 15* //премахнатите числа са 11 и 16.
+
+Модифицирайте функцията, за да отпечатване и най-голямото премахнато число