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 :

différence entre les années


Sujet :

C

  1. #1
    Membre habitué
    Femme Profil pro
    Architecte de système d'information
    Inscrit en
    Février 2012
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2012
    Messages : 404
    Points : 127
    Points
    127
    Par défaut différence entre les années
    bonsoir a tous , j'ai en train de réaliser un programme qui permet d'afficher la différence entre 2 dates .
    le problème que je trouve c'est au niveau des années si par exemple : un utilisateur entre année1 =2011 et année2=2014 (donc année1< année2) et année1-année2=-4
    mais en réel il n'a pas les - 4 années. donc je cherche une solution pour d'éviter le signe - pour les années.
    s'il vous plait aide moi et merci

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 629
    Points : 10 554
    Points
    10 554
    Par défaut
    abs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    diff = abs(année1 - année2);
     
    if (année1 > année2) {
        diff = année1 - année2;
    } else {
        diff = année2 - année1;
    }
     
    // ou avec l'opérateur ternaire
    diff = ((année1 > année2)? (année1 - année2): (année2 - année1));

  3. #3
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 211
    Points
    23 211
    Par défaut
    Bonjour,

    Citation Envoyé par foetus Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (année1 > année2) {
        diff = année1 - année2;
    } else {
        diff = année2 - année1;
    }
    Quitte à utiliser un if, personnellement, je préférerais cette méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int diff = annee1 - annee2;
    if( diff < 0 )
          diff -= diff;

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 629
    Points : 10 554
    Points
    10 554
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Quitte à utiliser un if, personnellement, je préférerais cette méthode :
    Effectivement, j'ai voulu le préciser mais je ne l'ai pas fait parce que je n'avais pas le type de année1 ou année2 (short, int, unsigned short, size_t, ...)

    Je travaille avec des types non signés:

    Tu voulais plutôt dire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int diff = annee1 - annee2;
    if (diff < 0) {
        diff = -diff;
    }

  5. #5
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 211
    Points
    23 211
    Par défaut
    Citation Envoyé par foetus Voir le message
    Effectivement, j'ai voulu le préciser mais je ne l'ai pas fait parce que je n'avais pas le type de année1 ou année2 (short, int, unsigned short, size_t, ...)

    Je travaille avec des types non signés:
    Effectivement, je n'avais pas pensé à cela.
    Mais d'après la demande du posteur, j'ai assumé qu'il utilisais des signed vu qu'il a un résultat de -4.

    Après, on ne sait pas s'il a des contraintes particulières en ce qui concerne les types utilisés.

    Bon, il est toujours possible de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    unsigned diff = annee1 - annee2;
    if( (int)diff < 0 )
          diff = -diff;
    Mais ça commence à devenir légèrement "compliqué" .

    EDIT :
    Tu voulais plutôt dire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int diff = annee1 - annee2;
    if( diff < 0 )
        diff = -diff;
    En effet, erreur de ma part.
    Je ne suis pas encore très réveillé ce matin

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 109
    Points : 168
    Points
    168
    Par défaut
    Citation Envoyé par syrine01 Voir le message
    un utilisateur entre année1 =2011 et année2=2014 (donc année1< année2) et année1-année2=-4
    2011 - 2014 = -3

  7. #7
    Membre expérimenté

    Homme Profil pro
    Collégien
    Inscrit en
    Juillet 2010
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afghanistan

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Juillet 2010
    Messages : 545
    Points : 1 431
    Points
    1 431
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    unsigned int diff = annee1 > annee2 ? annee1-annee2 : annee2-annee1;

  8. #8
    Membre averti
    Homme Profil pro
    très occupé
    Inscrit en
    Juillet 2014
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : très occupé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 137
    Points : 411
    Points
    411
    Par défaut
    Bonjour,

    Si diff est un int, ma préférence irait pour utiliser la fonction abs(), qui en C89 et pour les int est simplement accessible avec stdlib.h et renvoie leur valeur absolue :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(void) {
    	int diff = 2010 - 2014;
    	diff = abs(diff);
    	printf("diff = % d\n", diff);
     
    	return 0;
    }
    http://code-reference.com/c/stdlib.h/abs
    http://www.cplusplus.com/reference/cstdlib/abs/

    Eks

  9. #9
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 211
    Points
    23 211
    Par défaut
    A noter que abs marche aussi si diff est un unsigned int.

  10. #10
    Membre habitué
    Femme Profil pro
    Architecte de système d'information
    Inscrit en
    Février 2012
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2012
    Messages : 404
    Points : 127
    Points
    127
    Par défaut
    merci beaucoup mes amis , j'ai résoudre le problème de l'année . mais il existe un autre erreur .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     if(((validitdate1(aa,mm,jj)==1)&&(validitdate2(a2,m2,j2)==1))&&(jj<j2)&&(mm<m2))
            {
                    jj= jj+30;
                    mm=mm+12;
                   dj=(jj-j2);
                   dm=(mm-m2);
                  dann=(aa-a2);
        }
    j'ai créer 2 fonctions qui permettent de valider 2 dates saisi par l'utilisateur . elles exécutent sont problème et ce code la permet d'ajouter au 1ére jour de la 1ére date 30j s'il est inférieur au 2éme jours de la 2éme date , et aussi ajoute 12 mois au 1ére mois de la 1ére date s'il est inférieur au 2éme mois de la 2éme date.
    donc le problème est dans la différence entre les mois de 2 dates même si j'ai ajouter 12 au 1ére mois de la 1ére date . il affiche toujours la résultat signe négative par exemple : diif=(08+12)-12= -4

    donc j'en sais pas comment résoudre ce problème la son l'utilisation de la fonction "abs()"

  11. #11
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Citation Envoyé par syrine01 Voir le message
    j'ai créer 2 fonctions qui permettent de valider 2 dates saisi par l'utilisateur . elles exécutent sont problème
    Même si elles s'exécutent "sans" problème, pourquoi deux fonctions pour faire un travail ???
    Citation Envoyé par syrine01 Voir le message
    et ce code la permet d'ajouter au 1ére jour de la 1ére date 30j s'il est inférieur au 2éme jours de la 2éme date , et aussi ajoute 12 mois au 1ére mois de la 1ére date s'il est inférieur au 2éme mois de la 2éme date.
    donc le problème est dans la différence entre les mois de 2 dates même si j'ai ajouter 12 au 1ére mois de la 1ére date . il affiche toujours la résultat signe négative par exemple : diif=(08+12)-12= -4
    donc j'en sais pas comment résoudre ce problème la son l'utilisation de la fonction "abs()"
    Le problème vient surtout de ta conception de ce qu'est une date avant même d'être traduit en instructions !!! Faut travailler les jours et les mois de façon indépendante. Toi tu mets toutes tes conditions ensembles donc le bloc ne s'exécutera que si elles sont toutes vraies !!!

    En considérant que aa2/mm2/jj2 >= aa1/mm1/jj1 c'est à dire aa2 >= aa1 ou bien aa2 = aa1 et mm2 >= mm1 ou bien aa2 = aa1 et mm2 = mm1 et jj2 > jj1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    diff_aa=aa2 - aa1
    diff_mm=mm2-mm1
    si diff_mm < 0 alors
        diff_mm=diff_mm+12
        diff_aa=diff_aa-1
    fin si
    diff_jj=j2-jj1
    si diff_jj < 0 alors
        diff_jj=diff_jj+30
        diff_mm=diff_mm-1
    fin si
    Sinon tu inverses aa1 et aa2, mm1 et mm2, jj1 et jj2. Tu as créé une fonction qui te permet de valider une date, je te conseille d'en créer une autre qui te dit si une dateX est inférieure ou pas à une dateY...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  12. #12
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 211
    Points
    23 211
    Par défaut
    Il n'existe pas dans la bibliothèque standard C des structures et des méthodes permettant de manipuler "facilement" des dates ?

    http://c.developpez.com/faq/?page=Ge...ates-et-heures

Discussions similaires

  1. Réponses: 67
    Dernier message: 16/12/2007, 13h41
  2. [MVC] Différences entre les framework MVC push et pull ?
    Par XavierZERO dans le forum Frameworks Web
    Réponses: 5
    Dernier message: 15/01/2004, 13h12
  3. 2 tables; requête : retourner différences entre les 2
    Par azerty dans le forum Langage SQL
    Réponses: 15
    Dernier message: 09/09/2003, 18h35
  4. fopen -> différences entres les types d'ouvertur
    Par Patrick PETIT dans le forum C
    Réponses: 10
    Dernier message: 01/06/2003, 18h19
  5. Réponses: 3
    Dernier message: 07/05/2002, 16h06

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