Trouver une date

sacredead Messages postés 94 Date d'inscription mardi 14 octobre 2008 Statut Membre Dernière intervention 22 décembre 2011 - 25 oct. 2010 à 01:23
cs_magma Messages postés 198 Date d'inscription vendredi 4 avril 2003 Statut Membre Dernière intervention 18 mars 2011 - 25 oct. 2010 à 15:02
bonsoir,
j'aimerais avoir un peu d'aide pour créer un sous programme (en C) qui renverrait une date en fonction d'un indice de jour. par exemple, le 190 ieme jour (sur 365) correspond au 9 juillet.
j'ai quelques pistes mais qui ne fonctionnent pas dans tout les cas..
merci
coordialement lucille

3 réponses

fregolo52 Messages postés 1115 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 3
25 oct. 2010 à 08:57
La structure tm doit pouvoir t'aider.
Mais ça doit faire l'inverse de ce que tu veux : retrouver le nième de jour de l'année d'après une date.
Il faut peut-être partir dans ce sens et prendre le pb à l'envers et faire une recherche par dichotomie pour trouver le 190e jours.
0
sacredead Messages postés 94 Date d'inscription mardi 14 octobre 2008 Statut Membre Dernière intervention 22 décembre 2011
25 oct. 2010 à 14:51
bonjour, en effet c'est l'inverse que je souhaite. je pense avoir trouvé en "magouillant" un peut.. il me reste quelque amélioration à faire et ca devrait aller..
0
cs_magma Messages postés 198 Date d'inscription vendredi 4 avril 2003 Statut Membre Dernière intervention 18 mars 2011 1
25 oct. 2010 à 15:02
#include <stdio.h>

//-------------------------------------------------------------------------------------
int bis(int annee)
{
  return annee % 4 != 0 ? 0 : annee % 100 != 0 ? 1 : annee % 400 != 0 ? 0 : 1;
}

//-------------------------------------------------------------------------------------
int quantieme_en_date(int quantieme, int annee, int *jour, int *mois)
{
  int m, jour_par_mois[] = {31, 28 + bis(annee), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

  if(quantieme >= 1 && quantieme <= (365 + bis(annee)))
  {
    for(m = 0; m < 12; m++)
    {
      if(quantieme <= jour_par_mois[m])
      {
        *jour = quantieme;
        *mois = m + 1;
        break;
      }
      else
        quantieme -= jour_par_mois[m];
    }
    return 1;
  }
  return 0;
}

//-------------------------------------------------------------------------------------
int main(void)
{
  int jour, mois, quantieme 190, annee 2012;

  if(quantieme_en_date(quantieme, annee, &jour, &mois))
    printf("Quantieme %03d de l'annee %d : %02d/%02d/%d\n", quantieme, annee, jour, mois, annee);
  else
    puts("Echec !");

  return 0;
}




Résultat
Quantieme 190 de l'annee 2010 : 09/07/2010

Quantieme 190 de l'annee 2012 : 08/07/2012
0
Rejoignez-nous