Calendrier Maya

Bruno Malenfant

29 janvier 2012

• Peut être fait seul(e) ou en équipe de deux (2).

• Date de remise : 15 février 2012 avant 23:55.

1 Introduction

Pour le premier tp vous allez construire un logiciel qui traduit une date du calendrier grégorien vers trois (3) des calendriers mayas : compte long, Haab et Tzolk’in.

2 Description

2.1 Entrées

Le logiciel va recevoir une date grégorienne en argument sur la ligne de commande. Il y aura donc trois valeurs en entrées : jour, mois, année. Par exemple :

  versMaya 21 12 2012

Ici l’exécutable du programme s’appel ’versMaya’. Cet appel va traduire la date du 21 décembre 2012 en date maya. Ce qui donnera :

  compte court : 13.0.0.0.0
  haab : 3 K'ank'in
  tzolk'in : 4 Ahau

Vous devez vérifier que le logiciel reçoit bien trois arguments. que ces arguments sont des valeurs entières légales. Pour l’année vous devez accepter les nombres positifs et négatifs . Il y a une année zéro dans le calendrier grégorien. Les mois sont de 1 à 12. Pour les jours cela dépend du mois :

nom  numéro nb. jours
janvier 1 31
février  2 28 ou 29
mars  3  31
avril  4  30
mai  5  31
juin  6  30
juillet  7  31
août  8  31
septembre  9  30
octobre  10  31
novembre  11  30
décembre  12  31

Les dates limites sont entre le 11 août -3113 et le 12 octobre 4772.

Une année est bissextile si elle est divisible par 4 mais pas par 100. Il y a exception si elle est divisible par 400 elle sera bissextile.

Si une valeur n’est pas correct alors vous affichez un message d’erreur approprié et le programme se termine (exit(-1)).

2.2 Analyse

Il existe plusieurs calendriers mayas. Pour ce logiciel nous allons utiliser trois de ces calendriers : compte long, Haab et Tzolk’in.

2.2.1 Compte long

Le compte long est un système simple. Une date est composée de 5 nombres : naktun . katun . tun . uinal . kin.

Un kin est une journée. Un uinal est composé de 20 kinob. Un tun est composé de 18 uinalob. Un katun est composé de 20 tunob et un naktun est composé de 20 katunob.

Le calendrier commence à la date 0.0.0.0.0. le jour suivant sera le 0.0.0.0.1. Après le 0.0.0.0.19 se sera le 0.0.0.1.0. Après le 0.0.0.17.19 se sera le 0.0.1.0.0. Après le 0.0.19.17.19 se sera le 0.1.0.0.0. Après le 0.19.19.17.19 se sera le 1.0.0.0.0. Après le 19.19.19.17.19 (12 octobre 4772, un jeudi) se sera à nouveau le 0.0.0.0.0.

2.2.2 Haab

Le calendrier haab ne tient pas compte des années, il indique seulement les jours. Il est basé sur un cycle de 365 jours. Il y a 18 mois de 20 jours et entre deux cycles il y a 5 jours qui n’ont pas de mois. Les jours sont numérotés de 0 à 19. Voici la liste des mois :

1 Pop
2 Wo
3 Sip
4 Sotz’
5 Sek
6 Xul
7 Yaxk’in
8 Mol
9 Ch’en
10 Yax
11 Sak
12 Keh
13 Mak
14 K’ank’in
15 Muwan
16 Pax
17 K’ayab
18 Kumk’u

La période de cinq jours qui n’a pas de mois s’appele Wayeb et les jours sont numérotés de 0 à 4.

Donc, après le 1 Pop il y a le 2 Pop, après le 19 Pop c’est le 0 Wo, après le 19 Kumk’u c’est le 0 Wayeb et après le 4 Wayeb c’est le 0 Pop.

2.2.3 Tzolk’in

Comme le calendrier haab le calendrier Tzolk’in ne tient pas compte des années. Il est basé sur un cycle de 260 jours. Les jours sont identifié par 2 valeurs. La première valeur est un nombre de 1 à 13 et la seconde est un mot parmit les suivants (en ordre) :

Imix, Ik, Akbal, Kan, Chicchan, Cimi, Manik, Lamat, Muluc, Oc, Chuen, Eb, Ben, Ix, Men, Cib, Caban, Etznab, Cauac, Ahau.

Par contre ici les deux valeurs augmente ensemble d’un journée à l’autre. Le premier jour est le 1 Imix. Le deuxième est le 2 Ik. Cela continue jusqu’au 13 Ahau. Par exemple, après le 13 Ben se sera le 1 Ix et après le 7 Ahau ce sera le 8 Imix. Après le 13 Ahau ce sera le 1 Imix à nouveau.

2.2.4 Correspondance

Voici quelques dates correspondantes d’un calendrier à l’autre :

compte long gregorien  haab  tzolk’in
0.0.0.0.0  11 aout -3113 8 Kumk’u 4 Ahau
9.12.11.5.18 29 aout 683 11 Yak 6 Etznab
12.19.6.15.2 1 janvier 2000 10 K’ank’in 11 Ik’
12.19.19.2.10 15 février 2012 18 Pax  6 Oc

2.3 Sorties

Le logiciel va afficher le résultat sur trois lignes :

compte long : 12.19.19.2.10
haab : 18 Pax
tzolk'in : 6 Oc

Le logiciel doit afficher dans ce format exact et ne rien afficher d’autre.

3 Conception

Chacune de vos routines doit avoir des commentaires. Ces commentaires doivent avoir l’information suivantes :

• La routine est-elle une fonction ou une procédure ?

• Rôle de la routine : ce qu’elle fait, ce qu’elle retourne.

• Argument : Description des arguments, leurs rôles dans la routine, les valeurs permisent, sont-ils des entrées ou des sorties ?, ...

• Les erreurs possibles.

Votre programme doit être dans un seul fichier.

4 Remise

N’oubliez pas d’écrire votre nom. Remettez votre programme en utilisant Moodle. Votre programme doit être dans un seul fichier. Vous n’avez le droit d’utiliser que les librairies suivantes pour votre logiciel : stdio.h, stdlib.h, string.h, math.h. stdbool.h et time.h.

5 Évaluation

• Fonctionnalité (6 pts).

– Votre programme doit compiler avec le compilateur ’gcc’ sur la machine chicoree. Si le programme ne compile pas, aucun point n’est donné pour la fonctionnalité.

• Structure (2 pts).

– Le respect des critères pour les commentaires.

– Bonne utilisation des structures de contrôle : if, while, ...

– Bonne modularité.

• Lisibilité (2 pts). – Bonne indentation.

– Identificateur significatif.

• Autres critères : – Pas de ’goto’.

– Un seul ’return’ par routine, à la fin de celle-ci.

– Pas de variables globales.

– Pas de ligne contenant des commentaires et du code.