| Name | Size | |
|---|---|---|
| .. | ||
| README.md | 5.5 KiB | log stats plain blame |
| binarySearch.cpp | 544 B | log stats plain blame |
| linearSearch.cpp | 770 B | log stats plain blame |
| printArray.cpp | 276 B | log stats plain blame |
| reverse.cpp | 335 B | log stats plain blame |
| sieveOfEratosthenes.cpp | 806 B | log stats plain blame |
Масиви (с фиксирана дължина)
Масивът е наредена последователност от елементи от един тип. Отделен елемент на масива се достъпва посредством името на масива, последвано от поредния номер (индекс) на елемента в квадратни скоби
Инициализация на масиви
```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;
}
Масивите се подават във функциите по адрес! Т.е промените, които се правят върху масива във функцията, ще се отразят върху подадения като параметър масив!
Примери
- Отпечатване на масив
- Линейно търсене в масив
- Решето на Ератостен
- Двоично търсене
- Обръщане на масив
Задачи
Задача 1: Да се напише функция, която приема масив и връща дали е палиндром.
Вход: [1 2 3 2 1], Изход: true
Задача 2 Да се напише функция, която приема масив и връща най-малкото общо кратно на числата в масива.
Вход: [9 18 6 12], Изход: 36
Задача 3 Да се напише функция, която приема масив и връща най-големият общ делител на числата в масива.
Вход: [9 18 6 12], Изход: 3
Задача 4 : Да се напише функция, която приема масив и връща дали е конкатенация на два масива, които са палиндроми.
Вход: [1 2 3 2 1 4 5 5 4], Изход: true
Вход: [1 2 3 4 5], Изход: false
Вход: [1 2 3 2 1], Изход: true
Задача 5 : Въвежда се число 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
Задача 6: От даден масив от сортирани последнователни числа са премахнати някои числа. Напишете фунцкия, която приема такъв масив и връща най-малкото премахнато число.
Решението ви трябва да работи с логартмична сложност ( а не с линейно минаване през масива).
Вход: [5 6 7 9 10 12 13], Изход: 8 //премахнатите числа са 8 и 11.
Вход: [10 12 13 14 16], Изход: 11 //премахнатите числа са 11 и 16.
Модифицирайте функцията, за да отпечатване и най-голямото премахнато число
