skripta programiranje 2 - labosi
DESCRIPTION
FOI predmet na 2. godini zimski semestar. Zadaci koji se vrte na zadnjem kolokviju.TRANSCRIPT
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
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
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
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;
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
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;
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;
}
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;
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:
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;
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;
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: ";
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;
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:
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;
};
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;
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;
}
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(){
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";
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;
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){
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;
}
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);
};
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:
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;
}