TD-5, encore les pointeurs

Ce document est disponible à l’URL http://w3.edu.polytechnique.fr/profs/informatique/Luc.Maranget/X.97/TD-5/enonce.html
Programmes Prenom.Nom.c à déposer par ftp sur poly en /users/profs/maranget/TD-5.

1  Calculatrice HP

On se propose de réaliser une petite calculette HP.

1.1  Quatre opérations

Cette première partie s’inspire du cours. On utilisera une pile stack, globale et codée en machine par une liste d’entiers, voici la définition de stack et le constructeur des listes :

typedef struct cell {
  int val;
  struct cell *next;
} Cell, *Stack;

Stack stack = NULL;

Cell *cons(int val,Cell *next)
{
  Cell *r;

  r = (Cell *)malloc(sizeof(Cell));
  if ( r == NULL) {
    fprintf(stderr,"Plus de memoire\n");
    exit(-1);
  }
  r->val = val;
  r->next = next;
  return r;
}

1.2  Opérations avancées sur les piles

Les vraies calculatrices HP ont des touches spéciales qui permettent des manipulations de la pile. Les opérations suivantes (qui diffèrent un peu de celles des calculatrices HP) sont à réaliser sans allouer aucune cellule de liste.

Remarquez que les rotations reviennent, pour la rotation vers le haut, à mettre la cellule de tête en queue de liste et pour la rotation vers le bas, à mettre la cellule de queue en tête de liste. Vous aurez sans doute intérêt à faire de petits dessins pour vous guider.

La solution de cet exercice apparaîtra en hp.c.

2  S’il vous reste du temps

Réaliser une calculatrice PH, dont la structure de contrôle est une file. La file sera réalisée par une liste (voir la fin du cours). Une opération se fera en défilant les deux arguments et en enfilant le résultat. Vous pouvez aller jusqu’à donner une signification claire aux rotations et à les programmer.


Ce document a été traduit de LATEX par HEVEA