Website Summary Files Commits Branches @commit @diff @stats
path: root / Sem. 06
NameSize
..
README.md5.5 KiBlog stats plain blame
binarySearch.cpp544 Blog stats plain blame
linearSearch.cpp770 Blog stats plain blame
printArray.cpp276 Blog stats plain blame
reverse.cpp335 Blog stats plain blame
sieveOfEratosthenes.cpp806 Blog 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.

Модифицирайте функцията, за да отпечатване и най-голямото премахнато число