为什么这个程序不运行这个等价条件?

问题描述 投票:0回答:0

我试图用到达时间对 SJF 调度算法进行编码,但我的程序忽略了 2 个进程的到达时间相等的情况。谁能帮我找出为什么会这样?

我在这里从这个例子中获取值:

https://www.prepbytes.com/blog/c-programming/sjf-scheduling-program-in-c/

我的代码正在生成输出=>

流程 爆发时间 等待时间 周转时间
p1 3 -1 1
p3 2 1 3
p2 4 2 6
p4 4 4 8

平均等待时间=1.50

平均周转时间=4.50

#include <stdio.h>

void swap(int *arr, int i, int j)
{
    int temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
}
int main()
{
    int BT[10], AT[10], P[10], WT[10], TAT[10], CT[10], sum = 0, n, totalWT = 0, totalTAT = 0, min, temp;
    float avg_wt, avg_tat;
    printf("Enter number of process:");
    scanf("%d", &n);

    printf("\nEnter Burst Time:\n");
    for (int i = 0; i < n; i++)
    {
        printf("Process %d: ", i + 1);
        scanf("%d", &BT[i]);
        P[i] = i + 1;
    }
    printf("\nEnter Arrival Time:\n");
    for (int i = 0; i < n; i++)
    {
        printf("Process %d: ", i + 1);
        scanf("%d", &AT[i]);
    }

    // sorting according to arrival time
    for (int i = 0; i < n; i++)
    {
        for (int j = i + 1; j < n; j++)
        {
            if (AT[i] == AT[j])
            {
                if (BT[i] > BT[j])
                {
                    swap(AT, i, j);
                    swap(BT, i, j);
                    swap(P, i, j);
                }
            }
            else if (AT[i] > AT[j])
            {
                swap(AT, i, j);
                swap(BT, i, j);
                swap(P, i, j);
            }
        }
    }
    int run = 0;
    for (int i = 0; i < n; i++)
    {
        if (i == 0)
        {
            min = i;
        }
        else
        {
            // designing a code which gives the process to execute
            for (int j = i; j < run - 1; j++)
            {
                min = j;
                for (int k = j + 1; k < run; k++)
                {
                    if (k >= n)
                    {
                        goto label;
                    }
                    if (BT[min] > BT[k])
                    {
                        min = k;
                    }
                }
            }
        }
    label:
        sum += BT[min];
        CT[i] = sum;
        TAT[i] = CT[i] - AT[min];
        WT[i] = TAT[i] - BT[min];
        totalWT += WT[i];
        totalTAT += TAT[i];
        run += BT[min];

        swap(AT, i, min);
        swap(BT, i, min);
        swap(P, i, min);
    }

    avg_wt = (float)totalWT / n;

    printf("\nProcess\t\tBurst Time\tWaiting Time\tTurnaround Time");
    for (int i = 0; i < n; i++)
    {
        printf("\np%d\t\t %d\t\t %d\t\t\t%d", P[i], BT[i], WT[i], TAT[i]);
    }

    avg_tat = (float)totalTAT / n;
    printf("\n\nAverage Waiting Time=%.2f", avg_wt);
    printf("\nAverage Turnaround Time=%.2f", avg_tat);
}

我的输出: 输入进程数:4

输入突发时间: 过程 1:3 过程 2:4 过程 3:2 过程 4:4

输入到达时间: 过程 1: 1 过程 2:2 过程 3:1 过程 4:4

平均等待时间=1.50 平均周转时间=4.50

我期待:

Average waiting time: 3.000000
Average turnaround time: 6.250000
c scheduling
© www.soinside.com 2019 - 2024. All rights reserved.