Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

prog objet/ classe englobante/ besoin d'aide SVP

4 réponses
Avatar
stephane
Bonjour,



J'ai sérieusement besoin d'aide. Je dois fiaire le code qui permet la fusion
de 2 horaires (voir code svp, par exemple l'horaire du 1er semestre et du
2ème semestre).Ceci en traitant les exceptions levées par cette opération de
fusion ( le traitement de l'exception serait juste le renvoi d'un message
sur la console par exemple):



Est-ce que quelqu'un peut me donner une idée à quoi peut ressembler ce code
SVP? Je vois pas comment je dois commencer.



# ifndef CASE_H

# define CASE_H

#include <iostream>

#include <iomanip>

#include <cstring>

using namespace std ;



const int Clundi = 1 ;

const int Cmardi = 2 ;

const int Cmercredi = 3 ;

const int Cjeudi = 4 ;

const int Cvendredi = 5 ;

const int Csamedi = 6 ;

const int Cdimanche = 7 ;



class Tcase{

public :

Tcase (int numSemaine, int numJour, double heureDebut, double duree,

char matiere[], char classe[]= " ", char salle[]= " ") ;



int getNumSemaine() const ;

double getDuree() const ;

void printLn() const ;

private :

//attributs obligatoires



int m_numSemaine ; //1..53

int m_numJour ; //1..7

double m_heureDebut ; //13h30 = 13.5

double m_duree ; //2h45 = 2.75

char m_matiere[10] ; //p ex. prog7



//attributs optionnels



char m_classe[10] ; //p. ex. 3IG-EE

char m_salle[10] ; //p. ex A46A

}

#endif

# ifndef HORAIRE_H

# define HORAIRE_H

# include <iostream>

# include <cstring>

using namespace std ;

#include « case.h »



class TenseignantError{} ; // l'enseignant ne correspond pas



class Toverflow{} ; //dépassement de capacité

//Nombre maximum de cases horaires pour un enseignant

const int CcasesMax = 1000 ;



class Thoraire{

public :

//crée un horaire vide



Thoraire (const char nomEnseignant[]) ;



//ajout d'une case horaire



void ajouteCase (Tcase* caseHor) throw (Toverflow) ;



//calcule de la charge horaire totale



double chargeHoraire() const ;



//retourne un extrait de l'horaire



//ne contient que les cases de la semaines spécifiée



//retourne un horaire vide si la semaine n'existe pas



Thoraire horaireHebdomadaire (int numSem) const ;



/*



Crée un nouvel horaire résultat de la fusion de deux horaires

Lève une exception de la classe TenseignantError si les horaires

N'ont pas le même nom d'enseignant

Lève une exception de la classe Toverflow si la fusion entraîne

Un dépassement de capacité (> CcasesMax) */

Thoraire operator+ (const Thoraire & hor) const throw (TenseignantError,
Toverflow) ;



Void printLn() ;



Private :



Char m_nomEnseignant [30] ; // obligatoire

Tcase* m_cases[CcasesMax] ;

Int m_nbCases ;

} ;

#endif

4 réponses

Avatar
Olivier Azeau
stephane wrote:
J'ai sérieusement besoin d'aide. Je dois fiaire le code qui permet
la fusion

de 2 horaires (voir code svp, par exemple l'horaire du 1er semestre
et du

2ème semestre).Ceci en traitant les exceptions levées par cette
opération de

fusion ( le traitement de l'exception serait juste le renvoi d'un
message

sur la console par exemple):

Est-ce que quelqu'un peut me donner une idée à quoi peut ressembler
ce code

SVP? Je vois pas comment je dois commencer.

[...]


/*
Crée un nouvel horaire résultat de la fusion de deux horaires
Lève une exception de la classe TenseignantError si les horaires
N'ont pas le même nom d'enseignant
Lève une exception de la classe Toverflow si la fusion entraîne
Un dépassement de capacité (> CcasesMax) */

Thoraire operator+ (const Thoraire & hor) const throw
(TenseignantError,

Toverflow) ;


Visiblement, tu dois écrire le code de l'opérateur d'addition de la
classe Thoraire.

Si j'étais a ta place, je commencerais par écrire les cas
d'utilisation spécifiés dans la documentation de ta classe. Soit par
exemple :
| try {
| Thoraire h1("enseignant1");
| Thoraire h2("enseignant2");
| Thoraire h3 = h1+h2;
| std::cout << "Test failed" << std::endl;
| } catch( TenseignantError & ) {
| std::cout << "Test OK" << std::endl;
| }

