Contacts

Combien de mois passèrent entre deux dates. Comment une formule mathématique est-elle par le nombre du mois pour calculer le nombre de jours dedans? Combien de jours entre dates? Instruction

Noter: Cet article est la traduction de l'article CMCenroe.me/2014/12/05/days-in-month-formula.html ( Partie I.), ainsi que le complément du droit d'auteur ( Partie II.). Ne doit pas être traité au sérieux, mais plutôt comme une échauffement pour l'esprit, ne nécessitant pas plus que la connaissance de l'école d'arithmétique et n'ayant pas application pratique. Toute la lecture agréable!

Partie I.

introduction

Récemment, après une autre nuit sans sommeil, j'ai réfléchi aux méthodes de mémorisation du nombre de jours à chaque mois de l'année. Pour ce faire, il y a un compte, ainsi que le moyen de considérer les doigts sur les articulations, mais ni l'autre ni l'autre ne m'ont arrangé. J'ai pensé, et s'il existe une formule mathématique pour résoudre une telle tâche et sans le trouver lorsque j'ai déclenché l'étude - j'ai jeté un défi de le créer.

Formaliser en d'autres termes, il est nécessaire de trouver une fonctionnalité. f.une telle valeur f (x) Pour chaque mois x.représenté par un nombre de 1 à 12 est égal au nombre de jours ce mois-ci. Tableau d'argument et valeurs de fonction:

x. 1 2 3 4 5 6 7 8 9 10 11 12
f (x) 31 28 31 30 31 30 31 31 30 31 30 31

Si vous avez envie de vous essayer avant de lire ma décision, il est temps. Si vous préférez voir immédiatement la réponse à l'emploi, puis regardez sous le spoiler.

Répondre


Vous trouverez ci-dessous mes étapes pour trouver une solution.

APPAREIL MATHÉMATIQUE

Premièrement, nous étions bu en mémoire deux essentiels pour résoudre cette tâche de l'opérateur: Division entière et solde de la division.

Division entièreil s'agit d'un opérateur utilisé dans de nombreuses langues de programmation lors de la division de deux entiers et de défausses de partie fractionnaire. Je vais le décrire comme. Par example:

Reste de la division Ceci est un opérateur qui est conduit de la division. Dans de nombreuses langues de programmation, un symbole est appliqué % , Je vais utiliser la conception du type, par exemple:

Je note que la balance de la division a une priorité égale avec la division.

Base

Nous appliquons donc notre appareil mathématique pour obtenir la formule de base. En tant que mois normal, 30 ou 31 jours, nous pouvons donc utiliser pour obtenir alternativement 1 ou 0, puis simplement ajouter à ce numéro la constante:

Nous recevons la table, les valeurs correctes sont allouées:
x. 1 2 3 4 5 6 7 8 9 10 11 12
f (x) 31 30 31 30 31 30 31 30 31 30 31 30

Bon départ! Il existe déjà les valeurs correctes pour janvier et pendant des mois de mars à juillet inclusivement. Février est un cas particulier et nous allons y traiter un peu plus tard. Après juillet, pour les mois restants, l'ordre d'obtention de 0 et 1 doit être changé à l'opposé.
Pour cela, nous pouvons ajouter à Delimo 1:

x. 1 2 3 4 5 6 7 8 9 10 11 12
f (x) 30 31 30 31 30 31 30 31 30 31 30 31

Maintenant, les valeurs correctes d'août à décembre, mais, comme cédaient, les valeurs pour d'autres mois sont incorrectes. Voyons comment nous pouvons combiner ces formules.

Superposition de masque

Pour ce faire, une fonction spécifiée par morceaux est nécessaire, mais - comme il me semblait que cela me semblait - j'ai pensé à une autre solution de solutions utilisant une partie de la fonction sur le même intervalle, l'autre de l'autre.
Je crois que le moyen le plus simple de trouver une expression égale à 1 dans une zone d'application et de 0 dans le reste. La méthode dans laquelle il y a un argument multiplicateur à l'expression que nous l'excluons de la formule située à l'extérieur du champ de son utilisation, j'ai appelé "l'imposition d'un masque", donc un tel comportement est similaire à un masque de bits.
Pour appliquer cette méthode, dans la dernière partie de notre fonction, il est nécessaire de trouver une expression égale à 1 à et, car les valeurs de l'argument sont toujours inférieures à 16 - à cet effet conviennent parfaitement à un entier Division de 8.
x. 1 2 3 4 5 6 7 8 9 10 11 12
x. ⁄ 8 ⌋ 0 0 0 0 0 0 0 1 1 1 1 1

Maintenant, avec ce masque, en utilisant l'expression en division au lieu de 1, nous pouvons remplacer la formulation de formule de 0 et 1 pour être inverse:

