Τρίτη, 5 Απριλίου 2011

Υπολογισμός Ημέρας


Θα δούμε μία μέθοδο με την οποία μπορούμε να υπολογίσουμε τι μέρα θα έχουμε ή τι μέρα είχαμε κάποια συγκεκριμένη ημερομηνία.
Η Μέθοδος
Για να βρούμε την ημέρα κάποιας συγκεκριμένης ημερομηνίας χρησιμοποιούμε τον τύπο:
[ημέρα]=(κωδικόςχρόνου+κωδικόςμήνα+ημερομηνία)mod7

Ας δούμε τι είναι η κάθε μεταβλητή.
Κωδικόςμήνα
Η μεταβλητή κωδικόςμήνα αντιστοιχίζει σε κάθε μήνα κάποια τιμή. Οι τιμές της μεταβλητής δεν ακολουθούν κάποια ακολουθία και δεν μπορούμε εύκολα να θυμόμαστε ποια τιμή αντιστοιχεί σε κάθε μήνα, γιαυτό είναι από τα δύσκολα κομμάτια της μεθόδου.
Ιανουάριος: 1
Φεβρουάριος: 4
Μάρτιος: 4
Απρίλιος: 0
Μάιος: 2
Ιούνιος: 5
Ιούλιος: 0
Αύγουστος: 3
Σεπτέμβριος: 6
Οκτώβριος: 1
Νοέμβριος: 4
Δεκέμβριος: 6
κωδικόςχρόνου
Προς το παρόν αναφέρουμε τις τιμές από τα έτη που πιθανόν να χρησιμοποιούμε πιο συχνά και στη συνέχεια θα δούμε πως υπολογίζουμε τις τιμές για τα υπόλοιπα έτη.
2008: 2
2009: 3
2010: 4
2011: 5
2012: 0
2013: 1
Η μεταβλητή [ημέρα] προφανώς είναι ένας αριθμός από το 0 έως το 6. Οι τιμές που παίρνει αντιστοιχούν και σε μία μέρα όπως βλέπουμε παρακάτω.
Κυριακή: 1
Δευτέρα: 2
Τρίτη: 3
Τετάρτη: 4
Πέμπτη: 5
Παρασκευή: 6
Σάββατο: 0
Ας δούμε μερικά παραδείγματα.
25 Δεκεμβρίου 2008
Ο Δεκέμβριος παίρνει την τιμή 6 και το 2008 την τιμή 2. Επομένως,
[ημέρα]=(2+6+25)mod 7
[ημέρα]=33mod 7
[ημέρα]=5
Δηλαδή στις 25 Δεκεμβρίου του 2008 η ημέρα ήταν Πέμπτη.

