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 :

code pour donner le jour de la semaine


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Par défaut code pour donner le jour de la semaine
    Bonjour à tous

    Je dois créer un code qui à partir d'une date ( jour, mois et année )
    donnera le jour (lundi, mardi,etc...)
    selon une formule
    nb=((13m-1)/5)+(an/4)+(s/4)+j-(2s)
    sachant que sur les divisions, on ne garde que l'entier
    et que sur le résultat nb (je cite le texte de l'enoncé ) :
    on prend le reste de nb par la division entière par 7

    m=mois, j=jour, a=année, s= la centaine d'année et an = l'année dans le siècle


    Donc j'en suis à coder les conditions pour éviter de saisir une date erronée
    comme par exemple le 33/15/99, ou le 31/11/2000 puisqu'il ne peut y avoir certain nombre de jours ou de mois qui doivent être saisie.


    je code étape par étape et actuellement je bute sur les mois qui ne doivent pas dépasser 30 jours car la ligne "if (m=4 || m=6 || m=9 || m=11)" pointe une erreur


    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
    28
     
    #include <stdio.h>
    #include<math.h>
     
    int j, m, a, s, an;
    int main(void)
     
    {
    printf ("saisir le jour, le mois et l'annee.\n");
    scanf ("%d %d %d",&j, &m, &a);
     
    /*verification de la validiter du mois*/
    if (m>12)
    {
        printf ("veuillez saisir un mois valide\n");
    }
        if (j>31)
    {
            printf("veuillez saisir un jour valide\n");
     }
    if (m=4 || m=6 || m=9 || m=11)
         if (j>30)
        {
            printf("veuillez saisir une date valide\n");
    }
     
        return 0;
    }

    merci pour votre aide

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    A == B ?

    Il ne te manquerait pas des accolades sur ce if() d'ailleurs ?

    Pense à mieux indenter ton code et évite les variables globales quand ce n'est pas nécessaire. Et pense à nous donner l'erreur donnée par ton compilateur, c'est plus pratique pour t'aider

  3. #3
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    C'est parce que l'expression m=2 est une affectation, qui change m, et qui vaut 2 en tant que valeur.
    La bonne solution, c'est d'utiliser la comparaison m==2Active plus de warnings dans ton compilateur, il pourras t'aider mieux ainsi.

  4. #4
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Salut,

    par curiosité j'ai testé ton algo DayOfWeek mais marche pas

    (si ça t'intéresse j'ai trouvé celui-ci sur le net, ouai je suis vraiment curieux)

    Sinon pour la validité de la date il va aussi falloir faire le calcul des années bissextiles.

    edit : à noter que dans ta formule (comme dans celle citée au-dessus) il n'y a aucune division par un param, du coup si l'utilisateur veut connaitre le jour de la semaine du 32/13 mille-neuf-cent-cinquante-douze, grand bien lui fasse de savoir que c'est un vendredi.

  5. #5
    Membre éclairé Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Par défaut
    Merci à tous

    l'erreur est :
    Ivalue required as left operand of assignment
    effectivement la solution est bien dans le m==
    ça fonctionne

    maintenant je vais poursuivre..
    si quelqu'un à une piste à me donner pour les année bissextile je suis preneur

  6. #6
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    le lien de jopopmk me semble une bonne piste

    Sauf cas extrèmes, que tu peux completement négliger, les années bissextiles sont multiples de 4, sauf les multiples de 100 qui ne sont pas multiples de 400.

  7. #7
    Membre éclairé Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Par défaut
    Super,

    tout fonctionne

    j'ai enfin intégrer la différence entre "=" et "=="

    merci.

    Par contre, comment puis je allèger ce code et le rendre moins redondant sur la partie des contrôles de date ?

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
     
    #include <stdio.h>
    #include<math.h>
     
    int j, m, a, s, an,  nb;
     
    void erreur()
    {
    printf ("veuillez saisir une date valide\n");
    return 0;
    }
     
    int main(void)
    {
    printf ("saisir le jour, le mois et l'annee.\n");
    scanf ("%d %d %d",&j, &m, &a);
     
    /**********verification de la validiter du mois************/
    if (j==0 ||m==0 ||a==0 || m>12 || j>31 )
    {
    printf ("veuillez saisir une date valide\n");
    return 0;
    ;
    }
     
    /* si les mois de 30 jours sont respecté */
    if (m==4 || m==6 || m==9 || m==11)
        if (j>30)
        {
            printf("veuillez saisir une date valide\n");
            return 0;
        }
     
     
    /* si la règle des 28 jours de février et du 29  eme jours pour l'année bissextille est respecté */
    if(a % 4 == 0 || a % 400 == 0)
         if (m==2 && j>29  )
        {
            printf("veuillez saisir une date valide\n");
            return 0;
        }
    if(a % 4 != 0 || a % 400 != 0)
        if (m==2 && j>28)
        {
            printf("veuillez saisir une date valide\n");
            return 0;
        }
     
    /*****************************************************************/
     
    /*calcul de nb*/
     
    if (m>=3)
        m = -2;
    else
    {
        m += 10;
        a--;
    }
     
    printf ("le mois est %d\n", m);
    printf ("l'annee est %d\n", a);
     
    s=a/100;
     
     
    an=a%100;
     
     
     
     
     
    nb=(((13*m-1)/5)+(an/4)+(s/4)+an+j-(2*s));
     
     
    nb=nb%7;
     
    if(nb<0)
        nb+=7;
     
     
    /*****************************************/
    /*declaration du jour de la semaine*/
     
    switch (nb) {
    case 0:
        printf("le jour de la semaine est dimanche\n");
        break;
    case 1:
        printf("le jour de la semaine est lundi\n");
        break;
    case 2:
        printf("le jour de la semaine est mardi\n");
        break;
    case 3:
        printf("le jour de la semaine est mercredi\n");
        break;
    case 4:
        printf("le jour de la semaine est jeudi\n");
        break;
    case 5:
        printf("le jour de la semaine est vendredi\n");
        break;
    case 6:
        printf("le jour de la semaine est samedi\n");
        break;
    default:
        break;
    }
       return 0;
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Formule pour afficher le jour de la semaine
    Par moilou2 dans le forum Excel
    Réponses: 9
    Dernier message: 18/08/2017, 18h26
  2. Beug dans un code pour une mise à jour
    Par herroP dans le forum VB.NET
    Réponses: 5
    Dernier message: 23/05/2012, 19h26
  3. Code pour mettre a jour un sous-formulaire
    Par nianko dans le forum Access
    Réponses: 1
    Dernier message: 07/10/2010, 13h08
  4. code pour date du jour
    Par NicolasMO dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 04/09/2009, 20h15
  5. Réponses: 7
    Dernier message: 01/12/2007, 02h23

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