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 ...