Your browser doesn't support the features required by impress.js, so you are presented with a simplified version of this presentation.

For the best experience please use the latest Chrome, Safari or Firefox browser.

PRG4 - TD2



Benoît Hoessen
Université d'Artois
1ème semestre 2014-2015

 

Rappels: pointeurs

pointeurs

Notation polonaise inversée

Lorsque l'on veut écrire une équation, la forme habituelle est d'utiliser une notation infixe du type 3*3. Le soucis avec cette notation, c'est que des parenthèse sont parfois nécessaires pour enlever toute ambiguïté. Par exemple: 3*3+2 ≠ 3*(3+2).
Le but de l'exercice est de créer un programme qui recevra un argument, une chaine de caractère contenant une expréssion en NPI qu'il faudra évaluer.

Définition

La notation polonaise inversée permet de se passer de parenthèse. C'est une notation postfixe: les opérandes sont fournies et ensuite on fournit l'opérateur. 3*3 devient donc 3 3 *. De ce fait, il est simple de distinguer 3*3+2 ≠ 3*(3+2) car 3*3+2 → 3 3 * 2 +, tandis que 3*(3+2) → 3 3 2 + *.

Traitement

Pour traiter ce genre de notation, il est nécessaire d'avoir une pile. Lorsqu'une valeur est rencontrée, alors celle-ci est ajoutée en haut de la pile. Lorsqu'un opérateur est rencontré, celui-ci s'applique sur les 2 valeurs en haut de la pile. Ces dernières seront donc retirée de la pile, puis la valeur calculée est ajoutée sur la pile.

Fonction de la bibliothèque standard

double strtod(const char *nptr, char **endptr);
La fonctions strtod() convertit la portion initiale de la chaîne pointée par nptr en un réel de type double.
Ces fonctions renvoient la valeur convertie si c’est possible.
Si endptr n’est pas NULL, un pointeur sur le caractère suivant le dernier caractère converti est stocké dans l’emplacement pointé par endptr.
Si aucune conversion n’est possible, la fonction renvoie zéro, et la valeur de nptr est stockée dans endptr.

Solution:

Variables

Lire un entier

Opération

Code source complet: rpn.c

Liste cyclique

On veut représenter nos données sous forme d'une liste liée cyclique, c'est-à-dire, le dernier élément de la liste est lié au premier élément de la liste. Les éléments de la liste sont des entiers.
Définir et implémenter des fonctions permettant d'ajouter un élément, retirer un élément et chercher si un élément est dans la liste cyclique.
liste cyclique
Code source complet: cyclic.c

Use a spacebar or arrow keys to navigate