Revision: 60653
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at November 12, 2012 04:52 by nikym23
Initial Code
#include <iostream> #include "lista_polje1.h" //#include "lista_pokazivaca.h" using namespace std; void unos_niza(char *polje){ cin.getline(polje, 100); if(cin.gcount()==1) cin.getline(polje,100); } lista *lis=InitL(lis); int broj_ziv=1; int broj_zivotinja=0; int ukupni_datum; int unos(lista *lis){ zivotinje zivotinja; cout<<"Sifra zivotinje: "<<broj_ziv<<endl; zivotinja.sifra=broj_ziv; cout<<"Naziv zivotinje: "; unos_niza(zivotinja.naziv); cout<<"Vrsta zivotinje: "; unos_niza(zivotinja.vrsta); cout<<"Datum ispuruke: "<<endl; do{ cout<<"\t dan: "; cin>>zivotinja.d;}while(zivotinja.d<=0 || zivotinja.d>32); do{ cout<<"\t mjesec: "; cin>>zivotinja.m;}while(zivotinja.m<=0 || zivotinja.m>12); do{ cout<<"\t godina: "; cin>>zivotinja.g;}while(zivotinja.g<=1970 || zivotinja.g>2020); cout<<"Unesite cijenu: "; cin>>zivotinja.cijena; cout<<"Da li je vece od 23.09.2012?"<<endl; ukupni_datum=zivotinja.d+(31*(zivotinja.m-1))+(12*31*(zivotinja.g-1)); zivotinja.dat=ukupni_datum; cout<<"*****************"<<endl; int provjeri = InsertL(zivotinja, EndL(lis), lis); if(provjeri==1){ cout<<endl<<"Zapis je unesen" << endl; broj_zivotinja++; broj_ziv++; return 1; } else return 0; } void obrnuti_redosljed(lista *lis){ element zadnji = PreviousL(EndL(lis), lis); zivotinje zivotinja; if(EndL(lis) == FirstL(lis)){ cout << "Lista je prazna"; return; } while(zadnji >= FirstL(lis)){ zivotinja = RetrieveL(zadnji, lis); cout<<"Sifra zivotinje: "<<zivotinja.sifra<<endl; cout<<"naziv zivotinje: "<<zivotinja.naziv<<endl; cout<<"vrsta zivotine : "<<zivotinja.vrsta<<endl; cout<<"Datum ispuruke : "<<zivotinja.d<<"."<<zivotinja.m<<"."<<zivotinja.g<<endl; cout<<"Unesena cijena : "<<zivotinja.cijena<<endl; cout<<"-----------------"<<endl; zadnji = PreviousL(zadnji, lis); } } void ispis() { zivotinje a; element p=FirstL(lis); while (p!=EndL(lis)){ a=RetrieveL(p,lis); cout<<"Sifra: "<<a.sifra<<endl; cout<<"Vrsta: "<<a.vrsta<<endl; cout<<"Naziv: "<<a.naziv<<endl; cout<<"Cijena: "<<a.cijena<<endl; cout<<"Datum ispuruke : "<<a.d<<"."<<a.m<<"."<<a.g<<endl; cout<<"-------------------------------\n"; p = NextL(p,lis); } } void pretraga(){ system("cls"); int brojac=0; zivotinje ziv; element last=PreviousL(EndL(lis), lis); if(EndL(lis) !=FirstL(lis)) while(true){ ziv=RetrieveL(last, lis); if(ziv.dat>748363){ cout<<"Sifra zivotinje: "<<ziv.sifra<<endl; cout<<"naziv zivotinje: "<<ziv.naziv<<endl; cout<<"vrsta zivotine : "<<ziv.vrsta<<endl; cout<<"Datum ispuruke : "<<ziv.d<<"."<<ziv.m<<"."<<ziv.g<<endl; cout<<"Unesena cijena : "<<ziv.cijena<<endl; cout<<"-----------------"<<endl; brojac++; } if(last==FirstL(lis)) break; last=PreviousL(last, lis); } cout<<"Zbroj zivotinja nakon 23.rujna 2012 : " <<brojac<<endl; } int brisanje_naziv (lista *lis){ char naz[20]; cout << "Unesi naziv zivotinje: "; unos_niza(naz); element pozicija=FirstL(lis); zivotinje ziv; while (pozicija != EndL(lis)) { ziv = RetrieveL(pozicija, lis); if (strcmp(ziv.naziv, naz) != 0) { pozicija = NextL (pozicija, lis); } else { DeleteL (pozicija, lis); broj_ziv--; return 1; } } return 0; } int brisanje_vrsta(lista *lis){ char vrsta[30]; cout << "Unesite vrstu zivotinja za brisanje: "; unos_niza(vrsta); element pozicija=FirstL(lis); zivotinje ziv; bool postoji=false; while (pozicija != EndL(lis)) { ziv = RetrieveL(pozicija, lis); if (strcmp(ziv.vrsta, vrsta) != 0) { pozicija = NextL (pozicija, lis); } else { DeleteL (pozicija, lis); broj_ziv--; postoji=true; } } if(postoji) return 1; else return 0; } void mergesort(zivotinje*a, zivotinje *b, int l, int r){ int i, j, k, m; if(l < r){ m = (r+l) / 2; mergesort(a, b, l, m); mergesort(a, b, m+1, r); i = l; j = m+1; k = l; while((i <= m) && (j <= r)){ if(a[i].cijena>a[j].cijena || ((a[i].cijena==a[j].cijena)&&(strncmp(a[i].naziv, a[j].naziv, sizeof(a[i].naziv))>0))) memcpy(&b[k++], &a[i++], sizeof(zivotinje)); else memcpy(&b[k++], &a[j++], sizeof(zivotinje)); } while(i <= m) memcpy(&b[k++], &a[i++], sizeof(zivotinje)); while(j <= r) memcpy(&b[k++], &a[j++], sizeof(zivotinje)); for(k = l; k <= r; k++) memcpy(&a[k], &b[k], sizeof(zivotinje)); } } void sort(){ zivotinje*a = new zivotinje[broj_zivotinja]; element tekuci = FirstL(lis); int i = 0; while(tekuci != EndL(lis)){ a[i] = RetrieveL(tekuci, lis); tekuci = NextL(tekuci, lis); i++; } zivotinje *b = new zivotinje[broj_zivotinja]; mergesort(a, b, 0, broj_zivotinja-1); DeleteAllL(lis); InitL(lis); for(i=0; i<broj_zivotinja; i++) InsertL(a[i], EndL(lis), lis); delete []a; delete []b; } int main(){ int izbor; do{ cout<<"IZBORNIK"<<endl; cout<<"------------------"<<endl; cout<<"1.dodavanje zapisa u listu "<<endl; cout<<"2.Ispis zapisa "<<endl; cout<<"3.ispis svih zivotinja nakon 23.rujna 2012"<<endl; cout<<"4.brisanje prema nazivu "<<endl; cout<<"5.brisanje prema vrsti"<<endl; cout<<"6.Sortiranje prema cijeni i nazivu"<<endl; cout<<"9.kraj"<<endl; cout<<"Vas izbor je: "<<endl; cout<<"------------------"<<endl; cin>>izbor; cout<<"------------------"<<endl; switch(izbor){ case 1: system("cls"); unos(lis);obrnuti_redosljed(lis);break; case 2: system("cls");obrnuti_redosljed(lis);break; case 3: system("cls");pretraga();break; case 4: system("cls");brisanje_naziv(lis);obrnuti_redosljed(lis);break; case 5: system("cls");brisanje_vrsta(lis);obrnuti_redosljed(lis);break; case 6: system("cls");sort();ispis();break; case 9: system("cls");cout<<"Izradio: Nikola Miljancic"<<endl; cout<<"Fakultet organizacije i informatike,Varazdin"<<endl; } }while(izbor!=9); system("pause"); return 0; }
Initial URL
Initial Description
U glavnom programu se nalaze dvije biblijoteke lista_pokazivaca i lista_polje. Pomocu nje sam napravio program za evidenciju zivotinja.
Initial Title
glavni_program_zadatak_1 Strukture podataka
Initial Tags
Initial Language
C++