UFR de Mathématiques et d'Informatique
IUP 1, DEUG 2, 2002/2003
Algorithmique et programmation orientées objet
Travaux dirigés
séances 2 et 3, février


Les piles de flottants

et la calculette dc




1 Les piles de flottants

La classe PileDeFlottants définit les piles bornées de nombres flottants, en fournissant les méthodes publiques suivantes :







Il est demandé d'écrire le code de la classe PileDeFlottants. Pour l'implantation, l'idée est d'utiliser, pour stocker la pile, un tableau.





Un exemple d'utilisation de la classe PileDeFlottants est donné par le programme test suivant :





public class TestPileDeFlottants {
  /* test de la classe PileDeFlottants : */
  public static void main (String args []) {
    PileDeFlottants maPile = new PileDeFlottants(10) ;
    maPile.description() ;

    maPile.empiler(1f) ;
    maPile.description() ;
    maPile.empiler(2.3f) ;
    maPile.description() ;
    maPile.dépiler() ;
    maPile.description() ;
  }
}




2 La notation polonaise inversée (prélude à l'exercice 3)

Dans les années 20, le philosophe et mathématicien polonais Jan Lukasiewicz (1878-1956) a montré comment écrire des expressions mathématiques sans utiliser de parenthèses, en préfixant ou postfixant les opérateurs. Exemple : (4 + 5) × 6 est noté, en notation postfixée : 4 5 + 6 ×. En l'honneur de Lukasiewicz, ce type de notation est appelé notation polonaise. HP a utilisé la version postfixée pour ses premières calculettes. Lukasiewicz utilisait la version préfixée, aussi la version postfixée a-t-elle été appelée la notation polonaise ``inversée''.





Exercice : donnez la notation polonaise inversée des deux expresions suivantes :


3 La calculette dc

Sous Unix, vous avez à votre disposition une calculette, avec la commande dc (desk calculator). Les expressions doivent être entrées sous forme polonaise inversée.

Il s'agit dans cet exercice d'écrire la classe DC des calculettes ``à la dc''. Les noms des méthodes suivantes, à écrire, sont (en-dehors de entrer) des commandes dc, et leur commentaire est extrait du manuel (man dc) :






Pour l'implantation, on utilisera, comme dc, une pile de nombres flottants. On implantera, comme opérations, + et -. Le fonctionnement est le suivant : Un exemple d'utilisation de la classe DC est donné par le programme test suivant :





public class TestDC {
  /* test de la classe Calculette : */
  public static void main (String args []) {

    DC maSessionDc = new DC() ;

    // calcul de : 1.0 + 1.0 :
    // entré comme : 1.0 1.0 + .
    maSessionDc.entrer(1.0f) ;
    maSessionDc.entrer(1.0f) ;
    maSessionDc.entrer('+') ;
    maSessionDc.p() ;
    // devrait afficher : 2.0.

    maSessionDc.c() ;

    // calcul de : 2.0 - 3.0
    // entré comme : 2.0 3.0 - .
    // On se trompe une fois, et on inverse l'ordre des deux
    // derniers nombres entrés.
    maSessionDc.entrer(3.0f) ;
    maSessionDc.entrer(2.0f) ;
    maSessionDc.r() ;
    maSessionDc.entrer('-') ;
    maSessionDc.p() ;
    // devrait afficher : -1.0.

    maSessionDc.c() ;

    // calcul de : 2.5 - (9.2 - (4.6 + 7.2)) :
    // entré comme : 2.5 9.2 4.6 7.2 + - - .
    maSessionDc.entrer(2.5f) ;
    maSessionDc.entrer(9.2f) ;
    maSessionDc.entrer(4.6f) ;
    maSessionDc.entrer(7.2f) ;
    maSessionDc.entrer('+') ;
    maSessionDc.entrer('-') ;
    maSessionDc.entrer('-') ;
    maSessionDc.p() ;
    // devrait afficher : 5.1.

  }
}

This document was translated from LATEX by HEVEA.