49
Tabele oz. polja Neja Zupan

Tabele oz. polja

  • Upload
    samira

  • View
    57

  • Download
    2

Embed Size (px)

DESCRIPTION

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];. - PowerPoint PPT Presentation

Citation preview

Page 1: Tabele oz. polja

Tabele oz. polja

Neja Zupan

Page 2: Tabele oz. polja

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;

Page 3: Tabele oz. polja

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č...

const int NE = 100; float racun[NE];

Page 4: Tabele oz. polja

Sintaksa

• tip ime [st_elementov];

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

Subscript Overflow

float tabela[10];

odgovornostprogramerja

polje je veljavnoče je index < 6

Page 5: Tabele oz. polja

Deklaracija/Definicija

• int polje [5];

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

const int N = 50; int i, count[N];

cin >> count[i];

INICIALIZACIJA!

Page 6: Tabele oz. polja

Delna inicializacija

• int polje [5];

• polje [5] = {0};

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

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

Page 7: Tabele oz. polja

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;

Page 8: Tabele oz. polja

Primeri

Page 9: Tabele oz. polja

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; }

Page 10: Tabele oz. polja

Naloga

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

Page 11: Tabele oz. polja

Naloga

1. for (int i=0; i<3; i++)

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

RE

ŠIT

EV

Page 12: Tabele oz. polja

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?

Page 13: Tabele oz. polja

Naloga

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

RE

ŠIT

EV

Page 14: Tabele oz. polja

Naloga

Natančnejša psevdo koda:vsota je 0.

stevilo je 0.

nad10 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 stevec od 0 do stevilo-1

if array[stevec] > 1.1*povprecje

povecaj nad10;

rezultat povprecje, stevilo in nad10.

RE

ŠIT

EV

Page 15: Tabele oz. polja

Eno- in dvo-dimenzionalna polja

int polje [5];

int polje [3][5];

int polje [15];

Page 16: Tabele oz. polja

Eno- in dvo-dimenzionalna polja

Page 17: Tabele oz. polja

Polje kot parameter funkcije

• 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); }

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]; }

Page 18: Tabele oz. polja

Polje kot parameter funkcijefloat 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);

Page 19: Tabele oz. polja

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]; }

float one[50], two[50], three[50]; . .dodaj(20, one, two, three);

Page 20: Tabele oz. polja

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.

Page 21: Tabele oz. polja

NalogaR

ITE

V

#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;}

Page 22: Tabele oz. polja

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”

Page 23: Tabele oz. polja

Nizi znakov

• Razlika med zapisoma 'A' in “A”

• Prvi zapis pomeni znak A in drugi zapis stringa A

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

Page 24: Tabele oz. polja

Nizi znakovchar s1[10]; • Spremenljivka s1 je lahko maksimalno

dolžine 9 (zadnji znak je ničelni znak)• Spremenljivka “string” je inicializirana kot

vsaka druga spremenljivkachar 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|?|?|?|

Page 25: Tabele oz. polja

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 >>

Page 26: Tabele oz. polja

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 >>

Page 27: Tabele oz. polja

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);

Page 28: Tabele oz. polja

Primeri

Page 29: Tabele oz. polja

Naloge

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

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

2. char name[8] = "John";

3. char name[] = "John";

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

Page 30: Tabele oz. polja

Naloga

1. Rezultati so narisani

2. for (int i=0; i<3; i++)

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

RE

ŠIT

EV

Page 31: Tabele oz. polja

Uporaba vektorjev in polj

1. Iskanje določene vrednosti, znaka

2. razvrščanje

3. Vnos vrednosti v polje

4. Izbris vrednosti iz polja

Page 32: Tabele oz. polja

Dinamični pomnilnik

Neja Zupan

Page 33: Tabele oz. polja

Dinamični pomnilnik

int * kazalec; kazalec = new int [5];

kazalec = new (nothrow) int [5];

kazalec = new tipkazalec = new tip [elementi]

int * kazalec; kazalec = new (nothrow) int [5]; if (kazalec == 0) { // sporočilo uporabniku-napaka. };

delete pointer; delete [] pointer;

Page 34: Tabele oz. polja

#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;}

Koliko števil želite vpisati? 5Vpiši 1. številko : 75Vpiši 2. številko : 436Vpiši 3. številko : 1067Vpiši 4. številko : 8Vpiši 5. številko r : 32Vpisal si številke: 75, 436, 1067, 8, 32,

Page 35: Tabele oz. polja

Strukture in razredi

Neja Zupan

Page 36: Tabele oz. polja

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)

Page 37: Tabele oz. polja

Strukture (struct) - sintaksa

The general form (syntax) of a struct is: struct typeName{ dataType1 identifier1; dataType2 identifier2;

// podatkovni_tip ime_parametra dataTypen identifiern;};

Page 38: Tabele oz. polja

Strukture (struct) - sintaksa

struct sadje

{

int teza;

float cena;

} jabolko, jagoda;

struct sadje

{

int teza;

float cena;

};

sadje grozdje;

sadje marelica;

Page 39: Tabele oz. polja

Dostop do članov struct

Sintaksa:

structImeSpremenljivke.ImeClana

Pika je operator za dostop do člana strukture.

struct sadje

{

int teza;

float cena;

};

sadje grozdje;

sadje marelica;

grozdje.teza;

marelica.cena;

Page 40: Tabele oz. polja

struct spremenljivke in funkcije

Spremenljivka tipa struct: v funkcijo posredovana kot vrednost ali preko reference

Funkcija lahko vrne vrednost tipa struct

Page 41: Tabele oz. polja

Naloga

1. Definirajte strukturo za opis osebe

2. Deklarirajte polje 10 oseb

3. Napišite sintakso za izpis vseh 10 oseb na ekran

Page 42: Tabele oz. polja

Naloga

struct Oseba

{

char ime[32];

char priimek[32];

char emso[14];

char spol;

};

RE

ŠIT

EV

Page 43: Tabele oz. polja

Naloga

//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;

RE

ŠIT

EV

Page 44: Tabele oz. polja

Naloga

//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;

...

}

RE

ŠIT

EV

Page 45: Tabele oz. polja

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

Page 46: Tabele oz. polja

Razredi - class

• class – tip strukture podatkov

• ADT

• naredi C++ objektno orientiran jezik

• Zbirka fiksnega števila komponent

• Komponente se imenujejo člani (members)

Page 47: Tabele oz. polja

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;

Page 48: Tabele oz. polja

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;

Page 49: Tabele oz. polja

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;}