Mehanizmi agregacije

32
Mehanizm Mehanizm i i agregaci agregaci je je *

description

Mehanizmi agregacije. *. Polja. *. Jednodimenzionalna polja: deklaracija. format tip_podatka identifikator [ broj ];. primjer float x[5];. prvi član ima indeks nula. float ------------ x[0]. float ------------ x[1]. float ------------ x[2]. float ------------ x[3]. float - PowerPoint PPT Presentation

Transcript of Mehanizmi agregacije

Page 1: Mehanizmi agregacije

Mehanizmi Mehanizmi agregacijeagregacije

*

Page 2: Mehanizmi agregacije

PoljaPolja

*

Page 3: Mehanizmi agregacije

Jednodimenzionalna polja: deklaracijaJednodimenzionalna polja: deklaracija

float------------

x[0]

float------------

x[1]

float------------

x[2]

float------------

x[3]

float------------

x[4]

formatformat

tip_podatkatip_podatka identifikator identifikator [ [brojbroj];];

prvi član ima indeks prvi član ima indeks nulanula

20 byte-ova20 byte-ova

4 byte-a4 byte-a

*

float[5]------------

x::

primjer

float x[5];

Page 4: Mehanizmi agregacije

PoljaPolja• Polje je niz varijabli istog tipa podataka Polje je niz varijabli istog tipa podataka

definiranih zajedničkim imenom, koje se nalaze definiranih zajedničkim imenom, koje se nalaze na uzastopnim memorijskim lokacijama.na uzastopnim memorijskim lokacijama.

• Pojedinom elementu polja pristupa se preko Pojedinom elementu polja pristupa se preko imena polja i indeksa (rednog broja) elementa u imena polja i indeksa (rednog broja) elementa u polju.polju.

• Indeksi polja u programskom jeziku C++ su Indeksi polja u programskom jeziku C++ su cijeli brojevi između 0 i duljine polja cijeli brojevi između 0 i duljine polja umanjenog za 1.umanjenog za 1.

*

Page 5: Mehanizmi agregacije

Jednodimenzionalna polja: definicijaJednodimenzionalna polja: definicija

1342.5 4.7 23.4 12. -72e12

primjer

float x[]={1342.5,4.7,23.4,12.,-72e12};

*

float[5]------------

x::

x[0]x[0] x[1]x[1] x[2]x[2] x[3]x[3] x[4]x[4]

formatformat

tip_podatka tip_podatka identifikatoridentifikator [ ]={ [ ]={vrijednost_1, vrijednost_2, ..., vrijednost_nvrijednost_1, vrijednost_2, ..., vrijednost_n};};

Nije potrebno navoditi broj Nije potrebno navoditi broj elemenataelemenata

Page 6: Mehanizmi agregacije

Dvodimenzionalna polja: deklaracija i definicijaDvodimenzionalna polja: deklaracija i definicijaprimjer

int A[3][5] = {{11,12,13,14,15}, {21,22,23,24,25}};

*

int [3] [5]--------------

A:: 11

A[0][0]:A[0][0]:

12 13 14 15

A[0][1]:A[0][1]: A[0][2]:A[0][2]: A[0][3]:A[0][3]: A[0][4]:A[0][4]:

21

A[1][0]:A[1][0]:

22

A[1][1]:A[1][1]:

23

A[1][2]:A[1][2]:

24

A[1][3]:A[1][3]:

25

A[1][4]:A[1][4]:

0

A[2][0]:A[2][0]:

0

A[2][1]:A[2][1]:

0

A[2][2]:A[2][2]:

0

A[2][3]:A[2][3]:

0

A[2][4]:A[2][4]:

Nedefinirani elementi

popunjavaju se nulama

Da nebi!!!Da nebi!!!

Page 7: Mehanizmi agregacije

#include<iostream>using namespace std;int main() { //inicijalizacija i deklaracijaint Dat[3];int Mjes[]={31,28,31,30,31,30,31,31,30,31,30};int j;

//ponavljanjedo { //unosenje datuma

cout<<"Unosenje datuma (dan mjesec godina): ";for(int i=0;i<=2;i++)

cin>>Dat[i];cout<<endl;

//prestupna godina?if (((Dat[2]%100!=0) && (Dat[2]%4==0)) ||

(Dat[2]%400==0))Mjes[1]=29;

elseMjes[1]=28;

Izračunavanje dana: rješenje s poljimaIzračunavanje dana: rješenje s poljima

*

Page 8: Mehanizmi agregacije

//inicijalizacija sume_danaint Suma=Dat[0];

