Δημοσιεύτηκε: 22 Ιουν 2011, 23:26
- Κώδικας: Επιλογή όλων
#include <stdio.h>
#include <math.h>
#include <string.h>
#define isleap(y) ( !((y) % 4) && ( (y) % 100 || !((y) % 400) ) )
// ---------------------------------------------------------------------------------
// Μετατροπή ημερομηνίας d,m,y σε Ιουλιανό αριθμό
//
long int date_2jdn( int d, int m, int y )
{
return ( 1461 * ( y + 4800 + ( m - 14 ) / 12 ) ) / 4 +
( 367 * ( m - 2 - 12 * ( ( m - 14 ) / 12 ) ) ) / 12 -
( 3 * ( ( y + 4900 + ( m - 14 ) / 12 ) / 100 ) ) / 4 +
d - 32075;
}
// ---------------------------------------------------------------------------------
// Μετατροπή Ιουλιανού αριθμού σε ημερομηνία d,m,y
//
void jdn_2date( int *d, int *m, int *y, long int jdn )
{
long int l = jdn + 68569;
long int n = ( 4 * l ) / 146097;
l = l - ( 146097 * n + 3 ) / 4;
long int i = ( 4000 * ( l + 1 ) ) / 1461001;
l = l - ( 1461 * i ) / 4 + 31;
long int j = ( 80 * l ) / 2447;
*d = l - ( 2447 * j ) / 80;
l = j / 11;
*m = j + 2 - ( 12 * l );
*y = 100 * ( n - 49 ) + i + l;
return;
}
// ---------------------------------------------------------------------------------
int main(void)
{
int d1, m1, y1, d2, m2, y2, days, months, years;
long int jdn1, jdn2;
int mdays[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
// διάβασε την 1η ημερομηνία
printf("Ποια είναι η σημερινή ημερομηνία (η μ χ): ");
scanf("%d %d %d", &d1, &m1, &y1);
jdn1 = date_2jdn( d1, m1, y1);
// διάβασε τη 2η ημερομηνία
do {
printf("Ποια ημερομηνία γεννηθήκατε (η μ χ); ");
scanf("%d %d %d", &d2, &m2, &y2);
jdn2 = date_2jdn( d2, m2, y2);
if (jdn2 > jdn1)
puts("\tπρέπει να είναι μικρότερη της τωρινής ημερομηνίας, δοκιμάστε ξανά");
} while (jdn2 > jdn1);
// υπολογισμός ηλικίας
days = (d1-d2);
months = (m1-m2);
years = (y1-y2);
if (months <0) {
months += 12;
years--;
}
if (days < 0) {
days += mdays[m2-1];
if ( m2 == 2 && isleap(y2) )
days++;
months--;
}
printf("\nΕίστε %d χρονών, %d μηνών και %d ημερών \n", years, months, days);
getchar();
printf("\npress ENTER to exit...");
fflush(stdin); getchar();
return 0;
}
κάποια παρατήρηση πρόταση;