Professional Documents
Culture Documents
Повеќедимензионални низи
Еднодимензионалните низи претставуваат множества од повеќе елементи од ист тип. Во C++,
податочни типови (int, char, double, long long, итн), со тоа што е потребно, при декларацијата,
податочниот тип (од кој тип се елементите кои ја сочинуваат низата), да го наведеме и бројот
на елементи.
множества податоци врз кои планираме да вршиме операции. На пример, може да креираме
низа од 365 (или 366) double вредности кои ќе ја содржат измерената просечна температура
за секој ден од годината. Потоа, можеме да вршиме разни математички операции врз
месеци или за целата година, итн. Доколку не користевме низи, ќе требаше да креираме 365
Како и секоја друга променлива, така и низите мора да бидат декларирани пред да може да
tip ime[N];
Притоа, tip го означува податочниот тип на секој елемент од низата, N е бројот на елементи,
Со тоа, сме креирале променлива со име ime, која овозможува пристап до 6 вредности од тип
друг - како што е дадено на сликата). За да пристапиме до одреден елемент од низата (да ја
прочитаме неговата вредност, или да запишеме некоја вредност) се користи операторот [p] -
(прв елемент) до N-1 (последен елемент) - каде N го означува бројот на елементи во низата!
однесуваат како обични променливи од тип double и нивната вредност може да ја читаме
и/или менуваме.
големина 5, и за сместување на вредностите {0, 10, 20, 30, 40} во елементите од таа низа:
Извадок 12.1
Важно е да се напомене дека, при декларирањето на една низа, мора да наведеме константна
големина (големина позната пред самото извршување на програмата). За ваквите низи уште
се вели дека се статички креирани. Постојат и низи, за кои ќе зборуваме понатаму, кои се
Следната програма користи низа arr[10] за работа со 10 цели броеви. Притоа, броевите се
[ Изврши на МЕНДО ]
Како што може да забележите од изворниот код на програмата дадена погоре, до елементите
елемент на низа со големина 5). Но, ваквите грешки може да предизвикаат проблем за време
која тој не ви ја доделил (сакате да прочитате или запишете податок кој и припаѓа на друга
Иницијализација
По правило, откако ќе ја декларирате низата, потребно е истата да ја иницијализирате, т.е.
вредноста на овие елементи е неодредена - може да биде што било што се наоѓало на таа
позиција во меморијата пред стартување на вашата програма. Ова правило не важи за низите
кои се дефинирани глобално (надвор од која било функција) - по правило, глобалните низи
дадени погоре), или да им доделиме вредност при самата декларација на низата. Во C++, ова
Со ова сме креирале низа од 10 елементи, каде array[0]=1, array[1]=2, ..., array[8]=9 и
иницијализација:
Низите не нудат метод преку кој може да се одреди нивната големина. Во C++, можеме да го
искористиме операторот sizeof() за да откриеме колку бајти зафаќа една низа - sizeof(array),
но и од колку елементи е составена самата таа низа - преку делење на меморијата која ја
зафаќа низата (sizeof(array)) со меморијата која ја зафаќа еден од нејзините елементи (на
пример, sizeof(array[0])). Бидејќи сите елементи зафаќаат иста количина на меморија (затоа
Програма 12.2
[ Изврши на МЕНДО ]
Низи од знаци
C++ овозможува работа со текстуални податоци на неколку начини. Покрај со користење на
класата string (за која накратко зборувавме во претходните предавања), во C++ е дозволена
работа со текстуални податоци и преку нивно третирање како низа од знаци - низа од
char ime[N];
Притоа, ime го означува името на променливата, додека N го означува бројот на знаци (од
колку елементи е составена низата ime). Еден од овие N знаци (зависно од текстуалниот
податок кој ќе се чува во низата) ќе биде еднаков на '\0' - и ќе претставува т.н. null знак или
знаци name[13]:
На овој начин, кога сакаме да печатиме податоци, програмата знае дека треба да печати
знаци сé додека не стигне до знакот '\0'. Сите знаци по '\0' се неважни и не се користат.
И двата начина прикажани погоре креираат низа name со големина 6. Низата го содржи
текстуалниот податок "Darko" и null знак '\0' за означување на крај на текстот. Бидејќи
низите имаат големина која се дефинира при нивното креирање, не е дозволено подоцнежно
менување на нивната вредност преку користење на операторот '=' (кај string класата ова е
погрешен:
[ Изврши на МЕНДО ]
Во програмата дадена погоре, наредбата cin >> text; чита еден збор внесен од страна на
додава и null знак. Бидејќи cin чита податоци до првото појавување на празно место, tab или
знак за нов ред, доколку сакаме да прочитаме цел ред текст (наместо само еден збор или
(cout << "Darko"), во позадина ние всушност работиме со C string-ови (низи од знаци со null
знак). Кога креираме променлива од тип string и, преку операторот '=', и доделуваме
Постојат 7 основни функции кои овозможуваат работа со текстуални низи (сите дефинирани
во датотеката "<cstring>"):
strlen(char[] niza) - ја враќа должината на низата niza (без null знак)
strcpy(char[] destinacija, char[] izvor) - копира текстуална низа (од izvor
во destinacija), вклучувајќи го и null знакот. Внимавајте: низата
destinacija треба да има доволна големина за да ги собере сите знаци од
izvor.
strncpy(char[] destinacija, char[] izvor, int N) - копира најмногу N знаци
од текстуална низа (од izvor во destinacija). Знакот '\0' ќе се ископира
само доколку се појави во првите N знаци - инаку, истиот мора да го
додадеме самите. Внимавајте: низата destinacija треба да има доволна
големина за да ги собере сите потребни знаци.
strcmp(char[] prva, char[] vtora) - споредува две низи (резултатот е 0 ако
низите се еднакви)
strncmp(char[] prva, char[] vtora, int N) - споредува N знаци (или
помалку, ако '\0' се појави претходно) од низите prva и vtora (резултатот
е 0 ако првите N знаци од низите се еднакви)
strcat(char[] prva, char[] vtora) - ја надоврзува низата vtora на prva.
Внимавајте: низата prva треба да има доволна големина за да ги
соберете знаците од двете низи.
strncat(char[] prva, char[] vtora, int N) - ги надоврзува првите N знаци
(или помалку, ако '\0' се појави претходно) од низата vtora на prva.
Внимавајте: низата prva треба да има доволна големина за да ги собере
сите потребни знаци.
Програма 12.4
[ Изврши на МЕНДО ]
Едноставно, класата string (која ќе ја разгледаме во детали подоцна), ги нуди сите можности
[ Изврши на МЕНДО ]
Повеќедимензионални низи
Повеќедимензионалните низи претставуваат низи од низи. Сите елементи од една
повеќедимензионална низа мора да бидат од ист тип - важи истото ограничување што важеше
тип int:
Дводимензионалните низи, во C++, се декларираат со следната наредба:
tip ime[R][C];
[0], mat[0][1], mat[0][2], ..., mat [1][0], mat [1][1], ..., mat [2][0], mat [2][1], итн).
Програма 12.6
со 2 реда и 3 колони:
Притоа, првата наредба експлицитно го наведува бројот на редови во матрицата, додека кај
втората наредба тоа се прави автоматски (од страна на компајлерот). Важно е да се наведе
наведување на само една димензија (онаа првата - најзначајната). Оттаму, третата наредба е
........
тродимензионалните низи:
[ Изврши на МЕНДО ]
Програмата печати (на екран):
---------------
---------------
---------------
---------------