Advertisement
BSIT_21

Scheduling Algorithm (Adlaon/Amalin)

Jul 30th, 2019
207
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 29.47 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. struct Process
  6. {
  7.     int number;
  8.     int arrivalTime;
  9.     int burstTime;
  10.     int startTime;
  11.     int endTime;
  12.     int turnTime;
  13.     int waitTime;
  14.     int priority;
  15. };
  16.  
  17. int main()
  18. {
  19.     bool exit = false;
  20.     while(!exit)
  21.     {
  22.         int option = 0;
  23.         bool running = true;
  24.         bool valid = false;
  25.         char quit = ' ';
  26.         int processes = 0;
  27.         int tempPN = 0;
  28.         int tempAT = 0;
  29.         int tempBT = 0;
  30.         int tempST = 0;
  31.         int tempET = 0;
  32.         int tempTT = 0;
  33.         int tempWT = 0;
  34.         int tempPR = 0;
  35.         float turnTimeAve = 0;
  36.         float waitTimeAve = 0;
  37.         float burstTime = 0;
  38.        
  39.         cout << "==============================\n";
  40.         cout << "|    SCHEDULING ALGORITHM    |\n";
  41.         cout << "==============================\n";
  42.         cout << "|           OPTION           |\n";
  43.         cout << "|                            |\n";
  44.         cout << "| [1] First-Come-First-Serve |\n";
  45.         cout << "| [2] Shortest-Job-First     |\n";
  46.         cout << "| [3] Priority               |\n";
  47.         cout << "| [4] Quit                   |\n";
  48.         cout << "|                            |\n";
  49.         cout << "==============================\n";
  50.        
  51.         valid = false;
  52.         while(!valid)
  53.         {
  54.            
  55.             cout << "Enter No.: ";
  56.             cin >> option;
  57.             system("cls");
  58.             if(cin.good() && option > 0 && option <= 4) valid = true;
  59.             else
  60.             {
  61.                 cout << "==============================\n";
  62.                 cout << "|    SCHEDULING ALGORITHM    |\n";
  63.                 cout << "==============================\n";
  64.                 cout << "|           OPTION           |\n";
  65.                 cout << "|                            |\n";
  66.                 cout << "| [1] First-Come-First-Serve |\n";
  67.                 cout << "| [2] Shortest-Job-First     |\n";
  68.                 cout << "| [3] Priority               |\n";
  69.                 cout << "| [4] Quit                   |\n";
  70.                 cout << "|                            |\n";
  71.                 cout << "==============================\n";
  72.                 cout << "Invalid option!\n";
  73.                 cin.clear();
  74.                 cin.ignore();
  75.             }
  76.         }
  77.        
  78.         switch(option)
  79.         {
  80.             case 1:
  81.                 system("cls");
  82.                 running = true;
  83.                 while(running)
  84.                 {
  85.                     cout << "First-Come-First-Serve (FCFS) Scheduling Algorithm" << endl;
  86.                     cout << "==================================================" << endl;
  87.                    
  88.                     valid = false;
  89.                     while(!valid)
  90.                     {
  91.                         cout << "Enter number of processes: ";
  92.                         cin >> processes;
  93.                         if(cin.good() && processes > 1) valid = true;
  94.                         else
  95.                         {
  96.                             cin.clear();
  97.                             cin.ignore();
  98.                         }
  99.                     }
  100.                    
  101.                     system("cls");
  102.                    
  103.                     cout << "First-Come-First-Serve (FCFS) Scheduling Algorithm" << endl;
  104.                     cout << "==================================================" << endl;
  105.                    
  106.                     Process prcs[processes];
  107.                    
  108.                     for(int i = 0; i < processes; i++)
  109.                     {
  110.                         cout << "Process No. " << i + 1 << endl;
  111.                         prcs[i].number = i + 1;
  112.                        
  113.                         valid = false;
  114.                         while(!valid)
  115.                         {
  116.                             cout << "Arrival Time: ";
  117.                             cin >> prcs[i].arrivalTime;
  118.                             if(cin.good() && prcs[i].arrivalTime >= 0) valid = true;
  119.                             else
  120.                             {
  121.                                 cin.clear();
  122.                                 cin.ignore();
  123.                             }
  124.                         }
  125.                        
  126.                         valid = false;
  127.                         while(!valid)
  128.                         {
  129.                             cout << "Burst Time: ";
  130.                             cin >> prcs[i].burstTime;
  131.                             if(cin.good() && prcs[i].burstTime > 0)
  132.                             {
  133.                                 valid = true;
  134.                                 cout << "\n";  
  135.                             }
  136.                             else
  137.                             {
  138.                                 cin.clear();
  139.                                 cin.ignore();
  140.                             }
  141.                         }
  142.                     }
  143.                    
  144.                     system("cls");
  145.                    
  146.                     cout << "First-Come-First-Serve (FCFS) Scheduling Algorithm" << endl;
  147.                     cout << "==================================================" << endl;
  148.                    
  149.                     cout << "Unsorted Data" << endl;
  150.                     cout << "Process\t\tArrival Time\tBurst Time" << endl;
  151.                     for(int i = 0; i < processes; i++)
  152.                     {
  153.                         cout << prcs[i].number << "\t\t" << prcs[i].arrivalTime << "\t\t" << prcs[i].burstTime << endl;
  154.                     }
  155.                    
  156.                     //Sorting to arrival time
  157.                     for(int i = 0; i < processes; i++)
  158.                     {
  159.                         for(int j = 0; j < processes - i - 1; j++)
  160.                         {
  161.                             if(prcs[j].arrivalTime > prcs[j + 1].arrivalTime)
  162.                             {
  163.                                 tempAT = prcs[j + 1].arrivalTime;
  164.                                 prcs[j + 1].arrivalTime = prcs[j].arrivalTime;
  165.                                 prcs[j].arrivalTime = tempAT;
  166.                                
  167.                                 tempBT = prcs[j + 1].burstTime;
  168.                                 prcs[j + 1].burstTime = prcs[j].burstTime;
  169.                                 prcs[j].burstTime = tempBT;
  170.                                
  171.                                 tempPN = prcs[j + 1].number;
  172.                                 prcs[j + 1].number = prcs[j].number;
  173.                                 prcs[j].number = tempPN;
  174.                             }
  175.                         }
  176.                     }
  177.                    
  178.                     cout << "\nSorted Data" << endl;
  179.                     cout << "Process\t\tArrival Time\tBurst Time" << endl;
  180.                     for(int i = 0; i < processes; i++)
  181.                     {
  182.                         if(i == 0)
  183.                         {
  184.                             prcs[0].startTime = prcs[0].arrivalTime;
  185.                             prcs[0].endTime = prcs[0].arrivalTime + prcs[0].burstTime;
  186.                         }
  187.                         else
  188.                         {
  189.                             prcs[i].startTime = prcs[i - 1].endTime;
  190.                             if(prcs[i].arrivalTime > prcs[i].startTime) prcs[i].startTime = prcs[i].arrivalTime;
  191.                             prcs[i].endTime = prcs[i].startTime + prcs[i].burstTime;
  192.                         }
  193.                         cout << prcs[i].number << "\t\t" << prcs[i].arrivalTime << "\t\t" << prcs[i].burstTime << endl;
  194.                     }
  195.                    
  196.                     cout << "\nGantt Chart" << endl;
  197.                     //Top line
  198.                     for(int i = 0; i < processes; i++)
  199.                     {
  200.                         if(i == 0 && prcs[0].startTime != 0) cout << "========";
  201.                         else if (i == 0 && prcs[0].startTime == 0) cout << "========";
  202.                         else if (prcs[i].startTime != prcs[i - 1].endTime) cout << "========";
  203.                         if (i == processes - 1) cout << "========\n";
  204.                         else if (prcs[i].startTime != 0) cout << "========";
  205.                     }
  206.                    
  207.                     //Idle/Process No. Bar
  208.                     for(int i = 0; i < processes; i++)
  209.                     {  
  210.                    
  211.                         if(i == 0 && prcs[0].startTime != 0) cout << "[ IDLE ]";
  212.                         else if(i == 0 && prcs[0].startTime == 0) cout << "[  P" << prcs[0].number << "  ]";
  213.                         else if(prcs[i].startTime != prcs[i - 1].endTime) cout << "[ IDLE ]";
  214.                        
  215.                         if (i == processes - 1) cout << "[  P" << prcs[i].number << "  ]\n";
  216.                         else if (prcs[i].startTime != 0) cout << "[  P" << prcs[i].number << "  ]";
  217.                     }
  218.                    
  219.                     //Bottom line
  220.                     for(int i = 0; i < processes; i++)
  221.                     {
  222.                         if(i == 0 && prcs[0].startTime != 0) cout << "========";
  223.                         else if (i == 0 && prcs[0].startTime == 0) cout << "========";
  224.                         else if (prcs[i].startTime != prcs[i - 1].endTime) cout << "========";
  225.                         if (i == processes - 1) cout << "========\n";
  226.                         else if (prcs[i].startTime != 0) cout << "========";
  227.                     }
  228.                    
  229.                     //Number label
  230.                     for(int i = 0; i < processes; i++)
  231.                     {
  232.                         if (i == 0 && prcs[0].startTime != 0) cout << "0      " << prcs[0].startTime << "       " << prcs[0].endTime << "       ";
  233.                         else if (i == 0 && prcs[0].startTime == 0) cout << prcs[0].startTime << "      " << prcs[0].endTime << "      ";
  234.                         else if (prcs[i].startTime != prcs[i - 1].endTime) cout << prcs[i].startTime << "       " << prcs[i].endTime << "       ";
  235.                         else cout << prcs[i].endTime << "      ";
  236.                     }
  237.                    
  238.                     //Sorting to process no.
  239.                     for(int i = 0; i < processes; i++)
  240.                     {
  241.                         for(int j = 0; j < processes - i - 1; j++)
  242.                         {
  243.                             if(prcs[j].number > prcs[j + 1].number)
  244.                             {
  245.                                 tempPN = prcs[j + 1].number;
  246.                                 prcs[j + 1].number = prcs[j].number;
  247.                                 prcs[j].number = tempPN;
  248.                                
  249.                                 tempAT = prcs[j + 1].arrivalTime;
  250.                                 prcs[j + 1].arrivalTime = prcs[j].arrivalTime;
  251.                                 prcs[j].arrivalTime = tempAT;
  252.                                
  253.                                 tempBT = prcs[j + 1].burstTime;
  254.                                 prcs[j + 1].burstTime = prcs[j].burstTime;
  255.                                 prcs[j].burstTime = tempBT;
  256.                                
  257.                                 tempST = prcs[j + 1].startTime;
  258.                                 prcs[j + 1].startTime = prcs[j].startTime;
  259.                                 prcs[j].startTime = tempST;
  260.                                
  261.                                 tempET = prcs[j + 1].endTime;
  262.                                 prcs[j + 1].endTime = prcs[j].endTime;
  263.                                 prcs[j].endTime = tempET;
  264.                                
  265.                                 tempTT = prcs[j + 1].turnTime;
  266.                                 prcs[j + 1].turnTime = prcs[j].turnTime;
  267.                                 prcs[j].turnTime = tempTT;
  268.                                
  269.                                 tempWT = prcs[j + 1].waitTime;
  270.                                 prcs[j + 1].waitTime = prcs[j].waitTime;
  271.                                 prcs[j].waitTime = tempWT;
  272.                             }
  273.                         }
  274.                     }
  275.                    
  276.                     cout << "\n\nTurnaround Time" << endl;
  277.                     for(int i = 0; i < processes; i++)
  278.                     {
  279.                         prcs[i].turnTime = prcs[i].endTime - prcs[i].arrivalTime;
  280.                         cout << "TT[" << i + 1 << "] = " << prcs[i].endTime << " - " << prcs[i].arrivalTime << " = " << prcs[i].turnTime << endl;
  281.                         turnTimeAve += prcs[i].turnTime;
  282.                     }
  283.                     cout << "----------------------" << endl;
  284.                     printf("TT[A] = %.2f / %i = %.2f\n", turnTimeAve, processes, turnTimeAve / processes);
  285.                     turnTimeAve /= processes;
  286.                    
  287.                     cout << "\nWaiting Time" << endl;
  288.                     for(int i = 0; i < processes; i++)
  289.                     {
  290.                         prcs[i].waitTime = prcs[i].startTime - prcs[i].arrivalTime;
  291.                         cout << "WT[" << i + 1 << "] = " << prcs[i].startTime << " - " << prcs[i].arrivalTime << " = " << prcs[i].waitTime << endl;
  292.                         waitTimeAve += prcs[i].waitTime;
  293.                     }
  294.                     cout << "----------------------" << endl;
  295.                     printf("WT[A] = %.2f / %i = %.2f\n", waitTimeAve, processes, waitTimeAve / processes);
  296.                     waitTimeAve /= processes;
  297.                    
  298.                     cout << "\n======================" << endl;
  299.                     cout << "TT - WT = BT" << endl;
  300.                     burstTime = turnTimeAve - waitTimeAve;
  301.                     printf("%.2f - %.2f = %.2f\n", turnTimeAve, waitTimeAve, burstTime);
  302.                     cout << "======================" << endl;
  303.                    
  304.                     valid = false;
  305.                     while(!valid)
  306.                     {
  307.                         cout << "Would you like to quit?\n";
  308.                         cout << "[Y] - Main Menu\n";
  309.                         cout << "[N] - Run again\n";
  310.                         cout << "[Y/N]: ";
  311.                         cin >> quit;
  312.                         if(cin.good() && quit == 'Y' || quit == 'y')
  313.                         {
  314.                             system("cls");
  315.                             valid = true;
  316.                             running = false;
  317.                         }
  318.                         else if (cin.good() && quit == 'N' || quit == 'n')
  319.                         {
  320.                             system("cls");
  321.                             valid = true;
  322.                            
  323.                             turnTimeAve = 0;
  324.                             waitTimeAve = 0;
  325.                             burstTime = 0;
  326.                         }
  327.                         else
  328.                         {
  329.                             cout << "Invalid input!\n";
  330.                             cin.clear();
  331.                             cin.ignore();
  332.                         }
  333.                     }
  334.                 }
  335.                 break;
  336.            
  337.             case 2:
  338.                 system("cls");
  339.                 running = true;
  340.                 while(running)
  341.                 {
  342.                     cout << "Shortest-Job-First (SJF) Scheduling Algorithm" << endl;
  343.                     cout << "==================================================" << endl;
  344.                    
  345.                     valid = false;
  346.                     while(!valid)
  347.                     {
  348.                         cout << "Enter number of processes: ";
  349.                         cin >> processes;
  350.                         if(cin.good() && processes > 1) valid = true;
  351.                         else
  352.                         {
  353.                             cin.clear();
  354.                             cin.ignore();
  355.                         }
  356.                     }
  357.                    
  358.                     system("cls");
  359.                    
  360.                     cout << "Shortest-Job-First (SJF) Scheduling Algorithm" << endl;
  361.                     cout << "==================================================" << endl;
  362.                    
  363.                     Process prcs[processes];
  364.                    
  365.                     for(int i = 0; i < processes; i++)
  366.                     {
  367.                         cout << "Process No. " << i + 1 << endl;
  368.                         prcs[i].number = i + 1;
  369.                        
  370.                         valid = false;
  371.                         while(!valid)
  372.                         {
  373.                             cout << "Arrival Time: ";
  374.                             cin >> prcs[i].arrivalTime;
  375.                             if(cin.good() && prcs[i].arrivalTime >= 0) valid = true;
  376.                             else
  377.                             {
  378.                                 cin.clear();
  379.                                 cin.ignore();
  380.                             }
  381.                         }
  382.                        
  383.                         valid = false;
  384.                         while(!valid)
  385.                         {
  386.                             cout << "Burst Time: ";
  387.                             cin >> prcs[i].burstTime;
  388.                             if(cin.good() && prcs[i].burstTime > 0)
  389.                             {
  390.                                 valid = true;
  391.                                 cout << "\n";  
  392.                             }
  393.                             else
  394.                             {
  395.                                 cin.clear();
  396.                                 cin.ignore();
  397.                             }
  398.                         }
  399.                     }
  400.                    
  401.                     system("cls");
  402.                    
  403.                     cout << "Shortest-Job-First (SJF) Scheduling Algorithm" << endl;
  404.                     cout << "==================================================" << endl;
  405.                    
  406.                     cout << "Unsorted Data" << endl;
  407.                     cout << "Process\t\tArrival Time\tBurst Time" << endl;
  408.                     for(int i = 0; i < processes; i++)
  409.                     {
  410.                         cout << prcs[i].number << "\t\t" << prcs[i].arrivalTime << "\t\t" << prcs[i].burstTime << endl;
  411.                     }
  412.                    
  413.                     //Sorting to arrival time
  414.                     for(int i = 0; i < processes; i++)
  415.                     {
  416.                         for(int j = 0; j < processes - i - 1; j++)
  417.                         {
  418.                             if(prcs[j].arrivalTime >= prcs[j + 1].arrivalTime)
  419.                             {
  420.                                 tempAT = prcs[j + 1].arrivalTime;
  421.                                 prcs[j + 1].arrivalTime = prcs[j].arrivalTime;
  422.                                 prcs[j].arrivalTime = tempAT;
  423.                                
  424.                                 tempBT = prcs[j + 1].burstTime;
  425.                                 prcs[j + 1].burstTime = prcs[j].burstTime;
  426.                                 prcs[j].burstTime = tempBT;
  427.                                
  428.                                 tempPN = prcs[j + 1].number;
  429.                                 prcs[j + 1].number = prcs[j].number;
  430.                                 prcs[j].number = tempPN;
  431.                             }
  432.                         }
  433.                     }
  434.                    
  435.                     for(int i = 0; i < processes; i++)
  436.                     {
  437.                         if(i == 0)
  438.                         {
  439.                             prcs[0].startTime = prcs[0].arrivalTime;
  440.                             prcs[0].endTime = prcs[0].arrivalTime + prcs[0].burstTime;
  441.                         }
  442.                         else
  443.                         {
  444.                             prcs[i].startTime = prcs[i - 1].endTime;
  445.                             if(prcs[i].arrivalTime > prcs[i].startTime) prcs[i].startTime = prcs[i].arrivalTime;
  446.                             prcs[i].endTime = prcs[i].startTime + prcs[i].burstTime;
  447.                         }
  448.                     }
  449.                    
  450.                     //Sorting to arrival time & burst time
  451.                     for (int i = 0; i < processes; i++)
  452.                     {
  453.                         for (int j = 1; j < processes - i - 1; j++)
  454.                         {
  455.                             //if (j != 0 && prcs[j].endTime >= prcs[j + 1].arrivalTime && prcs[j].burstTime > prcs[j + 1].burstTime)
  456.                             if(j != 0 && prcs[j].arrivalTime <= prcs[j - 1].endTime && prcs[j].burstTime > prcs[j + 1].burstTime)
  457.                             {
  458.                                 tempAT = prcs[j + 1].arrivalTime;
  459.                                 prcs[j + 1].arrivalTime = prcs[j].arrivalTime;
  460.                                 prcs[j].arrivalTime = tempAT;
  461.                                
  462.                                 tempBT = prcs[j + 1].burstTime;
  463.                                 prcs[j + 1].burstTime = prcs[j].burstTime;
  464.                                 prcs[j].burstTime = tempBT;
  465.                                
  466.                                 tempPN = prcs[j + 1].number;
  467.                                 prcs[j + 1].number = prcs[j].number;
  468.                                 prcs[j].number = tempPN;
  469.                             }
  470.                         }
  471.                     }
  472.                    
  473.                     cout << "\nSorted Data" << endl;
  474.                     cout << "Process\t\tArrival Time\tBurst Time" << endl;
  475.                     for(int i = 0; i < processes; i++)
  476.                     {
  477.                         if(i == 0)
  478.                         {
  479.                             prcs[0].startTime = prcs[0].arrivalTime;
  480.                             prcs[0].endTime = prcs[0].arrivalTime + prcs[0].burstTime;
  481.                         }
  482.                         else
  483.                         {
  484.                             prcs[i].startTime = prcs[i - 1].endTime;
  485.                             if(prcs[i].arrivalTime > prcs[i].startTime) prcs[i].startTime = prcs[i].arrivalTime;
  486.                             prcs[i].endTime = prcs[i].startTime + prcs[i].burstTime;
  487.                         }
  488.                         cout << prcs[i].number << "\t\t" << prcs[i].arrivalTime << "\t\t" << prcs[i].burstTime << endl;
  489.                     }
  490.                    
  491.                     cout << "\nGantt Chart" << endl;
  492.                     //Top line
  493.                     for(int i = 0; i < processes; i++)
  494.                     {
  495.                         if(i == 0 && prcs[0].startTime != 0) cout << "========";
  496.                         else if (i == 0 && prcs[0].startTime == 0) cout << "========";
  497.                         else if (prcs[i].startTime != prcs[i - 1].endTime) cout << "========";
  498.                         if (i == processes - 1) cout << "========\n";
  499.                         else if (prcs[i].startTime != 0) cout << "========";
  500.                     }
  501.                    
  502.                     //Idle/Process No. Bar
  503.                     for(int i = 0; i < processes; i++)
  504.                     {  
  505.                    
  506.                         if(i == 0 && prcs[0].startTime != 0) cout << "[ IDLE ]";
  507.                         else if(i == 0 && prcs[0].startTime == 0) cout << "[  P" << prcs[0].number << "  ]";
  508.                         else if(prcs[i].startTime != prcs[i - 1].endTime) cout << "[ IDLE ]";
  509.                        
  510.                         if (i == processes - 1) cout << "[  P" << prcs[i].number << "  ]\n";
  511.                         else if (prcs[i].startTime != 0) cout << "[  P" << prcs[i].number << "  ]";
  512.                     }
  513.                    
  514.                     //Bottom line
  515.                     for(int i = 0; i < processes; i++)
  516.                     {
  517.                         if(i == 0 && prcs[0].startTime != 0) cout << "========";
  518.                         else if (i == 0 && prcs[0].startTime == 0) cout << "========";
  519.                         else if (prcs[i].startTime != prcs[i - 1].endTime) cout << "========";
  520.                         if (i == processes - 1) cout << "========\n";
  521.                         else if (prcs[i].startTime != 0) cout << "========";
  522.                     }
  523.                    
  524.                     //Number label
  525.                     for(int i = 0; i < processes; i++)
  526.                     {
  527.                         if (i == 0 && prcs[0].startTime != 0) cout << "0      " << prcs[0].startTime << "       " << prcs[0].endTime << "       ";
  528.                         else if (i == 0 && prcs[0].startTime == 0) cout << prcs[0].startTime << "      " << prcs[0].endTime << "      ";
  529.                         else if (prcs[i].startTime != prcs[i - 1].endTime) cout << prcs[i].startTime << "       " << prcs[i].endTime << "       ";
  530.                         else cout << prcs[i].endTime << "      ";
  531.                     }
  532.                    
  533.                     //Sorting to process no.
  534.                     for(int i = 0; i < processes; i++)
  535.                     {
  536.                         for(int j = 0; j < processes - i - 1; j++)
  537.                         {
  538.                             if(prcs[j].number > prcs[j + 1].number)
  539.                             {
  540.                                 tempPN = prcs[j + 1].number;
  541.                                 prcs[j + 1].number = prcs[j].number;
  542.                                 prcs[j].number = tempPN;
  543.                                
  544.                                 tempAT = prcs[j + 1].arrivalTime;
  545.                                 prcs[j + 1].arrivalTime = prcs[j].arrivalTime;
  546.                                 prcs[j].arrivalTime = tempAT;
  547.                                
  548.                                 tempBT = prcs[j + 1].burstTime;
  549.                                 prcs[j + 1].burstTime = prcs[j].burstTime;
  550.                                 prcs[j].burstTime = tempBT;
  551.                                
  552.                                 tempST = prcs[j + 1].startTime;
  553.                                 prcs[j + 1].startTime = prcs[j].startTime;
  554.                                 prcs[j].startTime = tempST;
  555.                                
  556.                                 tempET = prcs[j + 1].endTime;
  557.                                 prcs[j + 1].endTime = prcs[j].endTime;
  558.                                 prcs[j].endTime = tempET;
  559.                                
  560.                                 tempTT = prcs[j + 1].turnTime;
  561.                                 prcs[j + 1].turnTime = prcs[j].turnTime;
  562.                                 prcs[j].turnTime = tempTT;
  563.                                
  564.                                 tempWT = prcs[j + 1].waitTime;
  565.                                 prcs[j + 1].waitTime = prcs[j].waitTime;
  566.                                 prcs[j].waitTime = tempWT;
  567.                             }
  568.                         }
  569.                     }
  570.                    
  571.                     cout << "\n\nTurnaround Time" << endl;
  572.                     for(int i = 0; i < processes; i++)
  573.                     {
  574.                         prcs[i].turnTime = prcs[i].endTime - prcs[i].arrivalTime;
  575.                         cout << "TT[" << i + 1 << "] = " << prcs[i].endTime << " - " << prcs[i].arrivalTime << " = " << prcs[i].turnTime << endl;
  576.                         turnTimeAve += prcs[i].turnTime;
  577.                     }
  578.                     cout << "----------------------" << endl;
  579.                     printf("TT[A] = %.2f / %i = %.2f\n", turnTimeAve, processes, turnTimeAve / processes);
  580.                     turnTimeAve /= processes;
  581.                    
  582.                     cout << "\nWaiting Time" << endl;
  583.                     for(int i = 0; i < processes; i++)
  584.                     {
  585.                         prcs[i].waitTime = prcs[i].startTime - prcs[i].arrivalTime;
  586.                         cout << "WT[" << i + 1 << "] = " << prcs[i].startTime << " - " << prcs[i].arrivalTime << " = " << prcs[i].waitTime << endl;
  587.                         waitTimeAve += prcs[i].waitTime;
  588.                     }
  589.                     cout << "----------------------" << endl;
  590.                     printf("WT[A] = %.2f / %i = %.2f\n", waitTimeAve, processes, waitTimeAve / processes);
  591.                     waitTimeAve /= processes;
  592.                    
  593.                     cout << "\n======================" << endl;
  594.                     cout << "TT - WT = BT" << endl;
  595.                     burstTime = turnTimeAve - waitTimeAve;
  596.                     printf("%.2f - %.2f = %.2f\n", turnTimeAve, waitTimeAve, burstTime);
  597.                     cout << "======================" << endl;
  598.                    
  599.                     valid = false;
  600.                     while(!valid)
  601.                     {
  602.                         cout << "Would you like to quit?\n";
  603.                         cout << "[Y] - Main Menu\n";
  604.                         cout << "[N] - Run again\n";
  605.                         cout << "[Y/N]: ";
  606.                         cin >> quit;
  607.                         if(cin.good() && quit == 'Y' || quit == 'y')
  608.                         {
  609.                             system("cls");
  610.                             valid = true;
  611.                             running = false;
  612.                         }
  613.                         else if (cin.good() && quit == 'N' || quit == 'n')
  614.                         {
  615.                             system("cls");
  616.                             valid = true;
  617.                            
  618.                             turnTimeAve = 0;
  619.                             waitTimeAve = 0;
  620.                             burstTime = 0;
  621.                         }
  622.                         else
  623.                         {
  624.                             cout << "Invalid input!\n";
  625.                             cin.clear();
  626.                             cin.ignore();
  627.                         }
  628.                     }
  629.                 }
  630.                 break;
  631.                
  632.             case 3:
  633.                 system("cls");
  634.                 running = true;
  635.                 while(running)
  636.                 {
  637.                     cout << "Priority (Prio) Scheduling Algorithm" << endl;
  638.                     cout << "==================================================" << endl;
  639.                    
  640.                     valid = false;
  641.                     while(!valid)
  642.                     {
  643.                         cout << "Enter number of processes: ";
  644.                         cin >> processes;
  645.                         if(cin.good() && processes > 1) valid = true;
  646.                         else
  647.                         {
  648.                             cin.clear();
  649.                             cin.ignore();
  650.                         }
  651.                     }
  652.                    
  653.                     system("cls");
  654.                    
  655.                     cout << "Priority (Prio) Scheduling Algorithm" << endl;
  656.                     cout << "==================================================" << endl;
  657.                    
  658.                     Process prcs[processes];
  659.                    
  660.                     for(int i = 0; i < processes; i++)
  661.                     {
  662.                         cout << "Process No. " << i + 1 << endl;
  663.                         prcs[i].number = i + 1;
  664.                        
  665.                         valid = false;
  666.                         while(!valid)
  667.                         {
  668.                             cout << "Arrival Time: ";
  669.                             cin >> prcs[i].arrivalTime;
  670.                             if(cin.good() && prcs[i].arrivalTime >= 0) valid = true;
  671.                             else
  672.                             {
  673.                                 cin.clear();
  674.                                 cin.ignore();
  675.                             }
  676.                         }
  677.                        
  678.                         valid = false;
  679.                         while(!valid)
  680.                         {
  681.                             cout << "Burst Time: ";
  682.                             cin >> prcs[i].burstTime;
  683.                             if(cin.good() && prcs[i].burstTime > 0) valid = true;
  684.                             else
  685.                             {
  686.                                 cin.clear();
  687.                                 cin.ignore();
  688.                             }
  689.                         }
  690.                        
  691.                         valid = false;
  692.                         while(!valid)
  693.                         {
  694.                             cout << "Priority: ";
  695.                             cin >> prcs[i].priority;
  696.                             if(cin.good() && prcs[i].priority >= 0)
  697.                             {
  698.                                 valid = true;
  699.                                 cout << "\n";
  700.                             }
  701.                             else
  702.                             {
  703.                                 cin.clear();
  704.                                 cin.ignore();
  705.                             }
  706.                         }
  707.                     }
  708.                    
  709.                     system("cls");
  710.                    
  711.                     cout << "Priority (Prio) Scheduling Algorithm" << endl;
  712.                     cout << "==================================================" << endl;
  713.                    
  714.                     cout << "Unsorted Data" << endl;
  715.                     cout << "Process\t\tArrival Time\tBurst Time\tPriority" << endl;
  716.                     for(int i = 0; i < processes; i++)
  717.                     {
  718.                         cout << prcs[i].number << "\t\t" << prcs[i].arrivalTime << "\t\t" << prcs[i].burstTime << "\t\t" << prcs[i].priority << endl;
  719.                     }
  720.                    
  721.                     //Sorting to arrival time
  722.                     for(int i = 0; i < processes; i++)
  723.                     {
  724.                         for(int j = 0; j < processes - i - 1; j++)
  725.                         {
  726.                             if(prcs[j].arrivalTime >= prcs[j + 1].arrivalTime)
  727.                             {
  728.                                 tempAT = prcs[j + 1].arrivalTime;
  729.                                 prcs[j + 1].arrivalTime = prcs[j].arrivalTime;
  730.                                 prcs[j].arrivalTime = tempAT;
  731.                                
  732.                                 tempBT = prcs[j + 1].burstTime;
  733.                                 prcs[j + 1].burstTime = prcs[j].burstTime;
  734.                                 prcs[j].burstTime = tempBT;
  735.                                
  736.                                 tempPN = prcs[j + 1].number;
  737.                                 prcs[j + 1].number = prcs[j].number;
  738.                                 prcs[j].number = tempPN;
  739.                                
  740.                                 tempPR = prcs[j + 1].priority;
  741.                                 prcs[j + 1].priority = prcs[j].priority;
  742.                                 prcs[j].priority = tempPR;
  743.                             }
  744.                         }
  745.                     }
  746.                    
  747.                     for(int i = 0; i < processes; i++)
  748.                     {
  749.                         if(i == 0)
  750.                         {
  751.                             prcs[0].startTime = prcs[0].arrivalTime;
  752.                             prcs[0].endTime = prcs[0].arrivalTime + prcs[0].burstTime;
  753.                         }
  754.                         else
  755.                         {
  756.                             prcs[i].startTime = prcs[i - 1].endTime;
  757.                             if(prcs[i].arrivalTime > prcs[i].startTime) prcs[i].startTime = prcs[i].arrivalTime;
  758.                             prcs[i].endTime = prcs[i].startTime + prcs[i].burstTime;
  759.                         }
  760.                     }
  761.                    
  762.                     //Sorting to arrival time & priority
  763.                     for (int i = 0; i < processes; i++)
  764.                     {
  765.                         for (int j = 0; j < processes - i - 1; j++)
  766.                         {
  767.                             //if (j != 0 && prcs[j].endTime >= prcs[j + 1].arrivalTime && prcs[j].priority > prcs[j + 1].priority)
  768.                             if(j != 0 && prcs[j].arrivalTime <= prcs[j - 1].endTime && prcs[j].priority > prcs[j + 1].priority)
  769.                             {
  770.                                 tempAT = prcs[j + 1].arrivalTime;
  771.                                 prcs[j + 1].arrivalTime = prcs[j].arrivalTime;
  772.                                 prcs[j].arrivalTime = tempAT;
  773.                                
  774.                                 tempBT = prcs[j + 1].burstTime;
  775.                                 prcs[j + 1].burstTime = prcs[j].burstTime;
  776.                                 prcs[j].burstTime = tempBT;
  777.                                
  778.                                 tempPN = prcs[j + 1].number;
  779.                                 prcs[j + 1].number = prcs[j].number;
  780.                                 prcs[j].number = tempPN;
  781.                                
  782.                                 tempPR = prcs[j + 1].priority;
  783.                                 prcs[j + 1].priority = prcs[j].priority;
  784.                                 prcs[j].priority = tempPR;
  785.                             }
  786.                         }
  787.                     }
  788.                    
  789.                     cout << "\nSorted Data" << endl;
  790.                     cout << "Process\t\tArrival Time\tBurst Time\tPriority" << endl;
  791.                     for(int i = 0; i < processes; i++)
  792.                     {
  793.                         if(i == 0)
  794.                         {
  795.                             prcs[0].startTime = prcs[0].arrivalTime;
  796.                             prcs[0].endTime = prcs[0].arrivalTime + prcs[0].burstTime;
  797.                         }
  798.                         else
  799.                         {
  800.                             prcs[i].startTime = prcs[i - 1].endTime;
  801.                             if(prcs[i].arrivalTime > prcs[i].startTime) prcs[i].startTime = prcs[i].arrivalTime;
  802.                             prcs[i].endTime = prcs[i].startTime + prcs[i].burstTime;
  803.                         }
  804.                         cout << prcs[i].number << "\t\t" << prcs[i].arrivalTime << "\t\t" << prcs[i].burstTime << "\t\t" << prcs[i].priority << endl;
  805.                     }
  806.                    
  807.                     cout << "\nGantt Chart" << endl;
  808.                     //Top line
  809.                     for(int i = 0; i < processes; i++)
  810.                     {
  811.                         if(i == 0 && prcs[0].startTime != 0) cout << "========";
  812.                         else if (i == 0 && prcs[0].startTime == 0) cout << "========";
  813.                         else if (prcs[i].startTime != prcs[i - 1].endTime) cout << "========";
  814.                         if (i == processes - 1) cout << "========\n";
  815.                         else if (prcs[i].startTime != 0) cout << "========";
  816.                     }
  817.                    
  818.                     //Idle/Process No. Bar
  819.                     for(int i = 0; i < processes; i++)
  820.                     {  
  821.                    
  822.                         if(i == 0 && prcs[0].startTime != 0) cout << "[ IDLE ]";
  823.                         else if(i == 0 && prcs[0].startTime == 0) cout << "[  P" << prcs[0].number << "  ]";
  824.                         else if(prcs[i].startTime != prcs[i - 1].endTime) cout << "[ IDLE ]";
  825.                        
  826.                         if (i == processes - 1) cout << "[  P" << prcs[i].number << "  ]\n";
  827.                         else if (prcs[i].startTime != 0) cout << "[  P" << prcs[i].number << "  ]";
  828.                     }
  829.                    
  830.                     //Bottom line
  831.                     for(int i = 0; i < processes; i++)
  832.                     {
  833.                         if(i == 0 && prcs[0].startTime != 0) cout << "========";
  834.                         else if (i == 0 && prcs[0].startTime == 0) cout << "========";
  835.                         else if (prcs[i].startTime != prcs[i - 1].endTime) cout << "========";
  836.                         if (i == processes - 1) cout << "========\n";
  837.                         else if (prcs[i].startTime != 0) cout << "========";
  838.                     }
  839.                    
  840.                     //Number label
  841.                     for(int i = 0; i < processes; i++)
  842.                     {
  843.                         if (i == 0 && prcs[0].startTime != 0) cout << "0      " << prcs[0].startTime << "       " << prcs[0].endTime << "       ";
  844.                         else if (i == 0 && prcs[0].startTime == 0) cout << prcs[0].startTime << "      " << prcs[0].endTime << "      ";
  845.                         else if (prcs[i].startTime != prcs[i - 1].endTime) cout << prcs[i].startTime << "       " << prcs[i].endTime << "       ";
  846.                         else cout << prcs[i].endTime << "      ";
  847.                     }
  848.                    
  849.                     //Sorting to process no.
  850.                     for(int i = 0; i < processes; i++)
  851.                     {
  852.                         for(int j = 0; j < processes - i - 1; j++)
  853.                         {
  854.                             if(prcs[j].number > prcs[j + 1].number)
  855.                             {
  856.                                 tempPN = prcs[j + 1].number;
  857.                                 prcs[j + 1].number = prcs[j].number;
  858.                                 prcs[j].number = tempPN;
  859.                                
  860.                                 tempAT = prcs[j + 1].arrivalTime;
  861.                                 prcs[j + 1].arrivalTime = prcs[j].arrivalTime;
  862.                                 prcs[j].arrivalTime = tempAT;
  863.                                
  864.                                 tempBT = prcs[j + 1].burstTime;
  865.                                 prcs[j + 1].burstTime = prcs[j].burstTime;
  866.                                 prcs[j].burstTime = tempBT;
  867.                                
  868.                                 tempST = prcs[j + 1].startTime;
  869.                                 prcs[j + 1].startTime = prcs[j].startTime;
  870.                                 prcs[j].startTime = tempST;
  871.                                
  872.                                 tempET = prcs[j + 1].endTime;
  873.                                 prcs[j + 1].endTime = prcs[j].endTime;
  874.                                 prcs[j].endTime = tempET;
  875.                                
  876.                                 tempTT = prcs[j + 1].turnTime;
  877.                                 prcs[j + 1].turnTime = prcs[j].turnTime;
  878.                                 prcs[j].turnTime = tempTT;
  879.                                
  880.                                 tempWT = prcs[j + 1].waitTime;
  881.                                 prcs[j + 1].waitTime = prcs[j].waitTime;
  882.                                 prcs[j].waitTime = tempWT;
  883.                                
  884.                                 tempPR = prcs[j + 1].priority;
  885.                                 prcs[j + 1].priority = prcs[j].priority;
  886.                                 prcs[j].priority = tempPR;
  887.                             }
  888.                         }
  889.                     }
  890.                    
  891.                     cout << "\n\nTurnaround Time" << endl;
  892.                     for(int i = 0; i < processes; i++)
  893.                     {
  894.                         prcs[i].turnTime = prcs[i].endTime - prcs[i].arrivalTime;
  895.                         cout << "TT[" << i + 1 << "] = " << prcs[i].endTime << " - " << prcs[i].arrivalTime << " = " << prcs[i].turnTime << endl;
  896.                         turnTimeAve += prcs[i].turnTime;
  897.                     }
  898.                     cout << "----------------------" << endl;
  899.                     printf("TT[A] = %.2f / %i = %.2f\n", turnTimeAve, processes, turnTimeAve / processes);
  900.                     turnTimeAve /= processes;
  901.                    
  902.                     cout << "\nWaiting Time" << endl;
  903.                     for(int i = 0; i < processes; i++)
  904.                     {
  905.                         prcs[i].waitTime = prcs[i].startTime - prcs[i].arrivalTime;
  906.                         cout << "WT[" << i + 1 << "] = " << prcs[i].startTime << " - " << prcs[i].arrivalTime << " = " << prcs[i].waitTime << endl;
  907.                         waitTimeAve += prcs[i].waitTime;
  908.                     }
  909.                     cout << "----------------------" << endl;
  910.                     printf("WT[A] = %.2f / %i = %.2f\n", waitTimeAve, processes, waitTimeAve / processes);
  911.                     waitTimeAve /= processes;
  912.                    
  913.                     cout << "\n======================" << endl;
  914.                     cout << "TT - WT = BT" << endl;
  915.                     burstTime = turnTimeAve - waitTimeAve;
  916.                     printf("%.2f - %.2f = %.2f\n", turnTimeAve, waitTimeAve, burstTime);
  917.                     cout << "======================" << endl;
  918.                    
  919.                     valid = false;
  920.                     while(!valid)
  921.                     {
  922.                         cout << "Would you like to quit?\n";
  923.                         cout << "[Y] - Main Menu\n";
  924.                         cout << "[N] - Run again\n";
  925.                         cout << "[Y/N]: ";
  926.                         cin >> quit;
  927.                         if(cin.good() && quit == 'Y' || quit == 'y')
  928.                         {
  929.                             system("cls");
  930.                             valid = true;
  931.                             running = false;
  932.                         }
  933.                         else if (cin.good() && quit == 'N' || quit == 'n')
  934.                         {
  935.                             system("cls");
  936.                             valid = true;
  937.                            
  938.                             turnTimeAve = 0;
  939.                             waitTimeAve = 0;
  940.                             burstTime = 0;
  941.                         }
  942.                         else
  943.                         {
  944.                             cout << "Invalid input!\n";
  945.                             cin.clear();
  946.                             cin.ignore();
  947.                         }
  948.                     }
  949.                 }
  950.                 break;
  951.                
  952.             case 4:
  953.                 exit = true;
  954.                 break;
  955.                
  956.             default:
  957.                 cout << "Invalid algorithm" << endl;
  958.         }
  959.     }
  960.    
  961.     return 0;
  962. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement