Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <vector>
- #include <algorithm>
- #include <fstream>
- using namespace std;
- class procesik {
- public:
- static int czas_ogolny;
- int name;
- bool used;
- int time;
- int waiting;
- int come;
- procesik(int nazwa, int czas, int nadejscie):name(nazwa), time(czas), come(nadejscie), waiting(0), used(0){
- };
- procesik& operator +(const procesik &a) const{
- procesik *s=new procesik(0,0,0);
- s->time=a.time;
- s->name=a.name;
- s->come=a.come;
- s->waiting=(this->time+this->waiting+this->come-s->come);
- if(s->waiting<0)
- s->waiting=0;
- return *s;
- };
- static void nadaj(int a){ czas_ogolny = a;}
- friend ostream &operator<< (ostream &wyjscie,procesik &b){
- wyjscie<<b.name<<"\t \t"<<b.time<<"\t \t"<<b.come<<"\t \t"<<b.waiting<<"\n";
- return wyjscie;}
- bool operator< (procesik const &a) const {
- if (come==a.come)
- return (time<a.time);
- if((come<a.come))
- return(come<a.come);
- else
- return(come<a.come);
- };
- };
- int procesik::czas_ogolny=0;
- bool comp(procesik const &a, procesik const &b){
- if((b.used==1)&&(a.used==0))
- return true;
- if ((b.come>b.czas_ogolny)&&(a.come<a.czas_ogolny))
- return true;
- if((a.time<=b.time)&&(a.come<=a.czas_ogolny)&&(a.used==0)&&(b.used==0)&&(b.come<b.czas_ogolny))
- return true;
- else
- return false;
- };
- void FIFO1(){
- int pid=0;
- int czekanie=0;
- vector<procesik> dane;
- dane.clear();
- string plik1;
- string plik2;
- cout<<"Prosze wprowadzic nazwe pliku z ktorego beda odczytywane dane\n";
- cin>>plik1;
- cout<<"Prosze wprowadzic nazwe pliku do ktorego zapisywane wyniki\n";
- cin>>plik2;
- ifstream wejscie;
- ofstream wyjscie;
- wejscie.open(plik1.c_str());
- wyjscie.open(plik2.c_str());
- while(wejscie){
- int a;
- int b;
- wejscie>>a;
- wejscie>>b;
- if(a>0&&b>=0){
- dane.push_back(procesik(pid, a, b));
- pid++;}
- };
- sort (dane.begin(),dane.end()-1);
- for(unsigned int i=0;i<dane.size()-2;i++){
- dane[i+1]=dane[i]+dane[i+1];}
- wyjscie<<"PID \t cz. trwania \t cz. przyjscia \t cz. oczekiwania \n";
- for(unsigned int i=0;i<dane.size()-1;i++){
- wyjscie<<dane[i];
- czekanie=czekanie+dane[i].waiting;}
- wyjscie<<"Średni czas oczkiewania to: "<<float(czekanie)/float((dane.size()-1))<<"\n";
- };
- void FIFO2(){
- int pid=0;
- int czekanie=0;
- vector<procesik> dane;
- dane.clear();
- vector<procesik> wynik;
- wynik.clear();
- string plik1;
- string plik2;
- cout<<"Prosze wprowadzic nazwe pliku z ktorego beda odczytywane dane\n";
- cin>>plik1;
- cout<<"Prosze wprowadzic nazwe pliku do ktorego zapisywane wyniki\n";
- cin>>plik2;
- ifstream wejscie;
- ofstream wyjscie;
- wejscie.open(plik1.c_str());
- wyjscie.open(plik2.c_str());
- while(wejscie){
- int a;
- int b;
- wejscie>>a;
- wejscie>>b;
- if(a>0&&b>=0){
- dane.push_back(procesik(pid, a, b));
- pid++;}
- };
- dane.pop_back();
- sort (dane.begin(),dane.end());
- wynik.push_back(dane[0]);
- pid--;
- for(unsigned int i=0;i<dane.size();i++){
- int a=0;
- int b=0;
- cout<<"Wprowadz dodatkowe procesy, aby zakonczyc wprowadzanie podaj wartosc ujemna: \n";
- do{
- cout<<"Wprowadz czas rozpoczecia procesu, nie mniejszy od: "<<(wynik[0].czas_ogolny)<<" \n";
- cin>>b;
- if(b>=0){
- cout<<"Wprowadz czas trwania procesu \n";
- cin>>a;
- if(a>=0&&b>=(wynik[0].czas_ogolny)){
- dane.push_back(procesik(pid, a, b));
- pid++;}}
- }while(a>0&&b>0);
- sort (dane.begin(),dane.end());
- if(i>0){
- wynik.push_back(dane[i]);
- wynik[i]=wynik[i-1]+wynik[i];}
- wynik[0].nadaj(wynik[i].waiting+wynik[i].time+wynik[i].come);
- cout<<"PID \t cz. trwania \t cz. przyjscia \t cz. oczekiwania \n";
- for(unsigned int i=0;i<wynik.size();i++){
- cout<<wynik[i]<<"\n";}
- }
- wyjscie<<"PID \t cz. trwania \t cz. przyjscia \t cz. oczekiwania \n";
- for(unsigned int i=0;i<wynik.size();i++){
- wyjscie<<wynik[i];
- czekanie=czekanie+wynik[i].waiting;}
- wyjscie<<"Średni czas oczkiewania to: "<<float(czekanie)/float((wynik.size()-1))<<"\n";
- };
- void SJF1(){
- int pid=0;
- int czekanie=0;
- vector<procesik> dane;
- vector<procesik> wynik;
- vector<procesik>::iterator up;
- string plik1;
- string plik2;
- cout<<"Prosze wprowadzic nazwe pliku z ktorego beda odczytywane dane\n";
- cin>>plik1;
- cout<<"Prosze wprowadzic nazwe pliku do ktorego zapisywane wyniki\n";
- cin>>plik2;
- ifstream wejscie;
- ofstream wyjscie;
- wejscie.open(plik1.c_str());
- wyjscie.open(plik2.c_str());
- while(wejscie){
- int a;
- int b;
- wejscie>>a;
- wejscie>>b;
- if(a>0&&b>=0){
- dane.push_back(procesik(pid, a, b));
- pid++;}
- };
- dane.pop_back();
- pid--;
- sort (dane.begin(),dane.end());
- int a=dane[0].come;
- dane[0].nadaj(a);
- for (unsigned int i=0;i<dane.size();i++){
- vector<procesik>::iterator it;
- it = min_element (dane.begin(),dane.end(), comp);
- wynik.push_back(procesik(it->name, it->time, it->come));
- a=a+(it->time);
- it->nadaj(a);
- it->used=1;
- }
- for(unsigned int i=0;i<wynik.size()-1;i++){
- wynik[i+1]=wynik[i]+wynik[i+1];}
- wyjscie<<"PID \t cz. trwania \t cz. przyjscia \t cz. oczekiwania \n";
- for(unsigned int i=0;i<wynik.size();i++){
- wyjscie<<wynik[i];
- czekanie=czekanie+wynik[i].waiting;}
- wyjscie<<"Średni czas oczkiewania to: "<<float(czekanie)/float((wynik.size()-1))<<"\n";};
- void SJF2(){
- int pid=0;
- int czekanie=0;
- vector<procesik> dane;
- vector<procesik> wynik;
- vector<procesik>::iterator up;
- string plik1;
- string plik2;
- cout<<"Prosze wprowadzic nazwe pliku z ktorego beda odczytywane dane\n";
- cin>>plik1;
- cout<<"Prosze wprowadzic nazwe pliku do ktorego zapisywane wyniki\n";
- cin>>plik2;
- ifstream wejscie;
- ofstream wyjscie;
- wejscie.open(plik1.c_str());
- wyjscie.open(plik2.c_str());
- while(wejscie){
- int a;
- int b;
- wejscie>>a;
- wejscie>>b;
- if(a>0&&b>=0){
- dane.push_back(procesik(pid, a, b));
- pid++;}
- };
- dane.pop_back();
- pid--;
- sort (dane.begin(),dane.end());
- int a=dane[0].come;
- dane[0].nadaj(a);
- int czas=0;
- for (unsigned int i=0;i<dane.size();i++){
- int c=0;
- int b=0;
- cout<<"Wprowadz dodatkowe procesy, aby zakonczyc wprowadzanie podaj wartosc ujemna: \n";
- do{
- cout<<"Wprowadz czas rozpoczecia procesu, nie mniejszy od: "<<czas<<" \n";
- cin>>b;
- if(b>=0){
- cout<<"Wprowadz czas trwania procesu \n";
- cin>>c;
- if(c>=0&&b>=(czas)){
- dane.push_back(procesik(pid, c, b));
- pid++;}}
- }while(a>0&&b>0);
- sort (dane.begin(),dane.end());
- vector<procesik>::iterator it;
- it = min_element (dane.begin(),dane.end(), comp);
- wynik.push_back(procesik(it->name, it->time, it->come));
- a=a+(it->time);
- it->nadaj(a);
- it->used=1;
- czas=czas+wynik[i].time;
- if(i>0)
- wynik[i]=wynik[i-1]+wynik[i];
- cout<<"PID \t cz. trwania \t cz. przyjscia \t cz. oczekiwania \n";
- for(unsigned int i=0;i<wynik.size();i++){
- cout<<wynik[i];czekanie=czekanie+wynik[i].waiting;}
- cout<<"Średni czas oczkiewania to: "<<float(czekanie)/float((wynik.size()-1))<<"\n";
- }
- czekanie=0;
- wyjscie<<"PID \t cz. trwania \t cz. przyjscia \t cz. oczekiwania \n";
- for(unsigned int i=0;i<wynik.size();i++){
- wyjscie<<wynik[i];
- czekanie=czekanie+wynik[i].waiting;}
- wyjscie<<"Średni czas oczkiewania to: "<<float(czekanie)/float((wynik.size()-1))<<"\n";
- };
- void Menu()
- {
- cout << "Symulacja algorytmow kolejkowania" << endl;
- cout << "1. FIFO - zamknięta pula procesów" <<endl;
- cout << "2. FIFO - otwarta pula procesów" <<endl;
- cout << "3. SJF - zamknięta pula procesów" <<endl;
- cout << "4. SJF - otwarta pula procesów" <<endl;
- cout << "0. Wyjście"<<endl;
- cout << endl;
- cout << "TWOJ WYBOR:";
- };
Add Comment
Please, Sign In to add comment