Return to Snippet

Revision: 60587
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++