Problemi con una relazione d'ordine

di Anonimizzato30242 il
11 risposte
Salve ragazzi, ho un problema riguardante una relazione d'ordine del tipo <Mese, Giorno>, con la quale dovrei ricercare da file i valori precedenti a quella determinata data. Adesso il problema che mi attanaglia di più è come riuscire a confrontare i giorni scritti a lettere (quindi "lunedi") e lo stesso per i mesi ("gennaio", "febbraio", ecc,). I dati nel file da cui acquisire sono salvati nella forma: citta_lunedi_gennaio_30_1090_20.
Questo è il tipo di struttura che volevo utilizzare ma non sono effettivamente sicuro sia giusta:

typedef struct
{
    char citta[SIZE];
    enum giorni{lunedi = 1, martedi, mercoledi, giovedi, venerdi, sabato, domenica}giorni;
    enum mese{gennaio = 1, febbraio, marzo, aprile, maggio, giugno, luglio, agosto, settembre, ottobre, novembre, dicembre}mesi;
    int temperatura;
    int pressione;
    int umidita;
}metropoli;
e questo invece sarebbe invece la funzione per la relazione d'ordine

int relazione_ordine(int i, year mese, week giorno)
{
    if(mese > GetMeseByI(i))
    {
        return 1;
    }
    else if(mese == GetMeseByI(i) && giorno == GetGiornoByI(i))
    {
        return 1;
    }
    else
    {
        return 0;
    }
}
e queste sono le funzioni getmese e getgiorno

enum week GetGiornoByI(int i)
{
    if(i < 0 || i > SIZE)
    {
        puts("Errore, indice troppo grande");
        i = 0;
    }
    return met[i].giorno;
}

enum year GetMeseByI(int i)
{
    if(i < 0 || i > SIZE)
    {
        puts("Errore, indice troppo grande");
        i = 0;
    }
    return met[i].mese;
}
Grazie in anticipo per la pazienza

11 Risposte

  • Come fai a fare una relazione d'ordine sui giorni della settimana? Lunedì gennaio è il 4, l'11, il 18 o il 25? Viene prima o dopo di oggi venerdì 22 gennaio?

    Se usi i giorni del mese la relazione d'ordine potrebbe essere
    
    int ordine(metropoli m1, metropoli m2){
        return (m1.mese << 5) + m1.giorno - (m2.mese << 5) - m2.giorno;
    }
    
  • Effettivamente non ho tenuto conto di quest'altro problema, errore mio.
    Il problema penso rimanga invariato però, come faccio a distinguere adesso se è lunedì 4 o lunedì 11? Credo che il mio problema inizii e finisca direttamente nulla struttura, però c'è sempre quel fastidio di dover scrivere i giorni in lettere...Non ho idee
  • L'enum non è un problema. Scrivere m1.giorno = 1 o m1.giorno = lunedi è la stessa cosa, è solo una comodità.

    Il problema vero è che alla struttura manca un dato essenziale. Se è un progetto vero e non puoi ripartire da zero, ti conviene aggiungere il campo week_of_the_year e sistemare al più presto a mano i record di gennaio
  • In citta_lunedi_gennaio_30_1090_20 cosa rappresenta 1090_20 ?
  • oregon ha scritto:


    In citta_lunedi_gennaio_30_1090_20 cosa rappresenta 1090_20 ?
    sarebbero rispettivamente "temperatura", "pressione", "umidità".
  • Weierstrass ha scritto:


    L'enum non è un problema. Scrivere m1.giorno = 1 o m1.giorno = lunedi è la stessa cosa, è solo una comodità.

    Il problema vero è che alla struttura manca un dato essenziale. Se è un progetto vero e non puoi ripartire da zero, ti conviene aggiungere il campo week_of_the_year e sistemare al più presto a mano i record di gennaio
    Ho il tempo di ripartire da zero in realtà, quindi secondo te da cosa dovrebbe essere composta la struttura?
  • Metti il campo giorno, mese e anno come int e giorno_della_settimana come enum (informazione accessoria).
    
    int ordine(metropoli m1, metropoli m2){
        return (m1.anno << 9) + (m1.mese << 5) + m1.giorno - (m2.anno << 9) - (m2.mese << 5) - m2.giorno;
    }
    
  • Boh!
  • Weierstrass ha scritto:


    Metti il campo giorno, mese e anno come int e giorno_della_settimana come enum (informazione accessoria).
    
    int ordine(metropoli m1, metropoli m2){
        return (m1.anno << 9) + (m1.mese << 5) + m1.giorno - (m2.anno << 9) - (m2.mese << 5) - m2.giorno;
    }
    
    Ti allego la traccia dell'esercizio, forse sono io che la interpreto male ma non chiede l'anno
    1. Acquisizione, da un file precedentemente creato di dati meteo per almeno tre
    città differenti
    i. una riga del file contiene i dati relativi ad una rilevazione
    NomeCittà,Giorno,Mese,Temperatura,Pressione,Umidità separati dal simbolo ‘_’,
    come qui illustrato
    • Bari_Lunedi_Settembre_30_1020_90
    ii. il nome del file deve essere fornito da tastiera dall’utente
    iii. visualizzazione delle rilevazioni raggruppate per medesima città e relativa
    memorizzazione su file distinti, un file per ogni città.
    2. Selezionare i dati che in una relazione d’ordine basata sul criterio <Mese,Giorno> precedono
    uno specifico valore di riferimento
    i. il valore di riferimento <Mese,Giorno> deve essere fornito da tastiera
    ii. visualizzazione e memorizzazione sul file di output Prima.txt dei dati selezionati
  • Dillo che è un esercizio...

    Allora cambia la traccia e risolvilo col giorno indicato come numero. Le tracce degli esercizi mica vengono scritte dagli dei della programmazione: sono umani e sbagliano come tutti
  • Weierstrass ha scritto:


    Dillo che è un esercizio...

    Allora cambia la traccia e risolvilo col giorno indicato come numero. Le tracce degli esercizi mica vengono scritte dagli dei della programmazione: sono umani e sbagliano come tutti
    Hahahahaha, concordo totalmente sull'ultima parte, però era la vecchia traccia di un esame che devo fare a breve e stavo provando a risolverlo così com'era. Invece per il punto 1.3 (iii. visualizzazione delle rilevazioni raggruppate per medesima città e relativa
    memorizzazione su file distinti, un file per ogni città.), avresti dei suggerimenti?
Devi accedere o registrarti per scrivere nel forum
11 risposte