27
Основи на програмирање (ОП - 02) 9. НИЗИ ВО C++ Еднодимензионални низи Низа во С++ се декларира со: тип_на _елементите име[број_на _елементи]; Елемент на низа се претставува со: име[индекс], каде што индекс е број од 0 до број_на _елементи1. Пример: Декларација на низи. a) int a[5]; a[0], a[1], a[2], a[3], a[4] (a 0 , a 1 , a 2 , a 3 , a 4 ) б) const int k=5; int a[k]; в) int k=10; float s[k]; Декларацијата е погрешна: k не е константа. 1

9. НИЗИ ВО C++ · индекс1 е број од 0 до димензија1−1, а индекс2 е број од 0 до димензија2−1. Пример: Декларација

  • Upload
    others

  • View
    34

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 9. НИЗИ ВО C++ · индекс1 е број од 0 до димензија1−1, а индекс2 е број од 0 до димензија2−1. Пример: Декларација

Основи на програмирање (ОП - 02)

9. НИЗИ ВО C++ Еднодимензионални низи

Низа во С++ се декларира со:

тип_на _елементите име[број_на _елементи]; Елемент на низа се претставува со:

име[индекс],

каде што индекс е број од 0 до број_на _елементи−1. Пример: Декларација на низи.

a) int a[5]; a[0], a[1], a[2], a[3], a[4] (a0, a1, a2, a3, a4)

б) const int k=5; int a[k]; в) int k=10; float s[k]; Декларацијата е погрешна: k не е константа.

1

Page 2: 9. НИЗИ ВО C++ · индекс1 е број од 0 до димензија1−1, а индекс2 е број од 0 до димензија2−1. Пример: Декларација

Основи на програмирање (ОП - 02)

Индексот на елементите на некоја низа може да биде: константа, променлива или израз од целоброен тип:

c[2], c[7], c[i], c[j], c[i+j-1] итн.,

каде што i и j се целобројни променливи. Доделување вредност и иницијализација на низа a)

int a[10]; a[0]=1; a[9]=2; a[3]=-4; a[5]=1; б) int b[5]={1, -2, -3, 6, 3}; в) int c[5]={1, 2, 3}; c[0]=1; c[2]=2; c[3]=3; c[4]=0; c[5]=0; г) int nuli[100]={0};

2

Page 3: 9. НИЗИ ВО C++ · индекс1 е број од 0 до димензија1−1, а индекс2 е број од 0 до димензија2−1. Пример: Декларација

Основи на програмирање (ОП - 02)

1. Иницијализација на низа со наредбата: for

Излез од програмата: Еlement Vrednost 0 0 1 0 2 0 3 0 4 0

}

#include <iostream> using namespace std; int main () { int i;

int a[5]; for (i=0; i<5; i++) a[i]=0; cout<<”Element Vrednost”<<endl; for (i=0; i<5; i++) cout<<i<<” ”<<a[i]<<endl; return 0;

3

Page 4: 9. НИЗИ ВО C++ · индекс1 е број од 0 до димензија1−1, а индекс2 е број од 0 до димензија2−1. Пример: Декларација

Основи на програмирање (ОП - 02)

2. Иницијализација на низа со иницијализирачка листа

#include <iostream> using namespace std;

int main () { int b[5]={12, 34, 27, 15, 40}; int i;

cout<<”Element Vrednost”<<endl; for (i=0; i<5; i++) cout<<i<<” ”<<a[i]<<endl; return 0;

}

Излез од програмата: Еlement Vrednost 0 12 1 34 2 27 3 15 4 40

Димензијата на низа може да се дефинира автоматски преку иницијализирачката листа: a)

double b[]={2.3, 3.4, 4.5, 5.6, 6.7}; // nizata ima 5 elementi

б) char c[]={ ′a′, ′b′, ′c′}; // nizata ima 3 elementi

б) char s[5]={1, 2, 3, 4, 5, 6}; // se javuva greska

4

Page 5: 9. НИЗИ ВО C++ · индекс1 е број од 0 до димензија1−1, а индекс2 е број од 0 до димензија2−1. Пример: Декларација

Основи на програмирање (ОП - 02)

3. Специфицирање должина на низа со симболичка константа

Излез од програмата: Еlement Vrednost 0 1 1 3 2 5 3 7 4 9

}

#include <iostream> #define d=5 // predprocesorska direktiva using namespace std;