//izracunavanjefor(i=0;i<Dat[1]-1;i++)

Suma+=Mjes[i];//ispis

cout<<"Od 01.01. do "<<Dat[0]<<"."<<Dat[1]<<"."<<Dat[2]<<"."<<" proslo je "<<Suma<<" dana."<<endl;

//indikacija krajacout<<"Za nastavak <1>, za prekid <0>: ";cin>>j;cout<<endl;

}while(j==1);return 0;}

*

Page 9: Mehanizmi agregacije

ZnakovniZnakovninizovinizovi

*

Page 10: Mehanizmi agregacije

Znakovni nizoviZnakovni nizovi(engl. (engl. charactercharacter stringsstrings, , stringsstrings))

(1)(1) Znakovni nizovi su Znakovni nizovi su jednodimenzionalna znakovnajednodimenzionalna znakovna poljapolja koja koja služe za pohranjivanje služe za pohranjivanje tekstovatekstova::

char VarazdinskiSlikar[]=“Ivo Režek”;char VarazdinskiSlikar[]=“Ivo Režek”;

I

*

v o R e ž e k \0

Na kraju niza automatski se postavlja nul-znak (engl. Na kraju niza automatski se postavlja nul-znak (engl. null-null-charactercharacter). ).

Ispis koji dokazuje postojanje nul-znaka:Ispis koji dokazuje postojanje nul-znaka:for(int i=0;i<=10;i++)for(int i=0;i<=10;i++)

coutcout <<VarazdinskiSlikar[i]<<“\t”<<VarazdinskiSlikar[i]<<“\t”<<(int)(unsigned char)VarazdinskiSlikar[i]<<endl;<<(int)(unsigned char)VarazdinskiSlikar[i]<<endl;

Nije ga potrebno eksplicitno navoditi, ali treba o njemu voditi Nije ga potrebno eksplicitno navoditi, ali treba o njemu voditi računa.računa.

horizontalni tabulator

ispisuje ASCII kôdôd

Page 11: Mehanizmi agregacije

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

char VarazdinskiSlikar[]="Ivo Režek";cout<<endl; //kombinacija ispisa //s tabulatorom (\t=popunjavanje s lijeva)//i setw (popunjavanje s desna)for(int i=0;i<=9;i++){

cout<<"\t"<<VarazdinskiSlikar[i]<<setw(10);cout<<(int)(unsigned char)VarazdinskiSlikar[i]<<endl;

}cout<<endl;for(i=0;i<=9;i++){

cout<<setw(9)<<VarazdinskiSlikar[i];cout<<"\t"<<(int)(unsigned char)VarazdinskiSlikar[i];cout<<endl;

}system(“pause”);return 0;

}

Dokaz: program P6_1.cppDokaz: program P6_1.cpp

*

Page 12: Mehanizmi agregacije

Znakovni nizovi: definicija i ispis (primjeri)Znakovni nizovi: definicija i ispis (primjeri)

Primjer definicije znakovnog niza:Primjer definicije znakovnog niza:char Niz[]=char Niz[]=

“Melita Kozina”;“Melita Kozina”;Isti se niz može definirati i ovako:Isti se niz može definirati i ovako:

char Niz[]=char Niz[]= {‘M’,’e’,’l’,’i’,’t’,’a’,’ ’, ‘K’,’o’,’z’,’i’,’n’,’a’,’\0’}; {‘M’,’e’,’l’,’i’,’t’,’a’,’ ’, ‘K’,’o’,’z’,’i’,’n’,’a’,’\0’};

*

Naredba za ispisNaredba za ispiscout<<Niz<<endl;cout<<Niz<<endl;

Što odabrati (koju definiciju, kakav ispis)?

daje isti rezultat kaodaje isti rezultat kaofor(int i=0;i<13;i++) for(int i=0;i<13;i++)

cout<<Niz[i];cout<<Niz[i];cout<<endl;cout<<endl;

Ispisuje sadržajIspisuje sadržajznakovnog nizaznakovnog niza

sve do znaka ‘\0’sve do znaka ‘\0’

potrebno definiratipotrebno definirati

Odgovor: vidjeti sljedeći slOdgovor: vidjeti sljedeći slajdajd

Page 13: Mehanizmi agregacije

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

cout<<endl<<"DEFINIRANJE I ISPIS ZNAKOVNOG NIZA"<<endl;char PrviNiz[]="Melita Kozina";char DrugiNiz[]=

