/ Published in: C++
Glavni dio programa za prvi zadatak iz kolegija strukture podataka
Expand |
Embed | Plain Text
#include <iostream> //#include "lista_polje.h" #include "lista_pokazivac.h" int sifra=1; using namespace std; void Ispis_elemenata(lista *glavno){ elem poz=PreviousL(EndL(glavno),glavno); if(FirstL(glavno)!=EndL(glavno)) while(1){ podaci aktualni=RetrieveL(poz,glavno); cout<<endl<<"Sifra zivotinja: "<<aktualni.sifra; cout<<endl<<"Cijena zivotinje: "<<aktualni.cijena; cout<<endl<<"Naziv zivotinje: "<<aktualni.naziv; cout<<endl<<"Vrsta zivotinje: "<<aktualni.vrsta; cout<<endl<<"Datum dostave: "<<aktualni.datum[0]<<"." <<aktualni.datum[1]<<"."<<aktualni.datum[2]<<"."<<endl; if(poz==FirstL(glavno)) break; poz=PreviousL(poz,glavno); } else cout<<endl<<"Lista je prazna!"<<endl; } void Brisanje_vrste(lista *glavno){ podaci tren; bool prov=false; cin.ignore(); tren.cijena=2; cout<<endl<<"Unesite vrstu koju zelite izbrisati: "; cin.getline(tren.vrsta,50); if(LocateL(tren,glavno)==EndL(glavno)) cout<<endl<<"Vrsta nije obrisana!"<<endl; elem lok=LocateL(tren,glavno); if(lok==0){ if(DeleteL(lok,glavno)) cout<<endl<<"Vrsta uspjesno obrisana!"<<endl; return; } else{ while(lok!=EndL(glavno)){ if(DeleteL(lok,glavno)) prov=true; lok=LocateL(tren,glavno); } if(prov) cout<<endl<<"Vrsta uspjesno obrisana!"<<endl; } } elem Dodaj_element(lista *glavno){ podaci poz; poz.sifra=sifra; cout<<endl<<"Sifra zivotinje: "; cout<<poz.sifra; cout<<endl<<"Cijena zivotinje: "; cin>>poz.cijena; cout<<endl<<"Naziv zivotinje: "; cin.ignore(); cin.getline(poz.naziv,50); cout<<endl<<"Vrsta zivotinje: "; cin.getline(poz.vrsta,50); cout<<endl<<"Datum dostave: "; cout<<endl<<"Dan dostave: "; cin>>poz.datum[0]; cout<<endl<<"Mjesec dostave: "; cin>>poz.datum[1]; cout<<endl<<"Godina dostave: "; cin>>poz.datum[2]; if(poz.cijena==0){ cout<<endl<<"Cijena nemoze biti 0"<<endl; return 0; } if(InsertL(poz,EndL(glavno),glavno)) sifra+=1; } void Brisanje_elementa(lista *glavno){ podaci tren; cin.ignore(); tren.cijena=1; cout<<endl<<"Unesite naziv koji zelite izbrisati: "; cin.getline(tren.naziv,50); elem lok=LocateL(tren,glavno); if(DeleteL(lok,glavno)) cout<<endl<<"Zapis je uspjesno obrisan!"<<endl; else if(!DeleteL(lok,glavno)) cout<<endl<<"Zapis nije obrisan!"<<endl; } void Ispis_datum(lista *glavno){ elem poz=PreviousL(EndL(glavno),glavno); int br=0; if(FirstL(glavno)!=EndL(glavno)){ while(1){ podaci tren=RetrieveL(poz,glavno); if(tren.datum[2]==2012){ if((tren.datum[1]>=9)){ if(tren.datum[1]==9){ if(tren.datum[0]>23){ cout<<endl<<"Sifra zivotinje: "<<tren.sifra; cout<<endl<<"Naziv zivotinje: "<<tren.naziv; cout<<endl<<"Datum dostave: "<<tren.datum[0]<<"." <<tren.datum[1]<<"."<<tren.datum[2]; cout<<endl<<"Vrsta zivotinje: "<<tren.vrsta; cout<<endl<<"Cijena zivotinje: "<<tren.cijena<<endl; br++; } } else{ cout<<endl<<"Sifra zivotinje: "<<tren.sifra; cout<<endl<<"Naziv zivotinje: "<<tren.naziv; cout<<endl<<"Datum dostave: "<<tren.datum[0]<<"." <<tren.datum[1]<<"."<<tren.datum[2]; cout<<endl<<"Vrsta zivotinje: "<<tren.vrsta; cout<<endl<<"Cijena zivotinje: "<<tren.cijena<<endl; br++; } } } else if(tren.datum[2]>2012){ cout<<endl<<"Sifra zivotinje: "<<tren.sifra; cout<<endl<<"Naziv zivotinje: "<<tren.naziv; cout<<endl<<"Datum dostave: "<<tren.datum[0]<<"." <<tren.datum[1]<<"."<<tren.datum[2]; cout<<endl<<"Vrsta zivotinje: "<<tren.vrsta; cout<<endl<<"Cijena zivotinje: "<<tren.cijena<<endl; br++; } if(poz==FirstL(glavno)) break; poz=PreviousL(poz,glavno); } cout<<endl<<"Broj zivotinja od 23.9.2012: "<<br<<endl; } else cout<<endl<<"Lista je prazna!"<<endl; } void Spoji(podaci polje[], int brj1, int sredina, int brj2){ int i=brj1, j=sredina+1, k=0; podaci *b=new podaci[brj2-brj1+1]; while(i<=sredina && j<=brj2){ if(polje[i].cijena>polje[j].cijena) b[k++]=polje[i++]; else if(polje[i].cijena<polje[j].cijena) b[k++]=polje[j++]; if(polje[i].cijena==polje[j].cijena){ if(strcmp(polje[i].naziv,polje[j].naziv)==1) b[k++]=polje[i++]; else b[k++]=polje[j++]; } } while(j<=brj2) b[k++]=polje[j++]; while(i<=sredina) b[k++]=polje[i++]; for(int c=0;c<=brj2-brj1;c++) polje[c+brj1]=b[c]; delete []b; } void Merge(podaci polje[], int brj1, int brj2){ if(brj1<brj2){ int sredina=(brj1+brj2)/2; Merge(polje,brj1,sredina); Merge(polje,sredina+1,brj2); Spoji(polje,brj1,sredina,brj2); } } void Merge(podaci polje[],int vel){ Merge(polje,0,vel-1); } void Prep(lista *glavno){ if(FirstL(glavno)!=EndL(glavno)){ int broj=0; elem poz=FirstL(glavno); while(false==(!true)){ broj++; poz=NextL(poz,glavno); if(poz==EndL(glavno)) break; } poz=FirstL(glavno); podaci *sort=new podaci[broj]; int mj=0; while(false==(!true)){ sort[mj]=RetrieveL(poz,glavno); mj++; poz=NextL(poz,glavno); if(poz==EndL(glavno)) break; } Merge(sort,broj); for(int i=0;i<broj;i++){ cout<<endl<<"Sifra zivotinja: "<<sort[i].sifra; cout<<endl<<"Cijena zivotinje: "<<sort[i].cijena; cout<<endl<<"Naziv zivotinje: "<<sort[i].naziv; cout<<endl<<"Vrsta zivotinje: "<<sort[i].vrsta; cout<<endl<<"Datum dostave: "<<sort[i].datum[0]<<"." <<sort[i].datum[1]<<"."<<sort[i].datum[2]<<"."<<endl; } delete []sort; } else cout<<endl<<"Lista je prazna!"<<endl; } int main(){ int izbor; lista *glavno; glavno=InitL(glavno); do{ cout<<endl<<"Izbornik: "<<endl; cout<<"1. Upis podataka"<<endl; cout<<"2. Ispis podataka"<<endl; cout<<"3. Pretraga podataka"<<endl; cout<<"4. Brisanje podataka"<<endl; cout<<"5. Brisanje vrste"<<endl; cout<<"6. Merge sort"<<endl; cout<<"9. Izlaz it prog"<<endl; cin>>izbor; switch(izbor){ case 1: if(Dodaj_element(glavno)) cout<<endl<<"Zapis je uspjesno dodan!"<<endl; else cout<<endl<<"Zapis nije dodan!"<<endl; break; case 2: Ispis_elemenata(glavno); break; case 3: Ispis_datum(glavno); break; case 4: Brisanje_elementa(glavno); break; case 5: Brisanje_vrste(glavno); break; case 6: Prep(glavno); break; case 9: cout<<endl<<"Izlazim iz programa(ENTER)!!!"<<endl; break; default: cout<<endl<<"Nepostoji ta opcija, ponovite upis: "<<endl; } }while(izbor!=9); cin.ignore(); cin.get(); return 0; }
Comments
Subscribe to comments
You need to login to post a comment.

ovakvo rješenje problema za razliku od moga ima malo drugačiji pristup brojenju elemenata liste prije nego se pokreče merge sort, dok moje rješenje koristi posebnu funkciju za tu svrhu
Ovaj program za razliku od mog, ima drugačiji pristup unosu datuma. Isto tako, drugačiji je način dobivanja šifre životinja, jer moje rješenje sadrži "rand" šifru koja se nesmije ponavljati.