Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 11

UNIVERZITET U BIHAU PEDAGOKI FAKULTET ODSJEK ZA MATEMATIKU I FIZIKU SMJER ZA MATEMATIKU I INFORMATIKU

Seminarski rad iz Struktura podataka

PAROVI

Profesor: dr.sc. Nedad Duki

Student:Mirhat Bei

Biha,maj 2012.

UVOD
Tema mog seminarskog rada su parovi. Cilj mi je da na to jednostavniji nain poblie objasnim funkciju i upotrebu parova. Par je generiki tip podatka koji se koristi zajedno sa vektorima, listama te mapama. On se koristi da bi se mogli napraviti ureeni parovi izmeu istih i razliitih tipova podataka. npr parovi pair<char,int>, pair<string,int> i slino. Kako bi se parovi mogli upotrebljavati ukratko u da objasnim ta su i kakva je funkcija parova sa vektorima, mapama i listama. Kontejneri su tipovi podataka koji sadre druge podatke (elementi kontejnera), te imaju lanove funkcije za pristup elementima. Kontejneri mogu dinamiki rasti, tj. u njih se mogu nadodavati novi elementi tokom izvoenja programa. Kontejneri u STL biblioteci imaju sljedee nazive: vektori (vectors), liste (lists), dvostruki redovi. Vektor je sekvencijalni kontejner. Sekvencijalnim kontejnerima podaci su ureeni kao sekvenca (dio) elemenata. Omoguava laku manipulaciju elementima. Sekvencijalni kontejneri omoguavaju umetanje i brisanje elementa na specificiranoj poziciji. STL (Standard Template Library) je biblioteka kontejnera, iteratora i algoritama. Lista je sekvencijalni kontejner. Prednost u odnosu na vektor je to ima visoku efikasnost kod dodavanja novih elemenata na bilo koju lokaciju u listi. Elementi liste pored vrijednosti sadre adrese prethodnog i sljedeeg elementa.

Upotreba STL par ( std::pair)


STL par ( std::pair) je generiki tip podatka koji nije kontejner. Kontejneri mogu dinamiki rasti, tj. u njih se mogu nadodavati novi elementi tijekom izvoenja programa. On se jednostavno sastoji od dva podataka koji mogu biti razliitog tipa, a slui nam kad elimo tretirati dva podataka kao jedan. Npr. pair<char, int> par(A,65); je konstruiran par od jednog znaka i cijelog broja. Par je ureena struktura, u kojoj je lijevi lan prvi (first) a desni drugi (second) lan. Klasa pair ima definiran operator pridruivanja (=), te funkcije za pristup prvom lanu (first()) i drugom lanu (second()). Postoji kopirajui konstruktor i konstruktor u kojem se navode vrijednosti prvog pa potom drugog lana para. Par je predloak (isto kao i vector). Pair omoguava stvaranje ureenih parova dva ista tipa pair<string, string> student(Alan, Ford); pair<int, int> rezultat(3, 2); pair<double, double> koordinata(1.1, 3.3); Tipovi podataka ne moraju biti isti Npr kad elimo da napravimo par od studenta i njegovih godina pair<string, int> student(Haso, 22); pair<string, vector<int> > ime_vektora_i_vektor; Da bi mogli upotrebljavati par potrebno je ukljuiti zaglavlje < utility> typedef pair<char,int>;

Operacije na pair-u Na parovima se mogu izvoditi sljedee operacije: pair<T1, T2> p; pair<T1, T2> p(v1, v2); make_pair(v1, v2); p1 < p2 p1 == p2 p.first p.second tipova). Primjeri zadataka koritenja parova Primjer 1. Uitavajte znak po znak sa tipkovnice sve dok ne uitate taku. Ako ste proitali slovo, spremite ga u vektor. Vektor neka se sastoji od ureenih parova <slovo, broj pojavljivanja slova>. Dakle, kada proitate novo slovo, potrebno je pregledati da li u vektoru ve postoji navedeno slovo. Ako postoji, samo treba poveati odgovarajui broja; inae treba ubaciti novo slovo (sa odgovarajuim brojaem) na kraj vektora. #include<iostream> #include<vector> // ukljuiemo vektor datoteku using namespace std; typedef pair<char,int> brojacSlova; //na ovaj nain definisemo parove void main() { vector<brojacSlova> v(26); //oznaava broj slova u engleskom alfabetu char z; //definiemo promjenljivu tipa char for(int i=0, z='A'; i<26;i++,z++) { v[i].first=z;// prvi clan para je z
5

//stvara i vraa novi par //leksikografsko usporeivanje //usporeivanje po koordinatama //prva koordinata //pronalazi drugu koordinatu

