Problème de compréhension en C++

Résolu/Fermé
SKunt Messages postés 150 Date d'inscription samedi 12 juillet 2008 Statut Membre Dernière intervention 16 octobre 2009 - 27 juil. 2009 à 17:19
mamiemando Messages postés 33081 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 27 avril 2024 - 1 août 2009 à 01:05
Bonjour,
Je débute mon apprentissage en C++ grâce au siteduzéro et je bute sur un exemple:
voici le lien de la page:https://openclassrooms.com/fr/courses/1894236-programmez-avec-le-langage-c

voici le code où je bute:
Duree Duree::operator+(const Duree &duree)
{
int heures = m_heures;
int minutes = m_minutes;
int secondes = m_secondes;

// 1 : ajout des secondes
secondes += duree.m_secondes; // Exceptionnellement autorisé car même classe
// Si le nombre de secondes dépasse 60, on rajoute des minutes et on met un nombre de secondes inférieur à 60
minutes += secondes / 60;
secondes %= 60;

// 2 : ajout des minutes
minutes += duree.m_minutes;
// Si le nombre de minutes dépasse 60, on rajoute des heures et on met un nombre de minutes inférieur à 60
heures += minutes / 60; (1)
minutes %= 60;

// 3 : ajout des heures
heures += duree.m_heures;

// Création de l'objet resultat et retour
Duree resultat(heures, minutes, secondes);
return resultat;
}
voilà en fait ce programme à pour but simplement de réaliser une addition d'heures, minutes et secondes (expliqué dans le cour !!)
Mais je ne comprends pas la ligne marquée "(1)": on est sensé faire l'opération si secondes>60 pour en extraire les minutes equivalentes mais elle est où la condition pour réaliser cela?
A voir également:

5 réponses

mamiemando Messages postés 33081 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 27 avril 2024 7 749
27 juil. 2009 à 20:22
Mais je ne comprends pas la ligne marquée "(1)": on est sensé faire l'opération si secondes>60 pour en extraire les minutes equivalentes mais elle est où la condition pour réaliser cela?

En fait c'est l'opérateur modulo (%) qui s'en charge.

Supposons qu'on ajoute une instance A avec minutes = 2 et secondes = 158 et une instance B avec minutes = 3 et secondes = 16, alors :
secondes += duree.m_secondes; // minutes = 2, secondes = 158 + 16 = 174
minutes += secondes / 60; // minutes = 2 + (174/2) = 2 + 2 = 4, secondes = 174
secondes %= 60; // minutes = 4, secondes = 174 % 60 = (60 * 2 +54) % 60 = 54

Bonne chance
0
SKunt Messages postés 150 Date d'inscription samedi 12 juillet 2008 Statut Membre Dernière intervention 16 octobre 2009 9
28 juil. 2009 à 16:01
Aaaaahhhh d'accord je ne le voyais pas comme ça !!! Effectivement ça rentre mieux vu sous cet angle !!!!!


Mille merci pour cet éclaircissement !! Et au passage, connais-tu un site qui proposerait des exercices en C++ par hasard ?
0
mamiemando Messages postés 33081 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 27 avril 2024 7 749
29 juil. 2009 à 00:13
Le plus simple c'est de chercher directement sur google, tu seras le plus à même de déterminer les exercices qui te conviennent.

Je pense que pour bien rentrer dans le C, la base c'est de connaître les pointeurs et quelques notions de compilation (qu'est ce qu'un précompilateur, un linker etc...), le reste est proche des langages usuels. Un exercice classique c'est coder les listes chaînées.

Pour le C++ les notions supplémentaires intéressantes sont les classes, les héritages, et les templates. Les templates font tout l'intérêt du C++ et sont poussés à l'extrême, tu peux jeter un œil dans la FAQ quand tu auras de bonnes bases en C/C++. J'ai commencé à écrire quelques articles dans la FAQ qui abordent certaines de ces notions. Je ne prétends pas expliquer mieux que le site du zéro mais je pense que tu y trouveras des informations intéressantes :

https://forums.commentcamarche.net/forum/affich-37604426-la-compilation-et-les-modules-en-c-et-en-c
https://forums.commentcamarche.net/forum/affich-37604414-les-inlines-en-c
https://forums.commentcamarche.net/forum/affich-37604421-introduction-a-la-stl-en-c-standard-template-library
https://forums.commentcamarche.net/forum/affich-37604412-les-templates-en-c

A partir de là, tu auras un niveau suffisant pour commencer par écrire des petits programmes, d'abord en mode texte et rapidement en mode graphique (surtout si tu apprends QT avec le site du zéro). Il faut commencer par des choses simples (par exemple un morpion, un mastermind) et après attaquer des trucs de plus en plus compliqués (par exemple un sudoku avec un solveur, un jeu de carte avec une petite IA).

En tout cas, fais des trucs qui t'amusent, car développer peut devenir rapidement rébarbatif, c'est donc dommage de se dégoûter pendant l'apprentissage ! Là j'ai cité des jeux, mais ça peut être n'importe quoi d'autre !

Je pense qu'un point important c'est d'avoir des notations et un code propre dès le début. Par exemple dans mes codes, les types se terminent par _t et les types templates sont les seuls qui commencent par une majuscule.

Comme rapidement les programmes deviennent complexe et sans un minimum de discipline ça devient rapidement ingérable. Prends l'habitude de documenter tes fonctions (avec un syntaxe doxygen par exemple), tu verras quand tu retombes sur des vieux morceaux de code, ça permet de gagner pas mal de temps !

Tu as toutes les armes en main, maintenant à toi de jouer ;-)
Bon courage !
0
SKunt Messages postés 150 Date d'inscription samedi 12 juillet 2008 Statut Membre Dernière intervention 16 octobre 2009 9
31 juil. 2009 à 15:21
merci bien pour tes astuces et conseils !!!!!! Je vais tester tout cela !!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
31 juil. 2009 à 15:29
Salut,

minutes += secondes / 60; // minutes = 2 + (174/2) = 2 + 2 = 4, secondes = 174
ce n'est pas plutôt
minutes += secondes / 60; // minutes = 2 + (174/60) = 2 + 2 = 4, secondes = 54
et ensuite soit
Total secondes %= 60; // minutes = 4, secondes = 174 % 60 = (60 * 2 +54) % 60 = 54
ou tout simplement
secondes %= 60; // minutes = 4, secondes = 54 % 60 = (0 * 60 + 54) = 54
ou même pas vu que 54 < 60 ?!!
0
mamiemando Messages postés 33081 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 27 avril 2024 7 749
1 août 2009 à 01:05
Exact, quelle vigilance :-) Mais je pense que le problème c'était surtout la compréhension de l'opérateur %.
0