skripta programiranje 2 - labosi

25
Programiranje 2 Skripta Vincijanović Danijel Sadržaj 1. VEZANA LISTA .......................................................... 1 1.2. ISPISI SVE ELEMENTE ................................................. 1 1.3. PRETRAZI LISTU ..................................................... 1 1.4. BRISI ELEMENT ...................................................... 1 1.5. DEALOKACIJA LISTE ................................................... 1 1.6. SORTIRANJE VEZANE LISTE PREMA MATICNOM BROJU ............................. 3 2. DVOSTRUKO VEZANA LISTA ................................................ 3 2.1. DODAJ ELEMENT NA KRAJ................................................ 3 2.2. DODAJ ELEMENT NA POCETAK ............................................. 3 2.3. ISPIS OD POČETKA.................................................... 3 2.4. ISPIS OD KRAJA ..................................................... 3 2.5. DEALOKACIJA........................................................ 3 3. DATOTEKE .............................................................. 5 3.1. KREIRANJE DATOTEKE .................................................. 5 3.2. UNOS PODATAKA U DATOTEKU ............................................. 5 3.3. ISPIS SVIH PODATAKA ................................................. 5 3.4. ISPIS ZADANIH PODATAKA ............................................... 5 4. VEZANA LISTA OBJEKATA (POMOĆU KLASE) .................................. 7 4.1. DODAVANJE ELEMENTA NA KRAJ LISTE ....................................... 7 4.2. ISPIS SVIH ELEMENATA ................................................ 7 4.3. PRETRAZIVANJE LISTE ................................................. 7 4.4. BRISANJE ELEMENTA LISTE .............................................. 7 4.5. SORTIRANJE LISTE UZLAZNO ............................................. 7 5. PRIMJER (VEZANA / DATOTEKA) ........................................... 9 6. PRIMJER (DATOTEKA / VEZANA) .......................................... 11 7. PRIMJER (DATOTEKA / DINAMICKO) ....................................... 14 8. PRIMJER (DINAMIČKO / DATOTEKA) ....................................... 17 9. PRIMJER (DINAMIČKO / VEZANA) ......................................... 19 10. PRIMJER (VEZANA / DINAMIČKO) ......................................... 22

Upload: usisavac

Post on 24-Dec-2015

111 views

Category:

Documents


17 download

DESCRIPTION

FOI predmet na 2. godini zimski semestar. Zadaci koji se vrte na zadnjem kolokviju.

TRANSCRIPT

Page 1: Skripta Programiranje 2 - labosi

Programiranje 2 Skripta – Vincijanović Danijel

Sadržaj 1. VEZANA LISTA .......................................................... 1

1.2. ISPISI SVE ELEMENTE ................................................. 1 1.3. PRETRAZI LISTU ..................................................... 1 1.4. BRISI ELEMENT ...................................................... 1 1.5. DEALOKACIJA LISTE ................................................... 1 1.6. SORTIRANJE VEZANE LISTE PREMA MATICNOM BROJU ............................. 3

2. DVOSTRUKO VEZANA LISTA ................................................ 3

2.1. DODAJ ELEMENT NA KRAJ ................................................ 3 2.2. DODAJ ELEMENT NA POCETAK ............................................. 3 2.3. ISPIS OD POČETKA .................................................... 3 2.4. ISPIS OD KRAJA ..................................................... 3 2.5. DEALOKACIJA ........................................................ 3

3. DATOTEKE .............................................................. 5

3.1. KREIRANJE DATOTEKE .................................................. 5 3.2. UNOS PODATAKA U DATOTEKU ............................................. 5 3.3. ISPIS SVIH PODATAKA ................................................. 5 3.4. ISPIS ZADANIH PODATAKA ............................................... 5

4. VEZANA LISTA OBJEKATA (POMOĆU KLASE) .................................. 7

4.1. DODAVANJE ELEMENTA NA KRAJ LISTE ....................................... 7 4.2. ISPIS SVIH ELEMENATA ................................................ 7 4.3. PRETRAZIVANJE LISTE ................................................. 7 4.4. BRISANJE ELEMENTA LISTE .............................................. 7 4.5. SORTIRANJE LISTE UZLAZNO ............................................. 7

5. PRIMJER (VEZANA / DATOTEKA) ........................................... 9

6. PRIMJER (DATOTEKA / VEZANA) .......................................... 11

7. PRIMJER (DATOTEKA / DINAMICKO) ....................................... 14

8. PRIMJER (DINAMIČKO / DATOTEKA) ....................................... 17

9. PRIMJER (DINAMIČKO / VEZANA) ......................................... 19

10. PRIMJER (VEZANA / DINAMIČKO) ......................................... 22

Page 2: Skripta Programiranje 2 - labosi

Programiranje 2 Skripta – Vincijanović Danijel

1

1. Vezana lista

1.1. Dodaj element

1.2. Ispisi sve elemente

1.3. Pretrazi listu

1.4. Brisi element

1.5. Dealokacija liste

#include <iostream>

#include "biblioteka_vrijeme.cc"

using namespace std;

struct tstudent{

int mat_br;

char prez_ime[35];

int god_stu;

tstudent *sljedeci;

};//struct

void dodaj_element(tstudent *lista){ // dodaje element na kraj liste

tstudent *novi,*zadnji;

zadnji = lista;

while (zadnji->sljedeci)

zadnji = zadnji->sljedeci; // pronalaženje zadnjeg elementa u listi

novi = new tstudent; // alokacija novog elementa liste

zadnji -> sljedeci = novi; // povezivanje zadnje elementa u listi s novim elementom

novi -> sljedeci = NULL; // novi je sada zadnji element u listi

cout << "Maticni broj: ";

cin >> novi -> mat_br;

cout << "Prezime i ime: ";

unos(novi->prez_ime); // funkcija iz biblioteke

cout << "Godina studija: ";

cin >> novi -> god_stu;

};//dodaj_element

void ispisi_sve_elemente(tstudent *lista){ // ispis svih elemenata liste

tstudent *tekuci = lista -> sljedeci; // tekuci se usmjerava na početni element za ispis

while (tekuci){

cout << "adresa elementa = " << int((size_t)tekuci) << endl;

cout << "Maticni broj: " << tekuci -> mat_br << endl;

cout << "Prezime i ime: " << tekuci -> prez_ime << endl;

cout << "Godina studija: " << tekuci -> god_stu << endl;

cout << "Adresa sljedeceg elementa: " << int ((size_t)tekuci -> sljedeci) << endl;

cout << "---------------------" << endl;

tekuci = tekuci -> sljedeci; // kretanje kroz listu

}; // while

};//ispisi_sve_elemente

