Revision: 60587
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at November 12, 2012 01:00 by SikavicaNino
Initial Code
#include <iostream>
using namespace std;
struct zivotinja{
int sifra;
string naziv, vrsta;
long datum;
int cijena;
};
#include "lista_pokazivac.h"
//#include "lista_polje.h"
int sifra = 1;
int zadatak_a_dodavanje(Lista *popis) {
cout << "Unos nove zivotinje." << endl;
zivotinja nova;
cout << "Vrsta: ";
cin >> nova.vrsta;
cout << "Naziv: ";
cin >> nova.naziv;
cout << "Cijena: ";
cin >> nova.cijena;
cout << "Datum (YYYYMMDD): ";
cin >> nova.datum;
nova.sifra = sifra;
sifra++;
if(InsertL(nova, EndL(popis) , popis)==true)
return 1;
else
return 0;
}
void zadatak_a_ispis(Lista *popis){
element tekuci = EndL(popis);
element prvi = FirstL(popis);
zivotinja pom;
do{
tekuci = PreviousL(tekuci, popis);
pom = RetrieveL(tekuci, popis);
cout << "Sifra: " << pom.sifra << endl;
cout << "Vrsta: " << pom.vrsta << endl;
cout << "Naziv: " << pom.naziv << endl;
cout << "Cijena: " << pom.cijena << endl;
cout << "Datum: " << pom.datum << endl << endl;
}while (tekuci != prvi);
}
void zadatak_b(Lista *popis, long datum){
element tekuci = FirstL(popis);
zivotinja pom;
int brojac = 0;
do{
pom = RetrieveL(tekuci, popis);
if (pom.datum > datum){
brojac++;
cout << "Dana " << pom.datum << " zaprimili smo: " << pom.naziv << endl;
}
tekuci = NextL(tekuci, popis);
}while(tekuci != EndL(popis));
cout << "Nakon " << datum << " pris1tiglo je: " << brojac << " zivotinja." << endl << endl;
}
int zadatak_c_vrsta(Lista *popis){
string ime_vrste;
cout << "Ime vrste koju brisemo: ";
cin >> ime_vrste;
element tekuci = FirstL(popis);
zivotinja pom;
int brojac = 0;
do{
pom = RetrieveL(tekuci, popis);
if (pom.vrsta == ime_vrste){
brojac = 1;
cout << "Brisemo zivotinju sa sifrom: " << pom.sifra;
cout << ", naziva: " << pom.naziv <<" i vrste: "<<pom.vrsta<< endl;
DeleteL(tekuci, popis);
}
else{
tekuci = NextL(tekuci, popis);
}
}while(tekuci != EndL(popis));
return brojac;
}
int zadatak_c_naziv(Lista *popis){
string ime_naziv;
cout << "Naziv zivotinje koju brisemo: ";
cin >> ime_naziv;
element tekuci = FirstL(popis);
zivotinja pom;
int brojac = 0;
do{
pom = RetrieveL(tekuci, popis);
if(pom.naziv == ime_naziv) {
brojac = 1;
cout << "Brisemo zivotinju sa sifrom: " << pom.sifra;
cout << ", vrste: " << pom.vrsta <<" i naziva: "<<pom.naziv<< endl;
DeleteL(tekuci, popis);
}
else{
tekuci = NextL(tekuci, popis);
}
}while(tekuci != EndL(popis));
return brojac;
}
void sortiranje_po_cijeni(zivotinja polje[], int lijevi, int desni){
int sredina = (lijevi + desni) / 2;
zivotinja temp;
if (lijevi == desni){
return;
}
else if (lijevi + 1 ==desni){
if (polje[desni].cijena > polje[lijevi].cijena){
temp = polje[desni];
polje[desni] = polje[lijevi];
polje[lijevi] = temp;
return;
}
}
else{
sortiranje_po_cijeni(polje, lijevi, sredina);
sortiranje_po_cijeni(polje, sredina + 1, desni);
int size_pomocno = 1+ (desni - lijevi);
zivotinja *polje_pomocno = new zivotinja[size_pomocno];
int l = lijevi;
int s = sredina +1;
for(int i = 0; i < size_pomocno; i++){
if (l == sredina+1){
polje_pomocno[i] = polje[s]; s++;
continue;
}
if (s == desni +1){
polje_pomocno[i] = polje[l]; l++;
continue;
}
if(polje[l].cijena > polje[s].cijena){
polje_pomocno[i] = polje[l];
l++;
}
else{
polje_pomocno[i] = polje[s];
s++;
}
}
int j = 0;
for (int i = lijevi; i <= desni; i++){
polje[i] = polje_pomocno[j]; j++;
}
}
}
void sortiranje_po_nazivu(zivotinja polje[], int lijevi, int desni){
int sredina = (lijevi + desni) / 2;
zivotinja temp;
if (desni == lijevi){
return;
}
else if (desni - lijevi == 1){
if (polje[desni].naziv > polje[lijevi].naziv) {
temp = polje[desni];
polje[desni] = polje[lijevi];
polje[lijevi] = temp;
return;
}
}
else{
sortiranje_po_nazivu(polje, lijevi, sredina);
sortiranje_po_nazivu(polje, sredina +1, desni);
int size_pomocno = desni-lijevi +1;
zivotinja *polje_pomocno = new zivotinja[size_pomocno];
int l = lijevi;
int s = sredina +1;
for (int i = 0; i < size_pomocno; i++){
if (l == sredina+1){
polje_pomocno[i] = polje[s]; s++;
continue;
}
if (s == desni +1){
polje_pomocno[i] = polje[l]; l++;
continue;
}
if (polje[l].naziv > polje[s].naziv){
polje_pomocno[i] = polje[l];
l++;
}
else{
polje_pomocno[i] = polje[s];
s++;
}
}
int j = 0;
for (int i = lijevi; i <= desni; i++) {
polje[i] = polje_pomocno[j]; j++;
}
}
}
int main(){
Lista popis;
InitL(&popis);
short izb;
do{
cout<<endl<<"IZBORNIK"<<endl;
cout<<"1. Dodavanje zapisa u listu prema rastucoj sifri zivotinje"<<endl;
cout<<"2. Ispis zivotinja (od posljednje dodane)"<<endl;
cout<<"3. Pretrazivanje po datumu (ispis nakon 23.9.2012.) "<<endl;
cout<<"4. Brisanje prema vrsti zivotinje"<<endl;
cout<<"5. Brisanje prema nazivu zivotinje"<<endl;
cout<<"6. Sortiranje zivotinja prema nazivu i cijeni (silazno)"<<endl;
cout<<"9. Izlaz iz programa"<<endl;
cout<<"Izbor: ";
cin>>izb;
switch(izb){
case 1:{
int br;
cout << "Dodavanje zivotinja (rastuca sifra)" << endl;
do{
cout<<"Koliko zivotinja zelite unesti?(min 5)";
cin>>br;
}while(br<5);
zadatak_a_dodavanje(&popis);
for(int i = 1;i < br; i++){
cout<<endl;
zadatak_a_dodavanje(&popis);;
}
break;
}
cout << endl;
case 2: {
cout << "Pocinje ispis polja (od zadnje dodanog)." << endl;
zadatak_a_ispis(&popis);
break;
}
case 3:{
cout << "Pokrecemo b zadatak, ispis nakon datuma." << endl;
zadatak_b(&popis, 20120923);
break;
}
case 4:{
zadatak_c_vrsta(&popis);
break;
}
case 5:{
zadatak_c_naziv(&popis);
break;
}
case 6:{
cout << "Brojanje elemenata liste." << endl;
int br = 0;
zivotinja pom_z;
element pom = FirstL(&popis);
while (pom != EndL(&popis)){
pom = NextL(pom, &popis);
br++;
}
cout << "Prebacivanje u polje." << endl;
zivotinja *pomocno = new zivotinja[br];
pom = FirstL(&popis);
int j = 0;
while (pom != EndL(&popis)) {
pom_z = RetrieveL(pom, &popis);
pomocno[j] = pom_z;
j++;
pom = NextL(pom, &popis);
}
sortiranje_po_nazivu(pomocno, 0, br-1);
cout << endl << "Sortirani ispis (po nazivu). " << endl;
for (int i = 0; i < br; i++) {
cout << "Naziv: " << pomocno[i].naziv << endl << endl;
}
sortiranje_po_cijeni(pomocno, 0, br-1);
cout << "Sortirani ispis (po cijeni). " << endl;
for (int i = 0; i < br; i++) {
cout << "Naziv: " << pomocno[i].naziv << ", cijena: " << pomocno[i].cijena << endl << endl;
}
break;
}
case 9: break;
default: cout<<"Pogresan unos."<<endl;
}
cout<<endl;
}while(izb!=9);
system("pause");
return 0;
}
Initial URL
Initial Description
Ovo je glavna datoteka main u kojoj se pozivaju funkcije iz datoteka lista_pokazivac.h i lista_polje.h za implementaciju liste. Korisniku je ponuđen izbornik preko kojeg moze: 1. dodavati zapis, 2. ispisati sadrzaj, 3. pretražiti listu po datumu (ispis nakon 23.9.2012), 4. brisanje prema vrsti, 5.brisanje prema nazivu, 6. sortiranje prema nazivu i cijeni
Initial Title
Implementacija liste-main.cpp
Initial Tags
Initial Language
C++