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