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++