int main () { int c[d]; int j;

for (j=0; j<d; j++) c[j]=2*j+1;

cout<<”Element Vrednost”<<endl; for (j=0; j<d; j++) cout<<j<<” ”<<c[j]<<endl; return 0;

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

5

Page 6: 9. НИЗИ ВО C++ · индекс1 е број од 0 до димензија1−1, а индекс2 е број од 0 до димензија2−1. Пример: Декларација

Основи на програмирање (ОП - 02)

Пример: Најмал елемент во низа.

/* Najmal element vo niza */ #include <iostream> using namespace std; void main () { int i, n, min, index, a[10]; cout<<”Vnesi go brojot na elementi vo nizata n= ”;

cin>>n; for (i=0; i<d; i++)

{ cout<<”a[”,i,”]= ”; cin>>a[i]; }

min=0; index=0; for (i=1; i<n; i++)

{ if (a[i]<min)

{ min=a[i]; index=i;

} }

cout<<”Najmaliot element vo nizata e so indeks: ”<<index<<endl;

}

6

Page 7: 9. НИЗИ ВО C++ · индекс1 е број од 0 до димензија1−1, а индекс2 е број од 0 до димензија2−1. Пример: Декларација

Основи на програмирање (ОП - 02)

Пример: Од низата цели броеви а1, а2, ... , аn, да се издвојат во посебни низи парните и непарните елементи.

/* Nizi od parni i neparni broevi */

#include <iostream> #define n=10 using namespace std;

int main () { int i, p=0, q=0, a[n], b[n], c[n]; for (i=0; i<n; i++)

{ cout<<”a[”,i,”]= ”; cin>>a[i]; if (a[i] % 2= = 0) { p++; b[p]=a[i]; } else { q++; c[q]=a[i]; }

} for (i=0; i<n; i++) cout<<b[i]; cout<<endl;

for (i=0; i<q; i++) cout<<c[i]; cout<<endl; }

7

Page 8: 9. НИЗИ ВО C++ · индекс1 е број од 0 до димензија1−1, а индекс2 е број од 0 до димензија2−1. Пример: Декларација

Основи на програмирање (ОП - 02)

Пример: Да се пресмета збирот на елементите на низата [ai]10 што се деливи со 3. Елементите на низата се зададени преку иницијализирачка листа.

/* Zbir na elementi na niza */

#include <iostream> #define n=10 using namespace std;

int main () { int a[n]={1, 3, 6, 10, 15, 21, 28, 36, 45, 55} int i, suma=0;

for (i=0; i<n; i++) { if (a[i] % 3 = = 0)

suma+=a[i]; }

cout<<”Sumata na elementite na nizata e: ”<<suma<<endl; return 0; }

8

Page 9: 9. НИЗИ ВО C++ · индекс1 е број од 0 до димензија1−1, а индекс2 е број од 0 до димензија2−1. Пример: Декларација

Основи на програмирање (ОП - 02)

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

Низа во С++ се декларира со:

тип_на _елементите име[димензија1][димензија2];

каде што е прва димензија1 димензија, а димензија2 е втора димензија. Низата има вкупно димензија1 × димензија2 елементи. Елемент на дводимензионална низа се претставува со:

име[индекс1, индекс2],

каде што:

индекс1 е број од 0 до димензија1−1, а индекс2 е број од 0 до димензија2−1. Пример: Декларација на низи.

a) int a[3][4];

a0,0 a0,1 a0,2 a0,3a1,0 a1,1 a1,2 a1,3a2,0 a2,1 a2,2 a2,3

9

Page 10: 9. НИЗИ ВО C++ · индекс1 е број од 0 до димензија1−1, а индекс2 е број од 0 до димензија2−1. Пример: Декларација

Основи на програмирање (ОП - 02)

a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] a[1][2] a[1][3] a[2][0] a[2][1] a[2][2] a[2][3]

б) Димензиите на низата можат да се зададат и преку константи: const int m=5; const int n=5; int a[m][n]; в) int m=5; int n=5; float b[m][n]; Декларацијата е погрешна: m и n не се константи. Индексите на елементите на некоја низа можат да бидат: константи, променливи или изрази од целоброен тип:

