begin process at 2012 02 12 23:49:36
  Trouver un code source :
 
dans
 
Accueil > Forum > 

JAVA / J2EE / J2ME

 > 

Algorithme

 > 

Maths

 > 

conversion d'une expression infixée en une expression postfixée (Probleme avec les parenthés ds l'expression)


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

conversion d'une expression infixée en une expression postfixée (Probleme avec les parenthés ds l'expression)

dimanche 10 décembre 2006 à 14:22:14 | conversion d'une expression infixée en une expression postfixée (Probleme avec les parenthés ds l'expression)

Strick9

Salut a tous,

j ai un probleme lors de la coversion d'une expression arithmétique infixée ( exemple:  4 * 3 / ( 2 + 2 )      ) en un exprssion arithmetique postfixée (le resultat devrai être:    4 3 * 2 2 + /       ) mais j'obtient (   4 3 2 2  + / *   )

voila la classe qui fait cette conversion:

public class ExpressionInfixée
{
    private String ch;
    private Pile p = new PileListeTableau(String.class);
    public ExpressionInfixée(String Expression)
    {
        ch = Expression;
    }
    private String Extraire(int pos, String ch)
    {
        String res = "";

        int i = pos - 1;
        boolean stop = false;

        while ((stop == false) && (i >= 0))
        {
            if (ch.charAt(i) == ' ')
            {
                stop = true;
            }

            else
                res = ch.charAt(i) + res;
            i--;
        }
        return res;
    }

    public static int Priorite(String sc)
    {
        int P = 0;
        switch (sc.charAt(0))
        {
            case '(':
            case ')': P = 0; break;
            case '+':
            case '-': P = 2; break;
            case '*':
            case '/': P = 3;
        }
        return P;
    }

    public static String Extraire2(int debut, String expression)
    {
        String sous_chaine = null;
        int fin = expression.indexOf(' ', debut);
        if (fin != -1)
            sous_chaine = expression.substring(debut, fin);
        else sous_chaine = expression.substring(debut);
        if (sous_chaine.endsWith("+"))
            sous_chaine = "+" + sous_chaine.substring(0, sous_chaine.length() - 1);
        else if (sous_chaine.endsWith("-"))
            sous_chaine = "-" + sous_chaine.substring(0, sous_chaine.length() - 1);
        return sous_chaine;
    }
    private boolean Opérateur(Comparable e)
    {
        if (e.compareTo("+") == 0 || e.compareTo("-") == 0 || e.compareTo("*") == 0 || e.compareTo("/") == 0)
            return true;
        else return false;
    }
    private boolean Opérande(Comparable e)
    {
        if (e.compareTo("0") == 0 || e.compareTo("1") == 0 || e.compareTo("2") == 0 || e.compareTo("3") == 0 || e.compareTo("4") == 0 || e.compareTo("5") == 0 || e.compareTo("6") == 0 || e.compareTo("7") == 0 || e.compareTo("8") == 0 || e.compareTo("9") == 0)
            return true;
        else return false;
    }
 
    public String Postfixée()
    {
        boolean stop;
        String r = "";
        int i = 0;
        while (i < ch.length())
        {

            if (Extraire(i, ch).equals("("))
            {
                try
                {
                    stop = false;
                    while (stop)
                    {
                        if (Priorite((String)p.sommet()) >= Priorite(Extraire(i, ch)))
                        {
                            String var = (String)p.sommet();
                            p.depiler();
                            r = r + " " + var;
                            if (p.estVide())
                                stop = true;
                        }
                    }
                   
                    p.empiler(Extraire(i, ch));
                }
                catch (PileException e) { }
            }
            else if (Opérateur(Extraire(i,ch)))
            {
                try
                {
                    p.empiler(Extraire(i, ch));
                }
                catch (PileException e) { }
            }
            else if (this.Extraire(i, ch).equals(")"))
            {
                try
                {
                    while (!p.sommet().equals("("))
                    {
                        String v = (String)p.sommet();
                        if (!v.equals("("))
                        {

                            r = r + " " + v;
                            p.depiler();

                        }

                    }
                }
                catch (PileException e) { }
                try
                {
                    p.depiler();
                }
                catch (PileException e) { }
            }
            //else r = this.Extraire(i, ch) + " " + r;
            else r = r + this.Extraire(i, ch) + " ";
            i += this.Extraire(i, ch).length() + 1;
        }
        while (!p.estVide())
        {
            try
            {
                String v = (String)p.sommet();
                r = r + v + " ";
                p.depiler();
            }
            catch (PileException e) { }
        }
        return r.substring(0, r.length() - 1);

    }


}


j utilise pour faire cette conversion une pile et chaine String qui recoit les operateur selon leur priorité et les operande directement.
si quelqu'un voit ou mon probleme se situe, son aide serait du plus grand secours.
Merci pour avoir pris le temps de lire et merci d'avance pour votre aide.
bonnne journée.

jeudi 14 décembre 2006 à 15:37:02 | Re : conversion d'une expression infixée en une expression postfixée (Probleme avec les parenthés ds l'expression)

JBAware

Personnellement je reverrai la conception en utilisant un arbre chainé ;)

JB...

mardi 3 novembre 2009 à 23:26:05 | Re : conversion d'une expression infixée en une expression postfixée (Probleme avec les parenthés ds l'expression)

Bouchekif

javascript:void(0);


Cette discussion est classée dans : string, chaine, expression, extraire, compareto


Répondre à ce message

Sujets en rapport avec ce message

Extraire des données d'un fichier texte [ par lamine25000 ] Bonjour Je débute en java et j'aimerais bien que vous me débloquer sur l'extraction de données à partir d'un fichier ,mon fichier ce formalise comme s Déclaration de String en JAVA [ par javazer ] Salut! Je veux déclarer une chaine de caractères de longueur 10 commençant par la lettre 'A' public StringBuffer chaine=new StringBuffer(10); chaine. enlever les espaces d'une chaine de caractére [ par logarsalem ] Bonjour pour tous, je veux enlevé les espaces d'une chaine de caractaire, j'ai fait le code suivant:     public static void main(String[] args) {      URGENT AIDEZ MOI SVP [ par Aymanovitch ] salut tout le monde j'ai un petit problème !!! Je suis entrain de faire une calculatrice d'une expression arithmétique simple en JAVA. j'ai réussi à f algorithme DES java [ par switch1 ] Salut tout le mondej'ai un problème pour ce qui concerne l'algorithme DES je cherche a crypte une chaine de caractère on utilisant DES et une cle géné conception java [ par samplaid ] J'ai plusieur problèmes de conceptions surtout pour l'héritage. Imaginons que je construises un arbre tel que celui-ci. J'aimerais savoir quelle est l Récupérer une chaine d'un tableau [ par sarita199 ] Bjr a tous,je suis bloquée dans cet exercice durant 4j,et désormais j'ai pas trouvéla solustion.Le but de cet exercice est de récupérer les données d' la terre est plate [ par kamikaz666 ] Bonjour tout le monde,Je suis en train de bosser un petit peu j'essai de résoudre un algo qui s'appelle "la terre est plate"en fait le but est dévelop extraire une chaine de caractére d'un fichier [ par linaing ] salut[^^!1], j'ai lu un fichier owl et je voudrais extraire une chaine de caractère de ce fichier et la mettre dans un tableau en java, pour les incor expression régulière [ par ludoW21 ] Bonjour,quelqu'un  peut-il m'aider? je ne connais pas les expressions régulières. Bref, voici mon problème.J'ai par exemple la String suivante :    ro


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,576 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales