TD 6 - Questions supplémentaires


  1. Améliorer votre méthode d'écriture infixe pour réduire le nombre de parenthèses.

  2. Il s'agit dans cette question de représenter graphiquement une expression. La difficulté réside dans le placement des noeuds ; ils seront placés sur un maillage rectangulaire. On écrira une méthode : drawExpr qui renvoie un entier et qui prend en argument une expression e et deux entiers xMin et yMin. La racine de e sera placée à l'ordonnée yMin et le noeud le plus à gauche aura pour abcisse xMin. Au retour, le point courant de MacLib sera l'emplacement de la racine et la valeur retournée sera l'abcisse du noeud le plus à droite. L'initialisation du graphisme se fait en appelant la méthode

     
      static void initGraphique() { 
        MacLib.initQuickDraw();                                                   
        Rect r = new Rect(50, 50, 50 + 300, 50 +300);                          
        MacLib.setDrawingRect(r);                                                  
        MacLib.showDrawing(); 
      }
    

    Pour dessiner un noeud « variable », on fera :

      MacLib.moveTo(xMin, yMin+H_TEXT); // on descend un peu, prendre H_TEXT = 12
      MacLib.drawChar(c); // le nom de la variable
      MacLib.moveTo(xMin, yMin); // on replace le point courant
    

    Pour dessiner un noeud « entier », on fera de même avec MacLib.drawString("" + valeur);

    Pour dessiner un noeud « opération » :

    On prendra par exemple DELTA_X = DELTA_Y = 10 et on obtient ainsi :

    Cela peut être amélioré, notamment en adaptant le placement de l'opérateur selon que c'est un sous-arbre gauche ou droit, ce qui peut régler le problème visible pour 3 - 2.


  3. Écrire une méthode simplify qui prend une expression et retourne une expression équivalente ayant moins de noeuds. On devra au moins remplacer les expressions constantes par leurs valeurs et traiter les cas particuliers du 0 et du 1.
Last modified: Thu Sep 30 01:12:20 CEST 2004