Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#1 14-05-2016 16:30:14

mike224
Invité

Déterminer un nombre de jour précis entre deux dates aléatoires

Bonjour à tous.

J'essaie depuis hier de calculer le nombre de jour aléatoire (dimanche par exemple) que l'on peut trouver entre deux dates aléatoires.

Par exemple: du 15/05/2016 au 24/09/2016.
J'ai d'abord calculer le nombre de jours entre les deux dates (116 jours). Ensuite, j'ai cherché le nombre de semaines entières en faisant 116/7 = 16. Le reste de la division vaut 4.
A ce stade, je sais qu'il y a 16 semaines entières, donc 16 dimanches.

Mais que faire avec le reste de la division pour savoir s'il y a un, deux, trois jours en plus ?

Ou bien y aurait-il une autre méthode pour la résolution ?

Merci d'avance.

#2 14-05-2016 18:50:44

freddy
Membre chevronné
Lieu : Paris
Inscription : 27-03-2009
Messages : 6 141

Re : Déterminer un nombre de jour précis entre deux dates aléatoires

Salut,

d'abord, il ne peut y avoir au maximum qu'un seul dimanche en plus.
Ensuite, si tu ne connais pas le jour de la semaine d'une des deux dates aléatoires, impossible de faire quoi que ce soit. Tu peux te créer un petit programme sur la base du fait que le premier janvier 2012 est un dimanche pour déduire le jour de la semaine de la première date aléatoire.
Ensuite, ça vient tout seul. Sinon, il n'y a pas de miracle possible.


Memento Mori ! ...

Hors ligne

#3 14-05-2016 19:17:18

mike224
Invité

Re : Déterminer un nombre de jour précis entre deux dates aléatoires

Bonsoir,

Merci pour l'astuce.

Effectivement, pour connaître le jour correspondant à la première date, j'ai utilisé l'algorithme de Mike Keith.
Maintenant, à partir du premier jour, je me demande comment je peux déduire s'il y a ou non un jour en plus.
Si je me réfère au calendrier, c'est très facile de le voir.
Mais je cherche une logique mathématique permettant de déduire cela à partir des calculs ou à partir du premier jour.

Merci.

PS: Je suis en mode recherche.

#4 14-05-2016 20:17:35

mike224
Invité

Re : Déterminer un nombre de jour précis entre deux dates aléatoires

Je pense avoir compris le principe.

En fait, j'ai réalisé que le reste de la division détermine le nombre de jours auquel l'on doit ajouter un jour de plus à partir du 1er jour (correspondant à la date à partir de laquelle on commence à compter).

Dans mon exemple, le 15 Mai 2016 tombe un Dimanche.
Sachant que je pars du 15 Mai 2016 au 24 Septembre 2016, j'ai 116 jours et 116 = 4 [7] (Quotient étant 16).
Il y a donc 16 semaines entières, donc 16 Dimanches.
Il y a aussi donc 4 jours auxquels l'on doit ajouter 1 jour supplémentaire à partir de Dimanche : Dimanche, Lundi, Mardi, Mercredi.

J'en déduis que le nombre de Dimanche = nombre de Lundi = Nombre de Mardi = Nombre de Mercredi = 17.

A force de chercher j'ai trouvé.

Merci encore Freddy pour ton aide.

#5 14-05-2016 23:17:08

freddy
Membre chevronné
Lieu : Paris
Inscription : 27-03-2009
Messages : 6 141

Re : Déterminer un nombre de jour précis entre deux dates aléatoires

Re,

il y a une petite erreur : il y a bien 16 dimanche, mais 17 lundi, mardi, mercredi et jeudi.
Pour qu'il y ait 17 dimanche (puisque le 15/05/2016 est un dimanche), il faudrait que tu finisses le 27/07/2016 (ce qui est faux).
Mais il y a une seconde erreur : entre tes deux dates, il y a 16+30+31+31+24=132 jours et donc 18 semaines et 6 jours , soit 18 dimanche et 19 lundi, mardi, mercredi, jeudi, vendredi et samedi.
Le 25/09/2016 est un dimanche.


Memento Mori ! ...

Hors ligne

#6 15-05-2016 13:21:07

mike 224
Invité

Re : Déterminer un nombre de jour précis entre deux dates aléatoires

Freddy,

Là il y a erreur:

Du 15/05 au 31/05 il y a : 31-15+1 = 17 jours.
Ensuite 30 jours pour Juin; 31 pour Juillet; 31 pour Août et 24 pour Septembre.
La somme donne 133 jours.
133 = 7*19 ou 133 = 0[7].

Il y a donc 19 semaines, donc 19 Dimanches.
Le décompte au calendrier donne le même résultat.

Il reste toutefois que :
-si le reste de la division était 1, il y aurait 1 Dimanche supplémentaire.
-si le reste de la division était 2, il y aurait 1 Dimanche et 1 Lundi supplémentaire.
etc!

#7 15-05-2016 14:09:15

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 11 381

