Return to Snippet

Revision: 60757
at November 20, 2012 05:57 by petzadro


Updated Code
struct List {
    zivotinja value[1000]; 
    int cursor; 
};


typedef List Lista;
typedef int element;

element FirstL(Lista *L) {
    return 0;
}


element EndL(Lista *L) {
    return L->cursor;
}

element NextL(element P, Lista *L) {
    return P+1;
}

element PreviousL(element P, Lista *L) {
    return P-1;
}

element LocateL(zivotinja X, Lista *L) {
    int i = 0;
    while (i < L->cursor) {
        if (L->value[i].sifra == X.sifra) {
            return i;
            i++;
        }
    }
}

bool InsertL(zivotinja X, element P, Lista *L) {
  
    if (L->cursor == 1000) {
        return false;
    }

    for (int i = L->cursor-1; i >= P; i--) {
        L->value[i+1] = L->value[i];
    }

    L->value[P] = X;
    L->cursor += 1;
    return true;
}

void DeleteL(element P, Lista *L) {

    for (int i = P; i < L->cursor; i++) {
        L->value[i] = L->value[i+1];
    }
    L->cursor -= 1; 
}

zivotinja RetrieveL(element P, Lista *L) {
    return L->value[P];
}


void DeleteAll(Lista *L){ 
    L->cursor = 0;
}


void InitL(Lista *L) {
    L->cursor = 0;
}

Revision: 60756
at November 12, 2012 08:48 by petzadro


Initial Code
#include <iostream>
#include <string>
using namespace std;
int sifra;

struct zivotinja {
    int sifra, cijena;
    string naziv, vrsta;
    long int datum;
};


#include "lista_pokazivac.h" 

int funkcija_dodaj(Lista *zivotinje) {
    cout << "Unos podataka za novu zivotinju." << endl;
    zivotinja nova;
    nova.sifra = sifra++;
    cout << "Vrsta: " << endl;
    cin >> nova.vrsta;
    cout << "Naziv: " << endl;
    cin >> nova.naziv;
    cout << "Cijena: " << endl;
    cin >> nova.cijena;
    cout << "Datum: " << endl;
    cin >> nova.datum;
    

    if (InsertL(nova, EndL(zivotinje), zivotinje)) {
        return 1;
    }
    else { 
        return 0;
    }
}

void funkcija_ispis(Lista *zivotinje) {
    
    element tekuci = EndL(zivotinje);
    zivotinja z;
    cout << "Ispis zivotinja od najvece sifre." << endl;
 
    do {
        tekuci = PreviousL(tekuci, zivotinje);
        z = RetrieveL(tekuci, zivotinje);
        cout << "Sifra: " << z.sifra << ", vrsta: " << z.vrsta;
        cout << ", naziv: " << z.naziv << ", cijena: " << z.cijena;
        cout << ", datum: " << z.datum << endl << endl;
    }   while (tekuci != FirstL(zivotinje));
    cout << "Ispis zavrsen." << endl;
}

int funkcija_brisi_naziv(Lista *zivotinje) {
    cout << "Naziv za brisanje: ";
    string unos;
    cin >> unos;
    int brisanje = 0; 
    element tekuci; zivotinja z;

    
    tekuci = FirstL(zivotinje);

    while (tekuci != EndL(zivotinje)) {
        z = RetrieveL(tekuci, zivotinje);
       
        if (z.naziv == naz) {
            brisanje = 1; 
            DeleteL(tekuci, zivotinje);
        }
        else { 
            tekuci = NextL(tekuci, zivotinje);
        }
    }
    return brisanje; 
}


int funkcija_brisi_vrsta(Lista *zivotinje) {
    cout << "Vrsta za brisanje: ";
    string unos;
    cin >> unos;
    int brisanje = 0; 
    element tekuci; zivotinja z;
    tekuci = FirstL(zivotinje);
    while (tekuci != EndL(zivotinje)) {
        z = RetrieveL(tekuci, zivotinje);
        if (z.vrsta == unos) {
            brisanje = 1; 
            DeleteL(tekuci, zivotinje);
        }
        else {
            tekuci = NextL(tekuci, zivotinje);
        }
    }
    return brisanje; 
}

void funkcija_trazi_datum(Lista *zivotinje) {
    element tekuci;
    
    tekuci = FirstL(zivotinje);
    zivotinja z;
    cout << "Trazimo zivotinje novije 20120923." << endl;
    while (tekuci != EndL(zivotinje)) {
        z = RetrieveL(tekuci, zivotinje);
        if (z.datum > 20120923) {
            cout << "Sifra: " << z.sifra << ", vrsta: " << z.vrsta;
            cout << ", naziv: " << z.naziv << ", cijena: " << z.cijena;
            cout << ", datum: " << z.datum << endl << endl;        
        }
        tekuci = NextL(tekuci, zivotinje);
    }
    cout << "Trazenje gotovo." << endl;
}


