This presentation is the property of its rightful owner.
1 / 49

# Tabele oz. polja PowerPoint PPT Presentation

Tabele oz. polja. Neja Zupan. Polje???. sum = 0.0; for (i = 0; i < 6; i++) { cin >> x; sum += x; }. sum = 0; cin >> a; sum += a; cin >> b; sum += b; cin >> c; sum += c; cin >> d; sum += d; cin >> e; sum += e; cin >> f; sum += f;. const int NE = 100; float racun[NE];.

Tabele oz. polja

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

## Tabele oz. polja

Neja Zupan

### Polje???

sum = 0.0;

for (i = 0; i < 6; i++)

{

cin >> x;

sum += x;

}

sum = 0;

cin >> a; sum += a;

cin >> b; sum += b;

cin >> c; sum += c;

cin >> d; sum += d;

cin >> e; sum += e;

cin >> f; sum += f;

const int NE = 100;

float racun[NE];

### Kaj je polje?

• Polje je struktura pomnilniških celic istega podatkovnega tipa, ki ima določeno ime.

• Do posameznih elementov polja (celic) pridemo preko indeksa elementa (celice).

• Indeks je celoštevilčna vrednost in prvi element v polju ima indeks 0, naslednji za ena več...

### Sintaksa

• tipime [st_elementov];

• float tabela[6]; //deklaracija polja 6 realnih vrednosti z imenom tabela

polje je veljavno

če je index < 6

Subscript Overflow

float tabela[10];

odgovornost

programerja

### Deklaracija/Definicija

const int N = 50;

int i, count[N];

cin >> count[i];

• int polje [5];

• int polje [5] = { 16, 2, 77, 40, 12071 };

INICIALIZACIJA!

### Delna inicializacija

• int polje [5];

• polje [5] = {0};

• polje [5] = {16, 2, 77};

• int polje[] = {5,6,3};

### Aritmetika polj

• y = x; //napačno

• y[j] = x[j]; //pravilno

for(j = 0; j < 25; j++)

y[j] = x[j];

polje[0] = a;

polje[a] = 75;

b = polje [a+2];

polje[i] = polje[i] + 5; (count[i] += 5;)

polje[polje[a]] = polje[2] + 5;

### Kaj vrne program?

// primer polje

#include <iostream>

int polje [] = {1, 2, 7, 4, 12};

int n, result=0;

int main ()

{

for ( n=0 ; n<5 ; n++)

{

result += polje[n];

}

cout << result;

return 0;

}

### Naloga

• Napišite kodo tako, da bo vektor_B 2x vecji kot vektor_Afloat vektor_A[3]={1.0, 0.0, 3.0}, vektor_B[3];

### Naloga

REŠITEV

• for (int i=0; i<3; i++)

vektor_B[i] = 2 * vektor_A[i];

### Naloga

Imamo maksimalno 200 pozitivnih celih števil za katere želimo izračunati povprečje in izračunati število polj, ki vsebujejo večje vrednosti od vrednosti 10% nad povprečjem.

Kako se lotiti priprave kode?

### Naloga

REŠITEV

Najprej napišite psevdokodo:

deklaracija spremenljivk

vnos elementov v polje

izračun vsote, povprečja in 10% nad

najdi vse vrednosti iz polja

zapiši rezultat

### Naloga

REŠITEV

Natančnejša psevdo koda:

vsota je 0.

stevilo je 0.

vnesi prvo vrednost.

while ce je pozitivno

{

vstavi vrednost v polje z indeksim stevilo.

pristej stevilo vsoti.

povecaj stevilo.

vnesi novo vrednost.

}

izracunaj povprecje.

for stevecod 0 do stevilo-1

if array[stevec] > 1.1*povprecje

### Eno- in dvo-dimenzionalna polja

int polje [5];

int polje [3][5];

int polje [15];

### Eno- in dvo-dimenzionalna polja

Vrednosti polj se prensšajo izključno preko kazalcev (referenčni operator)

Znak & se NE uporablja

Z [] se le označi spremenljivko polja

Uporaba besede “const” prepreči spreminjanje parametra polja

float povprecje(int n, float A[])

{

float sum = 0.0; int i;

for (i = 0; i < n; i++)

sum += A[i];

return (sum/n);

}

### Polje kot parameter funkcije

void addarray(int size, const float A[], const float B[],

float C[])

{

int i;

for (i = 0; i < size; i++)

C[i] = A[i] + B[i];

}

float povprecje(int n, float A[])

