Једнодимензионални низови

Шта ћеш научити?

  • шта је секвенцијално а шта бинарно претраживање низа

  • како да пронађеш елемент како у уређеном тако и неуређеном низу

  • како да уредиш низ од најмањег ка највећем елементу и обрнуто

  • како да помериш елементе за одређен број места у лево односно у десно

  • како да обрнеш елементе низа

  • како да избациш одређени елемент са жељене позиције

  • како да убациш елемент на жељену позицију

Потребно за овај курс

Развојно окружење Dev C/C++, Code Blocks, Visual Studio Code sa C/C++ или окружење на Петљи

Увод

На почетку хајде да се подсетимо шта смо у Програмирању 1 научили о низовима. Са знањем које сте стекли у Програмирању 1 пробајте да решите следећи квиз.

Која од понуђених дефиниција дефинише низ:

Низ је основни тип података који се састоји од више података истог типа.

Низ је сложени тип података који се састоји од више података различитог типа.

Низ је основни тип података који се састоји од једног податка.

Низ је сложени тип података који се састоји од више података истог типа.

Одговор:

Ако сте одговорили да је низ је сложени тип података који се састоји од елемената који морају бити истог типа, то је тачан одговор.

Дате су наредбе за декларисање и иницијализацију једнодимензионалног низа (доделу почетних вредности) целих бројева у програмском језику C. Шта мислите које су наредбе исправно написане, а које не? Пробајте да образложите зашто су поједине наредбе неисправне.

int a[10] = {1, 2, 3};

int a[5] = {-3, -2, -1, 0, 1, 2, 3};

int a[] = {10, 20, 30, 40, 50};

int[5] a = {1, 2, 3, 4, 5};

int a[5] = {’1’, ’2’, ’3’, ’4’, ’5’};

Одговор:

  • Ако сте изабрали одговоре под 1, 3 и 5, исправно сте одговорили.

  • Одговор под 1 је исправан јер смо резервисали више простора него што имамо елемената.

  • Одговор под 2 није исправан јер смо резервисали мање простора него што имамо елемената.

  • Одговор под 3 је исправан јер се број резервисаних места дефинише бројем елемената у витичастој загради.

  • Одговор под 4 није исправан јер је број резервисаних места у угластој загради на погрешном месту.

  • Одговор под 5 је исправан јер су у ствари карактери у С језику подаци целобројног типа.

Из претходно наведеног закључујемо:

  • На почетку морамо резервисати довољно простора за све елементе низа при дефинисању низа.

  • Низ се мора састојати од елемената истог типа (простих или изведених).

  • Број елемената низа у угластим заградама може се изоставити само приликом доделе почетних вредности (иницијализације), када број елемената у витичастој загради дефинише број елемената низа.

Поставља се питање шта се дешава ако резервишемо више места него што имамо унетих елемената. У том случају се преостала места попуњавају нулама.

Пробајте да напишете следећи кôд:

#include <stdio.h> 

int main(void)
{
    int a[5] = {1, 2, 3}, i;
    for (i = 0; i < 5; i++)
        printf("a[%d] = %d\n", i, a[i]);
    return 0;
}

Након извршавања програма на излазу ћемо добити:

a[0] = 1
a[1] = 2
a[2] = 3
a[3] = 0
a[4] = 0

Видимо да су прва три елемента са индексима 0, 1 и 2, добили вредности из доделе, а последња два елемента са индексима 3 и 4, вредности 0.

Шта можемо још да закључимо? У С језику, као и у већини програмских језика, индекс низа почиње од 0, тако да први елемент има индекс 0, а рецимо трећи елемент индекс 2.

Обратите пажњу – често се у задацима каже „Елемент на позицији…“, а не „Индекс елемента…“, што суштински мења како поставку, тако и решење задатка.

Хајде сада да видимо шта све можемо да урадимо са низом.

Можемо да:

  • тражимо елемент у низу

  • уредимо низ (од најмањег ка највећем елементу и обрнуто)

  • ротирамо елементе низа (померамо за одређен број места улево или удесно)

  • инвертујемо низ (обрнемо редослед елемената)

  • сажмемо низ (избацимо жељени елемент)

  • проширимо низ (убацимо жељени елемент)

Током целог курса ћемо радити са низовима који садрже целе бројеве. Хајде да кренемо редом.