/ Published in: C++
Implementacija uz pomoć polja, rekurzivna funkcija po mom mišljenju vrlo dobro napravljena. Također funkcija za propuštanje starijih osoba je vrlo zanimljiva.
Expand |
Embed | Plain Text
Implementacija cirkularnog polja #include <iostream> using namespace std; typedef int element; struct klijent{ char prez_ime[50]; char vrsta_transakcije[20]; element godina_rodjenja; float stanje; }; struct red { klijent elements[10000]; element front,rear; }; element AddOne(int i){ return ((i+1)%1000); }; klijent InitQ(red *jedan){ jedan->rear=999; jedan->front=0; }; klijent FrontQ(red *jedan){ if(AddOne(jedan->rear)==jedan->front){ cout<<"Red je prazan!"<<endl; } else{ return jedan->elements[jedan->front]; } }; void EnQueueQ(klijent x,red *jedan){ if(AddOne(AddOne(jedan->rear))==jedan->front) cout<<"Red je pun!"; else{ jedan->rear=AddOne(jedan->rear); jedan->elements[jedan->rear]=x; } }; void DeQueueQ(red *jedan){ if(AddOne(jedan->rear)==jedan->front){ cout<<"Red je prazan!"; } else{ jedan->front=AddOne(jedan->front); } }; element IsEmptyQ(red *jedan){ if(AddOne(jedan->rear)!=jedan->front) return 0; else return -1; } Zadatak #include<iostream> #include <cstring> #include "stog_polje.h" klijent x,y; int glavni=0,brojac=0; void ispis(red *polje,red *tmp){ do{ x=FrontQ(polje); cout<<"================================="<<endl; cout<<"Ime i prezime klijenta:\t"<<x.prez_ime<<endl; cout<<"Godina rodjenja:\t"<<x.godina_rodjenja<<endl; cout<<"Stanje na racunu:\t"<<x.stanje<<endl; cout<<"Vrsta transakcije:\t"<<x.vrsta_transakcije<<endl; EnQueueQ(x,tmp); DeQueueQ(polje); }while(IsEmptyQ(polje)!=-1); cout<<"================================="<<endl; do{ y=FrontQ(tmp); EnQueueQ(y,polje); DeQueueQ(tmp); }while(IsEmptyQ(tmp)!=-1); }; void godine(red *polje,red *tmp){ brojac=glavni; while(brojac>0){ x=FrontQ(polje); if (x.godina_rodjenja<=1965){ EnQueueQ(x,polje); brojac--; DeQueueQ(polje); } else{ EnQueueQ(x,tmp); brojac--; DeQueueQ(polje); } } while(IsEmptyQ(tmp)!=-1){ y=FrontQ(tmp); EnQueueQ(y,polje); DeQueueQ(tmp); } ispis(polje,tmp); }; void dodavanje_zapisa(red *polje,red *tmp){ int vrsta; cout<<"Unesite ime_prezime klijenta: ";cin>>x.prez_ime; cout<<"Unesite godinu rodjenja: ";cin>>x.godina_rodjenja; cout<<"Unesite stanje na racunu: ";cin>>x.stanje; cout<<"Koju vrstu transakcije zelite napravit.\n1. Uplate/isplate\n2. Placanje racuna\n3. Krediti"<<endl; cin>>vrsta; if(vrsta==1) strcpy(x.vrsta_transakcije,"Uplate/isplate"); if(vrsta==2) strcpy(x.vrsta_transakcije,"Placanje racuna"); if(vrsta==3) strcpy(x.vrsta_transakcije,"Krediti"); EnQueueQ(x,polje); }; void izbacivanje(red *polje, red *tmp){ do{ x=FrontQ(polje); if(x.stanje<100){ cout<<"Klijent: "<<x.prez_ime<<" ima manje od 100 kn te ga izbacujemo iz reda"<<endl; DeQueueQ(polje); } else{ EnQueueQ(x,tmp); DeQueueQ(polje); } }while(IsEmptyQ(polje)!=-1); while(IsEmptyQ(tmp)!=-1){ x=FrontQ(tmp); EnQueueQ(x,polje); DeQueueQ(tmp); } }; red* premjestanje(red *polje) { if (IsEmptyQ(polje)==0) { klijent x = FrontQ(polje); //zapamti klijenta s pročelja DeQueueQ(polje); //makni ga EnQueueQ(x, premjestanje(polje)); //dodaj ga nakon što dodaš ostale } return polje; //vrati rezultirajući red } int main(){ red *polje = new red; InitQ(polje); red *tmp=new red; InitQ(tmp); int izbor; do{ cout<<"1. Dodavanje zapisa o klijentima banke u red"<<endl; cout<<"2. Izbacivanje iz reda klijenata koji imaju manje od 100 kn na racunu"<<endl; cout<<"3. Otvaranje novog saltera"<<endl; cout<<"9. Izlaz iz programa\nVas izbor: "; cin>>izbor; switch (izbor){ case 1: char jos; do{ glavni++; dodavanje_zapisa(polje,tmp); cout<<"Zelite li dodat jos jednog klijenta(d/n)"<<endl; cin>>jos; }while(jos=='d'); godine(polje,tmp); break; case 2: izbacivanje(polje,tmp); ispis(polje,tmp); break; case 3: cout<<"Ovaj salter se zatvara i otvara se novi"<<endl; premjestanje (polje); ispis (polje, tmp); break; case 9: cout<<"Izlaz iz programa";break; default: cout<<"Krivi unos"<<endl; }; }while(izbor!=9); return 0; }
You need to login to post a comment.