{

float sum = 0.0; int i;

for (i = 0; i < n; i++)

sum += A[i];

return (sum/n);

}

const int NE = 100;

float average, data[NE];

int i, m;

cout << “Vnesi število manjše od "

<< NE << "): ";

cin >> m;

for (i = 0; i < m; i++)

cin >> data[i];

average = povprecje(m, data);

### Polje kot parameter funkcije

float one[50], two[50], three[50];

.

.

dodaj(20, one, two, three);

### Polje kot parameter funkcije

void dodaj(int size, const float A[], const float B[],

float C[])

{

int i;

for (i = 0; i < size; i++)

C[i] = A[i] + B[i];

}

### Naloga

Napišite program, ki ustvari dve polji celih števil

polje1 = {5, 10, 15}

polje2 = {2, 4, 6, 8, 10}

Program kliče funkcijo, ki ne vrne rezultata in na ekran izpiše 3 števila iz prvega polja in 4 števila iz drugega polja.

### Naloga

REŠITEV

#include <iostream.h>

void izpisi_polje (int arg[], int length)

{

for (int n=0; n<length; n++)

cout << arg[n] << " ";

cout << "\n";

}

int main ()

{

int polje1[] = {5, 10, 15};

int polje2[] = {2, 4, 6, 8, 10};

izpisi_polje (polje1,3);

izpisi_polje (polje2,4);

return 0;

}

### Nizi znakov

• Znakovni niz je predstavljen s poljem znakov.

• Za razliko od polja števil predstavlja niz znakov zaporedje znakov, ki se končajo z ničelnim znakom '\0' in ta označuje konec niza.

• V C++ je zaporedje znakov shranjeno v“array of characters”

### Nizi znakov

• Razlika med zapisoma 'A' in “A”

• Prvi zapis pomeni znak A in drugi zapis stringa A

• Ker se stringi končajo zničelnim znakom, "A" predstavlja dva znaka 'A' and '\0'

### Nizi znakov

char s1[10];

• Spremenljivka s1 je lahko maksimalno dolžine 9 (zadnji znak je ničelni znak)

• Spremenljivka “string” je inicializirana kot vsaka druga spremenljivka

char polje_znakov1 [] = “primer";

char polje_znakov2 [10] = “primer"

• Shranjeno sledeče:

• polje_znakov1 |p|r|i|m|e|r|\0|

• polje_znakov2 |p|r|i|m|e|r|\0|?|?|?|

### Klic stringa

#include <iostream.h>

int main ()

{

char vpras[] = “Vnesite svoje ime: ";

char pozdrav[] = “Živjo, ";

char ime [80];

cout << vpras;

cin >> ime;

cout << pozdrav << ime << "!";

return 0;

}

polje

Stringe, ki vsebujejo predledek, ne moremo brati z operatorjem >>

### Branje in klic stringa

#include <iostream.h>

int main ()

{

char vpras[] = “Vnesite svoje ime: ";

char pozdrav[] = “Živjo, ";

char ime [80];

cout << vpras;

cin >> ime;

cout << pozdrav << ime << "!";

return 0;

}

polje

Stringe, ki vsebujejo predledek, ne moremo brati z operatorjem >>

### Branje stringa s presledki

• Stavek m znakov shrani v str

• \n označuje konec stringa (besede, stavka...) m

• \n ni shranjen v str

cin.get(str,m+1);

### Naloge

• Kakšen je zapis polja name v spominu za spodnje tri spremenljivke:

• char name[11] = {'J', 'o', 'h', 'n', '\0'};

• char name[8] = "John";

• char name[] = "John";

• Napišite kodo tako, da se bodo imena izpisala na zaslonchar osebe[3][16]={"Aleš", "Boris", "Tomaz"};

### Naloga

REŠITEV

• Rezultati so narisani

• for (int i=0; i<3; i++)

cout << i+1 << ". oseba je: " << osebe[i] << endl;

### Uporaba vektorjev in polj

• Iskanje določene vrednosti, znaka

• razvrščanje

• Vnos vrednosti v polje

• Izbris vrednosti iz polja

## Dinamični pomnilnik

Neja Zupan

### Dinamični pomnilnik

int * kazalec;

kazalec = new int [5];

kazalec = new tipkazalec = new tip [elementi]

kazalec = new (nothrow) int [5];

delete pointer;

delete [] pointer;

int * kazalec;

kazalec = new (nothrow) int [5];

if (kazalec == 0)

{ // sporočilo uporabniku-napaka. };

Koliko števil želite vpisati? 5

Vpiši 1. številko : 75

Vpiši 2. številko : 436

Vpiši 3. številko : 1067

Vpiši 4. številko : 8

Vpiši 5. številko r : 32

Vpisal si številke: 75, 436, 1067, 8, 32,

#include <iostream.h>

int main ()

{

int i,n;

int * p;

cout << “Koliko števil želiš vpisati? ";

cin >> i;

p= new (nothrow) int[i];

if (p == 0)

cout << “Napaka: pomnilnik zaseden";

else

{

for (n=0; n<i; n++)

{

cout << “Vpiši” << n << “. številko: “;

cin >> p[n];

}

cout << “Vpisal si številke: ";

for (n=0; n<i; n++)

cout << p[n] << ", ";

delete[] p;

}

return 0;

}

## Strukture in razredi

Neja Zupan

### Strukture (struct)

• Struktura omogoča združitev različnih podatkovnih tipov v enega

• Struct – zbirka fiksnega števila komponent

• Komponente so dostopnje preko njihovega imena

• Komponente so lahko različnega tipa

• Komponente strukture (struct) imenujemo člani (members)

• Struktura je definicija in ne deklaracija (ni dodeljeno pomnilniški prostor)

### Strukture (struct) - sintaksa

The general form (syntax) of a struct is:

struct typeName

{

dataType1 identifier1;

dataType2 identifier2;

// podatkovni_tip ime_parametra

dataTypen identifiern;

};

### Strukture (struct) - sintaksa

{

int teza;

float cena;

} jabolko, jagoda;

{

int teza;

float cena;

};

### Dostop do članov struct

{

int teza;

float cena;

};

Sintaksa:

structImeSpremenljivke.ImeClana

Pika je operator za dostop do člana strukture.

grozdje.teza;

marelica.cena;

### struct spremenljivke in funkcije

Spremenljivka tipa struct:

v funkcijo posredovana kot vrednost ali preko reference

Funkcija lahko vrne vrednost tipa struct

### Naloga

• Definirajte strukturo za opis osebe

• Deklarirajte polje 10 oseb

• Napišite sintakso za izpis vseh 10 oseb na ekran

### Naloga

REŠITEV

struct Oseba

{

char ime[32];

char priimek[32];

char emso[14];

char spol;

};

### Naloga

REŠITEV

//Deklaracija polja sestavljenih spremenljivk

Oseba ljudje[10];

//dekl. polja ljudje z 10 elementi

cout << "Vpisite ime osebe:";

cin >> ljudje[1].ime;

cout << "Vpisite priimek osebe:";

cin >> ljudje[1].priimek;

cout << "Vpisite EMSO osebe:";

cin >> ljudje[1].emso;

cout << "Vpisite spol osebe:";

cin >> ljudje[1].spol;

### Naloga

REŠITEV

//zgled za polje

for (int i=0; i<10; i++)

{

cout << "Vpisite ime " << i+1 << ". osebe: ";

cin >> ljudje[i].ime;

cout << "Vpisite priimek " << i+1 << ". osebe: ";

cin >> ljudje[i].priimek;

...

}

### Drugi podatkovni tipi

• typedef – sinonim za obstoječe podatkovne tipe

• union – posamezni del pomnilnika uporablja več spremenljivk različnega podatkovnega tipa

• anonimni union – razlika le v klicu članov podatkovnega tipa union

• enum – spremenljivka lahko zavzame le eno vrednost izmed konstant

### Razredi - class

• class – tip strukture podatkov

• naredi C++ objektno orientiran jezik

• Zbirka fiksnega števila komponent

• Komponente se imenujejo člani (members)

### Sintaksa

class classIdentifier

{

classMemberList

};

Član je lahko spremenljivka ali funkcija

class CRectangle

{

int x, y;

public: void set_values (int,int);

int area (void);

} rect;

### Sintaksa

• private members: člani razreda so dosegljivi samo članom istega razreda ali “prijateljskim” razredom.

• protected members:so dosegljivi članom istega razreda, izpeljanim in prijateljskim razredom.

• public members:dosegljivi povsod, kjer je viden razred.

class CRectangle

{

int x, y;

public: void set_values (int,int);

int area (void);

} rect;

### Primer

// primer class

#include <iostream>

using namespace std;

class CRectangle {

int x, y;

public:

void set_values (int,int);

int area () {return (x*y);}

};

void CRectangle::set_values (int a, int b) {

x = a;

y = b;

}

int main () {

CRectangle rect;

rect.set_values (3,4);

cout << "area: " << rect.area();

return 0;

}