{'M','e','l','i','t','a',' ','K','o','z','i','n','a','\0'};char Znak='\"';//navodnicicout<<endl<<"char PrviNiz[]=";cout<<Znak<<"Melita Kozina"<<Znak<<";"<<endl;cout<<endl<<"char DrugiNiz[]=";cout<<"{'M','e','l','i','t','a',' ','K','o','z','i','n','a',' '}”

<<endl<<endl;cout<<"1. cout<<PrviNiz<<endl;"<<endl;cout<<" Ispis: "<<PrviNiz<<endl<<endl;cout<<"2. cout<<DrugiNiz<<endl;"<<endl;

cout<<" Ispis: "<<DrugiNiz<<endl<<endl;cout<<"3. for(int i=0;(DrugiNiz[i] != NULL);i++)

cout<<DrugiNiz[i];"<<endl; cout<<" Ispis: ";

for(int i=0;(DrugiNiz[i] != NULL);i++)cout<<DrugiNiz[i];

cout<<endl; cout<<endl<<"Za kraj <1>: "; cin>>"";return 0;

}

Sljedeći slideSljedeći slide

*

definicije nizadefinicije niza

PrviNiz: ispisPrviNiz: ispis

DrugiNiz: ispis (1)DrugiNiz: ispis (1)

DrugiNiz: ispis (2)DrugiNiz: ispis (2)

ispis definicijaispis definicija

definicija konstante

Page 14: Mehanizmi agregacije

char Niz[]="Melita Kozina”; //definicijacout<<Niz<<endl; //ispis

PreporukaPreporuka

*

P1_5.exe

Page 15: Mehanizmi agregacije

Znakovni nizovi: učitavanjeZnakovni nizovi: učitavanje

*

Primjer 1.char tekst[80];cin>>tekst;cout<<tekst;

Primjer 2.char tekst[80];while (cin>>tekst)

cout<<tekst<<endl;

Ispisuje po jednu riječ u redu, ne Ispisuje po jednu riječ u redu, ne prepoznaje kraj! Izvođenje se mora prepoznaje kraj! Izvođenje se mora

nasilno prekinuti!nasilno prekinuti!Dokaz: P6_4.exeDokaz: P6_4.exe

Rješenje jeRješenje je

u uporabi funkcijskih članovaget( )

igetline( )

U čemu je problem?U čemu je problem?U prazninama. One predstavljaju

graničnike koji prekidaju učitavanje podataka.

funkcijski član read( ) ali on radi sa znakom EOF, pa se uglavnom koristi

za učitavanje datoteka.

Postoji još iPostoji još i

Ispisuje samo do prve praznine, Ispisuje samo do prve praznine, prekida izvođenje! Dokaz: P6_3.exe prekida izvođenje! Dokaz: P6_3.exe

PreporukaPreporuka: : prvo izvođenje - jedna riječprvo izvođenje - jedna riječ

drugo izvođenje - dvije riječidrugo izvođenje - dvije riječi

Page 16: Mehanizmi agregacije

*

get ( ) get ( ) s argumentima: prva varijantas argumentima: prva varijanta

Učitava Učitava znak po znakznak po znak..

Duljina unešenog teksta mora biti Duljina unešenog teksta mora biti manja od duljine niza.manja od duljine niza.

Nakon učitavanja, nizu treba Nakon učitavanja, nizu treba dodati nul-znak.dodati nul-znak.

PraktičnijiPraktičniji je za učitavanje je za učitavanje podataka iz podataka iz datotekedatoteke..

Način radaNačin radaProgramski primjerProgramski primjer

#include<iostream>#include<iomanip>using namespace std;int main() {char tekst[80];int i=0;cout<<“Unesi tekst:”<<endl;while (cin.get(tekst[i]))

if (tekst[i++]=='\n')break;

tekst[i-1]='\0';cout<<“Ispis: “<<endl<<tekst;cout<<endl<<endl<<"Za kraj<1>:";cout << endl;system(“pause”);return 0;

}

Page 17: Mehanizmi agregacije

*

get ( ) get ( ) bez argumenatabez argumenata

Učitava Učitava znak po znakznak po znak..

‘‘get’ bez argumenata je get’ bez argumenata je funkcijski član tipa ‘int’, a funkcijski član tipa ‘int’, a

vraća kôdvraća kôd znaka koji je učitao. znaka koji je učitao.

Za učitani znak Za učitani znak ‘\n’‘\n’, ‘get’ bez , ‘get’ bez argumenata argumenata vraćavraća vrijednostvrijednost

-1.-1.

Nakon učitavanja, nizu treba Nakon učitavanja, nizu treba dodati nul-znak.dodati nul-znak.

Način radaNačin radaProgramski primjerProgramski primjer#include<iostream>using namespace std;int main() {cout<<endl<<"UCITAVANJE

