/ 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

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.