void pretrazi_listu(tstudent *lista,int mat_br){ //pretraživanje liste prema matičnom broju

tstudent *tekuci = lista -> sljedeci; // tekuci se usmjerava na početni element za ispis

while (tekuci){

if (tekuci -> mat_br == mat_br){

cout << "Maticni broj: " << tekuci -> mat_br << endl;

cout << "Prezime i ime: " << tekuci -> prez_ime << endl;

cout << "Godina studija: " << tekuci -> god_stu << endl;

cout << "---------------------" << endl;

return; // izlaz iz petlje i potprograma

};//if

tekuci = tekuci -> sljedeci; // kretanje kroz listu

}; // while

cout << "Element nije pronadjen!" << endl;

};//pretrazi_listu

void brisi_element(tstudent *lista,int mat_br){ //brisanje elementa liste prema matičnom broju

Page 3: Skripta Programiranje 2 - labosi

Programiranje 2 Skripta – Vincijanović Danijel

2

tstudent *brisi = lista -> sljedeci, *prethodni = lista;

while (brisi){

if (brisi -> mat_br == mat_br){

prethodni -> sljedeci = brisi -> sljedeci;

delete brisi;

cout << "Element je izbrisan iz vezane liste!" << endl;

return; // izlaz iz petlje i potprograma

}; // if

prethodni = brisi;

brisi = brisi->sljedeci;

}; // while

cout << "Element za brisanje nije pronadjen!" << endl;

};//brisi element

tstudent *dealokacija_liste(tstudent *lista){ //dealokacija liste

tstudent *tekuci,*prethodni;

prethodni=lista;

tekuci=lista->sljedeci;

while (tekuci){

delete prethodni;

prethodni=tekuci;

tekuci=tekuci->sljedeci;

}//while

delete prethodni;

return NULL;

};//dealokacija_liste