c[2][3], c[7][i], c[i][j+2, c[j][i+j], c[i+j-1][j-i+1] итн.,

каде што i и j се целобројни променливи.

10

Page 11: 9. НИЗИ ВО C++ · индекс1 е број од 0 до димензија1−1, а индекс2 е број од 0 до димензија2−1. Пример: Декларација

Основи на програмирање (ОП - 02)

Доделување вредност и иницијализација на низа a) Наредба за доделување:

float a[2][2]; a[0][0]=1.0; a[0][1]=2.0; a[1][0]=3.0; a[1][1]=4.0;

б) Декларирање со иницијализирачка листа: int b[2][3]={1, -2, -3, 6, 3,5}; // (доделувањето е по редици)

еквивалентно е со:

int b[2][3]={{1, -2, -3},{6, 3,5}};

в) Со

int b[2][3]={{1},{6}};

се иницијализираат само елементите: b[0][0]=1 и b[1][0]=6, а останатите елементи добиваат вредност 0.

в) Со

int b[2][3]={1, -2, -3};

се иницијализираат само елементите од првата редица: b[0][1]=1, b[0][2]=-2 и b[0][3]=-3, а останатите елементи добиваат вредност 0.

11

Page 12: 9. НИЗИ ВО C++ · индекс1 е број од 0 до димензија1−1, а индекс2 е број од 0 до димензија2−1. Пример: Декларација

Основи на програмирање (ОП - 02)

Пример: Иницијализација на дводимензионални низи:

#include <iostream> using namespace std; void main () { int i,j; // brojaci na redici i koloni

int a[2][3]={{1,2,3},{4,5,6}}; cout<<”Nizata a e inicijalizirana”<<endl; int b[2][3]; cout<<”Vnesi ja nizata b:”<<endl; for (i=0; i<=1; i++) { for (j=0; j<=2; j++) cin>>b[i][j]; }

12

Page 13: 9. НИЗИ ВО C++ · индекс1 е број од 0 до димензија1−1, а индекс2 е број од 0 до димензија2−1. Пример: Декларација

Основи на програмирање (ОП - 02)

Излез: cout<<”\n\nPecatenje na nizite:”<<endl;

cout<<”\nPecatenje na nizata a:”<<endl; for (i=0; i<=1; i++) { for (j=0; j<=2; j++) cout<<a[i][j]<<” ”; cout<<endl; // odi na nov red } cout<<”\nPecatenje na nizata b:”<<endl; for (i=0; i<=1; i++) { for (j=0; j<=2; j++) cout<<b[i][j]<<” ”; cout<<endl; // odi na nov red }

Nizata a e inicijalizirana Vnesi ja nizata b: 6 5 4 3 2 1 Pecatenje na nizite: Pecatenje na nizata a: 1 2 3 4 5 6 Pecatenje na nizata b: 6 5 4 3 2 1

13

Page 14: 9. НИЗИ ВО C++ · индекс1 е број од 0 до димензија1−1, а индекс2 е број од 0 до димензија2−1. Пример: Декларација

Основи на програмирање (ОП - 02)

Пример: Таблица множење i×j (i,j=1, ... , n (1<n<10)) по модул n.

#include <iostream> using namespace std; void main () { int i,j,n; int tab[10,10]

cout<<”Vnesi broj n (1<n<10)”<<endl; cin>>n;

for (i=1; i<=n; i+=1) for (j=1; j<=n; j+=1) tab[i][j]=i*j % n;

cout<<”Tablica mnozenje po modul:”<<endl;

for (i=1; i<=n; i+=1) { cout<<i<<” ”; for (j=1; j<=n; j+=1) cout<<tab[i][j]<<” ”; cout<<endl; }

}

Излез: 5 1 1 2 3 4 0 2 2 4 1 3 0 3 3 1 4 2 0 4 4 3 2 1 0 5 0 0 0 0 0

14

Page 15: 9. НИЗИ ВО C++ · индекс1 е број од 0 до димензија1−1, а индекс2 е број од 0 до димензија2−1. Пример: Декларација

Основи на програмирање (ОП - 02)

Tекстуални низи (стрингови) Основни карактеристики на стринговите:

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

“Skopje” “A” “” // Prazna tekstualna niza

Во С++ стринговите завршуваат со “\0”. Притоа, во должината на стрингот не се смета знакот за крај “\0”. Текстуалните низи се декларираат со резервираниот збор char:

char ime(10);

15