ZNAKOVNOG NIZA: ";cout<<"get() BEZ ARGUMENATAget() BEZ ARGUMENATA”

<<endl;char tekst[80];int i=0;cout<<endl<<"Unesi tekst (1-79

znakova):"<<endl;while((tekst[i]=cin.get())!= -1)

if (tekst[i++]=='\n')break;

tekst[i-1]='\0';cout<<endl<<"Ispis:"<<endl

<<tekst<<endl;cout<<endl;system(“pause”);return 0;

}

Page 18: Mehanizmi agregacije

*

get ( ) get ( ) s argumentima: druga varijantas argumentima: druga varijanta

Učitava Učitava znak po znakznak po znak..

Prekida učitavanje kad naiđe Prekida učitavanje kad naiđe na na ‘\n’‘\n’ koji koji ostajeostaje u nizu, pa se u nizu, pa se može učitati najviše (duljina-1) može učitati najviše (duljina-1)

znakova. znakova.

Zaključni Zaključni nul-znaknul-znak dodaje se dodaje se automatskiautomatski..

Najpogodniji način za Najpogodniji način za učitavanje znakovnih nizova.učitavanje znakovnih nizova.

Način radaNačin radaProgramski primjerProgramski primjer

#include<iostream>using namespace std;int main() {cout<<endl<<"UCITAVANJE ZNAKOVNOG NIZA:

OPTIMALNI get()OPTIMALNI get()” <<endl;char tekst[80];cout<<endl<<"Unesi tekst (1-79

znakova):”<<endl;cin.get(tekst, sizeof(tekst));cout<<endl<<"Ispis:"<<endl

<<tekst<<endl;cout<<endl;system(“pause”);return 0;

}

Page 19: Mehanizmi agregacije

*

getline ( )getline ( )

Učitava Učitava znak po znakznak po znak..

Prekida učitavanje kad naiđe Prekida učitavanje kad naiđe na na ‘\n’.‘\n’.

Automatski Automatski uklanja ‘\n’uklanja ‘\n’ i i dodaje ‘\0’.dodaje ‘\0’.

Također vrlo pogodan način Također vrlo pogodan način za učitavanje znakovnih za učitavanje znakovnih

nizova.nizova.

Način radaNačin radaProgramski primjerProgramski primjer#include<iostream>using namespace std;int main() {cout<<endl<<"UCITAVANJE ZNAKOVNOG NIZA:

OPTIMALNI getline()OPTIMALNI getline()"<<endl;char tekst[80]; cout<<endl<<"Unesi tekst (1-80

znakova):"<<endl;cin.getline(tekst,sizeof(tekst));cout<<endl<<"Ispis:"<<endl<<tekst

<<endl;cout<<endl;system(“pause”);return 0;

}

Page 20: Mehanizmi agregacije

*

getline ( )getline ( )

Ovaj će cin.getline biti Ovaj će cin.getline biti preskočenpreskočen

Programski primjerProgramski primjer#include<iostream>using namespace std;int main() {cout<<endl<<"UCITAVANJE ZNAKOVNOG NIZA:

OPTIMALNI getline()OPTIMALNI getline()"<<endl;int n;char tekst[80];cout << "Unesi broj: ";cin >> n;cout<<endl<<"Unesi tekst (1-80

znakova):"<<endl;cin.getline(tekst,sizeof(tekst));cout<<endl<<"Ispis:"<<endl<<tekst

<<endl;cout<<endl;system("pause");return 0;

}

Zašto?Zašto?

Page 21: Mehanizmi agregacije

*

getline ( )getline ( )

Ova naredba ignorira Ova naredba ignorira sadržaj spremnika sadržaj spremnika

unosaunosa

Programski primjerProgramski primjer#include<iostream>using namespace std;int main() {cout<<endl<<"UCITAVANJE ZNAKOVNOG NIZA:

OPTIMALNI getline()OPTIMALNI getline()"<<endl;int n;char tekst[80];cout << "Unesi broj: ";cin >> n;cout<<endl<<"Unesi tekst (1-80

znakova):"<<endl;cin.ignore();cin.getline(tekst,sizeof(tekst));cout<<endl<<"Ispis:"<<endl<<tekst

<<endl;cout<<endl<<endl<<"Za kraj <1>: ";cin>>"";cout<<endl;return 0;

}

Page 22: Mehanizmi agregacije

ZapisiZapisi

*

Page 23: Mehanizmi agregacije

Zapis: deklaracijaZapis: deklaracija

double--------------

PrOcj