12 Ιουνίου 2013
Ο Ιούνιος παίρνει την τιμή 5 και το 2013 την τιμή 1. Επομένως,
[ημέρα]=(5+1+12)mod 7
[ημέρα]=18mod 7
[ημέρα]=4
Δηλαδή στις 12 Ιουνίου του 2013 η ημέρα θα είναι Τετάρτη.
Προσοχή στα δίσεκτα έτη
Υπάρχει ένα μικρό σφάλμα στον τύπο και αυτό εμφανίζεται όταν το έτος είναι δίσεκτο. Για να ξεπεράσουμε αυτό το σφάλμα θα πρέπει να αφαιρέσουμε την μονάδα από το αποτέλεσμα όταν ο μήνας είναι ο Ιανουάριος ή ο Φεβρουάριος. Για τους υπόλοιπους μήνες ο τύπος δουλεύει κανονικά.
Παράδειγμα
21 Φεβρουαρίου 2012
Ο Φεβρουάριος παίρνει την τιμή 4 και το 2012 την τιμή 0. Επομένως,
[ημέρα]=(4+0+21)mod 7
[ημέρα]=25mod 7
[ημέρα]=4
Αφού το 2012 είναι δίσεκτο έτος από το αποτέλεσμα αφαιρούμε την μονάδα. 4-1=3. Δηλαδή στις 21 Φεβρουαρίου του 2012 η ημέρα θα είναι Τρίτη.
Η μεταβλητή Κωδικόςχρόνου
Μπορούμε εύκολα να υπολογίσουμε την τιμή που αντιστοιχεί στον επόμενο χρόνο. Υπολογίζουμε με την παραπάνω μέθοδο ποια είναι η ημέρα στις 31 Δεκεμβρίου του προηγούμενου χρόνου και προσθέτουμε το ένα. Έτσι βρίσκουμε την ημέρα του χρόνου που ψάχνουμε την 1η Ιανουαρίου και ο μόνος άγνωστος είναι η τιμή του χρόνου.
Παράδειγμα: Στις 31 Δεκεμβρίου του 2013 η ημέρα θα είναι Τρίτη, δηλαδή την επόμενη μέρα, την 1η Ιανουαρίου, η ημέρα θα είναι Τετάρτη και η μεταβλητή [ημέρα] θα πάρει την τιμή 4. Το μόνο που μένει είναι να λύσουμε την εξίσωση:
4=(χ+1+1)mod 7
χ=2
Άρα κωδικός του 2013 είναι το 2.
Αν θέλουμε να υπολογίσουμε τον κωδικό κάποιου τυχαίου έτους μπορούμε να χρησιμοποιήσουμε τον τύπο:
Κωδικόςχρόνου=(Κωδικόςαιώνα+[2 τελευταία ψηφία χρόνου]+[2 τελευταία ψηφία χρόνου]div4)mod7
Το div μας δίνει το πηλίκο της διαίρεσης. π.χ. 22div4=2 αφού 22=4 $\cdot$ 5+2
Η μεταβλητή Κωδικόςαιώνα παίρνει επαναλαμβανόμενες τιμές όπως παρακάτω:
1600: 6
1700: 4
1800: 2
1900: 0
2000: 6
2100: 4
2200: 2
2300: 0
Παράδειγμα
Τι μέρα θα έχουμε στις 8 Δεκεμβρίου του 2099;
Αρχικά θα βρούμε τον κωδικού του έτους. Ο κωδικός του αιώνα είναι το 6. Άρα
Κωδικόςχρόνου=(6+99+99div4)mod7
Κωδικόςχρόνου=(6+99+24)mod7
Κωδικόςχρόνου=129mod7
Κωδικόςχρόνου=3
Επομένως τώρα μπορούμε να υπολογίσουμε την ημέρα από τον πρώτο τύπο.
[ημέρα]=(3+6+8)mod7
[ημέρα]=176mod7
[ημέρα]=3
Άρα στις 8 Δεκεμβρίου του 2099 η ημέρα θα είναι Τρίτη.


5 σχόλια:

Adams είπε...

Απο το ημερα= 25mod7
πως βγαινει το ημερα =4
Τι ειναι το mod7

ΣΤΑΥΡΟΣ είπε...

Το mod7 είναι το ακέραιο υπόλοιπο ενός αριθμού με το 7. Στο προηγούμενο παράδειγμα, το 7 χωράει 3 φορές στο 25. Άρα, 3χ7=21 και περισσεύουν 4 μέχρι το 25.
Δηλαδή, 25mod7=4
Ομοίως, 48mod7=6 αφού 48-6=42 που είναι πολλαπλάσιο του 7.

Palolito Palolitou είπε...

Κωδικό χρόνου έχει από το 2008 μέχρι το 2013 τα προηγούμενα χρόνια τη κωδικό έχουν;

Palolito Palolitou είπε...
Αυτό το σχόλιο αφαιρέθηκε από τον συντάκτη.
Κλεάνθης Ξενιτίδης είπε...

Στο δεύτερο μισό της ανρτησης περιγράφεται η διαδικασία υπολογισμού των κωδικών χρόνου. Γενικά υπολογίζονται από τον τύπο:

Κωδικόςχρόνου=(Κωδικόςαιώνα+[2 τελευταία ψηφία χρόνου]+[2 τελευταία ψηφία χρόνου]div4)mod7

Υπάρχει και παράδειγμα στην ανάρτηση.

Δημοσίευση σχολίου

 
Design by Free Wordpress Themes | Bloggerized by Lasantha - Premium Blogger Templates