Professional Documents
Culture Documents
низи
НИЗИ
Еднодимензионалните низи претставуваат множества од повеќе елементи од
ист тип. Во C++, еднодимензионални низи се креираат и употребуваат на
сличен начин како и основните податочни типови (int, char, double, long long,
итн), со тоа што е потребно, при декларацијата, покрај името на
променливата (кое ќе го користиме за пристап до елементите од низата) и
податочниот тип (од кој тип се елементите кои ја сочинуваат низата), да го
наведеме и бројот на елементи.
На овој начин се овозможува креирање на групи од елементи кои
соодветствуваат на множества податоци врз кои планираме да вршиме
операции. На пример, може да креираме низа од 365 (или 366) double
вредности кои ќе ја содржат измерената просечна температура за секој ден од
годината.
Потоа, можеме да вршиме разни математички операции врз елементите од
оваа низа - да бараме минимум, максимум, просечна температура за одредени
месеци или за целата година, итн.
Како и секоја друга променлива, така и низите мора да бидат декларирани
пред да може да се користат. Во C++, низи се декларираат на следниот начин:
tip ime[N];
Притоа, tip го означува податочниот тип на секој елемент од низата,
N е бројот на елементи, додека ime е името на променливата преку
кое ќе пристапуваме до елементите на низата.
На пример, за да креираме низа од 6 double вредности, треба да
напишеме: "double ime[6];". Со тоа, сме креирале променлива со
име ime, која овозможува пристап до 6 вредности од тип double.
Секоја од тие 6 вредности се нарекува елемент на низата.
Сите елементи од низата се сместуваат на последователни
локации во меморијата (еден по друг - како што е дадено
на сликата).
За да пристапиме до одреден елемент од низата (да ја
прочитаме неговата вредност, или да запишеме некоја
вредност) се користи операторот [p] - p го означува
индексот на елементот до кој сакаме да пристапиме.
Индексите се движат од 0 (прв елемент) до N-1 (последен
елемент) - каде N го означува бројот на елементи во
низата!
На пример, за да пристапиме до првиот елемент од низата
ime треба да напишеме ime[0], за да пристапиме до
вториот елемент треба да напишеме ime[1], и така натаму,
до последниот елемент ime[5] (од 0 до 5 има точно 6
елементи). Притоа, ime[0], ime[1], ..., ime[5] се однесуваат
како обични променливи од тип double и нивната
вредност може да ја читаме и/или менуваме.
Следниве неколку наредби служат за креирање на низа
array од целобројни елементи со големина 5, и за
сместување на вредностите {0, 10, 20, 30, 40} во
елементите од таа низа:
int array[5];
array[0] = 0;
array[1] = 10;
array[2] = 20;
array[3] = array[2] + 10; //30
array[4] = array[1] + array[3]; //40
#include <iostream>
using namespace std;
int main()
{
int arr[10];
for (int i=0; i<10; i++)
{
cin >> arr[i]; //'i' se dvizi od 0 do 9!
}
int s = 0;
for (int i=0; i<10; i++)
s += arr[i]; //'i' se dvizi od 0 do 9!
cout << "Zbirot e: " << s << endl;
return 0;
}
Како што може да забележите од изворниот код на програмата
дадена погоре, до елементите од низата пристапуваме преку
именување на низата (arr) и задавање на индексот на елементот до
кој сакаме да пристапиме (arr[i]).
Операторот [p], кај еднодимензионалните низи, се користи на два
начини: за дефинирање на големина на низата (p мора да биде
константа) и за пристап до одреден елемент од низата (p може да
биде константа или променлива).
Во C++ не е грешка (гледано синтаксички) доколку пристапите до
елемент кој не се наоѓа во границите на низата (на пример, да се
обидете да пристапите до десеттиот елемент на низа со големина
5). Но, ваквите грешки може да предизвикаат проблем за време на
извршување на програмата (т.н. runtime error). Велиме "може"
бидејќи оперативниот систем ќе ја "сруши" вашата програма само
доколку се обидете да пристапите до меморија која тој не ви ја
доделил (сакате да прочитате или запишете податок кој и припаѓа
на друга програма). Програмата може да се сруши и доколку на
таа локација во меморијата се чуваат податоци од друг тип.
ИНИЦИЈАЛИЗАЦИЈА
int main()
{
int arr[10] = {1, 2, 3, 4, 5};
int main()
{
char array[] = "Darko";
array[0] = 'M'; //obichna niza
cout << array << endl; //pechati 'Marko'
char text[100];
cout << "Vnesi eden zbor: ";
cin >> text; //prochitaj eden zbor
cout << text; //go pechati vneseniot zbor
return 0;
}
Во програмата дадена погоре, наредбата cin >> text;
чита еден збор внесен од страна на корисникот и,
истиот го сместува во променливата text.
На крајот од текстот, автоматски, се додава и null
знак.
Бидејќи cin чита податоци до првото појавување на
празно место, tab или знак за нов ред, доколку сакаме
да прочитаме цел ред текст (наместо само еден збор
или број), потребно е да ја искористиме функцијата
cin.getline(char[], N) - слична функција како што
постоеше и за класата string.
во C++, секогаш кога користиме наводници за креирање
на текстуален податок (cout << "Darko"), во позадина ние
всушност работиме со C string-ови (низи од знаци со null
знак). Кога креираме променлива од тип string и, преку
операторот '=', и доделуваме текстуална вредност (string
str = "Darko"), програмата автоматски го претвора
податокот од низа од знаци со 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 треба да има доволна големина
за да ги собере сите потребни знаци.
Следнава програма употребува некои од функциите споменати погоре:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char a[] = "prva niza";
char b[] = "vtora niza";
char t[100];
strcpy(t, "Nekoja vrednost"); //t="Nekoja vrednost"
strcpy(t, "Neshto drugo"); //t="Neshto drugo"
return 0;
}