Re : Déterminer un nombre de jour précis entre deux dates aléatoires

Bonjour,

Je confirme.
Petit programme Python :

#!/usr/bin/python
# -*- coding: utf-8 -*-

from datetime import *

Semaine=["lundi","mardi","mercredi","jeudi","vendredi","samedi","dimanche"]

#date de depart
an0,mois0,jour0=2016,5,14

#date finale
an1,mois1,jour1=2016,9,24

#nombre de jours entre les deux dates
duree=(date(an1,mois1,jour1)-date(an0,mois0,jour0)).days

# no d'ordre entre  0 - lundi - et 6 - dimanche
jour_debut=date(an0,mois0,jour0).weekday()

#Afichage du nom du jour du début
print("Jour de départ :",Semaine[jour_debut])

# ordre maximum
cor_max=6 #(cas du dimanche)

# Corection du nombre de jours en partant du dimanche
duree_corrigee=duree-(6-jour_debut)

# Calcul du nombre de dimanches
nb_dim=duree_corrigee//7+1
print()
print ("Nombre de dimanches:",nb_dim)

Sortie :

Jour de départ : samedi

Nombre de dimanches: 19

J'ai testé entre 16/05 et 21/05, j'ai bien 0 dimanche

Ainsi qu'on peut le voir, je calcule le nombre de jours entre les deux dates, puis je cherche le n° d'ordre du jour de départ pour corriger la durée en partant du dimanche suivant (sauf si on part d'un dimanche)
Je vais voir maintenant si ça colle pour n'importe quel jour de la semaine.

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#8 15-05-2016 17:18:34

freddy
Membre chevronné
Lieu : Paris
Inscription : 27-03-2009
Messages : 6 141

Re : Déterminer un nombre de jour précis entre deux dates aléatoires

Re,

exact, j'ai fait comme en finance, je n'ai pas compté le premier jour qui se trouve être un dimanche lui aussi.
Bon, au moins, tu auras avancé !


Memento Mori ! ...

Hors ligne

#9 15-05-2016 23:55:22

mike 224
Invité

Re : Déterminer un nombre de jour précis entre deux dates aléatoires

@Yoshi,

Merci pour ton programme. Il a l'air très intéressant.
Je vais m'en inspirer pour écrire un petit code VBA.

#10 15-05-2016 23:56:43

mike 224
Invité

Re : Déterminer un nombre de jour précis entre deux dates aléatoires

Freddy,

Oui, je le vois bien. Au moins, tu m'auras aussi aidé à prendre conscience dans l'erreur de calcul.
Génial que le problème soit résolu!

#11 16-05-2016 13:48:58

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 11 381

Re : Déterminer un nombre de jour précis entre deux dates aléatoires

Bonjour,

Voilà une 2nde version valable pour n'importe quel jour de la semaine :

#!/usr/bin/python
# -*- coding: utf-8 -*-

from datetime import date

Semaine=["lundi","mardi","mercredi","jeudi","vendredi","samedi","dimanche"]

#date de depart
an0,mois0,jour0=2016,5,3

#date finale
an1,mois1,jour1=2016,5,7

#nombre de jours entre les deux dates
duree=(date(an1,mois1,jour1)-date(an0,mois0,jour0)).days

# nos d'ordre entre  0 - lundi - et 6 - dimanche
jour_debut=date(an0,mois0,jour0).weekday()
jour_fin=date(an1,mois1,jour1).weekday()

#Afichage des noms du jour du début et de fin
print("Jour de départ :",Semaine[jour_debut])
print("Jour de fin :",Semaine[jour_fin])

# Nom du jour à compter et index
NomJour="jeudi"
jr_acompter=Semaine.index(NomJour)

# correctif pour ramener le décompte à partir du jour cherché
if jr_acompter<jour_debut:
    cr=jr_acompter-jour_debut+7
elif jr_acompter==jour_debut:
    cr=0
else:
    cr=jr_acompter-jour_debut

# Corection du nombre de jours en partant du dimanche
duree_corrigee=duree-cr

# Calcul du nombre de dimanches
nb_jours=duree_corrigee//7+1
print()
print ("Nombre de", NomJour,":",nb_jours)

J'ai utilisé des fonxctions pré-existantes ce qui m'a épargné de plus longs développements.

Il y a ici http://python.jpvweb.com/mesrecettespyt … l_de_dates quelqu'un qui s'en est passé pour toutes sortes de calculs sur les dates.
J'ai moi déjà écrit un calendrier perpétuel en Python, sans utiliser lesdites fonctions...

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

Réponse rapide

Veuillez composer votre message et l'envoyer
Nom (obligatoire)

E-mail (obligatoire)

Message (obligatoire)

Programme anti-spam : Afin de lutter contre le spam, nous vous demandons de bien vouloir répondre à la question suivante. Après inscription sur le site, vous n'aurez plus à répondre à ces questions.

Quel est le résultat de cette opération? 3*3=

Pied de page des forums