Page 16: 9. НИЗИ ВО C++ · индекс1 е број од 0 до димензија1−1, а индекс2 е број од 0 до димензија2−1. Пример: Декларација

Основи на програмирање (ОП - 02)

Доделување вредност на стринг:

1. Иницијализација на стринг со доделување на текстуална константа:

char drzava[10]=”MAKEDONIJA”

M A K E D O N I J A \0 0 1 2 3 4 5 6 7 8 9 10

char ime[]=”MARIJA”

M A Р И Ј А \0 0 1 2 3 4 5 6 2. Иницијализација на стринг со иницијализаторска листа:

char grad[]={′O′,′h′,′r′,′i′,′d′,′\0′} 3. Доделување вредности на елементите на стринг: char grad[5];

grad[0]=′O′; grad[1]=′h′; grad[2]=′r′; grad[3]=′i′; grad[4]=′d′; grad[5]=′\0′;

16

Page 17: 9. НИЗИ ВО C++ · индекс1 е број од 0 до димензија1−1, а индекс2 е број од 0 до димензија2−1. Пример: Декларација

Основи на програмирање (ОП - 02)

Со елементите на стринговите се вршат исти операции како со знаците, при што можат да се користат релационите оператори:

= = еднакво <> различно < помало > поголемо <= помало или еднакво >= поголемо или еднакво Пример:

if (grad[0]= = ′O′ || grad[0]= = ′o′) cout<<”Imeto na gradot zapocnuva so bukvata o”; Забелешка: Разлика помеѓу знаковните константи “O” и ′O′.

“O” има големина од два бајти (опфаќа два знака, заедно со знакот за крај ′\0′) ′O′ има големина од еден бајт

17

Page 18: 9. НИЗИ ВО C++ · индекс1 е број од 0 до димензија1−1, а индекс2 е број од 0 до димензија2−1. Пример: Декларација

Основи на програмирање (ОП - 02)

Читање и печатење стрингови Кога се внесува стринг со cin се наведува само името. Вчитувањето се врши до првиот бланко знак. Пример: Што ќе се добие како излез од следнава програма во С++, ако се внесе текстот: eden dva tri. #include <iostream> using namespace std; main () { char vlez[]=”Vnesi string: ”, tekst[100]; cout<<vlez; cin>>tekst;

cout<<tekst<<endl; } Vnesi string: eden dva tri eden

18

Page 19: 9. НИЗИ ВО C++ · индекс1 е број од 0 до димензија1−1, а индекс2 е број од 0 до димензија2−1. Пример: Декларација

Основи на програмирање (ОП - 02)

Ако треба да се вчита стринг што содржи и бланко знаци се користи функцијата: getline(): Пример: Што ќе се добие како излез од следнава програма во С++, ако се внесе текстот: eden dva tri. #include <iostream> using namespace std; main () { char vlez[]=”Vnesi string: ”, tekst[100]; cout<<vlez; cin.getline(tekst, 100);

cout<<tekst<<endl; } Vnesi string: eden dva tri eden dva tri

19

Page 20: 9. НИЗИ ВО C++ · индекс1 е број од 0 до димензија1−1, а индекс2 е број од 0 до димензија2−1. Пример: Декларација

Основи на програмирање (ОП - 02)

Пристап до поедините елементи на стринг Стринговите може да се обработуваат како и било која друга низа. Притоа, треба да се внимава секогаш еден елемент од полето да има вредност ′\0′ или 0. Пример: Внесување на стринг знак по знак.

#include <iostream> using namespace std; main () { char tekst[100]; int n; cout<<”Vnesi go brojot na znaci vo stringot: ”; cin>>n; for (int i=0; i<n; i++) cin>>tekst[i]; tekst[n]=′\0′; // ili tekst[n]=0;

cout<<tekst<<endl; }

Излез: Vnesi go brojot na znaci vo stringot: 5 a b c d e abcde

20

Page 21: 9. НИЗИ ВО C++ · индекс1 е број од 0 до димензија1−1, а индекс2 е број од 0 до димензија2−1. Пример: Декларација

Основи на програмирање (ОП - 02)

Функции за работа со стрингови и знаци Некои функции од стандардната библиотека на С++ за работа со стрингови:

strlen(s) − одредување должина на стринг, strcat(s1,s2) − спојување на стринговите s1 и s2, strcpy(s1,s2) − копирање на стрингот s1 во стрингот s2, strcmp(s1,s2) − споредување на стринговите s1 и s2. Некои функции од стандардната библиотека на С++ за работа со знаци:

