Questa è la traccia:
Realizzare un job scheduler che abbia le seguendi funzionalità:accodamento job
schedulazione prossimo job secondo le politiche sjf
simulazione job già eseguire
e il programma che è questo:
codice:
#include <stdio.h>#include <stdlib.h>
#include <string.h>
#define MAX 20


void eliminatejob(char job[][20],int tempo[0],int esec[0]); 
void visualmenu();
void scelta(int *N);
void gestione(int N,char job[][20],int tempo[0],int esec[0],int *j);
void insjob(char job[][20],int tempo[0],int esec[0],int *j);
void visualjob(char job[][20],int tempo[0],int esec[0]);
void execute(char job[][20],int tempo[0],int esec[0]);
void inizializzazione(char job[][20]);
 


int main(){
   char job[MAX][20];
   int tempo [MAX];
   int esec[MAX];
   int N;
   int j=0;
   
   printf("\t\t\t\tSCHEDULAZIONE");
    inizializzazione(job);
    do{
    visualmenu();
    scelta(&N);
    gestione(N,job,tempo,esec,&j);
    }while(N!=5);
    
    system("PAUSE");
    return 0;
}
void inizializzazione(char job[][20]){
     int i;
     for(i=0;i<MAX;i++)
     job[i][0]='x';
     
     return;
     }
void visualmenu(){
     
    printf("\n\n\tMENU: \n");
    printf("\n\t1:Inserisci job");
    printf("\n\t2:Esegui job");
    printf("\n\t3:Elimina job eseguiti");
    printf("\n\t4:Visualizza job presenti");
    printf("\n\t5:Exit");
return;
}
void scelta(int *N){


    printf("\n\n\tScelta: ");
    scanf("%d",N);
    while((*N<1)||(*N>5)){
        printf("Errore");
        printf("Scelta: ");
        scanf("%d",N);
    }


return;
}
void gestione(int N,char job[][20],int tempo[0],int esec[0],int *j){
     switch(N){
     case 1: insjob(job,tempo,esec,j);         
             break;
     case 2: execute(job,tempo,esec);
            break;
     case 3:eliminatejob(job,tempo,esec);              
            break;
     case 4: visualjob(job,tempo,esec);
            break;   
     }
     
     
     return;
     }
     
void insjob(char job[][20],int tempo[0],int esec[0],int *j){
     if(*j!=MAX){
       printf("\n\tInserisci nome: ");
       scanf("%s",&job[*j]);
       printf("\n\tInserisci tempo di esecuzione: ");
       scanf("%d",&tempo[*j]);
       esec[*j]=0;
       *j++;
     }else{
      printf("\n\t!! Memoria piena, impossibile inserire altri job !!");     
     }
     return;
     }
     
void visualjob(char job[][20],int tempo[0],int esec[0]){
     int i;
     printf("\n\tProgrammi in memoria - Tempo di esecuzione - Programmi eseguiti\n");
     for(i=0;(i<MAX);i++){
        if(job[i][0]!='x'){
        printf("\n\t %s - %d - %d\n",job[i],tempo[i],esec[i]);
        }
     }
     return;
}


void execute(char job[][20],int tempo[0],int esec[0]){
     int minore,indice,i;
     indice = 0;
     minore = tempo[0];
     for(i=0;i<MAX;i++){
       if(job[i][0]!='x'){
       if(tempo[i]<minore){
         minore = tempo[i];
         indice = i;
         }
       }                                   
     }
     printf("Programma in esecuzione: %s",job[indice]);
     sleep(tempo[indice]);
     esec[indice] = 1;
     return;
     }


 void eliminatejob(char job[][20],int tempo[0],int esec[0]){
     int i;
     for(i=0;i<MAX;i++){
       if(job[i][0] != 'x'){
         if(esec[i] = 1){
         job[i][0] = 'x';
         tempo[i] = 0;
         esec[i] = 0;
         }
       }                                
     }
     printf("Programmi rimasti: ");
     for(i=0;(i<MAX);i++){
        if(job[i][0]!='x'){
        printf("\n\t %s - %d - %d\n",job[i],tempo[i],esec[i]);
        }
     }
     return;
     }
Il problema che dicevo prima è che, quando vado a visualizzare i job presenti in memoria, visualizzo SOLO l'ultimo job inserito, quindi il problema è presente in questa procedura:
codice:
void insjob(char job[][20],int tempo[0],int esec[0],int *j){     if(*j!=MAX){
       printf("\n\tInserisci nome: ");
       scanf("%s",&job[*j]);
       printf("\n\tInserisci tempo di esecuzione: ");
       scanf("%d",&tempo[*j]);
       esec[*j]=0;
       *j++;
     }else{
      printf("\n\t!! Memoria piena, impossibile inserire altri job !!");     
     }
     return;
     }
e con torn stavamo appunto parlando che c'era un errore nel passaggio dei parametri. Così come sta il programma, compilandolo non mi da nessun errore ma comunque quando vado a visualizzare i job inseriti mi risulta solo l'ultimo ...