int----------

sifra

formatformat

structstruct identifikator identifikator {{

deklaracija_1deklaracija_1;;

..

..

..

deklaracija_n;deklaracija_n;

} identifikator,...;} identifikator,...;

88 b bajtaajta*

stud ::

primjer

struct student {int sifra;char imeprez[30];double prosocj;

} stud;

4 4 bbajtaajta

char[30]-----------------------

imeprez

3030 b bajtaajta

Page 24: Mehanizmi agregacije

ZapisiZapisi

• Zapis je skup podataka koji mogu biti Zapis je skup podataka koji mogu biti međusobno različitih tipovameđusobno različitih tipova

• Svaka komponenta zapisa ima svoje ime preko Svaka komponenta zapisa ima svoje ime preko kojeg joj se pristupa.kojeg joj se pristupa.

*

Page 25: Mehanizmi agregacije

ZapisiZapisi: primjeri: primjeri#include <iostream>using namespace std;

int main () {int Ocj, B=0, S=0;struct student {

int sifra;char imeprez[30];double prosocj;

} stud;cout << "Sifra: ";cin >> stud.sifra;cout << "Ime i prezime: ";cin.ignore();cin.getline(stud.imeprez,sizeof(stud.imeprez));char Jos='d';

*

Page 26: Mehanizmi agregacije

ZapisiZapisi: primjeri: primjeriwhile (Jos=='d') { cout << "Ocjena: "; cin >> Ocj; B++; S+=Ocj; cout << "Jos? "; cin >> Jos;}stud.prosocj=(float)S/B;cout << "Student: " << stud.sifra << " " <<

stud.imeprez << " Prosjek: " << stud.prosocj << endl;system("pause");

return 0;}

*

Page 27: Mehanizmi agregacije

ZapisiZapisiint main () {struct {

int sifra;char imeprez[30];double prosocj;

} stud;...

}

*

Zapisu kojem se Zapisu kojem se odmah pridružuje odmah pridružuje

varijabla i koji se ne varijabla i koji se ne koristi nigdje koristi nigdje

drugdje osim tamo drugdje osim tamo gdje je deklariran gdje je deklariran

nije potrebno nije potrebno definirati ime. Tako definirati ime. Tako

dobijamo tzv. dobijamo tzv. neimenovani zapisneimenovani zapis

Page 28: Mehanizmi agregacije

ZapisiZapisistruct student {

int sifra;char imeprez[30];double prosocj;

};

int main () {student stud;...

}

*

Zapis se može Zapis se može deklarirati deklarirati posebno i posebno i

koristiti kasnije koristiti kasnije kod kod

deklariranja deklariranja varijablivarijabli

Page 29: Mehanizmi agregacije

UnijeUnije

*

Page 30: Mehanizmi agregacije

char[30]------------------------------

imeprez

Unije: deklaracijaUnije: deklaracija

double--------------

PrOcj

int----------

sifra

formatformat

unionunion identifikator identifikator {{

deklaracija_1deklaracija_1;;

..

..

..

deklaracija_n;deklaracija_n;

} identifikator,...;} identifikator,...;

*

stud ::

primjer

union student {int sifra;char imeprez[30];double prosocj;

} stud;

3030 b bajtaajta

Page 31: Mehanizmi agregacije

UnijeUnije

• Unija je memorijski prostor koji se može koristiti za Unija je memorijski prostor koji se može koristiti za pohranjivanje podataka različitih tipova. pohranjivanje podataka različitih tipova.

• Veličina unije jednaka je najvećem od podataka koji je Veličina unije jednaka je najvećem od podataka koji je u uniji definiranu uniji definiran

• U uniji istovremeno može biti upisana U uniji istovremeno može biti upisana samo jedna samo jedna komponentakomponenta unije. unije.

*

Page 32: Mehanizmi agregacije

*

UnijeUnijeProgramski primjerProgramski primjer

#include<iostream>using namespace std;union student {

int sifra;char imeprez[30];

};int main() {student stud;cout << "Maticni broj: ";cin >> stud.sifra;cin.ignore();cout << "Ime i prezime: ";

cin.getline(stud.imeprez,sizeof(stud.imeprez));cout << stud.sifra << "\t" <<

stud.imeprez << endl;system("pause");return 0;

}

13ivica

1667855977ivica

Unos:Unos:

Ispis:Ispis:

Cjelobrojna vrijednost Cjelobrojna vrijednost komponente matbr komponente matbr prebrisana komponentom prebrisana komponentom koja sadrži vrijednost niza koja sadrži vrijednost niza znakova. znakova.