Γεια σου. Το λάθος σου είναι στην ταξινόμηση των διεργασιών που έχουν φτάσει, με βάση το burst time. Συγκεκριμένα, γράφεις:
//for the arrived processes arrange them with smaller burst time first
for (int i1 = completed; i1 < counter -1; i1++)
for (int j = i1; j < counter; j++)
Δες το πρόβλημα με ένα παράδειγμα. Έστω ότι μετά την πρώτη ταξινομήση με βάση το χρόνο άφιξης έχεις αυτό τον πίνακα:
P0, P1, P2, P3, P4, P5, P6, P7, P8, P9
Έστω ακόμα ότι εκτελέστηκε η P0, συνεπώς:
completed = 1;
Ας υποθέσουμε πως οι διεργασίες P1 ως P7 έχουν τον ίδιο χρόνο άφιξης. Επομένως πρέπει να ταξινομήσουμε τον πίνακα των διεργασιών, μεταξύ (και συμπεριλαμβάνοντας) των δεικτών 1 και 7.
Με βάση τον κώδικα σου θα ισχύει:
counter = 7
Άρα:
for (int i1 = 1; i1 < 6; i1++)
for (int j = i1; j < 7; j++)
Ή αλλιώς γραμμένο
for (int i1 = 1; i1 <= 5; i1++)
for (int j = i1; j <= 6; j++)
Κοινώς, ο κώδικας σου, στο συγκεκριμένο παράδειγμα, θα ταξινομούσε τις διεργασίες P1 ως P6, που είναι λάθος.
Ο δείκτης της P7 είναι ίσος με:
"Δείκτης της τελευταίας διεργασίας που εκτελέστηκε" + "Αριθμός διεργασιών που έφτασαν όσο εκτελούταν η τελευταία διεργασία (περιμένουν στην ουρά)" =
(completed - 1) + counter
Άρα οι σωστές επαναλήψεις για την ταξινόμηση είναι:
for (int i1 = completed; i1 < completed - 1 + counter; i1++)
for (int j = i1; j <= completed - 1 + counter; j++)
Κερασμένο το tip. Το αφήνω σε εσένα αν θες να προχωρήσεις το project για να μου αφήσεις μια καλή κριτική.