Revision: 60757
Updated Code
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
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
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++