You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

52 lines
1.2 KiB

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. typedef struct {
  4. int id, at, bt, et, tat, wt;
  5. } Process;
  6. int proc_cmp(const void *a, const void *b) {
  7. return ((Process*)a)->at - ((Process*)b)->at;
  8. }
  9. int proc_cmp_id(const void *a, const void *b) {
  10. return ((Process*)a)->id - ((Process*)b)->id;
  11. }
  12. int main() {
  13. int n;
  14. printf("Number of processes: ");
  15. scanf("%d", &n);
  16. Process p[n];
  17. printf("Arrival time and Burst time:\n");
  18. for (int i = 0; i < n; ++i) {
  19. scanf("%d %d", &p[i].at, &p[i].bt);
  20. p[i].id = i;
  21. }
  22. qsort(p, n, sizeof(Process), proc_cmp);
  23. int curt = 0;
  24. printf("ID\tAT\tBT\tET\tTAT\tWT\n");
  25. double avg_tat = 0, avg_wt = 0;
  26. for (int i = 0; i < n; ++i) {
  27. p[i].et = (curt > p[i].at ? curt : p[i].at) + p[i].bt;
  28. curt = p[i].et;
  29. p[i].tat = p[i].et - p[i].at;
  30. p[i].wt = p[i].tat - p[i].bt;
  31. avg_tat += p[i].tat;
  32. avg_wt += p[i].wt;
  33. }
  34. qsort(p, n, sizeof(Process), proc_cmp_id);
  35. for (int i = 0; i < n; ++i) {
  36. printf("%d\t%d\t%d\t%d\t%d\t%d\n", p[i].id, p[i].at, p[i].bt, p[i].et, p[i].tat, p[i].wt);
  37. }
  38. avg_tat /= n;
  39. avg_wt /= n;
  40. printf("avg:\t\t\t\t%lg\t%lg\n", avg_tat, avg_wt);
  41. }