void merge_sort_cijena(zivotinja polje[], int lijevi, int desni) {
    int sredina = (lijevi + desni) / 2;
    zivotinja temp;

    if (desni - lijevi == 1) { 
        if (polje[desni].cijena > polje[lijevi].cijena) {
            temp = polje[desni];
            polje[desni] = polje[lijevi];
            polje[lijevi] = temp;
            return;
        }
    }    
    else if (desni == lijevi) { 
        return;
    }
    else { 
      
        merge_sort_cijena(polje, lijevi, sredina);
        merge_sort_cijena(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].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 merge_sort_naziv(zivotinja polje[], int lijevi, int desni) {
    int sredina = (lijevi + desni) / 2;
    zivotinja temp;

    if (desni - lijevi == 1) { 
        if (polje[desni].naziv > polje[lijevi].naziv) {
            temp = polje[desni];
            polje[desni] = polje[lijevi];
            polje[lijevi] = temp;
            return;
        }
    }    
    else if (desni == lijevi) { 
        return;
    }
    else { 
     
        merge_sort_naziv(polje, lijevi, sredina);
        merge_sort_naziv(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++;
        }
    }
}


void funkcija_sortiraj_cjenovno(Lista *zivotinje) {
    cout << "Sortiramo po cijeni." << endl;
   
    int broj = 0;
    element tekuci; zivotinja z;
    tekuci = FirstL(zivotinje);
    while (tekuci != EndL(zivotinje)) {
        broj++; tekuci = NextL(tekuci, zivotinje);
    }
    
    zivotinja *polje = new zivotinja[broj];
  
    tekuci = FirstL(zivotinje);
    for (int i = 0; i < broj; i++) {
        z = RetrieveL(tekuci, zivotinje);
        polje[i] = z;
        tekuci = NextL(tekuci, zivotinje);
    }
   
    merge_sort_cijena(polje, 0, broj-1);
    
    for (int i = 0; i < broj; i++) {
            cout << "Sifra: " << polje[i].sifra << ", vrsta: " << polje[i].vrsta;
            cout << ", naziv: " << polje[i].naziv << ", cijena: " << polje[i].cijena;
            cout << ", datum: " << polje[i].datum << endl << endl;    
    }
}

void funkcija_sortiraj_nazivom(Lista *zivotinje) {
    cout << "Sortiramo po nazivu." << endl;
 
    int broj = 0;
    element tekuci; zivotinja z;
    tekuci = FirstL(zivotinje);
    while (tekuci != EndL(zivotinje)) {
        broj++; tekuci = NextL(tekuci, zivotinje);
    }
    
    zivotinja *polje = new zivotinja[broj];
  
    tekuci = FirstL(zivotinje);
    for (int i = 0; i < broj; i++) {
        z = RetrieveL(tekuci, zivotinje);
        polje[i] = z;
        tekuci = NextL(tekuci, zivotinje);
    }
 
    merge_sort_naziv(polje, 0, broj-1);
    
    for (int i = 0; i < broj; i++) {
            cout << "Sifra: " << polje[i].sifra << ", vrsta: " << polje[i].vrsta;
            cout << ", naziv: " << polje[i].naziv << ", cijena: " << polje[i].cijena;
            cout << ", datum: " << polje[i].datum << endl << endl;    
    }    
}

int main() {
    
    Lista zivotinje;
    InitL(&zivotinje);

    sifra = 1;

    zivotinja ziv;
    ziv.sifra = sifra++; 
    ziv.datum = 20121001; 
    ziv.cijena = 100;
    ziv.vrsta = "pas";
    ziv.naziv = "ovcar";
    InsertL(ziv, EndL(&zivotinje), &zivotinje);    

    ziv.sifra = sifra++; 
    ziv.datum = 20121101;
    ziv.cijena = 1000;
    ziv.vrsta = "pas";
    ziv.naziv = "buldog";    
    InsertL(ziv,  EndL(&zivotinje), &zivotinje); 

    ziv.sifra = sifra++; 
    ziv.datum = 20111101;
    ziv.cijena = 50;
    ziv.vrsta = "pas";
    ziv.naziv = "mjesanac";    
    InsertL(ziv, EndL(&zivotinje), &zivotinje);

    ziv.sifra = sifra++; 
    ziv.datum = 20101111;
    ziv.cijena = 300;
    ziv.vrsta = "macka";
    ziv.naziv = "perzijska";    
    InsertL(ziv,  EndL(&zivotinje), &zivotinje);

    ziv.sifra = sifra++; 
    ziv.datum = 20121223;
    ziv.cijena = 250;
    ziv.vrsta = "macka";
    ziv.naziv = "bobcat";    
    InsertL(ziv, EndL(&zivotinje), &zivotinje);

    funkcija_ispis(&zivotinje);

    funkcija_dodaj(&zivotinje);
    funkcija_ispis(&zivotinje);

    funkcija_trazi_datum(&zivotinje);

    funkcija_brisi_naziv(&zivotinje);
    funkcija_ispis(&zivotinje);

    funkcija_brisi_vrsta(&zivotinje);
    funkcija_ispis(&zivotinje);

    funkcija_sortiraj_cjenovno(&zivotinje);
    funkcija_sortiraj_nazivom(&zivotinje);

    system("pause");
    return 0;
}

Initial URL

                                

Initial Description
U ovoj biblioteci su definirane standardne funkcije za operacije and listom: FirstL, EndL, NextL, PreviousL, LocateL, RetrieveL, DeleteL, DeleteAllL. Te se funkcije pozivaju u datoteci main.cpp po potrebi.

Initial Title
Biblioteka lista_polje.h

Initial Tags

                                

Initial Language
C++