Садржај
1. Робот Карел - Линијски програми и бројачка петља
2. Робот Карел - Условна петља и гранање
3. Робот Карел - Задаци за вежбање
4. Корњача графика - Линијски програми и петље
5. Корњача графика - Гранање, угнежђене петље, функције, торке и листе
6. Корњача графика - Задаци за вежбање
9. Израчунавања - Коришћење и дефинисање функција
10. Израчунавања - Задаци за вежбање
13. Контрола тока - Задаци за вежбање
16. Откривање и исправљање грешака и коришћење дебагера

14.1. Торке и листе

У свим програмима које смо до сада писали податке смо чували у појединачним променљивама. То су били обично појединачни бројеви или евентуално краћи делови текста (нпр. име или презиме). Елементарни подаци које смо до сада сретали били су цели бројеви (типа int), реални бројеви (типа float), логичке вредности (типа bool) и ниске (типа str). У многим реалним применама потребно је да у програму запамтимо, а касније и обрадимо веће количине података. У тим ситуацијама коришћење појединачних променљивих за памћење сваког појединачног података није практично или, чак, није могуће, и потребно је користити структуре података које нам омогућавају да помоћу једне променљиве представимо читаве колекције података које се састоје од више вредности неког једноставнијег типа. У зависности од података које желимо да сачувамо и операција које са њима желимо да спроведемо, бирамо коју од неколико различитих врста структура података које имамо на располагању треба да употребимо.

Погледајмо на почетку наредни видео:

Како бисмо у програму могли да представимо списак имена кошаркаша у једном тиму? Нека је то наша кошаркашка репрезентација која се 2019. такмичила на Светском првенству у кошарци. Претпоставићемо да сваки играч има свој редни број и то од 1 до 12.

Један могући начин би био да уведемо много засебних променљивих:

Међутим, овакав приказ података није згодан јер не можемо једноставно да одговоримо на разна интересантна питања о кошаркашима (на пример, колико укупно има играча, ко носи задат број дреса, који број носи неки дати играч и слично). Бољи начин да представимо списак играча је да употребимо торку или листу.

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

На пример, торку имена кошаркаша можемо дефинисати на следећи начин.

Називи за колекције у математици

Запис облика (35, 128) се у математици назива уређени пар, запис облика (250, 120, 310) уређена тројка, запис облика (135, 22, 83, 57) уређена четворка, итд. Када дужина није позната, каже се уређена n-торка (уређена „енторка“), али у програмирању је одомаћено краће име - торка.

Дакле, торку дефинишемо тако што између обичних малих заграда (заграда ( и )) наводимо елементе раздвојене зарезима. Видећете да је листа имена кошаркаша веома дугачка, тако да смо је, прегледности ради, разбили у више редова. Иако у општем случају није допуштено делити наредбе на више линија, то је могуће ако је садржај тих линија окружен неким заградама. Пошто је у првој линији отворена заграда (, након читања прве, аутоматски се читају и друга и трећа и четврта линија, све док се не наиђе на затворену заграду ).

Дефинисање листе би се разликовало од дефинисања торке само по томе што би се уместо обичних малих заграда (...) употребиле угласте заграде [...].

Појединачни чланови торке или листе називају се и елементи. Елементи могу бити ниске (као у овом примеру), али и бројеви, друге торке или листе и било шта друго. Чак је могуће у исту торку, односно листу, поставити елементе различитог типа. Као пример торке бројева, формирајмо торку висина ових наших кошаркаша.

Двочлане торке (уређени парови) и вишечлане торке (уређене тројке, четворке, итд.) најчешће се користе за груписање тек неколико појединачних података. На пример, позицију фигуре на шаховској табли можемо представити помоћу уређеног пара који чини ознака врсте (слова од a до h) и ознака колоне (броја од 1 до 8). На пример, ("b", 6). Слично, позиције на географској карти се описују помоћу географске ширине и дужине, тј. помоћу пара реалних бројева. Тако се град Париз налази на позицији која се може описати помоћу пара (48.8566, 2.3522). Време можемо представити помоћу уређене тројке коју чине сат, минут и секунд (на пример, (7, 25, 37)).

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

Избор колекције (торка или листа) у пракси

Већина програмских језика не разликује имутабилне и мутабилне колекције. Зато програмери често користе искључиво листе, чак и у ситуацијама када је коришћење торки примереније. То се не сматра великим пропустом.

Издвајање елемената

Елементима торке (или листе) приступа се на основу њихове позиције, тј. индекса. Бројање креће од нуле. Први елемент листе се налази на позицији 0, други на позицији 1 и тако даље. На пример, елементи у листи a = [3, 7, 4, 2, 5] се броје на следећи начин.

индекс

0

1

2

3

4

вредност

3

7

4

2

5

Зато је првом елементу могуће приступити са a[0] и вредност тога израза је 3 (јер се на позицији 0 у листи налази број 3). Другом елементу се приступа са a[1] и вредност тог израза је 7, и тако даље.

Негативни индекси упућују на бојање од краја (здесна на лево), па -1 означава последњи елемент, -2 претпоследњи, и тако даље.

индекс

-5

-4

-3

-2

-1

вредност

3

7

4

2

5

Зато је последњем елементу могуће приступити помоћу a[-1], претпоследњем помоћу a[-2], итд.

Још једна операција која је често корисна је издвајање дела торке, односно листе. Елементима између позиција a и b укључујући позицију a, али искључујући позицију b, могуће је приступити помоћу a[a:b].

На пример, ime[1:4] издваја елементе имена на позицијама 1, 2 и 3 (распон [1:4] је полуотворен тј. позиција 1 је урачуната, а позиција 4 није).

Ако је a = [3, 7, 4, 2, 5] тада је a[1:4] листа чија је вредност [7, 4, 2]. Ако се изостави број иза двотачке, издвајају се елементи до краја. На пример a[2:] је листа која има вредност [4, 2, 5].

Употребимо ове операције да решимо неколико задатака о нашим играчима.

Играч са датим бројем дреса

Познат је списак играча у тиму. Они носе дресове са бројевима од 1 па на даље. Напиши програм који за дати број дреса одређује играча који игра под редним бројем.

Пошто се уносе бројеви од 1 до дужине торке (или листе), а индекси се крећу од 0 па до претходника дужине торке, након учитавања броја дреса приступиће се елементу чији је индекс за 1 мањи од броја дреса.

Ово померање индекса за 1 може се избећи ако се на почетно место убаци неки вештачки елемент (на пример, празна ниска).

Распакивање

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

На пример, претпоставимо да торка matematicari садржи пуна имена четири велика математичара: Ренеа Декарта, Жозефа Луја Лагранжа, Карла Фридриха Гауса и Леонарда Ојлера. Направимо четири посебне променљиве dekart, lagranz, gaus и ojler које ће садржати пуна имена одговарајућих математичара.

Један начин да се то уради је да се помоћу индекса приступи појединачним елементима.

Међутим, постоји и једноставнији начин да се постигне исти ефекат.

Првој променљивој са леве стране се додељује први елемент листе са десне стране, другој променљивој други елемент листе, и тако даље. Овај поступак називамо распакивање. Исти ефекат би се постигао и да су четири променљиве са леве стране биле наведене у склопу торке, односно листе.

Распакивање се може применити и на уређене парове и торке.

(Created using Swinx, RunestoneComponents and PetljaDoc)
© 2022 Petlja
A- A+