Лучшая подгонка в C Требуется помощь - PullRequest
0 голосов
/ 21 сентября 2018

Напишите программу на C, в которой клиенту предлагается ввести enter code here 2 массива: первый будет обозначать размеры ряда разделов памяти фиксированного размера, второй - последовательность запросов памяти, как если бы они поступали изнесколько пользователей.Ваша программа будет назначать запросы памяти разделам по порядку, используя BEST FIT, подбирая как можно больше запросов.Поскольку разделы заполнены, вам нужно будет пометить их как занятые.Сообщите первый назначенный адрес, последний назначенный адрес и внутреннюю фрагментацию для каждого раздела.Сообщите о неназначенных разделах и начальном адресе каждого

. Распечатайте сообщение об ошибке для следующих значений: входные значения, равные нулю и минусу, запросы, размер которых превышает самый большой раздел, и допустимые запросы, для которых нет доступного раздела.быть помещенным в Это то, что у меня так далеко:

#include<stdio.h>

void main()
{
    int fragment[20],b[20],p[20],i,j,nb,np,temp,lowest=9999;
    int lastad[10], firstad[10];
    static int block_arr[20],pro_arr[20];

    printf("\n\t\t\tMemory Management Scheme - Best Fit");
    printf("\nEnter the number of blocks:");
    scanf("%d",&nb);

    printf("\nEnter the size of the blocks:-\n");
    for(i=1;i<=nb;i++)
    {
        printf("Block no.[%d]:",i);
        scanf("%d",&b[i]);
    }

    printf("\nEnter the number of processes:");
    scanf("%d",&np);

    printf("\nEnter the size of the processes :-\n");
    for(i=1;i<=np;i++)
    {
        printf("Process no.[%d]:",i);
        scanf("%d",&p[i]);
    }

    for(i=1;i<=np;i++)
    {
        for(j=1;j<=nb;j++)
        {

            if(block_arr[j]!=1)
            {
                temp=b[j]-p[i];
                if(b[j]>=p[i]){

                    firstad[i] = b[i];
                    lastad[i] = p[i]+b[i]-1; 


                }
                if(temp>=0)
                    if(lowest>temp)
                    {
                        pro_arr[i]=j;
                        lowest=temp;
                    }
            }



        }

        fragment[i]=lowest;
        block_arr[pro_arr[i]]=1;
        lowest=10000;
    }

    printf("\nBlock_no\tBlock_size\tProcess_no\tProcess_size\tFragment"
            "\tFirst_Ad \tLast_Ad");
    for(i=1;i<=np && pro_arr[i]!=0;i++)
        printf("\n%d\t\t%d\t\t%d\t\t%d\t\t%d \t\t%d\t\t%d",pro_arr[i],b[pro_arr[i]],i,p[i],fragment[i],firstad[i],lastad[i]);
}

Ожидаемый результат: enter image description here Моя ошибка вывода: enter image description here Как я могу исправить первый и последний адрес в блоке 1?Я должен быть 0 для первого и 7 для последнего

...