47> quale data è maggiore tra 2 date

work group: 3 es sulle date
*validità di una data (45)
*differenza in gg tra 2 date (46)
*quale data è maggiore tra 2 date (2 metodi:
o riconducendo le 2 date all'anno 0,
oppure partendo dall'anno se a1 = a2 allora confronto mese1 con mese2 ... etc) (47a, 47b)
#include <stdio.h>
int data(int, int, int);
int bisestile(int);
int maggiore(int, int, int, int, int, int);
int main(){
    int gg1,gg2,mm1,mm2,aaaa1,aaaa2;
    int max,n;
    do{
        putchar('\n');
        printf("Inserire giorno 1:");
        scanf("%d", &gg1);
        fflush(stdin);
        printf("Inserire mese 1:");
        scanf("%d", &mm1);
        fflush(stdin);
        printf("Inserire anno 1:");
        scanf("%d", &aaaa1);
        fflush(stdin);
    }while(!data(gg1, mm1, aaaa1));
    printf("\nData 1 valida!\n");
    do{
        putchar('\n');
        printf("Inserire giorno 2:");
        scanf("%d", &gg2);
        fflush(stdin);
        printf("Inserire mese 2:");
        scanf("%d", &mm2);
        fflush(stdin);
        printf("Inserire anno 2:");
        scanf("%d", &aaaa2);
        fflush(stdin);
    }while(!data(gg2, mm2, aaaa2));
    printf("\nData 2 valida!\n");
    max=maggiore(gg1,mm1,aaaa1,gg2,mm2,aaaa2);
    if(max==0){
        printf("La seconda data e' maggiore della prima");
    } else if(max==1){
        printf("La prima data e' maggiore della seconda");
    } else {
        printf("Le date sono uguali");
    }
    return 0;
}
int maggiore(int gg1,int mm1, int aaaa1, int gg2, int mm2, int aaaa2){
    if(aaaa1>aaaa2){
        return 1;
    } else if(aaaa1==aaaa2){
        if(mm1>mm2){
            return 1;   
        } else if(mm1==mm2){
            if(gg1>gg2){
                return 1;
            } else if(gg1==gg2){
                return 2;
            } else {
                return 0;
            }
        } else {
            return 0;
        }
    } else {
        return 0;
    }
}
int bisestile(int a){
    if(a%4==0){
        if(a%100==0){
            if(a%400==0){
                return 1;
            } else {
                return 0;
            }
        } else {
            return 1;
        }
    } else {
        return 0;
    }
}
int diff(int g1, int m1, int a1, int g2, int m2, int a2){
    int giornitot[] = {0,31,59,90,120,151,181,212,243,273,304,334};//giorni dal primo Gennaio alla fine del mese di numero indice -1
    int bisgiornitot[] = {0,31,60,91,121,152,182,213,244,274,305,335}; //(bisestile)
    int totg,aa,delta1,delta2;
    totg=0;
    if(a1==a2){ //stesso anno
        if(bisestile(a1)){
            delta1=bisgiornitot[m1-1]+g1;
            delta2=bisgiornitot[m2-1]+g2;
            return (delta2-delta1);
        } else {
            delta1=giornitot[m1-1]+g1;
            delta2=giornitot[m2-1]+g2;
            return (delta2-delta1);
        }
    }
    if(bisestile(a1)){
        totg=totg+366-(bisgiornitot[m1-1]+g1);
    } else {
        totg=totg+365-(giornitot[m1-1]+g1);
    }
    aa=a1+1;
    while(aa<a2){
        if(bisestile(aa)){
            totg=totg+366;
        }else{
            totg=totg+365;
        }
        aa=aa+1;
    }
    if(bisestile(a2)){
        totg=totg+(bisgiornitot[m2-1]+g2);
    }else{
        totg=totg+(giornitot[m2-1]+g2);
    }
    return totg;
}
int data(int gg, int mm,int aa){
	int v[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
	if(aa<0){
		printf("Data non esistente\n");
		return 0;
	}
    if(bisestile(aa)){
        v[2]=29;
    }
	if(mm>12 || mm<=0){
		printf("Data non esistente\n");
		return 0;
	}
	if(gg>v[mm]){
		printf("Data non esistente\n");
		return 0;
	}
	return 1;
}

    
  
047.c