Par dozvoljava direktan pristup svojim koordinatama (za razliku od veine ostalih bibliotenih

v[i].second=0; // drgi clan para je 0 } cout<<"Vektor brojaca: "<<endl; for(int i=0;i<26;i++) cout<<"("<<v[i].first<<","<<v[i].second<<")"<<endl; //ispisuje na ekran vektore parova slova i 0 cout<<"Recenica: "<<endl;//unos recenice sve dok se ne pritisne . cin>>z; while(z!='.') { for(int i=0;i<v.size();i++) { if(v[i].first==z) v[i].second++; } cin>>z; } cout<<"Brojaci pojavljivanja slova :"<<endl; for(int i=0;i<v.size();i++) cout<<"("<<v[i].first<<","<<v[i].second<<")"<<endl; system("pause"); } Primjer 2. Kreirati vektor parova koji sadri parove unesenih cijelih brojeva. Te na ekranu prikazati te parove. #include<iostream> #include<vector> using namespace std; typedef pair<int,int> ParInt; void main() { vector<ParInt> v(6); cout<<"Unos: "<<endl; for(int i=0;i<v.size();i++) { v[i].first=i; v[i].second=i;
6

} cout<<"Ispis: "<<endl; vector<ParInt>::iterator it; for(it=v.begin();it!=v.end();it++) cout<<"("<<it->first<<","<<it->second<<")"<<"\t"; cout<<endl; }

MAPA
STL mapa (std::map) je asocijativni kontejner. Asocijativni kontejneri sadre podatke i kljueve za dohvaanje podataka. Oni dozvoljavaju umetanje i brisanje elementa ali ne i na specificiranoj poziciji. Elementi mape su STL parovi (std::pair). Prvi lan parova mape se naziva klju a drugi lan para mape je podatak. Vrijednost nekog kljua u mapi mora biti jedinstvena. Elementi u mapi su sortirani po vrijednostima kljueva. Ako se eksplicitno ne navede onda su sortirani od najmanje vrijednosti kljua do najvee. Npr. map<int,string> m; m je mapa s parovima u kojima su kljuevi tipa int a podaci tipa string. Elementi su sortirani po vrijednosti kljueva tj. cijelih brojeva i to od manjeg ka veem. Ako bi eljeli mapu u kojoj su kljuevi i podaci istog tipa kao u mapi m ali sortiranje je od najveeg ka najmanjoj vrijednosti kljua, tada emo takvu mapu deklarirati: map<int,string, greater<int>> m; Sa prediktorom greater<int> sortiramo elemente mape od vee ka manjoj vrijednosti kljueva. Vrijednost podataka se moe direktno mijenjati ali ne i kljua.

Nekoliko jednostavnih primjera koritenja mape. Kroz koje emo vidjeti njenu primjenu prilikom kreiranja jednostavnih mapa parova i jednostavan nain kriranja takvih mapa parova.

Primjer 1. Napravimo mapu parova koja sadri broj indeksa i ime studenta. Prilikom poziva po imenu studenta potrebno je da se ispie njegov broj indeksa. #include<iostream> #include<map> #include<string> using namespace std; typedef pair<string,string> mapa; void main() { map<string,string> m; map<string,string>::iterator it; m["B2765"]="Nermin Huskic"; m["A2341"]="Mirhat Besic"; m["C4567"]="Meris Sakonjic"; m["D2345"]="Muhamed Pehlivanovic"; for(it=m.begin();it!=m.end();it++) if(it->second=="Meris Sakonjic")cout<<it->first<<endl; system("pause"); }

Ovo je bio primjer u kojem se koristi naredba typedef pair<string,string> mapa; koja ima promjenljive istog tipa string. Primjer 2 Napraviti mapu parova njemako-bosanskih linih zamjenica jednine. Te kad uitamo zamjenicu na njemakom da nam izbaci prevod na bsanskom jeziku. #include<iostream> #include<string> #include<map> #include<vector> using namespace std; void main() { map<string, string> rijecnik; rijecnik["Ich"]="Ja "; rijecnik["Du"]="Ti"; rijecnik["Er"]="On"; rijecnik["Sie"]="Ona"; rijecnik["Es"]="Ono"; map<string, string>::iterator i; for(i=rijecnik.begin();i!=rijecnik.end();i++) cout<<i->first +"="+ i->second <<endl; string st; cout<<"Upisi licnu zamjenicu na njemackom :"; while(st!=".") { cin>>st; cout<<"Bosanski prijevod:"; cout<<rijecnik[st]<<" "; system("pause"); }
9

//ukljuimo potrebne biblioteke u C++

//pravimo mapu parova

//iterator konstruiemo //ispiemo mapu koju smo napavili

LITERATURA
1. Objektno programiranje (C++), Vinko Petrievi, PMF Matematiki odjel, Sveuilite Zagreb 2. Strukture podataka, Selim Pai, Zagreb, 2008
3. http://www.cplusplus.com/reference/std/utility/pair/ 4. http://www.codecogs.com/reference/computing/stl/containers/pair.php

10

SADRAJ
UVOD........................................................................................................................... 3 Upotreba STL par ( std::pair)....................................................................................... 4 MAPA........................................................................................................................... 7 LITERATURA..................................................................................................... 10 SADRAJ.................................................................................................................... 11

11

You might also like