x. 1 2 3 4 5 6 7 8 9 10 11 12
f (x) 31 30 31 30 31 30 31 31 30 31 30 31

Eureka! C'est vrai, sauf février. Surprise Surprise.

février

Dans tous les mois, 30 ou 31 jours, à l'exception de février, avec son 28 (année bissextile, allez au-delà de cette tâche). Pour le moment, selon notre formule dedans, 30 jours, il serait donc agréable de soustraire une expression égale à 2 à.
Le mieux que j'ai réussi à venir, ce qui impose un masque pendant tous les mois après février:
x. 1 2 3 4 5 6 7 8 9 10 11 12
2 mod. x. 0 0 2 2 2 2 2 2 2 2 2 2

En modifiant la constante de base par 28 avec l'ajout de 2 au reste du mois, nous obtiendrons la formule:

x. 1 2 3 4 5 6 7 8 9 10 11 12
f (x) 29 28 31 30 31 30 31 31 30 31 30 31

Malheureusement, le janvier est maintenant plus court pendant 2 jours. Mais heureusement, pour obtenir une expression qui sera appliquée que pour le premier mois est très facile: il est arrondi le contraire. Multiplier sur 2 Nous obtenons la formule finale:

x. 1 2 3 4 5 6 7 8 9 10 11 12
f (x) 31 28 31 30 31 30 31 31 30 31 30 31

Épilogue

Ici, il s'agit d'une formule d'obtention du nombre de jours au mois de l'année, en utilisant l'arithmétique la plus simple. La prochaine fois que vous vous souvenez de combien de jours en septembre, effectuez simplement avec cette fonction mono-ligne sur JavaScript:

Fonction F (x) (retour 28 + (x + math.floor (x / 8))% 2 + 2% x + 2 * math.floor (1 / x);)

Partie II.

introduction

Dans la première partie, une formule courte et même légèrement élégante a été obtenue, dont les principaux avantages sont la simplicité de l'appareil mathématique, le manque de branches et des expressions conditionnelles, une concision. Les inconvénients sont en outre que vous ne l'appliquerez pas dans votre projet - vous pouvez inclure le manque de vérification d'une année visqueuse et non bissuée.
Donc j'ai défini une tâche pour créer une fonction f.une telle valeur f (x, y) Pour chaque mois x.représenté par le nombre de 1 à 12 et an y., plus 0, égale le nombre de jours dans le mois x. dans l'année y..
Pour impatient sous le spoiler, il y a une réponse prête à l'emploi, je demande au reste de me suivre.

Répondre

RESTE DE LA DIVISION: mod. et ⌊⌋

Pour une clarté visuelle, nous convenons que dans certaines formules, l'opérateur de division avec le résidu est remplacé par des supports inférieurs, où il me semblait nécessaire:

Année bissextile

Une journée de calendrier supplémentaire est introduite dans l'année bissextile: 29 février. Comme on le sait, le saut est un an, multiple 4 et pas un multiple 100, ni un multiple de 400. Nous écrivons une expression identique à cette déclaration:

Pour amener cette expression à algébrique, il est nécessaire de s'appliquer à la suite d'une injection d'expression de la forme:

Ce qui permettra d'obtenir 1 lors de la division sans résidus ni de 0 lors de la division avec le résidu pour l'utiliser dans la formule pour déterminer le nombre de jours dans un mois.

En tant que fonction g " Vous pouvez utiliser 1 minus solde de la division pour:

x. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
g "(x) Infini. 1 0 0 0 0 0 0 0 0 0 0 0 0 0

Il est facile de noter qu'en augmentant la division et le diviseur sur 1, nous obtiendrons la formule correcte avec:
x. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
g "(x) 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Ainsi, l'expression écrira comme suit:


Et écrivez l'expression comme:

Appliquer cette approche Nous obtenons la fonction suivante. g (y), dont la valeur sera 1 si l'année est sautée, ou 0 dans le cas opposé:

y. 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000
g (y) 0 0 1 0 0 0 1 0 0 0 1
y. 2000 2100 2200 2300 2400 2500 2600 2700 2800 2900 3000
g (y) 1 0 0 0 1 0 0 0 1 0 0

L'année biliaire a été isolée.

Je vous rappelle que dans le cadre de l'accord adopté, l'exploitant de l'obtention d'un équilibre de la division peut être décrit comme mod.et ⌊⌋.

Superposition de masque

Dans la formule, une partie est un amendement qui ajoute 2 jours à janvier. Si vous supprimez le multiplicateur 2 et dans le numérateur pour remplacer 1 sur 2, cette formule ajoutera 2 jours à janvier et 1 jour avant février, ce qui nous donne la clé de l'ajout de la journée au cours de l'année bissextile. Pour plus de clarté, utilisez la valeur intermédiaire de formule g (y) et de qualité y. Nous utilisons des années 2000 (bonds) et 2001 (pas leap):

