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).

Répondre

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 l'opération suivante (donner le résultat en chiffres)?
quatre-vingt cinq plus quarante
Système anti-bot

Faites glisser le curseur de gauche à droite pour activer le bouton de confirmation.

Attention : Vous devez activer Javascript dans votre navigateur pour utiliser le système anti-bot.

Retour

Résumé de la discussion (messages les plus récents en premier)

yoshi
16-05-2016 14:48:58

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...

@+

mike 224
16-05-2016 00:56:43

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!

mike 224
16-05-2016 00:55:22

@Yoshi,

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

freddy
15-05-2016 18:18:34

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é !

yoshi
15-05-2016 15:09:15

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.

@+

mike 224
15-05-2016 14:21:07

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!

freddy
15-05-2016 00:17:08

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.

mike224
14-05-2016 21:17:35

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.

mike224
14-05-2016 20:17:18

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.

freddy
14-05-2016 19:50:44

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.

mike224
14-05-2016 17:30:14

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.

Pied de page des forums