clepto έγραψε:ναι κατάλαβα τον πίνακα...δεν έχω καταλάβει πλήρως πως το χρησιμοποιείς...
Στον κώδικά σου είχες ήδη υπολογίσει σωστά πως αν η διαφορά των ημερών είναι αρνητική, τότε πρέπει να προστεθεί στο 30 (και να αφαιρεθεί 1 μήνας).
Αλλά οι μήνες δεν έχουν όλοι 30 ημέρες, οπότε στον υπολογισμό σου όταν π.χ. ο m2 είναι Ιανουάριος, τότε η διαφορά των ημερών πρέπει να προστεθεί στο 31 (αντί του 30). Ομοίως, αν ο m2 είναι Φεβρουάριος, τότε πρέπει να προστεθεί στο 28 (ή στο 29 αν είναι σε δίσεκτο έτος) και ούτω κάθε εξής.
Οπότε φτιάξαμε έναν πίνακα mdays[12] να περιέχει το πλήθος ημερών όλων των μηνών, σε μη δίσεκτα έτη.
Επειδή όμως στη C τα στοιχεία των πινάκων ξεκινάνε από την θέση 0 (και όχι από τη θέση 1) το πλήθος ημερών π.χ. του Ιανουαρίου αντιστοιχεί στο:
- Κώδικας: Επιλογή όλων
mdays[0]; // και όχι στο mdays[1]... αυτό περιέχει το πλήθος ημερών του Φεβρουαρίου
Άρα, όταν ο χρήστης σου περάσει στη μεταβλητή m2 για μήνα π.χ. τον Ιανουάριο (τον αριθμό 1 δηλαδή), για να βρεις το πλήθος ημερών που του αντιστοιχούν στον πίνακα mdays[] πρέπει να αφαιρέσεις 1 από το m2:
- Κώδικας: Επιλογή όλων
mdays[ m2-1 ];
κι εννοείται πως έχεις ήδη ελέγξει το m2 που σου έδωσε ο χρήστης να είναι ακέραιος από 1 έως 12 !
Επίσης, αν το m2 είναι 2 (Φεβρουάριος) , τότε βάση του πίνακά μας, το...
- Κώδικας: Επιλογή όλων
mdays[ m2-1];
θα σου δώσει 28, αλλά κατόπιν πρέπει να ελεγχθεί αν πρόκειται για Φεβρουάριο δίσεκτου έτους, περίπτωση κατά την οποία πρέπει να προστεθεί άλλο 1 στο days (εκείνο το days++). Αλλά νομίζω πως ο έλεγχος που έχω βάλει για Φεβ δίσεκτου έτους ΔΕΝ είναι επαρκής (δεν είμαι σίγουρος, θέλει τσεκάρισμα με καθαρό μυαλό).
Το αν ένα έτος είναι δίσεκτο ή όχι, το βρίσκεις με το macro
isleap(y) που με ρώτησες παραπάνω τι κάνει. Βασικά είναι ο μαθηματικός αλγόριθμος για να βρίσκεις αν το έτος y είναι δίσεκτο ή όχι (αν δεν σου αρέσει ως macro, μπορείς να το κάνεις συνάρτηση).
ΥΓ. Όλα αυτά και πολύ περισσότερα, τα έχω κάνει στο ολοκληρωμένο πρόγραμμα που έχω ποστάρει με κώδικα εδώ:
viewtopic.php?f=6&t=18996 (αν θες να πάρεις ιδέες δηλαδή).