Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 18 su 18
  1. #11
    Comunque così come ho messo prima non mi funziona .. cioè compila senza dar errore ma non mi da il risultato che volevo
    Ultima modifica di tommasoperilli; 11-05-2014 a 20:15

  2. #12
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551
    Io non ho la minima idea di cosa deve fare il programma , noi ti possiamo indicare errori nel linguaggio ....
    Ma la logica del programma "algoritmo" lo devi conoscere tu , se il programma non fa quello che volevi e non ci sono errori nel codice
    hai sbagliato l'algoritmo e o l'implementazione ...........
    Tecnologia

  3. #13
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Oltre ad essere d'accordo con torn aggiungo che in un thread in genere si parla di un solo problema delimitato. Quando si discute per decine di post su tutto quello che riguarda un esercizio, dai problemi di include all'ultima variabile di decine di funzioni, si perde il filo del discorso e diventa veramente difficile rispondere.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #14
    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 ...

  5. #15
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    ciao

    Premetto che ho commesso il tuo stesso errore di valutazione , e ho trovato il problema dopo averci
    pensato un po

    *j++ , apparentemente si potrebbe pensare che incrementa di 1 il valore
    ma per questione di precedenza di operatori , incrementa di uno il puntatore e poi dereferenzia


    quindi o usi le parentesi per cambiare la precedenza o usi l'operatore +=1

    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++;
            (*j)++;
         }else{
          printf("\n\t!! Memoria piena, impossibile inserire altri job !!");     
         }
         return;
         }
    Tecnologia

  6. #16
    Grazie mille torn, ci avevo pensato anche io. Ultima cosa, quando vado a eseguire un job, lui mi esegue il job che è più veloce quindi con il minor tempo di esecuzione e va benissimo fino qui, poi quando vado a eliminare i job eseguiti, non mi fa visualizzare i job rimasti, come se li eliminasse tutti quanti e invece dovrebbe eliminare solo il job eseguito ..
    codice:
    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]*100);
         esec[indice] = 1;
         job[indice][0] = 'x';
         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;
         }
    Guardandolo così sembra che non ci sia nessun problema perchè, ogni for visualizza solo i job inseriti e non quelli che hanno la 'x' diciamo così, dopo che ho eseguito il job gli da il nome 'x' così non lo visualizza e simula l'eliminazione. Il problema è che sembra che gli elimina tutti ..

  7. #17
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551
    eliminajob()
    ------------------
    if(esec[i]=1){
    ----------------
    if(esec[i]==1){
    Tecnologia

  8. #18
    Madonna che errore idiota, grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.