华为机试——03操作系统任务调度问题

来源:互联网 发布:淘宝crm软件有哪些 编辑:程序博客网 时间:2024/05/21 17:46
  1. /* 
  2. 3、操作系统任务调度问题。操作系统任务分为系统任务和用户任务两种。其中, 
  3. 系统任务的优先级 < 50,用户任务的优先级 >= 50且 <= 255。优先级大于255的为非法任务,应予以剔除。 
  4. 现有一任务队列task[],长度为n,task中的元素值表示任务的优先级,数值越小,优先级越高。  
  5. 函数scheduler实现如下功能: 
  6. 将task[] 中的任务按照系统任务、用户任务依次存放到 system_task[] 数组和 user_task[] 数组中  
  7. (数组中元素的值是任务在task[] 数组中的下标),并且优先级高的任务排在前面,数组元素为-1表示结束。 
  8. 例如: 
  9. task[] = {0, 30, 155, 1, 80, 300, 170, 40, 99}     
  10. system_task[] = {0, 3, 1, 7, -1}     
  11. user_task[]  =  {4, 8, 2, 6, -1} 
  12. 接口函数: 
  13. void scheduler(int task[], int n, int system_task[], int user_task[]) 
  14. */  
  15. #include <iostream>  
  16. using namespace std;  
  17.   
  18. typedef struct TASKNODE  
  19. {  
  20.     int index;  
  21.     int value;  
  22. }Task_node;  
  23.   
  24. void scheduler(int task[], int n, int system_task[], int user_task[])  
  25. {  
  26.     Task_node *task_list = new Task_node[n*sizeof(Task_node)];  
  27.     Task_node temp;  
  28.     int i,j,k;  
  29.     for(i = 0;i < n;i++)  
  30.     {  
  31.         task_list[i].index = i;  
  32.         task_list[i].value = task[i];  
  33.     }  
  34.       
  35.     //根据优先级排序.  
  36.     for(i = 0;i < n-1;i++)  
  37.     {  
  38.         for(j = i+1;j < n;j++)  
  39.         {  
  40.             if(task_list[j].value < task_list[i].value)//前者优先级高.  
  41.             {  
  42.                 temp = task_list[i];  
  43.                 task_list[i] = task_list[j];  
  44.                 task_list[j] = temp;  
  45.             }  
  46.         }  
  47.     }  
  48.     //将任务序号分类存入数组.  
  49.     j = k = 0;  
  50.     for(i = 0;i < n;i++)  
  51.     {  
  52.         if(task_list[i].value >= 0 && task_list[i].value < 50)  
  53.         {  
  54.             system_task[j++] = task_list[i].index;  
  55.         }  
  56.         else if(task_list[i].value >= 50 && task_list[i].value <= 255)  
  57.         {  
  58.             user_task[k++] = task_list[i].index;  
  59.         }  
  60.         else  
  61.             continue;  
  62.     }  
  63.     system_task[j] = -1;  
  64.     user_task[k] = -1;  
  65.       
  66.     delete [] task_list;  
  67.   
  68.     //输出归类结果.  
  69.     for(int m = 0;m <= j;m++)  
  70.         cout << system_task[m] << " ";  
  71.     cout << endl;  
  72.   
  73.     for(int m1 = 0;m1 <= k;m1++)  
  74.         cout << user_task[m1] << " ";  
  75.       
  76.       
  77. }  
  78.   
  79. int main()  
  80. {  
  81.     int task[] = {0,30,155,1,80,300,170,40,99};  
  82.     int system_task[10];  
  83.     int user_task[10];  
  84.     scheduler(task, 9, system_task, user_task);  
  85.       
  86.     return 0;  
  87. }  
    1. /* 
    2. 3、操作系统任务调度问题。操作系统任务分为系统任务和用户任务两种。其中, 
    3. 系统任务的优先级 < 50,用户任务的优先级 >= 50且 <= 255。优先级大于255的为非法任务,应予以剔除。 
    4. 现有一任务队列task[],长度为n,task中的元素值表示任务的优先级,数值越小,优先级越高。  
    5. 函数scheduler实现如下功能: 
    6. 将task[] 中的任务按照系统任务、用户任务依次存放到 system_task[] 数组和 user_task[] 数组中  
    7. (数组中元素的值是任务在task[] 数组中的下标),并且优先级高的任务排在前面,数组元素为-1表示结束。 
    8. 例如: 
    9. task[] = {0, 30, 155, 1, 80, 300, 170, 40, 99}     
    10. system_task[] = {0, 3, 1, 7, -1}     
    11. user_task[]  =  {4, 8, 2, 6, -1} 
    12. 接口函数: 
    13. void scheduler(int task[], int n, int system_task[], int user_task[]) 
    14. */  
    15. #include <iostream>  
    16. using namespace std;  
    17.   
    18. typedef struct TASKNODE  
    19. {  
    20.     int index;  
    21.     int value;  
    22. }Task_node;  
    23.   
    24. void scheduler(int task[], int n, int system_task[], int user_task[])  
    25. {  
    26.     Task_node *task_list = new Task_node[n*sizeof(Task_node)];  
    27.     Task_node temp;  
    28.     int i,j,k;  
    29.     for(i = 0;i < n;i++)  
    30.     {  
    31.         task_list[i].index = i;  
    32.         task_list[i].value = task[i];  
    33.     }  
    34.       
    35.     //根据优先级排序.  
    36.     for(i = 0;i < n-1;i++)  
    37.     {  
    38.         for(j = i+1;j < n;j++)  
    39.         {  
    40.             if(task_list[j].value < task_list[i].value)//前者优先级高.  
    41.             {  
    42.                 temp = task_list[i];  
    43.                 task_list[i] = task_list[j];  
    44.                 task_list[j] = temp;  
    45.             }  
    46.         }  
    47.     }  
    48.     //将任务序号分类存入数组.  
    49.     j = k = 0;  
    50.     for(i = 0;i < n;i++)  
    51.     {  
    52.         if(task_list[i].value >= 0 && task_list[i].value < 50)  
    53.         {  
    54.             system_task[j++] = task_list[i].index;  
    55.         }  
    56.         else if(task_list[i].value >= 50 && task_list[i].value <= 255)  
    57.         {  
    58.             user_task[k++] = task_list[i].index;  
    59.         }  
    60.         else  
    61.             continue;  
    62.     }  
    63.     system_task[j] = -1;  
    64.     user_task[k] = -1;  
    65.       
    66.     delete [] task_list;  
    67.   
    68.     //输出归类结果.  
    69.     for(int m = 0;m <= j;m++)  
    70.         cout << system_task[m] << " ";  
    71.     cout << endl;  
    72.   
    73.     for(int m1 = 0;m1 <= k;m1++)  
    74.         cout << user_task[m1] << " ";  
    75.       
    76.       
    77. }  
    78.   
    79. int main()  
    80. {  
    81.     int task[] = {0,30,155,1,80,300,170,40,99};  
    82.     int system_task[10];  
    83.     int user_task[10];  
    84.     scheduler(task, 9, system_task, user_task);  
    85.       
    86.     return 0;  
    87. }  
0 0
原创粉丝点击