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 :

blocage en c++


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2016
    Messages : 5
    Par défaut blocage en c++
    Bonjour,j'ai un probleme en c++ me demandant d'afficher le nombre de jours ecoulés dans une annee en considerant une date de la forme jour/mois/annee.Par exemple,si la date est le 1/1/2016,le nombre de jours est de 1. Il est à noter qu'une année est dite bissextile si elle est divisible par 4,mais pas divisible par 100.Par exemple,les annees 1992 et 2008 sont divisibles par 4,elles ne sont pas divisibles par 100.Une année qui est divisible par 100 est bissextile si et seulement si elle est egalement divisible par 400.Ce programme doit utiliser les 3 fonctions suivantes:
    bool estbissxtile(int annee);
    intjoursparmois(int mois,int annee); ( utiliser une structure de controle switch),int nombrejours(int jour,int mois,int annee).
    voici mes demarches:
    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
    #include<iostream>
    #include<math.h>
    #include<string.h>
    using namespace std;
    bool estBissextile(int annee)
    {
    	if (((annee % 4 == 0) || ((annee % 100 == 0) && annee % 400 == 0))) {
    		cout << "L'annee est bissextille:" << annee << "\n";
     
    	}
     
    	else {
    		cout << "C'est une annee ordinaire:" << annee << "\n";
     
    	}
    	return 0;
    }
     
    int jourParMois(int mois, int annee)
     
    {
    	switch (mois)
    	{
    	case 1:case 3://pour les mois de 31 jours;
    	case 5:case 7:
    	case 8:case 10:case 12:
    		jour = 31;
    		break;
     
    	case 4:case 6://pour les mois de 31 jours;
    	case 9:case 11:
    		jour = 30;
    		break;
     
    	case 2://pour les mois de 28 ou 29 jours;
    		if (((annee % 4 == 0) || ((annee % 100 == 0) && annee % 400 == 0)))
    			jour = 29;
    		else jour = 28;
    		break;
    	default: //en cas d'erreur de frappe
    		cout << "Impossible ce mois n'existe pas:" << mois << "\n";
    		cin >> mois;
    	}
    	return mois;
    }
     
    int nombreJours(int jour, int mois, int annee) {
     
    }
     
    int main() {
    	int jour, mois, annee;
     
    }

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Ta fonction isBissextile ne fait pas ce qu'elle prétend faire : elle devrait renvoyer un booléen (true ou false), mais, tel que tu l'as écrite, elle renvoie toujours le même entier (qui correspond à false, mais je ne suis pas sur que ce soit une chance), et elle produit un affichage que l'on ne lui demande pas

    De plus, la logique à l'intérieur de cette fonction est mauvaise, car, si on choisi l'année 1900, on a :1900 %4 == 0 --> oui --> on s'arrête là, et on rentre directement dans la branche true dut test

    Une fois que tu auras apporté les corrections nécessaires à cette fonction (il faut qu'elle renvoie true ou false en fonction d'une logique qui s'assurera que 1900 ne sera pas considérée comme une année bissextile !!!), tu pourras l'utiliser dans le case 2 de ta fonction jourParMois, parce que
    • c'est en réalité la seule utilité de cette fonction (à savoir : être en mesure de déterminer si le mois de février est composé de 28 ou de 29 jour)
    • la logique mise en place dans pour définir le nombre de jour du mois de février est elle aussi incorrecte (pour la même raison que celle que je viens d'expliquer )

    Une fois que tu auras corrigé ce problème, il devrait devenir assez simple de calculer le nombre de jours qui séparent une date donnée du premier janvier de l'année correspondant à la date, je te laisse réfléchir un peu à "comment faire"

    Et, bien sur, une fois que tu auras tout cela, il faudra bien que tu demande la date qui peut intéresser l'utilisateur, que tu la transmette à la fonction nombreJours, et que tu affiche le résultat renvoyé par cette fonction. Mais ca, ca devrait être un jeu d'enfant
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2016
    Messages : 5
    Par défaut
    Sincerement,je ne vois pas comment le resoudre si vous pourriez le coder pour moi,je serais bien content,parce que j'ai passé plusieurs heures à le faire...

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Bonjour,
    Citation Envoyé par ramces Voir le message
    Sincerement,je ne vois pas comment le resoudre si vous pourriez le coder pour moi,je serais bien content,parce que j'ai passé plusieurs heures à le faire...
    Si tu veux, on peut AUSSI rédiger l'exercice.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2016
    Messages : 5
    Par défaut
    Citation Envoyé par droggo Voir le message
    Bonjour,

    Si tu veux, on peut AUSSI rédiger l'exercice.
    Ce sera une immense joie de voir cette solution,parce que j'ai soif d'en apprendre beaucoup d'apprendre le c++

  6. #6
    Membre éprouvé
    Inscrit en
    Mai 2012
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 65
    Par défaut
    Essaie de décomposer ton problème.
    Ton énoncé te dit que si une année est divisible par 4 alors elle est bissextile, mais à la seule condition qu'elle ne soit pas divisible par 100.
    Ce qui se traduirait par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if((annee % 4) == 0 && (annee % 100) != 0)
    La deuxième partie de l'énoncé rajoute une nouvelle contrainte, qui est que si cette année est divisible par 100, elle doit aussi être divisible par 400, soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if((annee % 100) == 0 && (annee % 400) == 0)
    A partir de là, à toi de combiner ces conditions pour répondre à ton problème, suis aussi les recommandations de koala sur le retour de ta fonction qui est erroné. Normalement avec tout ça tu devrais facilement résoudre ton problème.

  7. #7
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Ce qu'il faut savoir, à propos des opérateur || et &&, c'est que ce sont des opérateurs dits "optimisés". C'est à dire que, si tu as une expresion proche de A <un des deux opérateurs> B, l'expression B ne sera évaluée que si le résultat de cette expression peut encore modifier le résultat final.
    Ainsi, si tu as l'expression A||B, si A vaut true le résultat final ne sera de toutes manières pas modifié par le résultat de B, car true || <n'importe quoi> équivaut toujours à true;et B ne sera donc pas évalué.
    Pour que B soit évalué, il faut que A valle false, car, si B vaut true, le résultat final sera... trueDe même, si tu as l'expression A && B et que A vaut false, le résultat de B ne pourra jamais modifier le résultat final, car false && <n'importe quoi> vaut toujours... false, et B ne sera donc jamais évalué.
    Pour que B soit évalué, il faut que A valle true, car, si B vaut false, le résultat final vaudra ... false.

    Du coup, l'ordre dans lequel tu évalues les différentes expression prend toute son importance, car elle sont évaluées... de gauche à droite. Or, 100 étant un multiple de 4, et 400 étant un multiple de 100, dés que tu as un multiple de 100 (ou de 400), tu as forcément affaire à... un multiple de 4, si bien que annee % 4 == 0 sera forcément vrai pour toute année qui serait multiple de 100, et, comme il y a un opérateur logique || tout de suite après, le fait que cette expression valle true fait que le reste de l'expression ne sera jamais évalué (vu que true ou n'importe quoi vaut toujours true).

    Maintenant que tu as cette information importante, et que tu sais que tu dois avoir true pour annee%4 == 0, true pour annee% 400 == 0 et que tu dois ignorer toutes les années pour lesquelles annee%100 == 0 vaut true ET pour lesquelles annee % 400 = 0 vaut false, tu devrais avoir toutes les informations te permettant de trouver la logique correcte pour déterminer si une année est bissextile.

    TIP : peut-être dois tu tester chaque expression séparément Cela ne peut-il pas te simplifier la tâche

    PS : Quelqu'un a dit un jour "donne un poisson à quelqu'un, il mangera un jour, apprend lui à pêcher, il mangera toute sa vie"... Il est beaucoup plus intéressant pour toi que l'on te donne "toutes les informations" qui te permettront de te dépatouiller que de te donner un code "tout fait". C'est la raison pour laquelle je me refuse à te donner le code de ce que tu cherches à faire... D'autant plus que, si tu n'en sors déjà pas avec un problème aussi simple que cela, tu risques d'avoir beaucoup de mal avec les problèmes auxquels tu sera confronté tôt ou tard
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  8. #8
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2016
    Messages : 5
    Par défaut c++
    Citation Envoyé par droggo Voir le message
    Bonjour,

    Si tu veux, on peut AUSSI rédiger l'exercice.
    je reagis à votre recommandation,pourquoi il m'a dit que la variable n'est pas definie et j'aimerais savoir comment devrais je ecrire la fonction int nombrejours(int jour,int mois,int annee) et quel moyen qui va permettre d'afficher à l'utilisateur lorsqu'il rentre les informations pour le jour,mois et année affichant le format ainsi jour/mois/annee
    merci

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 152
    Billets dans le blog
    4
    Par défaut
    Sérieusement, il faudrait commencer par lire tes cours.
    Il n'y a aucune raison que ceci te soit demandé sorti de nulle part sans avoir eu un cours préalable.
    Et franchement quand je vois ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int jourParMois(int mois, int annee)
    {
    	.. un tas de trucs pas forcément mauvais .. sauf qu'il faudrait que jour soit déclarée ..
    	return mois;
    }
    Je ne peux m'empêcher de croire à la mauvaise foi et que tu ne fais aucun effort.
    Et tes messages demandant de faire ton devoir à ta place ne font que renforcer cette impression.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  10. #10
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Citation Envoyé par ramces Voir le message
    Sincerement,je ne vois pas comment le resoudre si vous pourriez le coder pour moi,je serais bien content,parce que j'ai passé plusieurs heures à le faire...
    C'est burné. Merci pour la rigolade, je t'ai « plussé » pour la peine !

Discussions similaires

  1. Blocage Machine Complet Mandrake 9.2
    Par DaiKo dans le forum Administration système
    Réponses: 8
    Dernier message: 04/03/2004, 08h19
  2. [WIN2000][JAVA]blocage de l'application
    Par narmataru dans le forum InterBase
    Réponses: 9
    Dernier message: 09/12/2003, 13h07
  3. [CVS] "blocage" de ressource ?
    Par xa1 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 06/10/2003, 16h26
  4. Blocage à 60 images par seconde
    Par houssa dans le forum OpenGL
    Réponses: 5
    Dernier message: 24/06/2003, 08h52
  5. [Kylix] Blocage Kylix 3
    Par DevX dans le forum EDI
    Réponses: 2
    Dernier message: 13/11/2002, 20h29

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