int main(){

int izbor,mat_br;

tstudent *lista = new tstudent; // alokacija glave liste

lista -> sljedeci = NULL; // kraj liste

do{

cout << "1. dodavanje novog elementa na kraj liste" << endl;

cout << "2. ispis svih elemenata liste" << endl;

cout << "3. pretrazivanje liste prema maticnom broju" << endl;

cout << "4. brisanje elementa liste prema maticnom broju" << endl;

cout << "5. dealokacija liste i kreiranje nove glave liste" << endl;

cout << "9. dealokacija liste i izlaz" << endl;

cin >> izbor;

switch (izbor){

case 1:dodaj_element(lista);break;

case 2:ispisi_sve_elemente(lista);break;

case 3:

cout << "Maticni broj: ";

cin >> mat_br;

pretrazi_listu(lista,mat_br);break;

case 4:

cout << "Maticni broj: ";

cin >> mat_br;

brisi_element(lista,mat_br);break;

case 5:

lista=dealokacija_liste(lista);

lista = new tstudent; // alokacija nove glave liste

lista -> sljedeci = NULL; // kraj liste

break;

case 9:lista=dealokacija_liste(lista);break;

};

cout << endl;

} while (izbor!=9);

cout << int((size_t)lista); // NULL

Page 4: Skripta Programiranje 2 - labosi

Programiranje 2 Skripta – Vincijanović Danijel

3

1.6. Sortiranje vezane liste prema maticnom broju

void sortiraj_listu(tstudent *lista){ //sortiranje liste uzlazno po matičnom broju

tstudent *prethodni,*tekuci,*sljedeci;

int indikator;

do{

indikator = 0;

tekuci=lista->sljedeci;

prethodni=lista;

while (tekuci->sljedeci){

sljedeci=tekuci->sljedeci;

if (tekuci->mat_br > sljedeci->mat_br){

prethodni->sljedeci=sljedeci;

tekuci->sljedeci=sljedeci->sljedeci;

sljedeci->sljedeci=tekuci;

indikator=1;

}//if

prethodni=prethodni->sljedeci;

tekuci=prethodni->sljedeci;

}//while

} while (indikator==1);

}; // sortiraj listu

2. Dvostruko vezana lista

2.1. Dodaj element na kraj

2.2. Dodaj element na pocetak

2.3. Ispis od početka

2.4. Ispis od kraja

2.5. Dealokacija

#include <iostream>

using namespace std;

struct telement{

int broj;

telement *sljedeci;

telement *prethodni;

};//struct

void dodaj_element_na_kraj(telement *lista){

telement *novi,*zadnji;

zadnji = lista;

while (zadnji->sljedeci) //traženje zadnjeg elementa u listi

zadnji=zadnji->sljedeci;

novi = new telement;

novi->prethodni=zadnji;

novi->sljedeci=NULL;

zadnji->sljedeci=novi;

cout << "Broj = ";

cin >> novi -> broj;

};//dodaj_element_na_kraj

void dodaj_element_na_pocetak(telement *lista){

if (!lista->sljedeci){ // provjera da lista nije prazna

dodaj_element_na_kraj(lista);

return;

};

telement *novi,*sljedeci;

sljedeci = lista->sljedeci;

Page 5: Skripta Programiranje 2 - labosi

Programiranje 2 Skripta – Vincijanović Danijel

4

novi = new telement;

novi->prethodni=lista; //povezivanje novog

novi->sljedeci=sljedeci;

lista->sljedeci=novi; //stari 'prihvaćaju' novog

sljedeci->prethodni=novi;

cout << "Broj = ";

cin >> novi -> broj;

};//dodaj_element_na_kraj

void ispis_od_pocetka(telement *lista){

telement *tekuci = lista->sljedeci;

while (tekuci){

cout << tekuci -> broj << ", ";

tekuci = tekuci -> sljedeci;

};//while

cout << "NULL" << endl;

};//ispis_od_pocetka

void ispis_od_kraja(telement *lista){

telement *tekuci = lista->sljedeci;

while (tekuci->sljedeci)

tekuci = tekuci -> sljedeci; // traženje zadnjeg elementa u listi

while (tekuci!=lista){

cout << tekuci -> broj << ", ";

tekuci = tekuci -> prethodni;

};//while

cout << "glava" << endl;

};//ispis_od_kraja

telement *dealokacija_liste(telement *lista){ //dealokacija liste

telement *tekuci,*prethodni;

prethodni=lista;

tekuci=lista->sljedeci;

while (tekuci){

delete prethodni;

prethodni=tekuci;

tekuci=tekuci->sljedeci;

}//while

delete prethodni;

return NULL;

};//dealokacija_liste

int main(){

int izbor;

telement *lista = new telement; // alokacija glave liste

lista -> sljedeci = NULL;

lista -> prethodni = NULL;

do{

cout << "1. dodavanje elementa na kraj liste" << endl;

cout << "2. dodavanje elementa na pocetak liste" << endl;

cout << "3. ispis svih elemenata liste od pocetka" << endl;

cout << "4. ispis svih elemenata liste od kraja" << endl;

cout << "9. dealokacija liste i izlaz iz programa" << endl;

cin >> izbor;

switch (izbor){

case 1: dodaj_element_na_kraj(lista);break;

case 2: dodaj_element_na_pocetak(lista);break;

case 3: ispis_od_pocetka(lista);break;

case 4: ispis_od_kraja(lista);break;

case 9:lista=dealokacija_liste(lista);break;

}//switch

} while(izbor!=9);

return 1;

}// main

Page 6: Skripta Programiranje 2 - labosi

Programiranje 2 Skripta – Vincijanović Danijel

5

3. Datoteke

3.1. Kreiranje datoteke

3.2. Unos podataka u datoteku

3.3. Ispis svih podataka

3.4. Ispis zadanih podataka #include <iostream>

#include <fstream>

using namespace std;

struct tstudent{ // tip zapisa koje sadrži datoteka

int mat_br;

char prez_ime[35];

int g_stu;

};

tstudent student; // varijabla čiji se upisuje/čita u/iz datoteke

fstream dat; // datotečni objekt

char naziv_datoteke[40]; // fizičko ime datoteke

void unos(char *znakovni_niz)

{

cin.getline(znakovni_niz, 150);

if (cin.gcount()==1)

cin.getline (znakovni_niz,150);

};

void kreiranje_datoteke(){

cout << "Unesite naziv datoteke u koju cete spremati podatke:";

cin >> naziv_datoteke;

dat.open(naziv_datoteke,ios::in | ios::binary);

if (!dat){ // ako datoteka ne postoji na disku

dat.open(naziv_datoteke,ios::out | ios::binary); // kreiranje datoteke

dat.close();dat.clear();

}

else{

cout << "Datoteka " << naziv_datoteke << " vec postoji na disku."<<endl;

dat.close();dat.clear();}

};

void unos_podataka_u_datoteku(){

char dalje;

dat.open(naziv_datoteke,ios::out | ios::ate | ios::in| ios::binary);

do{

cout << "Maticni broj:";

cin >> student.mat_br;

cout << "Prezime i ime:";

unos (student.prez_ime); // zbog problema s razmakom

cout << "Godina studija:";

cin >> student.g_stu;

dat.write((char *) &student,sizeof(student));

cout << "Dalje? (d/n)";

cin >> dalje;

} while (dalje=='d');

dat.close();dat.clear();

};

void ispis_podataka_o_svim_studentima(){

dat.open(naziv_datoteke,ios::in | ios::binary);

while (1){

dat.read((char *) &student,sizeof(student));

if (dat.eof()) break;

cout << "Maticni broj: " << student.mat_br << endl;

cout << "Prezime i ime: " << student.prez_ime << endl;

Page 7: Skripta Programiranje 2 - labosi

Programiranje 2 Skripta – Vincijanović Danijel

6

cout << "Godina studija: " << student.g_stu << endl;

}

dat.close();dat.clear();

};

void ispis_podataka_o_zadanom_studentu(int mb){

int brojac=0;

dat.open(naziv_datoteke,ios::in | ios::binary);

while (1){

dat.read((char *) &student,sizeof(student));

if (dat.eof()) break;

if (student.mat_br==mb){

cout << "Maticni broj: " << student.mat_br << endl;

cout << "Prezime i ime: " << student.prez_ime << endl;

cout << "Godina studija: " << student.g_stu << endl;

brojac++;

}

}

if (brojac==0)

cout << "Student s maticnim brojem " << mb << " nije nadjen u

datoteci."<<endl;

dat.close();dat.clear();

};

int main(){

int izbor,mbr;

do{ cout <<"Izaberite :" <<endl<<endl;

cout <<"1. Kreiranje datoteke"<<endl;

cout <<"2. Unos podataka u datoteku"<<endl;

cout <<"3. Ispis svih zapisa iz datoteke"<<endl;

cout <<"4. Ispis podataka o zadanom studentu"<<endl;

cout <<"9. Izlaz iz programa"<<endl;

cin >> izbor;

switch (izbor){

case 1:kreiranje_datoteke();break;

case 2:unos_podataka_u_datoteku();break;

case 3:ispis_podataka_o_svim_studentima();break;

case 4:cout << "Maticni broj studenta:"; cin >> mbr;

ispis_podataka_o_zadanom_studentu(mbr); break;

}

} while (izbor != 9);

return 1;

}

Page 8: Skripta Programiranje 2 - labosi

Programiranje 2 Skripta – Vincijanović Danijel

7

4. Vezana lista objekata (pomoću klase)

4.1. Dodavanje elementa na kraj liste

4.2. Ispis svih elemenata

4.3. Pretrazivanje liste

4.4. Brisanje elementa liste

4.5. Sortiranje liste uzlazno #include <iostream>

using namespace std;

class cstudent{

private: cstudent *sljedeci;

public:

//atributi

int mat_br;

char prez_ime[35];

int god_stu;

//metode

cstudent(){//konstruktor

sljedeci=NULL;

};//konstruktor

void dodaj_element(){ // dodaje element na kraj liste

cstudent *novi,*zadnji;

zadnji = this;

while (zadnji->sljedeci)

zadnji = zadnji->sljedeci; // pronalaženje zadnjeg elementa u listi

novi = new cstudent; // alokacija novog elementa liste

zadnji -> sljedeci = novi; // povezivanje zadnjeg elementa u listi s novim

elementom

cout << "Maticni broj: "; cin >> novi -> mat_br;

cout << "Prezime i ime: "; cin >> novi -> prez_ime;

cout << "Godina studija: "; cin >> novi -> god_stu;

};//dodaj_element

void ispisi_sve_elemente(){ // ispis svih elemenata liste

cstudent *tekuci = this -> sljedeci; // tekuci se usmjerava na početni element za ispis

while (tekuci){

cout << "Maticni broj: " << tekuci -> mat_br << endl;

cout << "Prezime i ime: " << tekuci -> prez_ime << endl;

cout << "Godina studija: " << tekuci -> god_stu << endl;

cout << "---------------------" << endl;

tekuci = tekuci -> sljedeci; // kretanje kroz listu

}; // while

};//ispisi_sve_elemente

void pretrazi_listu(int mat_br){ //pretraživanje liste prema matičnom broju

int nadjen=0;

cstudent *tekuci = this -> sljedeci; // tekuci se usmjerava na početni element za ispis

while (tekuci){

if (tekuci -> mat_br == mat_br){

nadjen=1;

cout << "Maticni broj: " << tekuci -> mat_br << endl;

cout << "Prezime i ime: " << tekuci -> prez_ime << endl;

cout << "Godina studija: " << tekuci -> god_stu << endl;

cout << "---------------------" << endl;

break; // izlaz iz petlje

};//if

tekuci = tekuci -> sljedeci; // kretanje kroz listu

}; // while

if (!nadjen) cout<<"Element nije pronadjen u listi!"<<endl;

};//pretrazi_listu

void brisi_element(int mat_br){ //brisanje elementa liste prema matičnom broju

int nadjen=0;

Page 9: Skripta Programiranje 2 - labosi

Programiranje 2 Skripta – Vincijanović Danijel

8

cstudent *brisi = this -> sljedeci, *prethodni = this;

while (brisi){

if (brisi -> mat_br == mat_br){

nadjen=1;

prethodni -> sljedeci = brisi -> sljedeci;

delete brisi;

break; // izlaz iz petlje

}; // if

prethodni = brisi;

brisi = brisi->sljedeci;

}; // while

if (nadjen) cout << "Element je izbrisan iz liste!" << endl;

else cout << "Element nije pronadjen!" << endl;

};//brisi element

void sortiraj_listu(){ //sortiranje liste uzlazno po matičnom broju

if (this->sljedeci==NULL) return; // izlaz ako je lista prazna

cstudent *prethodni,*tekuci,*sljedeci;

int indikator;

do{

indikator = 0;

tekuci=this->sljedeci;

prethodni=this;

while (tekuci->sljedeci){

sljedeci=tekuci->sljedeci;

if (tekuci->mat_br > sljedeci->mat_br){

prethodni->sljedeci=sljedeci;

tekuci->sljedeci=sljedeci->sljedeci;

sljedeci->sljedeci=tekuci;

indikator=1;

}//if

prethodni=prethodni->sljedeci;

tekuci=prethodni->sljedeci;

}//while

} while (indikator==1);

}; // sortiraj listu

cstudent *dealokacija_liste(){ //dealokacija liste

cstudent *tekuci,*prethodni;

prethodni=this;

tekuci=this->sljedeci;

while (tekuci){

delete prethodni;

prethodni=tekuci;

tekuci=tekuci->sljedeci;

}//while

delete prethodni;

return NULL;

};//dealokacija_liste

};//class

cstudent *lista;

int main(){

int izbor, mat_br;

lista=new cstudent; //alokacija glave liste

do{

cout << "1. dodavanje novog elementa na kraj liste" << endl;

cout << "2. ispis svih elemenata liste" << endl;

cout << "3. pretrazivanje liste prema maticnom broju" << endl;

cout << "4. brisanje elementa liste prema maticnom broju" << endl;

cout << "5. sortiranje liste prema maticnom broju uzlazno" << endl;

cout << "9. dealokacija liste i izlaz" << endl;

cin >> izbor;

switch (izbor){

case 1:lista->dodaj_element();break;

case 2:lista->ispisi_sve_elemente();break;

case 3:

cout << "Maticni broj: "; cin >> mat_br;

lista->pretrazi_listu(mat_br);break;

case 4:

Page 10: Skripta Programiranje 2 - labosi

Programiranje 2 Skripta – Vincijanović Danijel

9

cout << "Maticni broj: "; cin >> mat_br;

lista->brisi_element(mat_br);break;

case 5:lista->sortiraj_listu();break;

case 9:lista=lista->dealokacija_liste();break;

};

} while (izbor!=9);

}//main

5. Primjer (vezana / datoteka) #include<iostream>

#include<fstream>

using namespace std;

class cstudent{

private:

cstudent *sljedeci;

public:

int mat_br;

char prez_ime[40];

cstudent(){

sljedeci=NULL;

}; // konstruktor

void unos(){

cstudent *zadnji, *novi;

zadnji=this;

while (zadnji->sljedeci)

zadnji=zadnji->sljedeci;

novi = new cstudent;

zadnji->sljedeci=novi;

cout << "Maticni broj:";

cin >> novi -> mat_br;

cout << "Prezime i ime:";

cin >> novi->prez_ime;

}; // unos

void ispis(){

cstudent *tekuci=this->sljedeci;

while (tekuci){

cout << tekuci->mat_br << endl;

cout << tekuci->prez_ime<<endl;

tekuci=tekuci->sljedeci;

};

}; // ispis

int provjeri(int mb){

cstudent *tekuci=this->sljedeci;

while (tekuci){

if (tekuci->mat_br==mb) return 1;

tekuci=tekuci->sljedeci;

};

return 0;

}; // provjeri

void ukupno(){

int brojac=0;

cstudent *tekuci=this->sljedeci;

while (tekuci){

brojac++;

tekuci=tekuci->sljedeci;

};

cout << "Ukupan broj studenata = " << brojac << endl;

}; // ispis

void broj_prijava();

};//cstudent

fstream dat;

cstudent *student;

class cprijava{

public:

int sif_prij;

int mat_br;

Page 11: Skripta Programiranje 2 - labosi

Programiranje 2 Skripta – Vincijanović Danijel

10

char predmet[30];

char rok[20];

cprijava(){

dat.open("prijave.dat", ios::out);

dat.close();

dat.clear();

} // cprijava

void unos(){

dat.open("prijave.dat", ios::out|ios::app|ios::binary);

cout << "Sifra prijave:";

cin >> sif_prij;

do{

cout << "Maticni_broj:";

cin >> mat_br;

}while(student->provjeri(mat_br)==0);

cout << "Predmet:";

cin >> predmet;

cout << "Rok:";

cin >> rok;

dat.write((char *)this,sizeof(*this));

dat.close(); dat.clear();

}; // unos

void ispis(){

dat.open("prijave.dat", ios::in|ios::binary);

while(1){

dat.read ((char *)this,sizeof(*this));

if (dat.eof())break;

cout << sif_prij << endl;

cout << mat_br << endl;

cout << predmet << endl;

cout << rok << endl;

}

dat.close(); dat.clear();

}; // ispis

void ukupno(){

int brojac=0;

dat.open("prijave.dat", ios::in|ios::binary);

while(1){

dat.read ((char *)this,sizeof(*this));

if (dat.eof())break;

brojac++;

}

dat.close(); dat.clear();

cout << "Ukupan broj prijava = " << brojac << endl;

}; // ispis

void trazi(int mb){

dat.open("prijave.dat", ios::in|ios::binary);

while(1){

dat.read ((char *)this,sizeof(*this));

if (dat.eof())break;

if (mat_br==mb){

cout << sif_prij << endl;

cout << mat_br << endl;

cout << predmet << endl;

cout << rok << endl;

}

}

dat.close(); dat.clear();

}; // ispis

};//cprijava

cprijava prijava;

void cstudent::broj_prijava(){

cstudent *tekuci=this->sljedeci;

int brojac;

while (tekuci){

cout << tekuci->mat_br << endl;

cout << tekuci->prez_ime<<endl;

Page 12: Skripta Programiranje 2 - labosi

Programiranje 2 Skripta – Vincijanović Danijel

11

brojac=0;

dat.open("prijave.dat", ios::in|ios::binary);

while(1){

dat.read ((char *)&prijava,sizeof(prijava));

if (dat.eof())break;

if (prijava.mat_br==tekuci->mat_br)brojac++;

}

dat.close(); dat.clear();

cout << "Broj_prijava:" << brojac << endl;

tekuci=tekuci->sljedeci;

};

}; // broj_prijava

int main(){

int izbor,mat_br;

student = new cstudent;

do{

cout << "1. Unos studenata" << endl;

cout << "2. Ispis studenata" << endl;

cout << "3. Unos prijava" << endl;

cout << "4. Ispis prijava" << endl;

cout << "5. Ukupan broj studenata i prijava" << endl;

cout << "6. Prijave zadanog studenta" << endl;

cout << "7. Studenti s brojem prijava" << endl;

cout << "9. Izlaz" << endl;

cin >> izbor;

switch (izbor){

case 1: student->unos();break;

case 2: student->ispis();break;

case 3: prijava.unos();break;

case 4: prijava.ispis();break;

case 5: student->ukupno();

prijava.ukupno();break;

case 6: cout << "Maticni broj:";cin >> mat_br;

prijava.trazi(mat_br);break;

case 7: student->broj_prijava();break;

} // switch

}while (izbor!=9);

return 0;

}

6. Primjer (datoteka / vezana) #include<iostream>

#include<fstream>

using namespace std;

fstream dat;

class cstudent{

public:

int mat_br;

char prezime[35];

cstudent(){

dat.open ("studenti.dat", ios::in);

if (!dat){

dat.open ("studenti.dat", ios::out);

dat.close();

dat.clear();

}

};

void unos(){

dat.open ("studenti.dat", ios::out | ios::app | ios::binary);

cout << "\nMaticni broj: ";

Page 13: Skripta Programiranje 2 - labosi

Programiranje 2 Skripta – Vincijanović Danijel

12

cin >> mat_br;

cout << "Prezime i ime: ";

cin >> prezime;

dat.write ((char *) this, sizeof(*this));

dat.close();

dat.clear();

};

void ispis(){

dat.open ("studenti.dat", ios::in | ios::binary);

while (1){

dat.read ((char *) this, sizeof(*this));

if (dat.eof()) break;

cout << "\n\nMaticni broj: " << mat_br;

cout << "\nPrezime i ime: " << prezime;

}

dat.close();

dat.clear();

};

bool postoji(int matbr){

dat.open ("studenti.dat", ios::in | ios::binary);

while (1){

dat.read ((char *) this, sizeof(*this));

if (dat.eof()) break;

if (mat_br==matbr){

dat.close();

dat.clear();

return false;

}

}

dat.close();

dat.clear();

return true;

};

};

cstudent student;

class cprijava{

private:

cprijava *sljedeci;

public:

int sifra, mat_br;

char predmet[35], rok[10];

cprijava(){

sljedeci=NULL;

};

void unos(){

cprijava *novi, *zadnji;

zadnji=this;

while (zadnji->sljedeci)

zadnji=zadnji->sljedeci;

novi=new cprijava;

zadnji->sljedeci=novi;

cout << "\nSifra: ";

cin >> novi->sifra;

do {

cout << "Maticni broj: ";

cin >> novi->mat_br;

} while (student.postoji(novi->mat_br));

cout << "Predmet: ";

cin >> novi->predmet;

cout << "Rok: ";

cin >> novi->rok;

};

void ispis(){

cprijava *tekuci=this->sljedeci;

Page 14: Skripta Programiranje 2 - labosi

Programiranje 2 Skripta – Vincijanović Danijel

13

while (tekuci){

cout << "\n\nSifra: " << tekuci->sifra;

cout << "\nMaticni broj: " << tekuci->mat_br;

cout << "\nPredmet: " << tekuci->predmet;

cout << "\nRok: " << tekuci->rok;

tekuci=tekuci->sljedeci;

};

};

void ispis_prijava(int matbr){

bool nadjen=false;

cprijava *tekuci=this->sljedeci;

while (tekuci){

if (tekuci->mat_br==matbr){

nadjen=true;

cout << "\n\nSifra: " << tekuci->sifra;

cout << "\nMaticni broj: " << tekuci->mat_br;

cout << "\nPredmet: " << tekuci->predmet;

cout << "\nRok: " << tekuci->rok;

}

tekuci=tekuci->sljedeci;

};

if(!nadjen) cout << "\nNema prijava!\n";

};

void br_prijava();

};

cprijava *prijava;

void cprijava::br_prijava(){

int broj;

dat.open ("studenti.dat", ios::in | ios::binary);

while (1){

dat.read ((char *) &student, sizeof(student));

if (dat.eof()) break;

cout << "\n\nMaticni broj: " << student.mat_br;

cout << "\nPrezime i ime: " << student.prezime;

broj=0;

cprijava *tekuci=this->sljedeci;

while (tekuci){

if (tekuci->mat_br==student.mat_br) broj++;

tekuci=tekuci->sljedeci;

};

cout << "\nBroj prijava: " << broj << endl;

}

dat.close();

dat.clear();

};

int main(){

int izbor, br;

prijava=new cprijava;

do {

cout << "\n\nIzbornik ";

cout << "\n1. Unos studenata ";

cout << "\n2. Ispis studenata ";

cout << "\n3. Unos prijava ";

cout << "\n4. Ispis prijava ";

cout << "\n5. Ispis svih prijava zadanog studenta ";

cout << "\n6. Popis studenata s brojem prijava ";

cout << "\n7. Izlaz iz programa ";

cout << "\nVas izbor: ";

cin >> izbor;

switch (izbor){

case 1:

student.unos();

break;

case 2:

Page 15: Skripta Programiranje 2 - labosi

Programiranje 2 Skripta – Vincijanović Danijel

14

student.ispis();

break;

case 3:

prijava->unos();

break;

case 4:

prijava->ispis();

break;

case 5:

cout << "\nUnesite maticni broj studenta: ";

cin >> br;

prijava->ispis_prijava(br);

break;

case 6:

prijava->br_prijava();

break;

case 7:

cout << "\nIzlaz iz programa\n";

break;

}

} while (izbor!=7);

system("pause");

return 0;

}

7. Primjer (datoteka / dinamicko) #include<iostream>

#include<fstream>

using namespace std;

int brojac=0;

bool nadjen;

fstream dat;

class cstudent {

public:

int mat_br;

char prezime[40];

cstudent(){

dat.open("studenti.dat",ios::in);

if (!dat) {

dat.open("studenti.dat", ios::out);

dat.close();

dat.clear();

}

};

void unos(){

dat.open("studenti.dat", ios::out | ios::app | ios::binary);

cout << "\nMaticni broj: ";

cin >> mat_br;

cin.ignore();

cout << "Prezime i ime: ";

cin.getline(prezime, 40);

dat.write((char *) this, sizeof(*this));

dat.close();

dat.clear();

};

void ispis(){

dat.open("studenti.dat", ios::in | ios::binary);

while (1){

dat.read((char *) this, sizeof(*this));

if (dat.eof()) break;

cout << "\n\nMaticni broj: " << mat_br;

cout << "\nPrezime i ime: " << prezime;

};

Page 16: Skripta Programiranje 2 - labosi

Programiranje 2 Skripta – Vincijanović Danijel

15

dat.clear();

dat.close();

};

bool postoji(int matbr){

dat.open("studenti.dat", ios::in | ios::binary);

while (1){

dat.read((char *) this, sizeof(*this));

if (dat.eof()) break;

if (mat_br==matbr){

dat.close();

dat.clear();

return false;

}

};

dat.clear();

dat.close();

return true;

};

};

cstudent student;

class cprijave{

public:

int sifra, mat_br;

char predmet[35], rok[20];

void unos(){

cout << "\nSifra: ";

cin >> sifra;

do {

cout << "Maticni broj: ";

cin >> mat_br;

} while (student.postoji(mat_br));

cin.ignore();

cout << "Predmet: ";

cin.getline(predmet, 35);

cout << "Rok: ";

cin.getline(rok, 20);

};

void ispis(){

cout << "\n\nSifra: " << sifra;

cout << "\nMaticni broj: " << mat_br;

cout << "\nPredmet: " << predmet;

cout << "\nRok: " << rok;

};

void ispis_prijava(int matbr){

if (mat_br==matbr){

cout << "\n\nSifra: " << sifra;

cout << "\nMaticni broj: " << mat_br;

cout << "\nPredmet: " << predmet;

cout << "\nRok: " << rok;

nadjen=true;

}

};

void br_prijava();

};

cprijave *prijave;

void cprijave::br_prijava(){

int broj;

dat.open ("studenti.dat", ios::in | ios::binary);

while (1){

dat.read((char *) &student, sizeof(student));

if (dat.eof()) break;

cout << "\n\nMaticni broj: " << student.mat_br;

cout << "\nPrezime i ime: " << student.prezime;

Page 17: Skripta Programiranje 2 - labosi

Programiranje 2 Skripta – Vincijanović Danijel

16

broj=0;

for (int i=0; i<brojac; i++){

if (student.mat_br==prijave[i].mat_br) broj++;

}

cout << "\nBroj prijava: " << broj << endl;

};

dat.clear();

dat.close();

};

int main(){

int izbor, br, n;

cout << "Koliko zelite unijeti prijava: ";

cin >> n;

prijave=new cprijave[n];

do {

cout << "\n\nIzbornik: ";

cout << "\n1. Upis studenata";

cout << "\n2. Ispis svih studenata";

cout << "\n3. Upis prijava";

cout << "\n4. Ispis svih prijava";

cout << "\n5. Ispis svih prijava zadanog studenta";

cout << "\n6. Popis studenata s brojem prijava";

cout << "\n7. Izlaz iz programa";

cout << "\nVas izbor: ";

cin >> izbor;

switch (izbor){

case 1:

student.unos();

break;

case 2:

student.ispis();

break;

case 3:

prijave[brojac].unos();

brojac++;

break;

case 4:

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

prijave[i].ispis();

break;

case 5:

nadjen=false;

cout << "Unesite maticni broj studenta: ";

cin >> br;

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

prijave[i].ispis_prijava(br);

if (!nadjen) cout << "\nNema prijave\n";

break;

case 6:

prijave[brojac].br_prijava();

break;

case 7:

break;

default:

cout << "\nKrivi izbor!\n";

break;

};

} while (izbor!=7);

system("pause");

return 0;

}

Page 18: Skripta Programiranje 2 - labosi

Programiranje 2 Skripta – Vincijanović Danijel

17

8. Primjer (Dinamičko / Datoteka) #include<iostream>

#include<fstream>

using namespace std;

int brojac=0;

class cstudent {

public:

int mat_br;

char prezime[40];

void unos(){

cout << "\nMaticni broj: ";

cin >> mat_br;

cin.ignore();

cout << "Prezime i ime: ";

cin.getline(prezime, 40);

};

void ispis(){

cout << "\n\nMaticni broj: " << mat_br;

cout << "\nPrezime i ime: " << prezime;

};

void br_prijava();

};

cstudent *student;

int provjera(int matbr){

for (int i=0; i<brojac; i++){

if (student[i].mat_br==matbr) return 1;

}

return 0;

};

fstream dat;

class cprijave{

public:

int sifra, mat_br;

char predmet[35], rok[10];

cprijave(){

dat.open ("prijave.dat", ios::in);

if (!dat){

dat.open ("prijave.dat", ios::out);

dat.close();

dat.clear();

}

};

void unos(){

dat.open ("prijave.dat", ios::out | ios::app | ios::binary);

cout << "\nSifra: ";

cin >> sifra;

do {

cout << "Maticni broj: ";

cin >> mat_br;

} while(provjera(mat_br)==0);

cin.ignore();

cout << "Predmet: ";

cin.getline(predmet, 35);

cout << "Rok: ";

cin.getline(rok, 10);

dat.write ((char *) this, sizeof(*this));

dat.close();

dat.clear();

};

void ispis(){

Page 19: Skripta Programiranje 2 - labosi

Programiranje 2 Skripta – Vincijanović Danijel

18

dat.open ("prijave.dat", ios::in | ios::binary);

while (1){

dat.read ((char *) this, sizeof(*this));

if (dat.eof()) break;

cout << "\n\nSifra: " << sifra;

cout << "\nMaticni broj: " << mat_br;

cout << "\nPredmet: " << predmet;

cout << "\nRok: " << rok;

}

dat.close();

dat.clear();

};

void ispis_prijava(int matbr){

bool nadjen=false;

dat.open ("prijave.dat", ios::in | ios::binary);

while (1){

dat.read ((char *) this, sizeof(*this));

if (dat.eof()) break;

if (mat_br==matbr){

nadjen=true;

cout << "\n\nSifra: " << sifra;

cout << "\nMaticni broj: " << mat_br;

cout << "\nPredmet: " << predmet;

cout << "\nRok: " << rok;

}

}

if (!nadjen) cout << "\nNema prijave\n";

dat.close();

dat.clear();

};

//void br_prijava();

};

cprijave prijave;

void cstudent::br_prijava(){

int broj;

for (int i=0; i<brojac; i++){

cout << "\n\nMaticni broj: " << student[i].mat_br;

cout << "\nPrezime i ime: " << student[i].prezime;

broj=0;

dat.open ("prijave.dat", ios::in | ios::binary);

while (1){

dat.read ((char *) &prijave, sizeof(prijave));

if (dat.eof()) break;

if (student[i].mat_br==prijave.mat_br) broj++;

}

dat.close();

dat.clear();

cout << "\nBroj prijava: " << broj << endl;

}

};

int main(){

int izbor, n, br;

cout << "Koliko zelite unijeti studenata: ";

cin >> n;

student=new cstudent[0];

do {

cout << "\n\nIzbornik: ";

cout << "\n1. Upis studenata";

cout << "\n2. Ispis svih studenata";

cout << "\n3. Upis prijava";

cout << "\n4. Ispis svih prijava";

cout << "\n5. Ispis svih prijava zadanog studenta";

cout << "\n6. Popis studenata s brojem prijava";

cout << "\n7. Izlaz iz programa";

Page 20: Skripta Programiranje 2 - labosi

Programiranje 2 Skripta – Vincijanović Danijel

19

cout << "\nVas izbor: ";

cin >> izbor;

switch (izbor){

case 1:

student[brojac].unos();

brojac++;

break;

case 2:

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

student[i].ispis();

break;

case 3:

prijave.unos();

break;

case 4:

prijave.ispis();

break;

case 5:

cout << "Unesite maticni broj studenta: ";

cin >> br;

prijave.ispis_prijava(br);

break;

case 6:

student[brojac].br_prijava();

break;

case 7:

break;

default:

cout << "\nKrivi izbor!\n";

break;

};

} while (izbor!=7);

system("pause");

return 0;

}

9. Primjer (Dinamičko / Vezana) #include<iostream>

using namespace std;

int brojac=0;

class cstudent{

public:

int mat_br;

char prezime[35];

void unos(){

cout << "\nMaticni broj: ";

cin >> mat_br;

cin.ignore();

cout << "Prezime i ime: ";

cin.getline(prezime, 35);

};

void ispis(){

cout << "\n\nMaticni broj: " << mat_br;

cout << "\nPrezime i ime: " << prezime;

};

};

cstudent *student;

int provjera(int matbr){

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

if (student[i].mat_br==matbr)return 1;

return 0;

Page 21: Skripta Programiranje 2 - labosi

Programiranje 2 Skripta – Vincijanović Danijel

20

};

class cprijava{

private:

cprijava *sljedeci;

public:

int sifra, mat_br;

char predmet[35], rok[10];

cprijava(){

sljedeci=NULL;

};

void unos(){

cprijava *novi, *zadnji;

zadnji=this;

while (zadnji->sljedeci)

zadnji=zadnji->sljedeci;

novi=new cprijava;

zadnji->sljedeci=novi;

cout << "\nSifra prijave: ";

cin >> novi->sifra;

do {

cout << "Maticni broj: ";

cin >> novi->mat_br;

} while (provjera(novi->mat_br)==0);

cout << "Predmet: ";

cin >> novi->predmet;

cout << "Rok: ";

cin >> novi->rok;

};

void ispis(){

cprijava *tekuci=this->sljedeci;

while (tekuci){

cout << "\n\nSifra prijave: " << tekuci->sifra;

cout << "\nMaticni broj: " << tekuci->mat_br;

cout << "\nPredmet: " << tekuci->predmet;

cout << "\nRok: " << tekuci->rok;

tekuci=tekuci->sljedeci;

}

};

void ispis_prijava(int matbr){

bool nadjen=false;

cprijava *tekuci=this->sljedeci;

while (tekuci){

if (tekuci->mat_br==matbr){

nadjen=true;

cout << "\n\nSifra prijave: " << tekuci->sifra;

cout << "\nMaticni broj: " << tekuci->mat_br;

cout << "\nPredmet: " << tekuci->predmet;

cout << "\nRok: " << tekuci->rok;

}

tekuci=tekuci->sljedeci;

}

if(!nadjen) cout << "\nNema prijava!\n";

}

void br_prijava();

};

cprijava *prijava;

void cprijava::br_prijava(){

int broj;

for (int i=0; i<brojac; i++){

cout << "\n\nMaticni broj: " << student[i].mat_br;

cout << "\nPrezime i ime: " << student[i].prezime;

broj=0;

cprijava *tekuci=this->sljedeci;

while (tekuci){

Page 22: Skripta Programiranje 2 - labosi

Programiranje 2 Skripta – Vincijanović Danijel

21

if (tekuci->mat_br==student[i].mat_br) broj++;

tekuci=tekuci->sljedeci;

}

cout << "\nBroj prijava: " << broj;

}

};

int main(){

int izbor, n, br;

cout << "Koliko studenata: ";

cin >> n;

student=new cstudent[n];

prijava=new cprijava;

do {

cout << "\n\nIzbornik: ";

cout << "\n1. Upis studenata";

cout << "\n2. Ispis svih studenata";

cout << "\n3. Upis prijava";

cout << "\n4. Ispis svih prijava";

cout << "\n5. Ispis svih prijava zadanog studenta";

cout << "\n6. Popis studenata s brojem prijava";

cout << "\n7. Izlaz iz programa";

cout << "\nVas izbor: ";

cin >> izbor;

switch (izbor){

case 1:

student[brojac].unos();

brojac++;

break;

case 2:

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

student[i].ispis();

break;

case 3:

prijava->unos();

break;

case 4:

prijava->ispis();

break;

case 5:

cout << "Unesite maticni broj studenta: ";

cin >> br;

prijava->ispis_prijava(br);

break;

case 6:

prijava->br_prijava();

break;

case 7:

cout << "\nIzlaz iz programa\n";

break;

default:

cout << "\nKrivi izbor!\n";

break;

};

} while(izbor!=7);

system("pause");

return 0;

}

Page 23: Skripta Programiranje 2 - labosi

Programiranje 2 Skripta – Vincijanović Danijel

22

10. Primjer (Vezana / Dinamičko) #include<iostream>

using namespace std;

int brojac=0;

bool nadjen;

class cstudent{

private:

cstudent *sljedeci;

public:

int mat_br;

char prezime[35];

cstudent(){

sljedeci=NULL;

};

void unos(){

cstudent *novi, *zadnji;

zadnji=this;

while (zadnji->sljedeci)

zadnji=zadnji->sljedeci;

novi=new cstudent;

zadnji->sljedeci=novi;

cout << "\nMaticni broj: ";

cin >> novi->mat_br;

cout << "Prezime i ime: ";

cin >> novi->prezime;

};

void ispis(){

cstudent *tekuci=this->sljedeci;

while (tekuci){

cout << "\n\nMaticni broj: " << tekuci->mat_br;

cout << "\nPrezime i ime: " << tekuci->prezime;

tekuci=tekuci->sljedeci;

}

};

bool provjera(int matbr){

cstudent *tekuci=this->sljedeci;

while (tekuci){

if (tekuci->mat_br==matbr) return false;

tekuci=tekuci->sljedeci;

}

return true;

};

void br_prijava();

};

cstudent *student;

class cprijava{

public:

int sifra, mat_br;

char predmet[35], rok[10];

void unos(){

cout << "\nSifra prijave: ";

cin >> sifra;

do {

cout << "Maticni broj: ";

cin >> mat_br;

} while (student->provjera(mat_br));

cin.ignore();

cout << "Predmet: ";

cin.getline (predmet, 35);

cout << "Rok: ";

cin.getline (rok, 10);

};

Page 24: Skripta Programiranje 2 - labosi

Programiranje 2 Skripta – Vincijanović Danijel

23

void ispis(){

cout << "\n\nSifra prijave: " << sifra;

cout << "\nMaticni broj: " << mat_br;

cout << "\nPredmet: " << predmet;

cout << "\nRok: " << rok;

};

void ispis_prijava(int matbr){

if (mat_br==matbr){

cout << "\n\nSifra prijave: " << sifra;

cout << "\nMaticni broj: " << mat_br;

cout << "\nPredmet: " << predmet;

cout << "\nRok: " << rok;

nadjen=true;

}

};

};

cprijava *prijava;

void cstudent::br_prijava(){

int broj;

cstudent *tekuci=this->sljedeci;

while (tekuci){

cout << "\n\nMaticni broj: " << tekuci->mat_br;

cout << "\nPrezime i ime: " << tekuci->prezime;

broj=0;

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

if (tekuci->mat_br==prijava[i].mat_br)

broj++;

cout << "\nBroj prijava: " << broj << endl;

tekuci=tekuci->sljedeci;

}

};

int main(){

int izbor, n, br;

cout << "Koliko prijava: ";

cin >> n;

prijava=new cprijava[n];

student=new cstudent;

do {

cout << "\n\nIzbornik: ";

cout << "\n1. Upis studenata";

cout << "\n2. Ispis svih studenata";

cout << "\n3. Upis prijava";

cout << "\n4. Ispis svih prijava";

cout << "\n5. Ispis svih prijava zadanog studenta";

cout << "\n6. Popis studenata s brojem prijava";

cout << "\n7. Izlaz iz programa";

cout << "\nVas izbor: ";

cin >> izbor;

switch (izbor){

case 1:

student->unos();

break;

case 2:

student->ispis();

break;

case 3:

prijava[brojac].unos();

brojac++;

break;

case 4:

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

prijava[i].ispis();

break;

case 5:

Page 25: Skripta Programiranje 2 - labosi

Programiranje 2 Skripta – Vincijanović Danijel

24

cout << "Unesite maticni broj studenta: ";

cin >> br;

nadjen=false;

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

prijava[i].ispis_prijava(br);

if (!nadjen) cout << "\nNema prijava!\n";

break;

case 6:

student->br_prijava();

break;

case 7:

cout << "\nIzlaz iz programa\n";

break;

default:

cout << "\nKrivi izbor!\n";

break;

};

} while(izbor!=7);

system("pause");

return 0;

}