Guest User

Untitled

a guest
May 20th, 2018
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.25 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. #include <algorithm>
  5. #include <fstream>
  6. using namespace std;
  7. class procesik {
  8.    
  9. public:
  10.     static int czas_ogolny;
  11.     int name;
  12.     bool used;
  13.     int time;
  14.     int waiting;
  15.     int come;
  16.     procesik(int nazwa, int czas, int nadejscie):name(nazwa), time(czas), come(nadejscie), waiting(0), used(0){
  17.    
  18.    
  19.     };
  20. procesik& operator +(const procesik &a) const{
  21.     procesik *s=new procesik(0,0,0);
  22.         s->time=a.time;
  23.         s->name=a.name;
  24.         s->come=a.come;
  25.         s->waiting=(this->time+this->waiting+this->come-s->come);
  26.         if(s->waiting<0)
  27.             s->waiting=0;
  28.         return *s;
  29. };
  30. static void nadaj(int a){ czas_ogolny = a;}
  31. friend  ostream &operator<< (ostream &wyjscie,procesik &b){
  32.     wyjscie<<b.name<<"\t \t"<<b.time<<"\t \t"<<b.come<<"\t \t"<<b.waiting<<"\n";
  33. return wyjscie;}
  34. bool operator< (procesik const &a) const {
  35.     if (come==a.come)
  36.         return (time<a.time);
  37.     if((come<a.come))
  38.     return(come<a.come);
  39.     else
  40.         return(come<a.come);
  41.    
  42.     };
  43. };
  44. int procesik::czas_ogolny=0;
  45. bool comp(procesik const &a, procesik const &b){
  46.     if((b.used==1)&&(a.used==0))
  47.         return true;
  48.     if ((b.come>b.czas_ogolny)&&(a.come<a.czas_ogolny))
  49.         return true;
  50.     if((a.time<=b.time)&&(a.come<=a.czas_ogolny)&&(a.used==0)&&(b.used==0)&&(b.come<b.czas_ogolny))
  51.         return true;
  52.     else
  53.         return false;
  54. };
  55. void FIFO1(){
  56. int pid=0;
  57. int czekanie=0;
  58. vector<procesik> dane;
  59. dane.clear();
  60. string plik1;
  61. string plik2;
  62. cout<<"Prosze wprowadzic nazwe pliku z ktorego beda odczytywane dane\n";
  63. cin>>plik1;
  64. cout<<"Prosze wprowadzic nazwe pliku do ktorego zapisywane wyniki\n";
  65. cin>>plik2;
  66. ifstream wejscie;
  67. ofstream wyjscie;
  68. wejscie.open(plik1.c_str());
  69. wyjscie.open(plik2.c_str());
  70. while(wejscie){
  71. int a;
  72. int b;
  73. wejscie>>a;
  74. wejscie>>b;
  75. if(a>0&&b>=0){
  76. dane.push_back(procesik(pid, a, b));
  77. pid++;}
  78. };
  79. sort (dane.begin(),dane.end()-1);
  80. for(unsigned int i=0;i<dane.size()-2;i++){
  81.     dane[i+1]=dane[i]+dane[i+1];}
  82.  
  83. wyjscie<<"PID \t cz. trwania \t cz. przyjscia  \t cz. oczekiwania \n";
  84. for(unsigned int i=0;i<dane.size()-1;i++){
  85.     wyjscie<<dane[i];
  86.     czekanie=czekanie+dane[i].waiting;}
  87. wyjscie<<"Średni czas oczkiewania to: "<<float(czekanie)/float((dane.size()-1))<<"\n";
  88. };
  89. void FIFO2(){
  90. int pid=0;
  91. int czekanie=0;
  92. vector<procesik> dane;
  93. dane.clear();
  94. vector<procesik> wynik;
  95. wynik.clear();
  96. string plik1;
  97. string plik2;
  98. cout<<"Prosze wprowadzic nazwe pliku z ktorego beda odczytywane dane\n";
  99. cin>>plik1;
  100. cout<<"Prosze wprowadzic nazwe pliku do ktorego zapisywane wyniki\n";
  101. cin>>plik2;
  102. ifstream wejscie;
  103. ofstream wyjscie;
  104. wejscie.open(plik1.c_str());
  105. wyjscie.open(plik2.c_str());
  106. while(wejscie){
  107. int a;
  108. int b;
  109. wejscie>>a;
  110. wejscie>>b;
  111. if(a>0&&b>=0){
  112. dane.push_back(procesik(pid, a, b));
  113. pid++;}
  114. };
  115. dane.pop_back();
  116. sort (dane.begin(),dane.end());
  117. wynik.push_back(dane[0]);
  118. pid--;
  119. for(unsigned int i=0;i<dane.size();i++){
  120.         int a=0;
  121.         int b=0;
  122.         cout<<"Wprowadz dodatkowe procesy, aby zakonczyc wprowadzanie podaj wartosc ujemna: \n";
  123.     do{
  124.         cout<<"Wprowadz czas rozpoczecia procesu, nie mniejszy od: "<<(wynik[0].czas_ogolny)<<" \n";
  125.         cin>>b;
  126.         if(b>=0){
  127.         cout<<"Wprowadz czas trwania procesu \n";
  128.         cin>>a;
  129.         if(a>=0&&b>=(wynik[0].czas_ogolny)){
  130.             dane.push_back(procesik(pid, a, b));
  131.             pid++;}}
  132.     }while(a>0&&b>0);
  133.     sort (dane.begin(),dane.end());
  134.     if(i>0){
  135.     wynik.push_back(dane[i]);
  136.     wynik[i]=wynik[i-1]+wynik[i];}
  137.     wynik[0].nadaj(wynik[i].waiting+wynik[i].time+wynik[i].come);
  138.     cout<<"PID \t cz. trwania \t cz. przyjscia  \t cz. oczekiwania \n";
  139.     for(unsigned int i=0;i<wynik.size();i++){
  140.         cout<<wynik[i]<<"\n";}
  141. }
  142.  
  143. wyjscie<<"PID \t cz. trwania \t cz. przyjscia  \t cz. oczekiwania \n";
  144. for(unsigned int i=0;i<wynik.size();i++){
  145.     wyjscie<<wynik[i];
  146.     czekanie=czekanie+wynik[i].waiting;}
  147. wyjscie<<"Średni czas oczkiewania to: "<<float(czekanie)/float((wynik.size()-1))<<"\n";
  148. };
  149.  
  150.  
  151.  
  152. void SJF1(){
  153. int pid=0;
  154. int czekanie=0;
  155. vector<procesik> dane;
  156. vector<procesik> wynik;
  157. vector<procesik>::iterator up;
  158. string plik1;
  159. string plik2;
  160. cout<<"Prosze wprowadzic nazwe pliku z ktorego beda odczytywane dane\n";
  161. cin>>plik1;
  162. cout<<"Prosze wprowadzic nazwe pliku do ktorego zapisywane wyniki\n";
  163. cin>>plik2;
  164. ifstream wejscie;
  165. ofstream wyjscie;
  166. wejscie.open(plik1.c_str());
  167. wyjscie.open(plik2.c_str());
  168. while(wejscie){
  169. int a;
  170. int b;
  171. wejscie>>a;
  172. wejscie>>b;
  173. if(a>0&&b>=0){
  174. dane.push_back(procesik(pid, a, b));
  175. pid++;}
  176. };
  177. dane.pop_back();
  178. pid--;
  179. sort (dane.begin(),dane.end());
  180. int a=dane[0].come;
  181. dane[0].nadaj(a);
  182. for (unsigned int i=0;i<dane.size();i++){
  183. vector<procesik>::iterator it;
  184. it = min_element (dane.begin(),dane.end(), comp);
  185. wynik.push_back(procesik(it->name, it->time, it->come));
  186. a=a+(it->time);
  187. it->nadaj(a);
  188. it->used=1;
  189. }
  190. for(unsigned int i=0;i<wynik.size()-1;i++){
  191.     wynik[i+1]=wynik[i]+wynik[i+1];}
  192. wyjscie<<"PID \t cz. trwania \t cz. przyjscia  \t cz. oczekiwania \n";
  193. for(unsigned int i=0;i<wynik.size();i++){
  194.     wyjscie<<wynik[i];
  195.     czekanie=czekanie+wynik[i].waiting;}
  196.  
  197.  
  198. wyjscie<<"Średni czas oczkiewania to: "<<float(czekanie)/float((wynik.size()-1))<<"\n";};
  199. void SJF2(){
  200. int pid=0;
  201. int czekanie=0;
  202. vector<procesik> dane;
  203. vector<procesik> wynik;
  204. vector<procesik>::iterator up;
  205. string plik1;
  206. string plik2;
  207. cout<<"Prosze wprowadzic nazwe pliku z ktorego beda odczytywane dane\n";
  208. cin>>plik1;
  209. cout<<"Prosze wprowadzic nazwe pliku do ktorego zapisywane wyniki\n";
  210. cin>>plik2;
  211. ifstream wejscie;
  212. ofstream wyjscie;
  213. wejscie.open(plik1.c_str());
  214. wyjscie.open(plik2.c_str());
  215. while(wejscie){
  216. int a;
  217. int b;
  218. wejscie>>a;
  219. wejscie>>b;
  220. if(a>0&&b>=0){
  221. dane.push_back(procesik(pid, a, b));
  222. pid++;}
  223. };
  224. dane.pop_back();
  225. pid--;
  226. sort (dane.begin(),dane.end());
  227. int a=dane[0].come;
  228. dane[0].nadaj(a);
  229. int czas=0;
  230. for (unsigned int i=0;i<dane.size();i++){
  231.     int c=0;
  232.         int b=0;
  233.         cout<<"Wprowadz dodatkowe procesy, aby zakonczyc wprowadzanie podaj wartosc ujemna: \n";
  234.     do{
  235.         cout<<"Wprowadz czas rozpoczecia procesu, nie mniejszy od: "<<czas<<" \n";
  236.         cin>>b;
  237.         if(b>=0){
  238.         cout<<"Wprowadz czas trwania procesu \n";
  239.         cin>>c;
  240.         if(c>=0&&b>=(czas)){
  241.             dane.push_back(procesik(pid, c, b));
  242.             pid++;}}
  243.     }while(a>0&&b>0);
  244. sort (dane.begin(),dane.end());
  245. vector<procesik>::iterator it;
  246. it = min_element (dane.begin(),dane.end(), comp);
  247. wynik.push_back(procesik(it->name, it->time, it->come));
  248. a=a+(it->time);
  249. it->nadaj(a);
  250. it->used=1;
  251. czas=czas+wynik[i].time;
  252. if(i>0)
  253. wynik[i]=wynik[i-1]+wynik[i];
  254. cout<<"PID \t cz. trwania \t cz. przyjscia  \t cz. oczekiwania \n";
  255. for(unsigned int i=0;i<wynik.size();i++){
  256.     cout<<wynik[i];czekanie=czekanie+wynik[i].waiting;}
  257. cout<<"Średni czas oczkiewania to: "<<float(czekanie)/float((wynik.size()-1))<<"\n";
  258. }
  259. czekanie=0;
  260. wyjscie<<"PID \t cz. trwania \t cz. przyjscia  \t cz. oczekiwania \n";
  261. for(unsigned int i=0;i<wynik.size();i++){
  262.     wyjscie<<wynik[i];
  263.     czekanie=czekanie+wynik[i].waiting;}
  264.  
  265. wyjscie<<"Średni czas oczkiewania to: "<<float(czekanie)/float((wynik.size()-1))<<"\n";
  266.  
  267.  
  268.  
  269.  
  270.  
  271.  
  272. };
  273.  
  274.  
  275. void Menu()
  276. {
  277.     cout << "Symulacja algorytmow kolejkowania" << endl;
  278.     cout << "1. FIFO - zamknięta pula procesów" <<endl;
  279.     cout << "2. FIFO - otwarta pula procesów" <<endl;
  280.     cout << "3. SJF - zamknięta pula procesów" <<endl;
  281.     cout << "4. SJF - otwarta pula procesów" <<endl;
  282.     cout << "0. Wyjście"<<endl;
  283.     cout << endl;
  284.     cout << "TWOJ WYBOR:";
  285. };
Add Comment
Please, Sign In to add comment