Advertisement
Guest User

Untitled

a guest
Oct 31st, 2014
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.09 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstring>
  3. #include "biblioteka_vrijeme.cc"
  4. using namespace std;
  5.  
  6. struct tnode{
  7.     int rBR;
  8.     char nR[150];
  9.     int cK;
  10.     int kolicina;
  11.     double vU;
  12.     tnode *next;
  13.     tnode *prev;
  14.     tnode *l;
  15.     tnode *d;
  16. };
  17.  
  18. int alokacija(tnode *glava, tnode *korijen){;
  19.     if(!(glava == NULL)){
  20.         cout << "Glava v.l. i korijen b.s. vec su alocirani >:X\n\n";
  21.         return 0;
  22.         }
  23.     else{
  24.         cout <<"Alocirali ste glavu v.l. i korijen b.s. :D\n\n";
  25.         return 1;
  26.     }
  27. }
  28.  
  29. int Velicina_liste(tnode *glava){       //DRUGO Testiranje
  30.     if(glava == NULL) return 0;
  31.     tnode *lista = glava;
  32.     int cout = 0;
  33.     while(lista->next){                 //Sljedece 3-4 linije koda komentirati sve dok AddNodeEnd nije gotof           
  34.         cout++;
  35.         lista = lista->next;
  36.     }
  37.     return cout;
  38. }
  39.  
  40. void addNodeEnd(tnode *glava){
  41.     if(glava == NULL) return;
  42.     cout <<"Broj elementa u vezanoj listi iznosi " <<Velicina_liste(glava) << endl;
  43.     tnode * lista = glava;
  44.     tnode * prevLista = glava;
  45.     double broj=0;
  46.     bool potvrda = false;
  47.     while(lista->next) lista = lista->next;
  48.     prevLista = lista;
  49.     lista = lista->next = new tnode;
  50.     lista->next = NULL;
  51.     lista->prev = prevLista;
  52.     vrijeme_pocetak();
  53.     cout << "Unesite redni broj robe\nR:= ";
  54.     cin >> lista->rBR;
  55.     cout << "Unesite naziv robe\nC:= ";
  56.     unos(lista->nR);
  57.     cout << "Unestie cijenu komada\nCK:= ";
  58.     cin >> lista->cK;
  59.     cout <<"Unesite kolicinu robe\nK:= ";
  60.     cin >> lista->kolicina;
  61.     vrijeme_kraj();
  62.     lista->vU = vrijeme_proteklo();
  63.     broj = vrijeme_proteklo()/1000;
  64.     cout <<"Proteklo je " << broj << " sekundi\n";
  65.     cout << "Vrijednost robe iznosi " << lista->cK*lista->kolicina << endl;
  66.     cout << "Zelite li potvriditi unos (0:- ne, 1:- da)?\nU:= ";
  67.     cin >> potvrda;
  68.     if(potvrda){
  69.         lista = glava->next;
  70.         while (lista){
  71.             cout << "Redni broj robe: " << lista->rBR << "\nNaziv robe: " << lista->nR << "\nVrijednost robe: " << lista->cK*lista->kolicina << "\nVrijeme unosa: " << lista->vU/1000 << " sekundi\n";
  72.             lista = lista->next;
  73.         }
  74.         cout << endl;
  75.     }
  76.     else{                                                                  
  77.         cout << "Vrijeme unosa iznosi: " << broj;
  78.         while(lista->next) lista = lista->next;
  79.         prevLista = lista->prev;
  80.         prevLista->next = NULL;
  81.         delete lista;
  82.         cout <<"\nBroj elementa u vezanoj listi iznosi " <<Velicina_liste(glava) << endl << endl;
  83.     }
  84. }
  85.  
  86. void addNodeBeg(tnode *glava, int number){
  87.             //TRECE TESTIRANJE, testrati s samo jednom linijkom koda
  88.     if(glava == NULL) return;
  89.     tnode* lista = new tnode;
  90.     tnode* listaNext;
  91.     lista->prev = glava;
  92.     lista->next = NULL;
  93.     vrijeme_pocetak();
  94.     cout << "Unesite redni broj robe\nR:= ";
  95.     cin >> lista->rBR;
  96.     cout << "Unesite naziv robe\nC:= ";
  97.     unos(lista->nR);
  98.     cout << "Unestie cijenu komada\nCK:= ";
  99.     cin >> lista->cK;
  100.     cout <<"Unesite kolicinu robe\nK:= ";
  101.     cin >> lista->kolicina;
  102.     vrijeme_kraj();
  103.     lista->vU = vrijeme_proteklo();
  104.     cout <<"Vrijeme unos iznosi: " <<vrijeme_proteklo()/1000 << " sekundi\n";
  105.     while(lista->cK <= 0 || lista->kolicina <= 0){
  106.         cout << "Unesene su nemoguce vrijednosti!\n";
  107.         cout << "Unestie cijenu komada\nCK:= ";
  108.         cin >> lista->cK;
  109.         cout <<"Unesite kolicinu robe\nK:= ";
  110.         cin >> lista->kolicina;
  111.     }
  112.    
  113.     if(glava->next!=NULL){          //15
  114.         listaNext=glava->next;
  115.         listaNext->prev=lista;
  116.         lista->next = listaNext;
  117.     }
  118.     glava->next = lista;
  119.     while(lista->next) lista= lista->next;
  120.     while(lista->prev){             //16
  121.         cout << "Redni broj robe: " << lista->rBR << "\nNaziv robe: " << lista->nR << "\nVrijednost robe: " << lista->cK*lista->kolicina << "\nVrijeme unosa: " << lista->vU/1000 << " sekundi\n\n";
  122.     lista = lista ->prev;
  123.     }
  124. }
  125.  
  126. void binSort(tnode *korijen, bool sort){    //21
  127.     static tnode *stablo = korijen;
  128.     if(korijen == NULL) return;
  129.     if(!sort) binSort(korijen->l,sort);
  130.     else binSort(korijen->d, sort);
  131.     if(korijen != stablo) cout << "Redni broj robe: " << korijen->rBR << "\nNaziv robe: " << korijen->nR << "\nCijena komada robe: " << korijen->cK <<"\nKolicina robe: " << korijen->kolicina << "\nVrijeme unosa: " << korijen->vU/1000 << " sekundi\n\n";
  132.     if(!sort) binSort(korijen->d,sort);
  133.     else binSort(korijen->l, sort);
  134. }
  135.  
  136. void binTreeAdd(tnode *lista, tnode *korijen){      //20
  137.     int n=1;
  138.     if(korijen->rBR <= lista->rBR && korijen->l) binTreeAdd(lista,korijen->l);
  139.     else if(korijen->rBR > lista->rBR && korijen->d) binTreeAdd(lista,korijen->d);
  140.     else n = 0;
  141.     if(n) return;
  142.     tnode *drvo = korijen;
  143.     drvo = (drvo->rBR>lista->rBR?drvo->d:drvo->l) = new tnode;
  144.     drvo->rBR = lista->rBR;
  145.     drvo->kolicina = lista->kolicina;
  146.     drvo->cK = lista->cK;
  147.     drvo->vU = lista->vU;
  148.     strcpy(drvo->nR, lista->nR);
  149.     drvo->l = drvo->d = NULL;
  150. }
  151.    
  152. void binTree(tnode *glava, tnode *korijen){
  153.     if(glava == NULL){          //CETVRTO Testiranje, magic
  154.         return;
  155.     }
  156.     if(korijen->l) korijen->l=NULL;
  157.     if(korijen->d) korijen->d=NULL;
  158.    
  159.     tnode *lista = glava->next;
  160.     while(lista){
  161.         binTreeAdd(lista, korijen);
  162.         lista=lista->next;
  163.     }
  164.     bool sort = false;
  165.     cout << "0:- za silazno sortiranje; 1:- za ulazno\nU: ";
  166.     cin >> sort;
  167.     binSort(korijen, sort);
  168.    
  169. }
  170.            
  171. int main(){
  172.     tnode *glava = NULL;
  173.     tnode *korijen = NULL;
  174.     int izbor;
  175.     do{
  176.         cout <<"-----IZBORNIK-----\n0:- Alokacija glave v.l. i korijena b.s.\n1:- Dodavanje elementa na kraj d.v.l.\n2:- Dodavanje elementa na pocetak d.v.l.\n3:- Binarno stablo (kreiranje i ispis)\n4:-\n9:- Izalzak iz programa\nU:= ";
  177.         cin >> izbor;
  178.         switch(izbor){
  179.             case 0:
  180.                 if(alokacija(glava,korijen)){
  181.                     glava = new tnode;
  182.                     glava->next = NULL;
  183.                     glava->prev = NULL;
  184.                     korijen = new tnode;
  185.                     korijen->l = NULL;
  186.                     korijen->d = NULL;
  187.                 }
  188.                 break;
  189.             case 1:
  190.                 addNodeEnd(glava);
  191.                 break;
  192.             case 2:
  193.                 addNodeBeg(glava, Velicina_liste(glava));
  194.                 break;
  195.             case 3:
  196.                 binTree(glava, korijen);
  197.                 break;
  198.             case 4:break;       //PRVO TESTIRANJE
  199.         }
  200.        
  201.     }while(izbor!=9);
  202.  
  203. return 0;
  204. }
  205.  
  206. void dealokacija(tnode *korijen){
  207.     if(korijen->l)= dealokacija(korije->l);
  208.     if(korijen->d) dealokacija(korijen->d);
  209.     delete stablo;
  210.     return;
  211. }
  212.  
  213. tnode *find(tnode *korijen, int number){
  214.     tnode *leaf = korijen;
  215.     while(leaf){
  216.         if((leaf->broj == broj) && (leaf!=korijen)) break;
  217.         if(broj > leaf->broj) leaf = leaf->d;
  218.         else leaf = leaf->l;
  219.     }
  220.     return leaf;
  221. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement