/ Published in: C++
realizacija zadatka 1 iz struktura podataka
Expand |
Embed | Plain Text
#include <iostream> #include <string> #include "lista_polje.h" //#include "lista_pokazivac.h" using namespace std; int dodaj(lista* l) { int sifra; char potvrdi='n'; zivotinja nova; if (!EndL(l)) sifra=1; else sifra = RetrieveL(PreviousL(EndL(l),l),l).sifra+1; nova.sifra=sifra; while(potvrdi=='n'){ cout<<"Naziv: "; cin.ignore(); cin.getline(nova.naziv,49,'\n'); cout<<"Vrsta: "; cin.getline(nova.vrsta,49,'\n'); cout<<"Cijena: "; cin>>nova.cijena; if(nova.cijena<0) return 0; cout<<"Datum dostave:\nDan: "; cin>>nova.datum.d; cout<<"Mjesec: "; cin>>nova.datum.m; cout<<"Godina: "; cin>>nova.datum.g; cout<<endl; if(nova.datum.d<1 || nova.datum.d>31 || nova.datum.m<1 || nova.datum.m>12 || nova.datum.g<1990) return 0; cout<<"Zelite upisati zivotinju:"<<endl; cout <<"Sifra: "<<nova.sifra << endl; cout <<"Naziv: "<< nova.naziv << endl; cout <<"Vrsta: "<< nova.vrsta<< endl; cout <<"Datum dostave: "<< nova.datum.d<<"." <<nova.datum.m <<"."<<nova.datum.g<<"."<<endl; cout<<"Potvrdi(d/n): "; cin>>potvrdi; cout<<endl; } InsertL(nova,EndL(l),l); return 1; } void pretrazi(lista* l) { int br=0; if(!EndL(l)) cout<<"Nema upisanih zivotinja!"<<endl<<endl; else { for(int i=FirstL(l); i<EndL(l); i++) { zivotinja z=RetrieveL(i,l); if((z.datum.g>=2012 && z.datum.m>=9 && z.datum.d>23) || (z.datum.g>=2012 && z.datum.m>=10) || (z.datum.g>2012)){ cout<<"Naziv: "<<z.naziv<<endl; cout<<"Vrsta: "<<z.vrsta<<endl; cout<<"Cijena: "<<z.cijena<<endl; cout<<"Datum dostave: "<<z.datum.d<<"."<<z.datum.m<<"."<<z.datum.g<<"."<<endl<<endl; br++; } } cout<<"Broj pronadenih zivotinja: "<<br<<endl<<endl; } } void ispis(lista* l) { if(!EndL(l)) cout <<"Nema upisanih zivotinja."<<endl<<endl; else { for(int i=EndL(l)-1; i>=FirstL(l); i--) { zivotinja z=RetrieveL(i,l); cout <<"Sifra: "<<z.sifra << endl; cout <<"Naziv: "<< z.naziv << endl; cout <<"Vrsta: "<< z.vrsta<< endl; cout <<"Datum dostave: "<< z.datum.d<<"." <<z.datum.m <<"."<<z.datum.g<<"."<<endl<<endl; } } } int izbrisi_naziv(lista* l) { if(!EndL(l)) return 0; char naziv[50]; cin.ignore(); cout<<"Unesi naziv: "; cin.getline(naziv,50,'\n'); for(int i=FirstL(l); i<EndL(l); i++) { zivotinja z=RetrieveL(i,l); if(strcmp(z.naziv,naziv)==0) { DeleteL(i,l); return 1; } }return 0; } int izbrisi_vrsta(lista* l) { if(!EndL(l)) return 0; char vrsta[50]; cin.ignore(); cout<<"Unesi vrstu: "; cin.getline(vrsta,50,'\n'); for(int i=FirstL(l); i<EndL(l); i++) { zivotinja z=RetrieveL(i,l); if(strcmp(z.vrsta,vrsta)==0) { DeleteL(i,l); return 1; } }return 0; } void spoji(zivotinja *polje,int donji,int sredina,int gornji){ int h,i,j,k; h=donji; i=donji; j=sredina+1; zivotinja *temp = new zivotinja[gornji-donji+1]; while((h<=sredina)&&(j<=gornji)){ if(polje[h].cijena>polje[j].cijena || ((polje[h].cijena==polje[j].cijena)&&(strcmp(polje[h].naziv, polje[j].naziv)>0))){ temp[i]=polje[h]; h++; }else{ temp[i]=polje[j]; j++; } i++; } if(h>sredina){ for(k=j; k<=gornji; k++){ temp[i]=polje[k]; i++; } }else{ for(k=h; k<=sredina; k++){ temp[i]=polje[k]; i++; } } for(k=donji; k<=gornji; k++) polje[k]=temp[k]; delete [] temp; } void mergesort(zivotinja *polje, int donji,int gornji ){ int sredina; if(donji<gornji){ sredina=(donji+gornji)/2; mergesort(polje,donji,sredina); mergesort(polje,sredina+1,gornji); spoji(polje,donji,sredina,gornji); } } void Merge_sort1(lista *l){ int br=0; for(int i=FirstL(l); i<EndL(l); i++){ i= NextL(i,l); br++; } zivotinja* polje = new zivotinja[br]; for(int i=FirstL(l); i<EndL(l); i++){ polje[i] = RetrieveL(i,l); i = NextL(i,l); } spoji(polje,0,br-1,0); DeleteAllL(l); l=NULL; l = InitL(l); for( int i = 0; i < br; i++){ InsertL(polje[i],EndL(l),l); zivotinja z = polje[i]; cout << "Sifra: " << z.sifra << endl; cout << "Naziv: " << z.naziv << endl; cout << "Vrsta: " << z.vrsta << endl; cout << "Cijena: " << z.cijena << endl; cout << "Datum dostave: " << z.datum.d<<"."<<z.datum.m << "."<<z.datum.g<<"."<<endl<<endl; } } int main() { lista* l=NULL; l=InitL(l); char izbor='1'; cout<<"DOBRODOSLI!"<<endl<<endl; cout<<"Unesite broj pored zeljene opcije"<<endl; cout<<"1 Upis nove zivotinje"<<endl; cout<<"2 Pretrazi zivotinje koje su dodane nakon 23. rujna 2012.g"<<endl; cout<<"3 Izbrisi zivotinju prema nazivu"<<endl; cout<<"4 Izbrisi zivotinju prema vrsti"<<endl; cout<<"5 Sortiraj silazno prema cijeni i nazivu"<<endl; cout<<"6 Ispis"<<endl; cout<<"0 Izlaz"<<endl<<endl; while(izbor!='0') { cout<<"Izbor: "; cin>>izbor; if(izbor=='0' || izbor=='1' || izbor=='2' || izbor=='3' || izbor=='4' || izbor=='5'){ switch(izbor) { case '0': system ("pause"); return 0; case '1': if(dodaj(l)) cout<<"Upis uspjesno izvrsen."<<endl<<endl; else cout<<"Krivo uneseni podaci."<<endl<<endl; break; case '2': pretrazi(l); break; case '3': if(izbrisi_naziv(l)) cout<<"Zivotinja uspjesno obrisana."<<endl<<endl; else cout<<"Niti jedna zivotinja nije upisana."<<endl<<endl; break; case '4': if(izbrisi_vrsta(l)) cout<<"Zivotinja uspjesno obrisana."<<endl<<endl; else cout<<"Niti jedna zivotinja nije upisana."<<endl<<endl; break; case '5': Merge_sort1(l); break; case '6': ispis(l); break; } } else cout<<"Pogresan izbor!"<<endl; } system("pause"); return 0; }
You need to login to post a comment.
