Sei sulla pagina 1di 6

UNIVERZITET U BIHAU TEHNIKI FAKULTET BIHA Elektrotehniki odsjek Smjer Informatika

Seminarski rad
Algoritmi i Strukture
Tema : Lista prioriteta

Mentor : Eldin Okanovi Biha, januar, 2011.god.

Student : Ammar Kevilj- 520

Zadatak br. 21 Napisati program u C++ koji e izvravanje procesa po prioritetima. Svaki proces e predstavljati jedan red, dok vor reda predstavlja prioritet procesa. Na poetku programa trai se od korisnika da unese broj redova (procesa), na osnovu ega e se generisati glavna lista. Svaki vor glavne liste sadri memorijsku adresu procesa i vrijednost njegovog prioriteta. Prioritet procesa je prioritet prvog vora u tom procesu (redu). 1. Unesi novi prioritet (novi vor) u proces 2. Izvri simulaciju izvravanja svih procesa Opcija 1: Od korisnika se trai da unese redni broj reda (procesa), te broj koji e biti spremljen u vor reda i dodat na kraj reda. Opcija 2: Izvravanjem simulacije se smatra ispisivanje rednog broja procesa sa najveim prioritetom, te njegovog prioriteta, nakon ega se taj prioritet brie iz tog procesa. Postupak se ponavlja dok se svi procesi ne izvre, odnosno svi redovi ne isprazne. Rijeenje : Programski kod u C++ : #include<iostream> #include<conio.h> using namespace std; struct ProcesCvor{ int prioritet; ProcesCvor* sljedeci; }; struct Proces{ ProcesCvor *glava; ProcesCvor *rep; }; struct CvorListe{ int prioritet; Proces *proces; CvorListe *sljedeci; }; CvorListe *glava=NULL; CvorListe *iniCvorListe(){ CvorListe *pok=new CvorListe(); pok->prioritet=0; pok->sljedeci=NULL; Proces *pro=new Proces(); pro->glava=NULL;

pro->rep=NULL; pok->proces=pro; return pok; } void dodajCvorListe(CvorListe *novi){ if(glava==NULL){ glava=novi; } else{ CvorListe *tmp=glava; while(tmp->sljedeci!=NULL){ tmp=tmp->sljedeci; } tmp->sljedeci=novi; }} void ispisPrioriteta(){ int pozicija=0; CvorListe *temp=glava; if(temp==NULL){ cout<<"Lista je prazna"<<endl; } while(temp!=NULL){ pozicija++; if(temp->prioritet!=0){ cout<<"Cvor "<<pozicija<<" : "<<temp->prioritet<<endl;} else{ cout<<"Cvor "<<pozicija<<" je prazan"<<endl;} temp=temp->sljedeci; } cout<<endl; cout<<"Broj cvorova u glavnoj listi je : "<<pozicija<<endl; cout<<endl; delete temp; } ProcesCvor *iniProcesCvor(int broj); void dodajProcesCvor(ProcesCvor *novi,Proces *p); void prioritet(); int maximum(int brProcesa); void *DeQueue(Proces *r); void eliminisi(int q,int brProcesa); int main(){ int brProcesa; cout<<"Sa koliko procesa zelite raditi : "; cin>>brProcesa; cout<<endl;

int brojac=0; while(brojac<brProcesa){ CvorListe *pok=iniCvorListe(); dodajCvorListe(pok);} brojac++; int opcija=1; while(opcija!=0){ cout<<"------------------OPCIJE---------------------"<<endl; cout<<endl; cout<<"1. Unesi novi prioritet (novi cvor) u proces"<<endl; cout<<"2. Izvrsi simulaciju izvrsavanja svih procesa"<<endl; cout<<"0. Izlaz"<<endl; cout<<endl; cout<<"Izaberite jednu opciju : "; cin>>opcija; cout<<endl; switch(opcija){ case 1:{ cout<<"Unesi redni broj procesa : "; int redBrProcesa,broj; cin>>redBrProcesa; cout<<endl; if(redBrProcesa<=brProcesa){ cout<<"Unesi broj koji ce biti spremljen u cvor procesa : "; cin>>broj; cout<<endl; Proces *p=NULL; CvorListe *tmp=glava; p=tmp->proces; int i=1; while(i<redBrProcesa){ tmp=tmp->sljedeci; p=tmp->proces; i++; } dodajProcesCvor(iniProcesCvor(broj),p); } else{ cout<<"Unijeli ste pogresan redni broj, pokusajte ponovo !!!"<<endl; } cout<<endl; break;} case 2:{ prioritet(); CvorListe *tmp=glava; Proces *p=tmp->proces;

while(p->glava!=NULL){ for(int i=0;i<brProcesa;i++){ for(int j=0;j<brProcesa;j++){ eliminisi(maximum(brProcesa),brProcesa); } eliminisi(maximum(brProcesa),brProcesa); }} cout<<endl; ispisPrioriteta(); break;} default :{ if(opcija!=0) cout<<"Unijeli ste pogresnu opciju, pokusajte ponove !!!"<<endl; cout<<endl; break;} }} system("pause"); return 1; } ProcesCvor *iniProcesCvor(int broj){ ProcesCvor *pok=new ProcesCvor(); pok->prioritet=broj; pok->sljedeci=NULL; return pok; } void dodajProcesCvor(ProcesCvor *novi,Proces *p){ if(p->glava==NULL){ p->glava=novi; p->rep=novi; } else{ p->rep->sljedeci=novi; p->rep=novi; }} void prioritet(){ Proces *p=NULL; CvorListe *tmp=glava; p=tmp->proces; while(tmp!=NULL){ p=tmp->proces; if(p->glava!=NULL){ tmp->prioritet=p->glava->prioritet;} tmp=tmp->sljedeci; }} int maximum(int brProcesa){ int max=0;

int i=0; CvorListe *tmp1=glava; Proces *pok1=tmp1->proces; ProcesCvor *p1=pok1->glava; while(i<brProcesa){ pok1=tmp1->proces; p1=pok1->glava; if(p1!=NULL){ if(max<(p1->prioritet)){ max=p1->prioritet; }} tmp1=tmp1->sljedeci; i++; } return max; } void *DeQueue(Proces *r){ if(r->glava==NULL){ return NULL;} else{ ProcesCvor *tmp=r->glava; r->glava=r->glava->sljedeci; if(r->glava==NULL) r->rep==NULL; tmp->sljedeci==NULL; }} void eliminisi(int q,int brProcesa){ int brojac=1 ; CvorListe *tmp1=glava; Proces *pok1=tmp1->proces; ProcesCvor *p1=pok1->glava; int i=0; while(i<brProcesa){ pok1=tmp1->proces; p1=pok1->glava; if(p1!=NULL){ if(p1->prioritet==q){ cout<<"Izvrasva se Proces "<<brojac<<" s prioritetom : "<<q<<endl; DeQueue(pok1); }} tmp1=tmp1->sljedeci; brojac++; i++; } prioritet(); }

Potrebbero piacerti anche