IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

probléme programme date


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 54
    Par défaut probléme dans un programme
    Bonjour , voila je ne c'est pas comment faire pour commencer mon programme

    je vous explique :

    l'utilisateur encode en une seule fois une date sous la forme AAAAMMJJ supposé corecte(donc ne pas valider la date).
    Donc il faudrait afficher la date correpondant au jour precedent


    par exemple on introduit :

    20041212 on devrait avoir 20041211
    20040101 on devrait avoir 20031231

    merci de votre aide si quelqu'un a une idée merci d'avance

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par conceicao
    Bonjour , voila je ne c'est pas comment faire pour commencer mon programme

    je vous explique :

    l'utilisateur encode en une seule fois une date sous la forme AAAAMMJJ supposé corecte(donc ne pas valider la date).
    Donc il faudrait afficher la date correpondant au jour precedent


    par exemple on introduit :

    20041212 on devrait avoir 20041211
    20040101 on devrait avoir 20031231

    merci de votre aide si quelqu'un a une idée merci d'avance
    1. convertir les champs de la date en valeurs numériques. (sscanf(), par exemple)
    2. remplir correctement une structure standard struct tm avec ces valeurs
    3. convertir en epoch avec mktime()
    4. retirer une journée (24 * 60 * 60 secondes)
    5. reconvertir l'epoch en date avec gmtime()
    6. reformer la chaine avec sprintf() et les champs de struct tm.

    Fait de ton mieux et poste ton code si tu as un problème.

    (pendant ce temps, je vérifie une solution plus simple...)

    Hé hé : ça marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    #include <stdio.h>
    #include <time.h>
     
    int main (void)
    {
     
       struct tm date = {0};
     
       date.tm_mday=1;
       date.tm_mon=1 - 1;
       date.tm_year=2007 - 1900;
     
       mktime (&date);
       printf("%s", asctime(&date));
     
    /* jour precedant */
       date.tm_mday--;
     
       mktime (&date);
       printf("%s", asctime(&date));
     
          return 0;
    }

  3. #3
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 20
    Par défaut
    Citation Envoyé par conceicao
    Bonjour , voila je ne c'est pas comment faire pour commencer mon programme

    je vous explique :

    l'utilisateur encode en une seule fois une date sous la forme AAAAMMJJ supposé corecte(donc ne pas valider la date).
    Donc il faudrait afficher la date correpondant au jour precedent


    par exemple on introduit :

    20041212 on devrait avoir 20041211
    20040101 on devrait avoir 20031231

    merci de votre aide si quelqu'un a une idée merci d'avance
    ou est ton probleme
    puis il n y a rien là qui parle de C

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Très simle! Tu sépares en trois compteurs, puis tu répercutes:
    Code algo : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    annee :=  date       /10000
    mois  := (date%10000)/  100
    jour  := (date%  100)
     
    DECR jour
    SI jour = 0
    	DECR mois
    SI mois = 0
    	DECR annee
    	mois = 12
     
    SI jour = 0
    	jour = maxjours[mois]
     
    newdate := (annee*10000) + (mois*100) + (jour)
    Reste à implémenter ça en C...

    Edit: hegros!
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    C'est un probléme algorithimque.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    LaDate est une chaine 
    SI JOUR=1 ALORS
       MOIS_PRECEDENT est un entier =RenvoiMoisPrecedent(MOIS)
       SI MOIS_PRECEDENT > MOIS
          ANNEE=ANNEE-1
       FIN SI
        nb_Jour est un entier = RenvoiNbJour(MOIS_PRECEDENT)
        LaDate = ANNEE + MOIS_PRECEDENT + nb_Jour
    SINON
       LaDate = ANNEE+ MOIS + JOUR - 1
    FIN SI
     
    FONCTION RenvoiMoisPrecedent(MOIS est un entier)
    SI MOIS =1 ALORS
      renvoyer 12
    SINON
      renvoyer MOIS-1
    FIN SI
     
    FONCTION RenvoiNbJour(MOIS est un entier)
     
    SELON MOIS
      CAS 1 : //janvier renvoyer 31
      CAS 2 : //fevrier voir pour calculer le nombre de jour
      cas 3 : //mars renvoyer 31
      cas 4 : renvoyer 30
    FIN SELON
    Quelque chose comme cela.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 54
    Par défaut
    annee := date /10000
    mois := (date%10000)/ 100
    jour := (date% 100)

    DECR jour
    SI jour = 0
    DECR mois
    SI mois = 0
    DECR annee
    mois = 12

    SI jour = 0
    jour = maxjours[mois]

    newdate := (annee*10000) + (mois*100) + (jour)


    qu'est que j'obtien en appliquant -->mois := (date%10000)/ 100
    merci d'avance

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Exemple: Si la date est 20061114
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    annee:
    	date/10000 = 20061114/10000 = 2006
    mois:
    	date%10000 = 20061114%10000 = 1114
    	1114/100 = 11
    joue:
    	date%100 = 20061114%100 = 14
    % est l'opérateur de "reste de la division"...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 54
    Par défaut
    a oui donc % c'est le modulo en fait???

  9. #9
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par conceicao
    a oui donc % c'est le modulo en fait???
    D'après la norme, c'est l'opérateur qui retourne le reste de la division entière. Il peut être signé. Ce n'est donc pas la modulo au sens arithmétique qui est non signé si mes renseignements sont exacts. Le mot 'modulo' n'apparait pas dans la norme.

Discussions similaires

  1. Problème de date dans requête de màj imbriquée
    Par VirginieGE dans le forum Langage SQL
    Réponses: 11
    Dernier message: 20/07/2004, 15h34
  2. problème de date
    Par baboune dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 10/06/2004, 10h52
  3. Problème de date dans MONTHS_BETWEEN
    Par ghostlord79 dans le forum Oracle
    Réponses: 10
    Dernier message: 07/04/2004, 11h21
  4. Problème conversion date
    Par mat.M dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/03/2004, 15h05
  5. Encore un probléme de date avec TADO !
    Par bNoureddine dans le forum Bases de données
    Réponses: 2
    Dernier message: 22/02/2004, 18h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo