Exercice consistant à définir des compteurs cycliques plus ou moins évolués

fpat Messages postés 11 Date d'inscription mercredi 8 octobre 2008 Statut Membre Dernière intervention 20 décembre 2008 - 8 oct. 2008 à 18:29
fpat Messages postés 11 Date d'inscription mercredi 8 octobre 2008 Statut Membre Dernière intervention 20 décembre 2008 - 16 oct. 2008 à 17:14
Bonjour, je suis complètement perdu à la question 3:
Question1 (classe modélisant un compteur cyclique):
- boolean inc() ==> ajoute la valeur 1 au compteur et retourne true si on est repassé à la valeur initiale (sinon retourne false)
- void affiche() ==> affiche la valeur du compteur

Question2 (classe implémentant les mêmes méthodes ci-dessus et modélisant un compteur simple):
- 3 attributs: valeur initiale et maximale (entières), l'unité (de type String)
- un constructeur prenant en paramètre la valeur initiale, la valeur maximale et l'unité.
- boolean inc() ==> idem
- void affiche() ==> idem

Question3 (classe implémentant les mêmes méthodes (mais avec 2 constructeurs) modélisant un compteur composé)
- idem pour les méthodes
- constructeur 1: 1 paramètre de type Compteur_simple
- constructeur 2: 2 paramètres (type Compteur_simple et type Compteur_compose)
- exemple d'utilisation:
Compteur_compose c;
c = new Compteur_compose(new Compteur_simple(0,59,"Minute"), new Compteur_compose(new Compteur_simple(0,23,"Heure),new Compteur_compose(new Compteur_simple(1,365,"Jour"))));
- void affiche() ==> idem
- boolean inc() ==> idem



- Je ne comprends pas comment on identifie le max à la question 1 pour le repasser à la valeur initiale
- Je n'ai rien compris à la question 3
Merci d'avance :)
FARRUGIA Patrick

1 réponse

fpat Messages postés 11 Date d'inscription mercredi 8 octobre 2008 Statut Membre Dernière intervention 20 décembre 2008
16 oct. 2008 à 17:14
Bonjour après qu'on m'ait expliqué je suis à ça :

class CompteurSimple
{
int co, min, max; String unite;



CompteurSimple(int min, int max, String unite) { this.min=min; this.max=max; this.unite=unite; this.co=min; }



void affiche() { System.out.println("<<" + unite + ">> " + co); }



boolean inc() { if (this.co == this.max) { this.co=this.min; return false; } else { this.co=this.co+1; return true; } }



CompteurSimple copie_cs()
 {
 CompteurSimple tmp;
 tmp=new CompteurSimple(this.min,this.max,this.unite); tmp.co=min;
 return tmp;
 }
 
 
boolean egale(CompteurSimple tmp)
 {
 if (this.co != tmp.co || this.min != tmp.min || this.max != tmp.max || this.unite != tmp.unite)  return false;
 else return true;
 }
}



class CompteurCompose
{
CompteurCompose cc;
CompteurSimple cs;



CompteurCompose(CompteurSimple cs) { this.cs = cs; }CompteurCompose(CompteurSimple cs, CompteurCompose cc) { this.cs cs; this.cc cc; }



CompteurCompose copie_cc()
 {
 if (this.cc == null) /*cas ou le compteur courant est un compteur simple*/
  {
  CompteurSimple tmp = new CompteurSimple(0,0,"guili"); /*création du compteur simple*/
  tmp.copie_cs();
  CompteurCompose tmp2 = new CompteurCompose(tmp);
  return tmp2;
 
  }
 else /*cas ou le compteur courant est un compteur compose*/
  {
  CompteurSimple tmp1=null;
  CompteurCompose tmp2=null;
  tmp1.copie_cs();
  return tmp2.copie_cc();
  }
 }



boolean egale(CompteurCompose tmp)
{
 if (this.cc == null) /* cas ou  le compteur courant est un compteur simple*/
 {
  if( this.egale(tmp) ) return true; else return false;
 }
 else /*cas ou le compteur courant n'est pas un compteur simple*/
 {
  return this.egale(tmp.cc);
 }
}



void affiche() { /*affiche a  l'envers*/
this.cs.affiche();
if (this.cc != null) this.cc.affiche();
}



void affiche2() { /*affiche a  l'endroit*/



}




 



boolean inc() {



if (this.cc == null)  /*cas ou le compteur est au bout*/
{ if (this.cs.co !this.cs.max) this.cs.co this.cs.co + 1;
 else { this.cs.co = this.cs.min; }
 return true;
}
else  /*cas ou le compteur n'est pas au bout*/
 {  if (this.cs.co this.cs.max) { this.cs.co this.cs.min; return cc.inc(); } /* cas ou max est atteint pour le parcours du compteur simple*/
 else { this.cs.co = this.cs.co + 1; return true; } /* on rajoute 1 si max n'est pas atteint pour le compteur simple courant*/
 }
}





public static void main (String args[])
 {
 CompteurCompose c,d; int i;
 c=new CompteurCompose(new CompteurSimple(0,59,"Minute"),new CompteurCompose(new CompteurSimple(0,23,"Heure"), new CompteurCompose(new CompteurSimple(1,365,"Jour"))));
 
 d=new CompteurCompose(new CompteurSimple(0,59,"Minute"),new CompteurCompose(new CompteurSimple(0,23,"Heure"), new CompteurCompose(new CompteurSimple(1,365,"Jour"))));



 System.out.println("c"); c.affiche(); System.out.println("d"); d.affiche(); System.out.println("");
 for (i = 1; i < 10000; i++) { c.inc(); d.inc(); }
 System.out.println("c"); c.affiche();
 c.egale(d);
 }
}



mais je crois que la copie et l'égalité ne marchent pas dans les 2 classes (si vous pouvez m'aider svp) et je cherche aussi à afficher le compteur composé dans l'autre sens. là en l'occurence des minutes aux jours

FARRUGIA Patrick
Rejoignez-nous