Problema con funzioni e strutture

di il
4 risposte

Problema con funzioni e strutture

Perch questo codice funziona solo con dae con giorno mese e anno diversi e se sono uguali non funziona?
#include <stdio.h>
#include <stdlib.h>

struct date{
    int giorno;
    int mese;
    int anno;
};


void calcolo_data_remota(struct date []);
int main(){
    /**
    Utilizzare la struttura date dell'esercizio 2. Popolare un vettore di date, quindi visualizzarlo.
    Scrivere una funzione che determini la data più remota e quella più recente; scrivere un’altra
    funzione che, presa in ingresso la data, la converta in un numero da 1 a 366 in base a quanti
    giorni sono trascorsi dal primo gennaio; infine, scrivere una terza funzione che prende due
    elementi qualsiasi dell’array e li scambia tra loro.
    **/
    struct date data[3];
    int i;
    for(i=0; i<3; i++){
        printf("Inserire giorno: ");
        scanf("%d", &data[i].giorno);
        printf("Inserire mese: ");
        scanf("%d", &data[i].mese);
        printf("Inserire anno: ");
        scanf("%d", &data[i].anno);
    }
    for(i=0; i<3; i++){
        printf("\n%d/%d/%d", data[i].giorno, data[i].mese, data[i].anno);
    }
    calcolo_data_remota(data);
    return 0;
}

void calcolo_data_remota(struct date data[]){
    struct date data_remota;
    int scelta;
    if (data[1].anno != data[2].anno && data[2].anno != data[3].anno && data[1].anno != data[3].anno){
        scelta = 0;
    }
    else
        if (data[1].anno == data[2].anno && data[2].anno == data[3].anno){
            scelta = 1;
        }
        else{
            if (data[1].anno == data[2].anno && data[2].anno == data[3].anno && data[1].mese == data[2].mese && data[2].mese == data[3].mese)
                scelta = 2;
            }


    switch(scelta){
        case 0:
            if (data[1].anno <= data[2].anno && data[1].anno <= data[3].anno){
            data_remota = data[1];
            }
            else
                if (data[2].anno <= data[1].anno && data[2].anno <= data[3].anno){
                    data_remota = data[2];
                }
                else
                    if (data[3].anno <= data[1].anno && data[3].anno <= data[2].anno){
                        data_remota = data[3];
                    }
        case 1:
            if (data[1].mese <= data[2].mese && data[1].mese <= data[3].mese){
                data_remota = data[1];
            }
            else
                if (data[2].mese <= data[1].mese && data[2].mese <= data[3].mese){
                    data_remota = data[2];
                }
                else
                    if (data[3].mese <= data[1].mese && data[3].mese <= data[2].mese){
                        data_remota = data[3];
                    }
        case 2:
            if (data[1].giorno <= data[2].giorno && data[1].giorno <= data[3].giorno){
                    data_remota = data[1];
                }
                else
                    if (data[2].giorno <= data[1].giorno && data[2].giorno <= data[3].giorno){
                        data_remota = data[2];
                    }
                    else
                        if (data[3].giorno <= data[1].giorno && data[3].giorno <= data[2].giorno){
                            data_remota = data[3];
                        }

    }
    printf("\nLa data piu' remota e' %d/%d/%d", data_remota.giorno, data_remota.mese, data_remota.anno);
}

4 Risposte

  • Re: Problema con funzioni e strutture

    In che senso "se sono uguali non funziona"?
  • Re: Problema con funzioni e strutture

    oregon ha scritto:


    In che senso "se sono uguali non funziona"?
    Scusa per la spiegazione scritta di merda lol
    Ad esempio se metto due date divers ma nello stesso anno mi stampa numeri casuali
  • Re: Problema con funzioni e strutture

    Intanto non vedo dei

    break

    tra i vari case ... sicuro che non ci vadano?

    E poi il valore di

    scelta

    iniziale, qual è?

    Infine, come metodo per individuare la data, al posto di tutte quelle if (probabilmente non corrette), metti in ordine (con un algoritmo di ordinamento) le date e prendi quella che ti serve.
  • Re: Problema con funzioni e strutture

    oregon ha scritto:


    Intanto non vedo dei

    break

    tra i vari case ... sicuro che non ci vadano?

    E poi il valore di

    scelta

    iniziale, qual è?

    Infine, come metodo per individuare la data, al posto di tutte quelle if (probabilmente non corrette), metti in ordine (con un algoritmo di ordinamento) le date e prendi quella che ti serve.
    Ah ecco, mi sono dimenticato i break, ora se metto delle date uguali con l'unica differenza del giorno mi da numeri casuali

    In che senso algoritmo di ordinamento? scusa l'ignoranza
Devi accedere o registrarti per scrivere nel forum
4 risposte