isalpha(ch) − Враќа true ако ch е алфабетски знак, во спротивно false. (aлфабетски знаци се: а .. z и A .. Z) isupper(ch) − Враќа true ако ch е голема буква. Враќа false ако ch не е алфабетски знак. islower(ch) − Враќа true ако ch е мала буква. Враќа false ако ch не е алфабетски знак. isdigit(ch) − Враќа true ако ch е cifra: 0 .. 9, во спротивно false.

toupper(ch) – Kонверзија на мала буква ch во голема. tolower(ch) – Kонверзија на голема буква ch во мала.

21

Page 22: 9. НИЗИ ВО C++ · индекс1 е број од 0 до димензија1−1, а индекс2 е број од 0 до димензија2−1. Пример: Декларација

Основи на програмирање (ОП - 02)

Пример: Примена на функции за работа со стрингови.

#include <iostream> using namespace std; main () { char str1[]=”prv”,

str2[]=”vtor”, str3[30];

strcpy(str3, str1); // kopiraj go str1 vo str3 strcat(str3, str2); // spoj gi str3 i str2 vo str3 strcat(str3, “tret”); // spoj gi str3 i “tret” vo str3

cout<<str3<<” ima dolzina: ”<<strlen(str3)<<endl; }

Излез: Prvvtortret ima dolzina: 11

22

Page 23: 9. НИЗИ ВО C++ · индекс1 е број од 0 до димензија1−1, а индекс2 е број од 0 до димензија2−1. Пример: Декларација

Основи на програмирање (ОП - 02)

Пример: Да се провери дали некој збор е палиндром. aлгоритам Палиндром; почеток печати “Внеси збор: ”; читај zbor; n←dolzina(zbor); i←0; повторувај tocno←zbor[i]= =zbor[n-i-1]; i←i+1; додека (tocno) и (i<[n/2]); ако tocno тогаш печати “Зборот е палиндром”; инаку печати “Зборот не е полиндром”; крај_ако {tocno} крај {Палиндром}

23

Page 24: 9. НИЗИ ВО C++ · индекс1 е број од 0 до димензија1−1, а индекс2 е број од 0 до димензија2−1. Пример: Декларација

Основи на програмирање (ОП - 02)

Програма во С++: #include <iostream> using namespace std; main () { char zbor[50];

int i, n; bool tocno; cout<<”Vnesi zbor: ”; cin>>zbor; n=strlen(zbor); i=0; do { tocno=(zbor[i]= =zbor[n-i-1]); i++; } while ((tocno && (i<=(n/2))); if (tocno)

cout<<”Zborot e polindrom”<<endl; else cout<<”Zborot ne e polindrom”<<endl;

}

24

Page 25: 9. НИЗИ ВО C++ · индекс1 е број од 0 до димензија1−1, а индекс2 е број од 0 до димензија2−1. Пример: Декларација

Основи на програмирање (ОП - 02)

Пример: Малите букви од даден текст да се претворат во големи. aлгоритам ГолемиБукви; почеток печати “Внеси текст: ”; читај tekst; n←dolzina(tekst); за i←0 до n-1 чекор 1 ако MalaBukva(tekst[i]) тогаш

tekst[i]=GolemaBukva(tekst[i]); крај_ако {MalaBukva(tekst[i])} крај_за {i} печати tekst; крај {ГолемиБукви}

25

Page 26: 9. НИЗИ ВО C++ · индекс1 е број од 0 до димензија1−1, а индекс2 е број од 0 до димензија2−1. Пример: Декларација

Основи на програмирање (ОП - 02)

Програма во С++:

#include <iostream> using namespace std; main () { char tekst[100]; cout<<”Vnesi tekst: ”; cin>>tekst; int n=strlen(tekst); for (int i=0; i<n; i++) if (islower(tekst[i])) tekst[i]=toupper(tekst[i]);

cout<<tekst<<endl; }

Излез: Vnesi tekst: abcdEfG ABCDEFG

Дали некој знак е мала буква?

If (znak>=′a′ && znak<=′z′)

26

Page 27: 9. НИЗИ ВО C++ · индекс1 е број од 0 до димензија1−1, а индекс2 е број од 0 до димензија2−1. Пример: Декларација

Основи на програмирање (ОП - 02)

27