/ Published in: C++
moj zadatak iz struktura podataka
Expand |
Embed | Plain Text
Copy this code and paste it in your HTML
#include <iostream> #include <cstring> #include "lista_polje.h" //#include "lista_pokazivac.h" using namespace std; int br_elem = 0; int kod = 1000; int upis() { ljubimac tekuci, prethodni = RetreiveL(PreviousL(EndL(list), list), list); tekuci.kod = kod; cout << "Dan: "; cin >> tekuci.d; cout << "Mjesec: "; cin >> tekuci.m; cout << "Godina: "; cin >> tekuci.g; cout << "Sifra: " << tekuci.kod << endl; cout << "Vrsta: "; cin.ignore(); cin.getline(tekuci.vrsta,50); cout << "Naziv: "; cin.getline(tekuci.naziv,50); cout << "cijena: "; cin >> tekuci.cijena; InsertL(tekuci, EndL(list), list); br_elem++; kod++; return 1; } void pretrazivanje_liste() { int uk = 0; element tekuci = FirstL(list); ljubimac trazeni; while(tekuci != EndL(list)) { trazeni = RetreiveL(tekuci, list); if((trazeni.g==2012 && trazeni.m==9 && trazeni.d>23) || trazeni.g>2012 || trazeni.g==2012&&trazeni.m>9) { cout << "Sifra: " << trazeni.kod << endl; cout << "Vrsta: " << trazeni.vrsta << endl; cout << "Naziv: " << trazeni.naziv << endl; cout << "Cijena: " << trazeni.cijena << endl; cout << "Datum dostave: " << trazeni.d << "." << trazeni.m << "." << trazeni.g << "." << endl; cout << "---------------------------" << endl; uk++; } tekuci = NextL(tekuci, list); } cout << "Ukupan broj zivotinja dostavljenih nakon 23.9.2012. je: " << uk; } void ispis_liste() { element zadnji = PreviousL(EndL(list), list); ljubimac tekuci; if(EndL(list) == FirstL(list)) { cout << "Lista je prazna"; return; } while(zadnji >= FirstL(list)) { tekuci = RetreiveL(zadnji, list); cout << "Sifra: " << tekuci.kod << endl; cout << "Vrsta: " << tekuci.vrsta << endl; cout << "Naziv: " << tekuci.naziv << endl; cout << "Cijena: " << tekuci.cijena << endl; cout << "Datum dostave: " << tekuci.d << "." << tekuci.m << "." << tekuci.g << "." << endl; cout << "---------------------------" << endl; zadnji = PreviousL(zadnji, list); } } int brisanje_po_vrsti() { char ime[50]; bool del = false; element trazena; cout << "Vrsta zivotinje koju zelite obrisati: "; cin.ignore(); cin.getline(ime,50); while(1) { trazena = LocateL(ime, list); if(trazena == EndL(list)) break; DeleteL(trazena, list); del = true; br_elem--; } if(!del) return 0; else return 1; } int brisanje_po_nazivu_u_listi() { char ime[50]; bool del = false; element trazena; cout << "Naziv zivotinje koju zelite obrisati: "; cin.ignore(); cin.getline(ime,50); while(1) { trazena = LocateL(ime, list); if(trazena == EndL(list)) break; DeleteL(trazena, list); del = true; br_elem--; } if(!del) return 0; else return 1; } void sortiranje(ljubimac *a, ljubimac *b, int l, int r) { int i, j, k, m; if(l < r) { m = (r+l) / 2; sortiranje(a, b, l, m); sortiranje(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(ljubimac)); else memcpy(&b[k++], &a[j++], sizeof(ljubimac)); } while(i <= m) memcpy(&b[k++], &a[i++], sizeof(ljubimac)); while(j <= r) memcpy(&b[k++], &a[j++], sizeof(ljubimac)); for(k = l; k <= r; k++) memcpy(&a[k], &b[k], sizeof(ljubimac)); } } void sortiranje2() { ljubimac *a = new ljubimac[br_elem]; element tekuci = FirstL(list); int i = 0; while(tekuci != EndL(list)) { a[i] = RetreiveL(tekuci, list); tekuci = NextL(tekuci, list); i++; } ljubimac *b = new ljubimac[br_elem]; sortiranje(a, b, 0, br_elem-1); DeleteAllL(list); InitL(list); for(i=0; i<br_elem; i++) InsertL(a[i], EndL(list), list); delete []a; delete []b; } int main() { InitL(list); int izbor, rez; do { cout << "1. Upis u listu" << endl; cout << "2. Ispis liste" << endl; cout << "3. Zivotinje dostavljene nakon 23.9.2012." << endl; cout << "4. Brisanje prema nazivu" << endl; cout << "5. Brisanje prema vrsti" << endl; cout << "6. Sortirano silazno, prema cijeni i nazivu" << endl; cout << "0. Izlaz iz programa" << endl << endl; cin >> izbor; switch(izbor) { case 1: cout << endl << "1. Dodavanje zapisa prema rastucoj sifri" << endl; rez = upis(); if(rez == 1) { cout << "Uspjesno!!!"; } else cout << "Neuspjesno!!!"; cout << endl << endl; break; case 2: cout << endl << "2. Ispis liste" << endl; ispis_liste(); cout << endl << endl; break; case 3: cout << endl << "3. Zivotinje dostavljene nakon 23.9.2012." << endl; pretrazivanje_liste(); cout << endl << endl; break; case 4: cout << endl << "4. Brisanje iz liste prema nazivu" << endl; rez = brisanje_po_nazivu_u_listi(); if(rez == 1) cout << "Uspjesno!!!"; else cout << "Neuspjesno!"; cout << endl << endl; break; case 5: cout << endl << "5. Brisanje prema vrsti" << endl; rez = brisanje_po_vrsti(); if(rez == 1) cout << "Uspjesno!!!"; else cout << "Neuspjesno!"; cout << endl << endl; break; case 6: cout << endl << "6. Sortirano silazno prema nazivu i cijeni" << endl; sortiranje2(); cout << endl << endl; break; default: cout << endl << "Pogreska\n Unesite ponovo!" << endl << endl; } } while(izbor != 0); return 0; }