Votre question

les piles et les listes chainées

Tags :
  • C++
  • Programmation
Dernière réponse : dans Programmation
22 Décembre 2011 15:40:05

Bonjour a vous,
je n'arrive pas a trouver une solution a ce travail. s'il vous plais est ce que quelqu'un peut m'aider. MERCI

On désire mettre en œuvre une application destinée à l’évaluation d’expressions arithmétiques en utilisant la structure de pile.
Une expression arithmétique est une chaîne de caractères composée de symboles correspondant à des opérandes, des opérateurs et des parenthèses dans le cas d’une expression parenthésée.

Exemple
130/ (-2*(5+8)) = 130/-2*13= -5

Opérande : peut être une suite de symboles représentant un entier ou un réel.
Un réel est composé d’une partie entière, une partie décimale et éventuellement d’une partie puissance.

Opérateur : on considère les opérateurs usuels suivants :
+ (addition), - (soustraction, peut être unaire ou binaire), * (multiplication), / (division) et % (reste de la division entière).

L’ordre décroissant de priorité des opérateurs arithmétiques est le suivant :
* / %
+ -

Travail demandé
Première étape :
L’expression doit être saisie sous forme d’une chaîne de caractères comportant des caractères numériques ( 0, 1,…,9), le point décimal, le caractère ‘e’ ou ‘E’ et les caractères +, -, *, /, %.
Dans cette étape, on doit effectuer une analyse lexicale et syntaxique de l’expression , il s’agit de vérifier si l’expression est correcte avant de faire le calcul.
Exemples :
l’expression 100 -/2 n’est pas correcte syntaxiquement, symboles mal placés.
L’expression 100 ?/2 n’est pas correcte lexicalement car il ya un caractère non admis ( ?) dans les expressions arithmétiques.

Deuxième étape :
Dans cette étape, il s’agit d’écrire les fonctions suivantes :
Opérateur (x) : détermine si x est un opérateur.
Opérande(x) : détermine si x est un opérande
Priorité(x) : retourne la priorité de l’opérateur x
Operation (x1, x2, operateur) : effectue l’opération (x1 operateur x2) et retourne le résultat.

Dans cette étape, on doit générer un vecteur de réels correspondant à l’expression arithmétique. En effet, chaque case du vecteur doit contenir soit un opérande, un opérateur (on mettra le code de l’opérateur) ou une parenthèse ouvante ou fermante (on mettra aussi le code)

Exemple
La chaine de caractères
1 3 0 / ( - 2 * ( 5 + 8 5 ) ) \0

Sera transformée en vecteur de réels comme suit :

130 Code du / Code de ( Code du - 2 Code de * Code de ( 5 Code de + 85 Code de ) Code de )


Autres pages sur : piles listes chainees

a c 232 L Programmation
22 Décembre 2011 16:12:32

Salut,

Ou est-ce que tu es bloqué ? Qu'est ce que tu as déjà fait ?
Et c'est en quel langage ?
22 Décembre 2011 19:05:38

OmaR a dit :
Salut,

Ou est-ce que tu es bloqué ? Qu'est ce que tu as déjà fait ?
Et c'est en quel langage ?


bon c'est dans le langage C.
comme je n'ai aucune idée comment on manipule les listes chainées et les piles.et j'essayer de les comprendre un peut par internet (je suis en deuxieme année informatique). j'ai pas trouver comment faire
Contenus similaires
Pas de réponse à votre question ? Demandez !
a b L Programmation
22 Décembre 2011 19:53:43

Et sais-tu ce qu'est un pointeur en C ?
23 Décembre 2011 21:00:08

CRicky a dit :
Et sais-tu ce qu'est un pointeur en C ?


A ma connaissance:
Un pointeur est une variable contenant l'adresse d'une autre variable d'un type donné.et pour dire que le pointeur ne contient aucune valeur d'adresse valide en note NULL qui est définie dans la bibliothèque <stdio.h>.
Pour la déclaration : type *identificateur ;
Ils permettent de manipuler de façon simple des données pouvant être importantes
a b L Programmation
28 Décembre 2011 21:17:05

Alors tu devrais savoir comment gérer une liste chainée: chaque élément est une structure qui contient la valeur et un pointeur sur l'élément suivant.
Son inconvénient : pour rechercher un élément, il faut parcourir tous les éléments précédents pour le trouver.
Son avantage : l'insertion d'un nouvel élément ou la suppression d'un élément est simple car il suffit de changer les adresses pour modifier les liens entre les éléments.

Une pile n'est qu'un ajout/suppression d'un élément en fin de pile. Le plus simple est de gérer le début de la pile (adresse du début d'un grand tableau) et la fin de la pile (adresse du dernier élément). Le dépassement du tableau est à prévoir, donc tu peux gérer la pile avec une liste chainée (l'idéal est que chaque élément aient 2 pointeurs : un sur le précédent et un sur le suivant).
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS