begin process at 2010 02 09 20:28:03
  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

Convertir une chaine String en tableau de byte [ par JuS ] Bonjour,Je cherche à convertir une chaine de caractere String en un tableau de byte pour pouvoir correspondre en client/serveur à l'aide de sockets.Vo Expression dynamique [ par kityof33 ] je possède une fenêtre avec 3 boutons (Button class) nommés Rouge, Vert et Bleu.J'ai une methode assignColor qui a pour parametre une String S1 qui pe appel de class en JAVA ds un package Tomcat 4.1.30 [ par coyote_fx ] Bonjour à tous bien voilà j'ai encore des problèmes.Non non ne me zappé pas.J'ai toujours des problème pour importer java.Voilà ma page JSP fait appel extraire une chaine regex [ par kasperone ] Bonjour a tous,une question de plus : j'ai une chaine de caractéres et j'aimerai en extraire une date (ou autre chose ultérieurement).pour ce faire j' Extraction nombre d'un String [ par maxinfos ] Bonjour,voilà, j'ai un String contenant une chaine de caractère du style : "123.0 145.1 120.4 18 " etc ...j'aimerai Graphes et expressions arithmétiques (Etudiant en galère !!!) [ par mrginto ] Bonjour, On a vite fait appris la prog en Java pour faire une petite interface graphique nous permetant de créer des figures, de le déplacer , grouper test de validité sur des string [ par dardo3 ] Bonjour tout le mondeProblemeje déclare une chaine de caracterestring xensuite je demande a l'utilisateur de rentrer une réponsesystem.out.print("entr tableau chaine de caracter [ par loupiti ] bonjour,je veux creer un tableau de chaine de caractere mais je n'y arrive pas String chaine[]=new String[2]; chaine={"Lsi", "Ms"};pouvez vous me di Applet et BD MySQL [ par remidub ] Bonjour,j'ai un problème qui me gène depuis quelques temps,Je voudrai réaliser une applet qui lit des valeurs dans une base de données MySQL.J'ai char ecriture/lecture donnee num / texte dans fichier.txt [ par anisotrope ] Bonjour je voudrais ecrire et lire des donnees sous la forme suivante par exemple :5.5 , 3.01.5 , 2.0...Voila ce que j'ai ecris pour l'ecriture :publi


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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 : 0,203 sec (3)

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