/ Published in: C++
Program za kolegij Strukture podataka
Expand |
Embed | Plain Text
#include <iostream> #include "lista_polje.h" //#include "lista_pokazivaci.h" using namespace std; int sifra=1; int dodaj_ziv(lista *lis) { int provjera=0; ziv new_ziv; cout<<"Unesi ime zivotinje: "; cin>>new_ziv.naziv; cout<<"Unesi vrstu: "; cin>>new_ziv.vrsta; do{ cout<<"Oprezno pri unosu datuma, unos datuma se ponavlja sve dok ne unesete valjani datum!"<<endl; cout<<"Unesite dan u rasponu 0-31 (DD): "; cin>>new_ziv.datum[0]; cout<<"Unesite mjesec 0-12 (MM): "; cin>>new_ziv.datum[1]; cout<<"Unesite godinu (GGGG): "; cin>>new_ziv.datum[2]; }while(!((new_ziv.datum[0]>0 && new_ziv.datum[0]<=31)&&(new_ziv.datum[1]>0 && new_ziv.datum[1]<=12) &&(new_ziv.datum[2]>=1000 && new_ziv.datum[2]<=2020))); cout<<"Unesi cijenu: "; cin>>new_ziv.cijena; new_ziv.sifra=sifra; provjera=InsertL(new_ziv, EndL(lis), lis); if (provjera==1){ ++sifra; cout<<"Element je dodan u listu!"<<endl; return 1;} else return 0; } void ispis_last_ziv(lista *lis) { ziv last_ziv; element tekuci=EndL(lis); if (FirstL(lis)==EndL(lis)){ cout<<"Prazna lista."<<endl; return; } do { tekuci=PreviousL(tekuci, lis); last_ziv=RetrieveL(tekuci,lis); cout<<"_______________________________"<<endl; cout<<"Sifra zivotinje: "<<last_ziv.sifra<<endl; cout<<"Ime zivotinje: "<<last_ziv.naziv<<endl; cout<<"Vrsta zivotinje: "<<last_ziv.vrsta<<endl; cout<<"Datum: "<<last_ziv.datum[0]<<"."<<last_ziv.datum[1]<<"."<<last_ziv.datum[2]<<"."<<endl; cout<<"Cijena: "<<last_ziv.cijena<<endl<<endl<<endl; }while (last_ziv.sifra != RetrieveL(FirstL(lis),lis).sifra); } void pretraga_datum(lista *lis) { int brojac=0; if (FirstL(lis)==EndL(lis)) { cout<<"Prazna lista."<<endl; return; } ziv zivotinja; element tekuci=FirstL(lis); while (tekuci!=EndL(lis)) { zivotinja=RetrieveL(tekuci, lis); if ((zivotinja.datum[2]>2012)||((zivotinja.datum[2]==2012)&&(zivotinja.datum[1]>9)) ||((zivotinja.datum[2]==2012)&&(zivotinja.datum[1]==9)&&(zivotinja.datum[0]>23))){ cout<<"_______________________________"<<endl; cout<<"Sifra zivotinje: "<<zivotinja.sifra<<endl; cout<<"Ime zivotinje: "<<zivotinja.naziv<<endl; cout<<"Vrsta: "<<zivotinja.vrsta<<endl; cout<<"Datum: "<<zivotinja.datum[0]<<"."<<zivotinja.datum[1] <<"."<<zivotinja.datum[2]<<"."<< endl;cout<<"Cijena: "<<zivotinja.cijena<<endl; brojac++; } tekuci=NextL(tekuci, lis); } cout<<"Poslije 23.09.2012. dostavljeno je: "<<brojac<<" zivotinja."<<endl; } int brisanje_naziv(lista *lis) { if (FirstL(lis)==EndL(lis)) { cout<<"Prazna lista."<<endl; return 0; } string naziv; cout<<"Unesite naziv zivotinje koju zelite obrisati: "; cin>>naziv; ziv zivotinja; element tekuci=FirstL(lis); while(tekuci!=EndL(lis)){ zivotinja=RetrieveL(tekuci,lis); if (zivotinja.naziv==naziv) { DeleteL(LocateL(zivotinja, lis),lis); tekuci=FirstL(lis); cout<<"OBRISANO"<<endl; } else { tekuci=NextL(tekuci,lis); } } return 1; } int brisanje_vrsta(lista *lis) { if (FirstL(lis)==EndL(lis)) { cout<<"Prazna lista. "<<endl; return 0; } string naziv; cout<<"Vrsta zivotinje za brisanje: "; cin>>naziv; ziv zivotinja; element tekuci=FirstL(lis); element za_brisanje; while(tekuci!=EndL(lis)){ zivotinja=RetrieveL(tekuci, lis); if (zivotinja.vrsta==naziv){ za_brisanje=tekuci; DeleteL(za_brisanje, lis); tekuci=FirstL(lis); } else { tekuci=NextL(tekuci, lis); } } return 1; } void mergesort_po_nazivu(ziv polje[], int lijevi, int desni) { int sredina = (lijevi + desni) / 2; ziv temp; if (desni - lijevi == 1) { if (polje[desni].naziv > polje[lijevi].naziv) { temp = polje[desni]; polje[desni] = polje[lijevi]; polje[lijevi] = temp; return; } } else if (desni == lijevi) { return; } else { mergesort_po_nazivu(polje, lijevi, sredina); mergesort_po_nazivu(polje, sredina +1, desni); int size_pomocno = desni-lijevi +1; ziv *polje_pomocno = new ziv[size_pomocno]; int l = lijevi; int s = sredina +1; for (int i = 0; i < size_pomocno; i++) { if (l == sredina+1) { polje_pomocno[i] = polje[s]; s++; continue; } if (s == desni +1) { polje_pomocno[i] = polje[l]; l++; continue; } if (polje[l].naziv > polje[s].naziv) { polje_pomocno[i] = polje[l]; l++; } else { polje_pomocno[i] = polje[s]; s++; } } int j = 0; for (int i = lijevi; i <= desni; i++) { polje[i] = polje_pomocno[j]; j++; } } } void mergesort_po_cijeni(ziv polje[], int lijevi, int desni) { int sredina = (lijevi + desni) / 2; ziv temp; if (desni - lijevi == 1) { if (polje[desni].cijena > polje[lijevi].cijena) { temp = polje[desni]; polje[desni] = polje[lijevi]; polje[lijevi] = temp; return; } } else if (desni == lijevi) { return; } else { mergesort_po_cijeni(polje, lijevi, sredina); mergesort_po_cijeni(polje, sredina +1, desni); int size_pomocno = desni-lijevi +1; ziv *polje_pomocno = new ziv[size_pomocno]; int l = lijevi; int s = sredina +1; for (int i = 0; i < size_pomocno; i++) { if (l == sredina+1) { polje_pomocno[i] = polje[s]; s++; continue; } if (s == desni +1) { polje_pomocno[i] = polje[l]; l++; continue; } if (polje[l].cijena > polje[s].cijena) { polje_pomocno[i] = polje[l]; l++; } else { polje_pomocno[i] = polje[s]; s++; } } int j = 0; for (int i = lijevi; i <= desni; i++) { polje[i] = polje_pomocno[j]; j++; } } } void d(lista *lis) { int n = 0; element temp = FirstL(lis); while (temp != EndL(lis)) { ++n; temp = NextL(temp, lis); } ziv *polje = new ziv[n]; temp = FirstL(lis); for (int i = 0; temp != EndL(lis); i++) { polje[i] = RetrieveL(temp, lis); temp = NextL(temp, lis); } cout << "Sortiramo po nazivu." << endl; mergesort_po_nazivu(polje, 0, n-1); for (int i = 0; i < n; i++) { cout<<"_______________________________"<<endl; cout<<"Sifra zivotinje: "<<polje[i].sifra<<endl; cout<<"Ime zivotinje: "<<polje[i].naziv<<endl; cout<<"Vrsta: "<<polje[i].vrsta<<endl; cout<<"Datum: "<<polje[i].datum[0]<<"."<<polje[i].datum[1]<<"."<<polje[i].datum[2]<<"."<< endl; cout<<"Cijena: "<<polje[i].cijena<<endl; } cout << endl; cout << "Sortiramo po cijeni." << endl; mergesort_po_cijeni(polje, 0, n-1); for (int i = 0; i < n; i++) { cout<<"_______________________________"<<endl; cout<<"Sifra zivotinje: "<<polje[i].sifra<<endl; cout<<"Ime zivotinje: "<<polje[i].naziv<<endl; cout<<"Vrsta: "<<polje[i].vrsta<<endl; cout<<"Datum: "<<polje[i].datum[0]<<"."<<polje[i].datum[1]<<"."<<polje[i].datum[2]<<"."<< endl; cout<<"Cijena: "<<polje[i].cijena<<endl; } cout << endl; DeleteAll(lis); for (int i = 0; i < n; i++) { InsertL(polje[i], EndL(lis), lis); } mergesort_po_cijeni(polje, 0, n-1); DeleteAll(lis); for (int i = 0; i < n; i++) { InsertL(polje[i], EndL(lis), lis); } } int main() { ziv a; a.sifra=sifra; a.naziv="Tara"; a.vrsta="pas"; a.datum[0]=23; a.datum[1]=10; a.datum[2]=2010; a.cijena=500; sifra++; lista popis; InitL(&popis); InsertL(a,EndL(&popis),&popis); a.sifra=sifra; a.naziv="Doga"; a.vrsta="pas"; a.datum[0]=23; a.datum[1]=10; a.datum[2]=2012; a.cijena=300; sifra++; InsertL(a,EndL(&popis),&popis); a.sifra=sifra; a.naziv="Pero"; a.vrsta="macka"; a.datum[0]=23; a.datum[1]=10; a.datum[2]=2012; a.cijena=100; sifra++; InsertL(a,EndL(&popis),&popis); a.sifra=sifra; a.naziv="Boni"; a.vrsta="pas"; a.datum[0]=23; a.datum[1]=10; a.datum[2]=2010; a.cijena=1000; sifra++; InsertL(a,EndL(&popis),&popis); a.sifra=sifra; a.naziv="Mica"; a.vrsta="macka"; a.datum[0]=23; a.datum[1]=10; a.datum[2]=2010; a.cijena=200; sifra++; InsertL(a,EndL(&popis),&popis); cout<<endl; int izb; do{ cout<<"\t\t\t===IZBORNIK==="<<endl; cout<<"1. Dodavanje zapisa u listu prema rastucoj sifri zivotinje."<<endl; cout<<"2. Ispis sadrzaja liste pocevsi od zadnje dodane zivotinje."<<endl; cout<<"3. Ispis svih zivotinja dostavljenih nakon 23.09.2012. godine,\n te ukupan broj takvih zivotinja."<<endl; cout<<"4. Brisanje pojedinacnih unosa prema nazivu zivotinje."<<endl; cout<<"5. Brisanje svih zivotinja odredene vrste."<<endl; cout<<"6. Sortiranje po nazivu i cijeni- silazno"<<endl; cout<<"9. Izlazak iz programa."<<endl; cout<<"______________________________________________________________"<<endl<<endl; cout<<"Vas odabir: "; cin>>izb; switch (izb){ case 1: { dodaj_ziv(&popis); ispis_last_ziv(&popis); break; } case 2:{ ispis_last_ziv(&popis); break; } case 3: { pretraga_datum(&popis); break; } case 4: { brisanje_naziv(&popis); break; } case 5: { brisanje_vrsta(&popis); break; } case 6: { d(&popis); break; } case 9: break; default: cout<<"Unijeli ste broj izvan raspona... Molimo vas obratite paznju na izbornik!"<<endl<<endl; } }while(izb!=9); system("pause"); return 0; }
Comments
Subscribe to comments
You need to login to post a comment.

Ovaj programski kod ima dosta sličnosti s mojim kodom no postoje i neke razlike. Razlikuju nam se funkcije u datotekama zaglavlja. Mogu reći da mi se kod sviđa zbog toga jer služi svojoj svrsi.