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 :
- PileDeFlottants(int hauteurMax) (le constructeur)
- void empiler(float x)
- float dépiler()
- float sommet()
- boolean estVide()
- boolean estSaturée()
- int hauteur()
- int hauteurMax()
- void description() : décrit la pile à l'écran
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 :
- · ((4 + 5) × ( -5 + 8 ) ) + 3
- · [(- (1 - 5)) × [((2 + 7) - 10) × 4 ]] + 5
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) :
- void entrer(float x)
- void entrer(char op)
- void p().
``Prints the value on the top of the stack,
without altering the stack.''
- void c().
``Clears the stack, rendering it empty.''
- void r().
``Reverses the order of (swaps) the top two values on
the stack.''
- void f().
``Prints the entire contents of the stack without
altering anything. This is a good command to use
if you are lost or want to figure out what the
effect of some command has been.''
Pour l'implantation, on utilisera, comme dc,
une pile de nombres flottants.
On implantera, comme opérations, + et -.
Le fonctionnement est le suivant :
- + ``Pops two values off the stack, adds them, and
pushes the result.''
- - ``Pops two values, subtracts the first one popped
from the second one popped, and pushes the result.''
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.