(En fait, si j'étais *vraiment* a ta place je commencerais par
remplacer tous les char [] par des std::string mais c'est une autre
histoire...)

Avatar
Alexandre
bonjour,

J'ai sérieusement besoin d'aide. Je dois fiaire le code qui permet la
fusion
de 2 horaires (voir code svp, par exemple l'horaire du 1er semestre et du
2ème semestre).Ceci en traitant les exceptions levées par cette opération
de
fusion ( le traitement de l'exception serait juste le renvoi d'un message
sur la console par exemple):


tiens ça ressemble à un TD ;-)

<snip>
const int Clundi = 1 ;
const int Cmardi = 2 ;


si tu as le choix tu devrais remplacer les 7 constantes par une énumération
:
enum JOURS {CLundi=1, CMardi=2, CMercredi=3, CJeudi=4, CVendredi=5,
CSamedi=6, CDimanche=7};

m'enfin c'est juste mon avis.

char matiere[], char classe[]= " ", char salle[]= " ") ;


encore une fois, si tu as le choix, remplaces les tableaux de caractères par
des chaînes de caractères :

std::string matiere, std::string classe="", std::string salle=""

<snip>

/*
Crée un nouvel horaire résultat de la fusion de deux horaires
Lève une exception de la classe TenseignantError si les horaires
N'ont pas le même nom d'enseignant
Lève une exception de la classe Toverflow si la fusion entraîne
Un dépassement de capacité (> CcasesMax) */

Thoraire operator+ (const Thoraire & hor) const throw (TenseignantError,
Toverflow) ;


à priori c'est le code de cette fonction qui est à écrire...
Il faut créer un horaire pour l'enseignant concerné
Thoraire to_nouvel_horaire(m_nomEnseignant);

puis vérifier que l'horaire passé possède le même enseignant
if( m_nomEnseignant != hor.m_nomEnseignant)
throw TenseignantError();

note que si tu conserves les char[] à la place des std::string, le test doit
utiliser strcmp :
if(!strcmp(m_nomEnseignant,hor.m_nomEnseignant))

puis ensuite il faut tester la capacité de la fusion, etc...
Je te laisse finir ton TD ;-)
Bonne chance.

Avatar
kanze
Alexandre wrote:

J'ai sérieusement besoin d'aide. Je dois fiaire le code qui
permet la fusion de 2 horaires (voir code svp, par exemple
l'horaire du 1er semestre et du 2ème semestre).Ceci en
traitant les exceptions levées par cette opération de fusion
( le traitement de l'exception serait juste le renvoi d'un
message sur la console par exemple):


tiens ça ressemble à un TD ;-)


C'est peut-être pour ça que je n'ai rien compris de ce qu'il
essaiait à faire.

<snip>
const int Clundi = 1 ;
const int Cmardi = 2 ;


si tu as le choix tu devrais remplacer les 7 constantes par
une énumération :

enum JOURS {CLundi=1, CMardi=2, CMercredi=3, CJeudi=4, CVendredi =5,
CSamedi=6, CDimanche=7};


Et pourquoi pas simplement :

enum Jours
{
lundi, mardi, mercredi, jeudi, vendredi,
samedi, dimanche
} ;

La seule justification que je vois pour imposer des valeurs
numériques, c'est pour s'aligner avec un format externe (celui
de struct tm, par exemple).

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


Avatar
Alexandre
tiens ça ressemble à un TD ;-)


C'est peut-être pour ça que je n'ai rien compris de ce qu'il
essaiait à faire.


oui, surement ;-)
moi non plus, et pourtant je suis prof (bon, j'enseigne l'architecture des
systèmes, mais quand même...)
Il est vrai que souvent, sorti de son contexte, un TD est difficile à
comprendre... Genre pourquoi s'embeter avec new pour faire un tableau
dynamique, au lieu d'utiliser vector ? (si le but du TD est de comprendre
l'allocation dynamique....)

si tu as le choix tu devrais remplacer les 7 constantes par
une énumération :

enum JOURS {CLundi=1, CMardi=2, CMercredi=3, CJeudi=4, CVendredi=5,
CSamedi=6, CDimanche=7};


Et pourquoi pas simplement :
enum Jours
{
lundi, mardi, mercredi, jeudi, vendredi,
samedi, dimanche
} ;

La seule justification que je vois pour imposer des valeurs
numériques, c'est pour s'aligner avec un format externe (celui
de struct tm, par exemple).


oui, certes, c'était pour rester compatible avec son code, au cas où il y
aurait utilisation avec d'autres trucs qui imposeraient que lundi soit le
jour numéro 1.