Δημοσιεύτηκε: 22 Ιουν 2011, 19:46
από migf1
Γραμμή 64:
  1. τα d3, m3, y3 πρέπει να περαστούν με & μπροστά, μιας και στον ορισμό της jdn_2date (γραμμή 21) είναι δηλωμένα ως δείκτες (σωστό, για να διατηρούν τις τιμές τους και μετά το πέρας της συνάρτησης)
  2. η συνάρτηση jdn_2date έχει οριστεί να μην επιστρέφει τίποτα (void, γραμμή 21) αλλά εσύ τη χρησιμοποιείς σαν να επιστρέφει κάτι, το οποίο κάτι προσπαθείς να το εκχωρήσεις στη μεταβλητή: jdn4
Επίσης, δεν καταλαβαίνω τι προσπαθείς να κάνεις και σε επίπεδο λογικής με τα: jdn4, d3, m3 και y3.


clepto έγραψε:πες μου τα λάθη μου
Κώδικας: Επιλογή όλων
#include <stdio.h>
#include <math.h>
#include <string.h>

// ---------------------------------------------------------------------------------
// Μετατροπή ημερομηνίας 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, d3, m3, y3;
long int jdn1, jdn2, jdn3, jdn4;


// διάβασε την 1η ημερομηνία
printf("Ποια είναι η σημερινή ημερομηνία (η μ χ): ");
scanf("%d %d %d", &d1, &m1, &y1);
jdn1 = date_2jdn( d1, m1, y1);
printf("Ο Ιουλιανός αριθμός είναι: %ld\n\n", jdn1);


// διάβασε τη 2η ημερομηνία
do {
printf("Ποια ημερομηνία γεννηθήκατε (η μ χ); ");
scanf("%d %d %d", &d2, &m2, &y2);
jdn2 = date_2jdn( d2, m2, y2);
if (jdn2 > jdn1)
puts("\tπρέπει να είναι μικρότερη της 1ης ημερομηνίας, δοκιμάστε ξανά");
} while (jdn2 > jdn1);
printf("Ο Ιουλιανός αριθμός είναι: %ld\n\n", jdn2);


// υπολόγισε την διαφορά μεταξύ τον ημερομηνιών
jdn3 = (jdn1 - jdn2);


// μετατροπή σε ημερομηνία
jdn4 = jdn_2date( d3, m3, y3, jdn4 );

//------------------------------------------------------------------------
printf("Είσαι %d χρονών, %d μηνών και %d ημερών", y3, m3, d3);

return 0;
}