[C] Problema con strutture dati

di il
9 risposte

[C] Problema con strutture dati

Salve a tutti, sto lavorando ad un programma che, una volta creata una struttura dati di questo tipo:
struct typedef{
char nomelavoro[1];  
int costo; 
int priorita; // priorita' 1,2 o 3
}lavoro; 
ed una funzione che carichi i dati dei lavori da effettuare all'interno del vettore lavoro ElencoLavori[100], stampi a video i dati del lavoro più economico di priorita' 1.
Io la funzione l'ho creata in questo modo:
void PochiSoldi (Lavoro ElencoLavori[], int n)
{
 
    int i=0, min_costo=0, m=0;
    for(i=0;i<n;i++)
    {
        if((ElencoLavori[i].priorita==1)&&(ElencoLavori[i].costo>min_costo))
            min_costo=ElencoLavori[i].costo;
 
    }
    for(i=0;i<n;i++)
    {
        if((ElencoLavori[i].priorita==1)&&(ElencoLavori[i].costo<min_costo))
        {
            min_costo=ElencoLavori[i].costo;
            m=i;
        }
    }
    printf("\n\nIl lavoro a priorita' 1 più economico è: ");
    printf("\nStanza: %s; Riparazione: %s; Costo %d conchiglie; Ore: %d",
            ElencoLavori[m].stanza,
            ElencoLavori[m].riparazione,
            ElencoLavori[m].costo,
            ElencoLavori[m].ore);
}
Il problema è che, così facendo, se per esempio carico soltanto un lavoro nel vettore e dico che questo valore è di priorità 2 o 3(quindi non 1), mi stampa comunque a video il lavoro più economico, nonostante lavori di priorità 1 non siano presenti. Potreste darmi gentilmente una mano? Ho l'esame dopodomani

9 Risposte

  • Re: [C] Problema con strutture dati

    Intanto è

    typedef struct

    e non il contrario.

    Poi, non capisco quanto vale n quando chiami la funzione e, nella funzione, non hanno senso le due for in cui controlli per > e per < ... che volevi fare?
  • Re: [C] Problema con strutture dati

    oregon ha scritto:


    Intanto è

    typedef struct

    e non il contrario.

    Poi, non capisco quanto vale n quando chiami la funzione e, nella funzione, non hanno senso le due for in cui controlli per > e per < ... che volevi fare?
    Per quanto riguarda typedef struct è stato ovviamente un errore di battitura Comunque, n è la dimensione dei lavori che carico nel vettore con l'altra funzione che non ho riportato qui e nella funzione di cui ho parlato sopra, la mia idea era questa: controllare i lavori di priorità 1 e cercare quello di costo minore, poi assegnare questo valore ad una variabile che chiamo min_costo e poi con un altro ciclo ricontrollare il vettore e, se esiste un lavoro il cui costo è minore della variabile min_costo, aggiornare il valore di min_costo e segnarmi l'indice i in una variabile m di tipo intero, in modo da stampare i dati relativi al lavoro di costo minore. Non so se mi sono espressa bene, probabilmente no...
  • Re: [C] Problema con strutture dati

    Quindi n, nel caso che hai descritto, vale 1 ... giusto ?

    I due cicli non hanno senso ... fai un solo ciclo
  • Re: [C] Problema con strutture dati

    oregon ha scritto:


    Quindi n, nel caso che hai descritto, vale 1 ... giusto ?

    I due cicli non hanno senso ... fai un solo ciclo
    Okay, ho provato a svolgere il tutto in questo modo:
    
    void pochiSoldi(lavoro ElencoLavori[], int n){
    int i, min=0; 
    for(i=0; i<n; i++){
    if(ElencoLavori[i].priorita==1)&&(ElencoLavori[i].costo<ElencoLavori[min].costo)) min=i; 
    }
    }
    	
    Ma se provo ad inserire un lavoro di priorità diversa da 1, me lo stampa comunque. Idem se inserisco più lavori di priorità diversa da 1..
  • Re: [C] Problema con strutture dati

    Le questioni sono due

    1) ottenuto il min, a chi lo restituisci?

    2) se non esiste neanche un elemento con priorità 1, quanto deve valere min?
  • Re: [C] Problema con strutture dati

    oregon ha scritto:


    Le questioni sono due

    1) ottenuto il min, a chi lo restituisci?

    2) se non esiste neanche un elemento con priorità 1, quanto deve valere min?
    La funzione completa sarebbe questa:
    void pochiSoldi (lavoro ElencoLavori[], int n){
    int i, min=0;
    for(i=0; i<n; i++){
        if((ElencoLavori[i].priorita==1)&&(ElencoLavori[i].costo<ElencoLavori[min].costo)){
           min=i;
           }
    }
    printf("riparazione:%s costo:%d priorita:%d  \n", ElencoLavori[min].riparazione, ElencoLavori[min].costo, ElencoLavori[min].priorita);
    }
    Se non ci sono lavori di priorità 1, vorrei che la funzione non stampasse proprio nulla, ma non so come fare
  • Re: [C] Problema con strutture dati

    Non hai risposto alla seconda domanda
  • Re: [C] Problema con strutture dati

    oregon ha scritto:


    Non hai risposto alla seconda domanda
    Se non ho lavori di priorità 1, non so quanto far valere min, è quello il problema..
  • Re: [C] Problema con strutture dati

    Lo decidi tu e l'esercizio non una risposta nel forum...
Devi accedere o registrarti per scrivere nel forum
9 risposte