| | youry_gagarine | Posté le 28/01/2004 @ 16:04 | Petit astucien
4 Messages
| salut,
pourriez-vous m'aider à voir plus clair dans la rédaction de ce petit
programme en C:
Ecrire un programme qui,à partir d'une date donnée détermine le jour
de cette date dans l'année.
1-la date doit être une structure de type date ainsi définit:
struct date{
int jour;
int mois;
int année
}
2-le programme devra tenir compte des années bissextiles ou le mois de
fevrier compte 29 jours.
3-le programme devra contenir une module(fonction)pour déterminer si une année est bissextiles ou pas et une module pour le renvoie du nombre de jours dans un mois tenant compte si l'année est bissextiles ou pas.
4-le programme devra donner à l'utilisateur la possibilité de continuer tant que celui-ci le suohaitera.
merci d'avance de votre aide.
| | |
| |
| Publicité |
|
| | koala01 | Posté le 29/01/2004 à 16:31 | Astucien
4715 Messages
| l'idéal serait de partir d'une date bien définie...
par exemple, définir comme point de départ le premier janvier 1980 comme étant un mardi (je n'ai pas les dates antérieures [clindoeil]
Au départ de là, il faut compter le nombre de jour qui séparent la date introduite de la date de référence.
je créerais d'abord un vecteur moisnombre, un autre moisnom et un dernier semaine:
moisnombre[31,0,31,30,31,30,31,31,30,31,30,31]
moisnom[janvier,fevrier,mars,avril,mai,juin,juillet,aout,septembre,octobre,novembre,decembre]
semaine[mardi,mercredi,jeudi,vendredi,samedi,dimanche,lundi]
Tu remarquera que le nombre de jours de février est défini au départ à 0... la raison est simple: ca change en fonction des années bisextiles [clindoeil]
tu remarquera aussi que le vecteur semaine commence au mardi (le jour du premier janvier 1980)
la vérification des années bisextiles devrait se faire selon le principe suivant:
[code]si (modulo(annee,4) <>0)
{
moisnombre[2]=28
}
sinon
{
si (modulo(annee,100)<>0)
{
moisnombre[2]=29
}
sinon
{
si (modulo(annee,400)<>0)
{
moisnombre[2]=28
}
sinon
{
moisnombre[2]=29
}
}
}[/code]
pourquoi [question]
une année bisextile est une année divisible par quatre, sauf si elle est divisible par 100, et encore, car les années divisibles par 400 le sont...
Si donc, le modulo (le reste de la division) de l'année par 4 est égal à 0, on a affaire à une année bisextile, sauf si le modulo de l'année par 100 est égal à 0...à moins que le modulo de l'année par 400 soit égal à 0 [langue][langue]
puis il s'agit de faire le calcul du nombre de jour... (là, ca va être plus dur)
la première chose à faire est de voir si la date introduite est plus ancienne ou plus récente que la date de référence...du genre
si (annee<1980)
{
la date introduite est plus petite
}
Ensuite, on compte le nombre de jours des années COMPLETES qui séparent la date introduite de la date de référence
[code]
pour chaque année complete
{
pour (i=1 à 12)
{
(vérification du nombre de jours de février)
total=total+moisnombre[i]
}
}
[/code]
il faut donc ne pas prendre l'année introduite [clindoeil]...
exemple: si on introduit la date 16/01/1972,il ne faudra pendre que les années 1973,1974,1975,1976,1977,1978,1979
de meme, si on introduit le 29/12/2004, il ne faudra pas prendre l'année 2004 en compte
(en veillant à ce que le total soit au départ à 0 [clindoeil])
puis, on vérifie le nombre de jours des mois COMPLETS de l'année incomplete...
pour la premiere date donnée en exemple, il faut donc prendre de février à décembre, pour la seconde, il faut prendre de janvier à novembre... toujours selon le meme principe:
[code]
pour chaque mois complet
{
total=total+moisnombre[numéro du mois complet]
}
Enfin, on vérifie le nombre de jour du mois incomplet:
total=total+moisnombre[numéro du mois]-jour
si la date introduite est antérieur, et
total=total+jour
si la date introduite est postérieur...
Il ne restera plus qu'à faire le modulo du total par 7...et à voir quel jour ca donne
Bien sur, le tout doit etre mis dans une boucle qui vérifie si l'utilisateur voulait continuer ou non...
Je t'ai donné le principe, car, il faut quand meme que tu travaille un (tout) petit peu sur ton code [clindeoil] | | | | | youry_gagarine | Posté le 29/01/2004 à 16:49 | Petit astucien
4 Messages
|
salut koala01
merci de m'avoir apporté toutes ces explications combien intéressantes
et d'avoir pris ton temps de m'aider.
mille merci!!!!!!!!!
youry | | | | | koala01 | Posté le 29/01/2004 à 22:32 | Astucien
4715 Messages
| juste une petite précision (une petite modification en fait):
Les tableaux/vecteurs, en C (comme en C++, d'ailleurs) commencent avec un index de 0 ...
====>
Ce qui fait que janvier se trouve en moisnom[0]
Du coup, ben, il faut lire:
pour les jours de février moisnombre[1]
pour la boucle: pour (i=0 à 11)
pour les mois: moisnombre[numéro du mois complet -1] et moisnombre[ numéro du mois -1] | | | | | koala01 | Posté le 29/01/2004 à 22:34 | Astucien
4715 Messages
| (pour la petite histoire, j'ai du récemment créer un logaritme qui permettait sensiblement la meme chose... c'est ainsi que j'ai su te le donner sans trop y réfléchir [clindoeil]) | | | |
| | Haut de la page |
| | Inscrivez-vous ! |
- Posez vos questions
- Résolvez vos problèmes
- Aidez les autres
- Participez et créez vos discussions
- Dialoguez en privé avec d'autres membres
- Suivez vos sujets préférés
- Affichez les signatures des membres
|
|