x. 1 2 3 4 5 6 7 8 9 10 11 12
f (x, 2000) 31 29 31 30 31 30 31 31 30 31 30 31
f (x, 2001) 30 28 31 30 31 30 31 31 30 31 30 30

Valeurs pour tous les mois, sauf en janvier, pas une année bissextile n'est vraie.

Pour corriger ce malentendu gênant, ajoutez-nous au 1 jour déjà connu par la formule:


Ou alors:

x. 1 2 3 4 5 6 7 8 9 10 11 12
f (x, 2000) 31 29 31 30 31 30 31 31 30 31 30 31
f (x, 2001) 31 28 31 30 31 30 31 31 30 31 30 30

Conclusion

En conséquence, il est déjà obtenu de manière significative plus encombrante, mais une formule plus universelle, qui peut également être utilisée pour obtenir le nombre de jours dans un mois d'une certaine année:

Fonction F (x, y) (Retour 28 + ((x + math.floor (x / 8))% 2) + 2% x + math.floor ((1 + (1 - (y% 4 + 2)% (Y% 4 + 1)) * (((Y% 100 + 2)% (Y% 100 + 1)) + (1 - (Y% 400 + 2)% (Y% 400 + 1))) / x ) + Math.floor (1 / x) - math.floor (((1 - (Y% 4 + 2)% (Y% 4 + 1)) * ((Y% 100 + 2)% (Y% 100 + 1)) + (1 - (Y% 400 + 2)% (Y% 400 + 1))) / x);)
Exemple sur C # Ideone.com/fanutz.

1 . Je ne sais pas comment utiliser un mnémonique similaire, j'ai donc espionné la tablette sur Internet.
2 . "Bases" ou "Règle avec de nombreuses exceptions", comme la plupart des règles.
3 . Initialement, dans le calendrier romain, février a été le dernier mois de l'année, il y a donc une logique qu'elle soit plus courte que tout le monde. Il existe également une logique dans l'ajout ou l'élimination de la journée à la fin de l'année, sa longueur est donc une variable.

UPD. une:
Traduction alternative de la première partie dans

Calculateur de contour en ligne gratuit. Le Buchelli vous aidera et vous indiquera combien de jours passés entre les deux dates spécifiées. De plus, si vous avez besoin, vous pouvez calculer le nombre de calendriers, de week-ends ou de jours ouvrables (heures) contient la période spécifiée de l'année ou plusieurs années.

Combien de jours entre dates? Instruction

Vous vous demandez simplement une journée spécifique du début et de la fin et obtenez le calcul à travers la part des secondes. Toutes les données en ligne Calculator croit indépendamment. Si vous modifiez les jours de départ de la semaine, le résultat est automatiquement recalculé, en tenant compte de l'année bissextile.

IMPORTANT: Il est impossible de prendre des calculs au cours des indicateurs de l'année écoulée des jours ouvrables / heures par mois et de fournir des calculs - les données seront différentes. Par conséquent, il est préférable d'utiliser la calculatrice.

Donc, la procédure:

  1. Dans les champs "Date du primaire" et "Date finale" Choisissez le jour de référence initial et final de la référence, à partir de 2013 et se terminant à l'avenir 2018.
  2. Installez le nombre d'heures de travail dans le champ suivant. Par défaut, ce champ est déjà de 8 heures (semaine de travail de 40 heures), mais vous pouvez modifier ce chiffre.
  3. Sur le côté droit de l'écran de la bannière, vous verrez le résultat obtenu: jours ouvrables, jours de calendrier et heures de travail entre les dates spécifiées. Les résultats doivent être copiés et enregistrés dans votre document.

Pour ce qui peut être utilisé calculatrice

  1. Calculer des pénalités et en retard dans les contrats
  2. Comment comprendre l'efficacité de l'utilisation de certaines délais de ressources et limiter les délais
  3. Comment accidentellement pour ne pas attribuer le calendrier de la tâche du week-end
  4. Combien de temps reste à la date limite

Exemple:

Vous êtes un comptable. La tête vous a demandé dans les prochaines minutes de fournir des données sur le nombre d'heures de travail, que tous les employés de la Société en février devraient déterminer. Le nombre de travailleurs que vous pouvez facilement déterminer - vous avez des chiffres avant vos yeux. Mais le nombre d'heures devrait être considéré ... et combien de jours en février? Et l'année est un saut? Et quels jours étaient les week-ends? Comment déterminer le nombre de jours de vacances?

Solution: utilisez simplement notre widget. Toutes les informations que vous recevrez automatiquement, vous n'avez pas besoin de calendriers de bureau et de calculatrices.

Avez-vous aimé cette calculatrice? Ensuite, essayez nos autres opportunités

Vous souhaitez conserver la comptabilité, envoyer des rapports et effectuer des calculs dans un service Web pratique et simple? Essayer gratuit de 14 jours. Buchetter! Nous vous apprendrons rapidement comment utiliser le service et répondre à toutes les questions!

Pour résoudre certaines tâches, lors de la création d'une table, vous avez besoin dans une cellule distincte ou dans la formule, spécifiez le nombre de jours dans un mois afin que le programme puisse avoir les calculs nécessaires. Excel a des outils destinés à effectuer cette opération. considérons diverses méthodes Applications de cette fonctionnalité.

Calculez le nombre de jours dans un mois dans Excele en utilisant des opérateurs de catégorie spéciale "Date et l'heure". Pour savoir exactement quelle option est la meilleure à appliquer, vous avez d'abord besoin, tout d'abord, définissez les objectifs de l'opération. Selon cela, le résultat du calcul peut être déchargé dans un élément séparé sur une feuille et peut également être utilisé à l'intérieur d'une autre formule.

Méthode 1: Combinaison des opérateurs jour et conmin

Les plus façon simple Résoudre cette tâche est une combinaison d'opérateurs JOURNÉE et Konmène.

Une fonction JOURNÉE appartient au groupe d'opérateurs "Date et l'heure". Il indique un nombre spécifique de 1 avant que 31 . Dans notre cas, la tâche cet opérateur Il y aura une indication dernier jour mois avec la fonction intégrée sous la forme d'un argument Konmène.

Opérateur de syntaxe JOURNÉE Suivant:

Jour (date_v_)

C'est-à-dire que le seul argument de cette fonctionnalité est "Date au format numérique". Il demandera à l'opérateur Konmène. Il faut dire que la date du format numérique diffère du format habituel. Par exemple, la date 04.05.2017 dans une forme numérique ressemblera à 42859 . Par conséquent, ce format Excel utilise uniquement des opérations internes. Il est rarement utilisé pour afficher dans les cellules.

Opérateur Konmène Conçu pour indiquer le numéro de séquence du dernier jour du mois, situé sur le nombre de mois spécifié à l'avance ou à l'arrière de la date spécifiée. La fonction de syntaxe est la suivante:

Conmines (nach_data; number_mets)

Opérateur "Date élémentaire" Contient une date à laquelle le compte à rebours est effectué ou un lien vers la cellule, où il se trouve.

Opérateur "Nombre de mois" Indique le nombre de mois auxquels le compte à rebours doit être compte à rebours.

Voyons maintenant comment ça marche sur exemple spécifique. Pour ce faire prendre feuille de calcul ExcelÀ l'une des cellules dont un certain nombre de calendrier est inscrit. Il est nécessaire d'utiliser l'ensemble des opérateurs ci-dessus pour déterminer le nombre de jours dans la période mensuelle auquel ce numéro se réfère.


Formule générale Nous avons pris la forme suivante:

Jour (convaincre (B3; 0))

Dans cette formule, la valeur variable n'est que l'adresse de la cellule ( B3.). Ainsi, si vous ne voulez pas effectuer la procédure à travers Fonctions de maîtriseVous pouvez insérer cette formule dans n'importe quel élément de feuille, il suffit de remplacer l'adresse de la cellule contenant le numéro à un qui est pertinent dans votre cas exactement. Le résultat sera similaire.

Méthode 2: Détermination automatique du nombre de jours

Voyons maintenant une autre tâche. Il est nécessaire que le nombre de jours ne soit pas affiché à un numéro de calendrier donné, mais sur le courant. De plus, le changement de périodes serait effectué automatiquement sans participation des utilisateurs. Bien qu'il semble étrange, mais cette tâche est plus facile que la précédente. Pour résoudre, même ouvert Maître des fonctions Pas besoin, puisque la formule qui effectue cette opération ne contient pas de variables ni de liens vers des cellules. Vous pouvez simplement conduire dans la cellule de la feuille où vous souhaitez afficher le résultat, la formule suivante inchangée:

Jour (diable (aujourd'hui (); 0))

La fonction intégrée aujourd'hui, que nous avons appliquée dans ce cas, affiche le numéro d'aujourd'hui et n'a aucun argument. Ainsi, dans votre cellule, le nombre de jours au cours du mois en cours sera affiché.

Méthode 3: Calcul du nombre de jours pour une utilisation dans des formules complexes

Dans les exemples ci-dessus, nous avons montré comment effectuer le calcul du nombre de jours en un mois le long du numéro de calendrier spécifié ou automatiquement au mois en cours avec la sortie du résultat dans une cellule distincte. Mais trouver cette valeur peut être nécessaire pour calculer d'autres indicateurs. Dans le même temps, le calcul du nombre de jours sera effectué à l'intérieur de la formule complexe et ne sera pas affichée dans une cellule distincte. Voyons comment faire cela sur l'exemple.

Nous devons faire pour que le nombre de jours restants jusqu'à la fin du mois en cours soit affiché dans la cellule. Comme dans la méthode précédente, cette option ne nécessite pas d'ouverture Fonctions de maîtrise. Vous pouvez simplement vous rendre dans la cellule l'expression suivante:

Jour (conmines (aujourd'hui (); 0)) - jour (aujourd'hui ())

Après cela, le nombre de jours jusqu'à la fin du mois sera affiché dans la cellule spécifiée. Chaque jour, le résultat sera automatiquement mis à jour et du début de la nouvelle période, le compte recommencera. Il s'avère une sorte de compte à rebours.

Comme nous le voyons, la formule spécifiée est composée de deux parties. Le premier d'entre eux est une expression déjà familière du calcul du nombre de jours dans un mois:

Jour (diable (aujourd'hui (); 0))

Mais dans la deuxième partie, il est soustrait de cet indicateur d'aujourd'hui:

Jour après jour ())

Ainsi, lors de l'exécution de ce calcul, la formule de calcul du nombre de jours est partie de formule plus complexe.

Méthode 4: Formule alternative

Mais malheureusement, les versions du programme précédent Excel 2007 manquent Konmène. Comment être les utilisateurs qui utilisent de vieilles versions de l'application? Pour eux, une telle opportunité existe à travers une autre formule, qui est plus massive que celle décrite ci-dessus. Voyons comment calculer le nombre de jours en un mois le long du numéro de calendrier spécifié en utilisant cette option.

  1. Sélectionnez la cellule pour émettre le résultat et accédez à la fenêtre Arguments de l'opérateur JOURNÉE Déjà familier à nous. Installez le curseur dans le seul champ de cette fenêtre et cliquez sur le triangle inversé situé à gauche de la chaîne de formule. Aller à la section "Autres fonctions ...".
  2. Dans la fenêtre Fonctions de maîtrise dans un groupe "Date et l'heure" Allouer le nom "DATE" et cliquez sur le bouton D'accord.
  3. La fenêtre de l'opérateur est lancée DATE. Cette fonctionnalité convertit la date du format habituel à valeur numériquequi sera alors ensuite géré l'opérateur JOURNÉE.

    La fenêtre ouverte a trois champs. Dans le champ "Jour" Vous pouvez entrer immédiatement le numéro "une". Ce sera une action inchangée pour toute situation. Mais deux autres domaines devront faire soigneusement.

    Installez le curseur dans le champ "An". Ensuite, allez à la sélection des opérateurs à travers un triangle familier à nous.

  4. Tout dans la même catégorie Fonctions de maîtrise Allouer le nom "AN" et cliquez sur le bouton D'accord.
  5. La fenêtre Arguments de l'opérateur commence AN. Il définit l'année au numéro spécifié. Dans la seule fenêtre de la fenêtre "Date au format numérique" Indiquez un lien vers une cellule contenant la date de début pour laquelle vous devez déterminer le nombre de jours. Après cela, ne vous précipitez pas, cliquez sur le bouton D'accord, et cliquez sur le nom "DATE" dans la ligne de formule.
  6. Ensuite, nous retournons à la fenêtre de l'argument DATE. Installez le curseur dans le champ "Mois" et aller au choix des fonctions.
  7. DANS Fonctions de l'assistant Cliquez sur le nom "MOIS" et cliquez sur le bouton D'accord.
  8. La fenêtre Arguments de fonction commence MOIS. Ses tâches sont similaires à celle de l'opérateur précédent, seule elle affiche le nombre de mois. Dans le seul champ de cette fenêtre, nous définissons la même référence au numéro d'origine. Ensuite, dans la formule, cliquez sur le nom "JOURNÉE".
  9. Retour à la fenêtre de l'argument JOURNÉE. Ici, nous devons faire un seul petit code à barres. Dans la fenêtre unique de la fenêtre, dans laquelle les données sont déjà localisées, ajoutez une expression à la fin de la formule "-une" Sans citations, ainsi que «+1» après l'opérateur MOIS. Après cela, cliquez sur le bouton D'accord.
  10. Comme nous pouvons le constater, dans la cellule présélectionnée, le nombre de jours dans le mois, auquel appartient le nombre spécifié. La formule générale a ce genre:

    Jour (date (année (D3); mois (D3) +1; 1) -1)

Le secret de cette formule est simple. Nous déterminerons la date du lendemain de la période suivante, puis en prenant une journée, recevant le nombre de jours au cours du mois spécifié. La magnitude variable dans cette formule est un lien vers la cellule D3. à deux endroits. Si vous le remplacez avec l'adresse de la cellule dans laquelle la date est dans votre cas particulier, vous pouvez simplement conduire cette expression à n'importe quel élément de la feuille sans aide. Fonctions de maîtrise.

Comme vous pouvez le constater, il existe plusieurs options pour connaître le nombre de jours dans un mois d'Excel. Quoi d'utiliser exactement dépend du but ultime de l'utilisateur, ainsi que de la version du programme qu'il utilise.

La calculatrice des dates est conçue pour calculer le nombre de jours entre les dates, ainsi que pour trouver la date en ajoutant ou en soustrayant un certain nombre de jours à la date connue.

Ajouter des jours à ce jour

Afin de savoir quel numéro passera à un certain nombre de jours, utilisez cette option. Entrez la date de début et le nombre de jours à ajouter. Pour la soustraction, utilisez la valeur avec un moins. La calculatrice a également une option permettant d'ajouter uniquement des jours ouvrables.

Calculer le nombre de jours entre les dates

Cette méthode de calcul répondra à la question "Combien de jours passés à la date." Entrez la date de début et la date de fin et cliquez sur le bouton "Calculer". La calculatrice montrera combien de jours entre les dates entrées. Le calculateur séparément montrera le nombre de jours ouvrables.

Avec cette option, vous pouvez calculer le nombre de jours laissé à un certain événement, par exemple avant l'anniversaire ou les vacances. Pour ce faire, dans le champ Date initial, spécifiez le numéro actuel et dans le champ Date de fin - la date des événements.

Vacances

La calculatrice peut calculer, ajouter et déduire des journées de calendrier et des travailleurs. Non fonctionnel non fonctionnel jours de fête sont:

  • 1,2,3,5,6,8 janvier - jours fériés du nouvel an
  • 7 janvier - Noël orthodoxe
  • 23 février - Défenseur de la fête des patries
  • 8 mars - Journée internationale de la femme
  • 1er mai - Vacances de printemps et de travail
  • 9 mai - Journée de la victoire
  • 12 juin - Journée russe
  • 4 novembre - jour de l'unité des gens

Si la journée festive est tombée le samedi ou le dimanche, il est transféré pour la journée de travail la plus proche. Mais parfois le week-end est transféré vers un autre endroit du calendrier. Par exemple, samedi et dimanche, qui ont chuté les jours fériés du Nouvel An, peuvent être transférés pour pouvoir prolonger les jours fériés.

Calculatrice Lors du calcul des jours prend en compte les deux dates de fête officielles et tous les transferts.

Noter: Cet article est la traduction de l'article CMCenroe.me/2014/12/05/days-in-month-formula.html ( Partie I.), ainsi que le complément du droit d'auteur ( Partie II.). Ne concernez pas le matériau au sérieux, mais plutôt comme un échauffement de l'esprit qui ne nécessite plus que la connaissance de l'école d'une application arithmétique et non pratique. Toute la lecture agréable!

Partie I.

introduction

Récemment, après une autre nuit sans sommeil, j'ai réfléchi aux méthodes de mémorisation du nombre de jours à chaque mois de l'année. Pour ce faire, il y a un compte, ainsi que le moyen de considérer les doigts sur les articulations, mais ni l'autre ni l'autre ne m'ont arrangé. J'ai pensé, et s'il existe une formule mathématique pour résoudre une telle tâche et sans le trouver lorsque j'ai déclenché l'étude - j'ai jeté un défi de le créer.

Formaliser en d'autres termes, il est nécessaire de trouver une fonctionnalité. f.une telle valeur f (x) Pour chaque mois x.représenté par un nombre de 1 à 12 est égal au nombre de jours ce mois-ci. Tableau d'argument et valeurs de fonction:

x. 1 2 3 4 5 6 7 8 9 10 11 12
f (x) 31 28 31 30 31 30 31 31 30 31 30 31

Si vous avez envie de vous essayer avant de lire ma décision, il est temps. Si vous préférez voir immédiatement la réponse à l'emploi, puis regardez sous le spoiler.

Répondre


Vous trouverez ci-dessous mes étapes pour trouver une solution.

APPAREIL MATHÉMATIQUE

Premièrement, nous étions bu en mémoire deux essentiels pour résoudre cette tâche de l'opérateur: Division entière et solde de la division.

Division entièrec'est un opérateur utilisé dans de nombreuses langues de programmation lors de la division de deux entiers et du rejet d'une partie fractionnelle privée. Je vais le décrire comme. Par example:

Reste de la division Ceci est un opérateur qui est conduit de la division. Dans de nombreuses langues de programmation, un symbole est appliqué % , Je vais utiliser la conception du type, par exemple:

Je note que la balance de la division a une priorité égale avec la division.

Base

Nous appliquons donc notre appareil mathématique pour obtenir la formule de base. En tant que mois normal, 30 ou 31 jours, nous pouvons donc utiliser pour obtenir alternativement 1 ou 0, puis simplement ajouter à ce numéro la constante:

Nous recevons la table, les valeurs correctes sont allouées:
x. 1 2 3 4 5 6 7 8 9 10 11 12
f (x) 31 30 31 30 31 30 31 30 31 30 31 30

Bon départ! Il existe déjà les valeurs correctes pour janvier et pendant des mois de mars à juillet inclusivement. Février est un cas particulier et nous allons y traiter un peu plus tard. Après juillet, pour les mois restants, l'ordre d'obtention de 0 et 1 doit être changé à l'opposé.
Pour cela, nous pouvons ajouter à Delimo 1:

x. 1 2 3 4 5 6 7 8 9 10 11 12
f (x) 30 31 30 31 30 31 30 31 30 31 30 31

Maintenant, les valeurs correctes d'août à décembre, mais, comme cédaient, les valeurs pour d'autres mois sont incorrectes. Voyons comment nous pouvons combiner ces formules.

Superposition de masque

Pour ce faire, une fonction spécifiée par morceaux est nécessaire, mais - comme il me semblait que cela me semblait - j'ai pensé à une autre solution de solutions utilisant une partie de la fonction sur le même intervalle, l'autre de l'autre.
Je crois que le moyen le plus simple de trouver une expression égale à 1 dans une zone d'application et de 0 dans le reste. La méthode dans laquelle il y a un argument multiplicateur à l'expression que nous l'excluons de la formule située à l'extérieur du champ de son utilisation, j'ai appelé "l'imposition d'un masque", donc un tel comportement est similaire à un masque de bits.
Pour appliquer cette méthode, dans la dernière partie de notre fonction, il est nécessaire de trouver une expression égale à 1 à et, car les valeurs de l'argument sont toujours inférieures à 16 - à cet effet conviennent parfaitement à un entier Division de 8.
x. 1 2 3 4 5 6 7 8 9 10 11 12
x. ⁄ 8 ⌋ 0 0 0 0 0 0 0 1 1 1 1 1

Maintenant, avec ce masque, en utilisant l'expression en division au lieu de 1, nous pouvons remplacer la formulation de formule de 0 et 1 pour être inverse:

x. 1 2 3 4 5 6 7 8 9 10 11 12
f (x) 31 30 31 30 31 30 31 31 30 31 30 31

Eureka! C'est vrai, sauf février. Surprise Surprise.

février

Dans tous les mois, 30 ou 31 jours, à l'exception de février, avec son 28 (année bissextile, allez au-delà de cette tâche). Pour le moment, selon notre formule dedans, 30 jours, il serait donc agréable de soustraire une expression égale à 2 à.
Le mieux que j'ai réussi à venir, ce qui impose un masque pendant tous les mois après février:
x. 1 2 3 4 5 6 7 8 9 10 11 12
2 mod. x. 0 0 2 2 2 2 2 2 2 2 2 2

En modifiant la constante de base par 28 avec l'ajout de 2 au reste du mois, nous obtiendrons la formule:

x. 1 2 3 4 5 6 7 8 9 10 11 12
f (x) 29 28 31 30 31 30 31 31 30 31 30 31

Malheureusement, le janvier est maintenant plus court pendant 2 jours. Mais heureusement, pour obtenir une expression qui sera appliquée que pour le premier mois est très facile: il est arrondi le contraire. Multiplier sur 2 Nous obtenons la formule finale:

x. 1 2 3 4 5 6 7 8 9 10 11 12
f (x) 31 28 31 30 31 30 31 31 30 31 30 31

Épilogue

Ici, il s'agit d'une formule d'obtention du nombre de jours au mois de l'année, en utilisant l'arithmétique la plus simple. La prochaine fois que vous vous souvenez de combien de jours en septembre, effectuez simplement avec cette fonction mono-ligne sur JavaScript:

Fonction F (x) (retour 28 + (x + math.floor (x / 8))% 2 + 2% x + 2 * math.floor (1 / x);)

Partie II.

introduction

Dans la première partie, une formule courte et même légèrement élégante a été obtenue, dont les principaux avantages sont la simplicité de l'appareil mathématique, le manque de branches et des expressions conditionnelles, une concision. Les inconvénients sont en outre que vous ne l'appliquerez pas dans votre projet - vous pouvez inclure le manque de vérification d'une année visqueuse et non bissuée.
Donc j'ai défini une tâche pour créer une fonction f.une telle valeur f (x, y) Pour chaque mois x.représenté par le nombre de 1 à 12 et an y., plus 0, égale le nombre de jours dans le mois x. dans l'année y..
Pour impatient sous le spoiler, il y a une réponse prête à l'emploi, je demande au reste de me suivre.

Répondre

RESTE DE LA DIVISION: mod. et ⌊⌋

Pour une clarté visuelle, nous convenons que dans certaines formules, l'opérateur de division avec le résidu est remplacé par des supports inférieurs, où il me semblait nécessaire:

Année bissextile

Une journée de calendrier supplémentaire est introduite dans l'année bissextile: 29 février. Comme on le sait, le saut est un an, multiple 4 et pas un multiple 100, ni un multiple de 400. Nous écrivons une expression identique à cette déclaration:

Pour amener cette expression à algébrique, il est nécessaire de s'appliquer à la suite d'une injection d'expression de la forme:

Ce qui permettra d'obtenir 1 lors de la division sans résidus ni de 0 lors de la division avec le résidu pour l'utiliser dans la formule pour déterminer le nombre de jours dans un mois.

En tant que fonction g " Vous pouvez utiliser 1 minus solde de la division pour:

x. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
g "(x) Infini. 1 0 0 0 0 0 0 0 0 0 0 0 0 0

Il est facile de noter qu'en augmentant la division et le diviseur sur 1, nous obtiendrons la formule correcte avec:
x. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
g "(x) 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Ainsi, l'expression écrira comme suit:


Et écrivez l'expression comme:

Appliquer cette approche Nous obtenons la fonction suivante. g (y), dont la valeur sera 1 si l'année est sautée, ou 0 dans le cas opposé:

y. 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000
g (y) 0 0 1 0 0 0 1 0 0 0 1
y. 2000 2100 2200 2300 2400 2500 2600 2700 2800 2900 3000
g (y) 1 0 0 0 1 0 0 0 1 0 0

L'année biliaire a été isolée.

Je vous rappelle que dans le cadre de l'accord adopté, l'exploitant de l'obtention d'un équilibre de la division peut être décrit comme mod.et ⌊⌋.

Superposition de masque

Dans la formule, une partie est un amendement qui ajoute 2 jours à janvier. Si vous supprimez le multiplicateur 2 et dans le numérateur pour remplacer 1 sur 2, cette formule ajoutera 2 jours à janvier et 1 jour avant février, ce qui nous donne la clé de l'ajout de la journée au cours de l'année bissextile. Pour plus de clarté, utilisez la valeur intermédiaire de formule g (y) et de qualité y. Nous utilisons des années 2000 (bonds) et 2001 (pas leap):

x. 1 2 3 4 5 6 7 8 9 10 11 12
f (x, 2000) 31 29 31 30 31 30 31 31 30 31 30 31
f (x, 2001) 30 28 31 30 31 30 31 31 30 31 30 30

Valeurs pour tous les mois, sauf en janvier, pas une année bissextile n'est vraie.

Pour corriger ce malentendu gênant, ajoutez-nous au 1 jour déjà connu par la formule:


Ou alors:

x. 1 2 3 4 5 6 7 8 9 10 11 12
f (x, 2000) 31 29 31 30 31 30 31 31 30 31 30 31
f (x, 2001) 31 28 31 30 31 30 31 31 30 31 30 30

Conclusion

En conséquence, il est déjà obtenu de manière significative plus encombrante, mais une formule plus universelle, qui peut également être utilisée pour obtenir le nombre de jours dans un mois d'une certaine année:

Fonction F (x, y) (Retour 28 + ((x + math.floor (x / 8))% 2) + 2% x + math.floor ((1 + (1 - (y% 4 + 2)% (Y% 4 + 1)) * (((Y% 100 + 2)% (Y% 100 + 1)) + (1 - (Y% 400 + 2)% (Y% 400 + 1))) / x ) + Math.floor (1 / x) - math.floor (((1 - (Y% 4 + 2)% (Y% 4 + 1)) * ((Y% 100 + 2)% (Y% 100 + 1)) + (1 - (Y% 400 + 2)% (Y% 400 + 1))) / x);)
Exemple sur C # Ideone.com/fanutz.

1 . Je ne sais pas comment utiliser un mnémonique similaire, j'ai donc espionné la tablette sur Internet.
2 . "Bases" ou "Règle avec de nombreuses exceptions", comme la plupart des règles.
3 . Initialement, dans le calendrier romain, février a été le dernier mois de l'année, il y a donc une logique qu'elle soit plus courte que tout le monde. Il existe également une logique dans l'ajout ou l'élimination de la journée à la fin de l'année, sa longueur est donc une variable.

UPD. une:
Traduction alternative de la première partie dans



Avez-vous aimé l'article? Partagez-le