Auteur Sujet: ASCII et nombres en mémoire :p  (Lu 3537 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne sayce

  • Archives
  • Power Members
  • *
  • Messages: 1833
    • Espace personnel DVP
ASCII et nombres en mémoire :p
« le: février 29, 2012, 18:09:54 »
Inauguration 8-)

Yop :)

Voila, j'ai un petit problème.
On doit faire un programme qui transforme une expression de ce type : (5*5) en 5 5 * c'est à dire en expression postifixée.

Ainsi l'user entre ceci par exemple : (5*5)
On l'enregistre dans un tableau de char
Ensuite on copie cette chaine dans un tableau de Terme, structure définie de cette façon :

typedef struct
{
int ope;
int valeur;
} Terme;

Ainsi, on aura :

Citer
Affichage du tableau de Terme :
    Indice : 0     Valeur : 40            << Code ASCII de (
    Indice : 1     Valeur : 5            << Nombre 5 réel
    Indice : 2     Valeur : 42            << Code ASCII de *
    Indice : 3     Valeur : 5            << Nombre 5 réel
    Indice : 4     Valeur : 41            << Code ASCII de )

Que l'on copie ensuite dans un tableau de int on obtient ainsi l'expression postfixé :

Citer
Expression postfixee :
   5 5 42
               
Donc 2 fois le chiffre 5 réel, et le ASCII de *

Pour finir il faut faire le calcul. On utilise donc une structure pile :

typedef struct pile
{
Terme element;
struct pile *suivant;
} Pile;

Mon problème est donc

Comment, reconnaître en mémoire, le code ASCII de '*' par exemple et le nombre 42 ?

:)

Je vous remercie ;)
C'est embêtant car sa me génère une SF :p

En effet en tapant : (42*2) on a :

Citer
Affichage du tableau de Terme :
    Indice : 0     Valeur : 40
    Indice : 1     Valeur : 42    << Nombre
    Indice : 2     Valeur : 42   << ASCII
    Indice : 3     Valeur : 2
    Indice : 4     Valeur : 41

Puis :

Citer
Expression postfixee :
   42 2 42

++
« Modifié: février 29, 2012, 18:12:29 par sayce »
¤ ♣®Sayc£®♣ ¤

Security-X

ASCII et nombres en mémoire :p
« le: février 29, 2012, 18:09:54 »

Hors ligne Egwene

  • Fondateurs
  • Mega Power Members
  • *****
  • Messages: 4483
Re : ASCII et nombres en mémoire :p
« Réponse #1 le: mars 01, 2012, 11:21:40 »
Salut Sayce,

Citer
typedef struct
{
   int ope;
   int valeur;
} Terme;

C'est imposé par le sujet ? Parce que sinon pour résoudre ce genre de problème, le mieux c'est d'utiliser une pile :)
En plus pas besoin d'un int pour stocker l'opérateur.

Enfin tableau de char, puis tableau de int, c'est pas très opti toussa :D

Citer
Comment, reconnaître en mémoire, le code ASCII de '*' par exemple et le nombre 42 ?

Ben apriori tu peux pas :QQQ avec ta méthode.

Regarde donc du côté de la structure de données de la pile et vois si tu peux résoudre ton problème avec (tu peux :NNN ).

Hors ligne sayce

  • Archives
  • Power Members
  • *
  • Messages: 1833
    • Espace personnel DVP
Re : ASCII et nombres en mémoire :p
« Réponse #2 le: mars 01, 2012, 13:20:02 »
Yop Eg :)
Merci de ta réponse ;)

Citer
C'est imposé par le sujet ? Parce que sinon pour résoudre ce genre de problème, le mieux c'est d'utiliser une pile

Ouép :). La pile on l'utilise après, pour le passage en expression postfixée, et pour son calcul :)
C'est au moment du calcul que la SF arrive :)


Citer
Regarde donc du côté de la structure de données de la pile et vois si tu peux résoudre ton problème avec (tu peux :NNN ).

Le problème c'est comment est géré l'empilage/désempilage dans la pile donc ?
En le modifiant, je peux virer ce problème ?

¤ ♣®Sayc£®♣ ¤

Hors ligne Egwene

  • Fondateurs
  • Mega Power Members
  • *****
  • Messages: 4483
Re : ASCII et nombres en mémoire :p
« Réponse #3 le: mars 01, 2012, 13:30:00 »
Citer
La pile on l'utilise après, pour le passage en expression postfixée, et pour son calcul

Il me semble que ce que tu cherches à faire c'est passer en expression postfixée non ?

Ah ton problème c'est peut-être parser les expressions arithmétiques que tu reçois en entrée de ton programme ? Et pour cela ton prof t'as demandé d'utiliser une certaine méthode ?

Fais un lexer  :QQQ
« Modifié: mars 01, 2012, 13:30:33 par Egwene »

Hors ligne sayce

  • Archives
  • Power Members
  • *
  • Messages: 1833
    • Espace personnel DVP
Re : ASCII et nombres en mémoire :p
« Réponse #4 le: mars 01, 2012, 13:46:01 »
Re

parser ? un lexer ?   C'est quoi ? :P ::)

En fait ça me fait un SF, car quant je rentre (42*2)
La tableau de terme contient 40, 42, 42, 2, 41
Le tableau de int contenant l'expression postfixé contient : 42 2 42

Pour le calcul il est nécessaire de faire la différence entre un opérateur et un chiffre/nombre.
Hors la entre 42 et '*' il ne peut pas.
Du coup quand il lit le 1er 42 qui est un chiffre il le prend pour l'opérateur '*' et tente de dépiler la pile 2 fois de suite (ce qui est normal, car quand il lit un opérateur il dépile 2 fois, et empile le résultat de l'opération entre les 2 opérandes et l'opérateur) hors il n'y a qu'une valeur dans la pile du coup il tente d'accèder à une partie de la mémoire qui est inexistante (je pense) ;))

« Modifié: mars 01, 2012, 13:46:41 par sayce »
¤ ♣®Sayc£®♣ ¤

Tags: