Convertir une expression infixée en expression préfixée.

Signaler
Messages postés
3
Date d'inscription
jeudi 20 novembre 2014
Statut
Membre
Dernière intervention
24 novembre 2014
-
Messages postés
3
Date d'inscription
jeudi 20 novembre 2014
Statut
Membre
Dernière intervention
24 novembre 2014
-
Bonjour, je cherche à trouver le code qui transforme une forme infixée (parenthésés) en une forme préfixée. la condition est d'utiliser les piles.
exemple: ((a*(b+c))/(d-e)) donne: /*a+bc-de.
merci pour votre aide.

4 réponses

Messages postés
3
Date d'inscription
jeudi 20 novembre 2014
Statut
Membre
Dernière intervention
24 novembre 2014
1
voici mon code complet:
public class Pile <E>{
private class Cell<T>{
T valeur;
Cell<T>lien;
Cell(T valeur){
this.valeur=valeur;
lien=null;
}

}
private Cell<E> sommet;
public Pile() {
sommet = null;
}
public boolean estVide(){
return sommet==null;
}
public void empiler(E valeur){
Cell<E> cell=new Cell<E>(valeur);
cell.lien=sommet;
sommet=cell;
}
public E sommet() {
return sommet.valeur;
}
public E depiler(){
E res = sommet.valeur;
sommet = sommet.lien;
return res;
}

public String toString() {
String res= "";
Cell <E>link = sommet;
while (link!=null) {
res+=link.valeur+"";
link=link.lien;

}
return ""+res+"";
}



public static void main(String[] args) {


System.out.println(toInFixe("((a+b)-c)"));
}

public static boolean estUneVariable(char car) {
return car >= 'a' && car <= 'z';
}

public static boolean estUnOperateur(char car) {
return car == '+' || car == '-' || car == '*' || car == '/'
|| car == '%';
}

public static String toPostFixe(String chaine) {
Pile p = new Pile();
String res = "";

for (int i = 0; i < chaine.length(); i++) {
if (estUneVariable(chaine.charAt(i)))
res += chaine.charAt(i);
else if (estUnOperateur(chaine.charAt(i)))
p.empiler(chaine.charAt(i));
else if (chaine.charAt(i) == ')')
res += p.depiler();

}

return res;
}
public static String toPreFixe(String chaine) {
Pile p = new Pile();
String res = "";

for (int i = chaine.length() - 1; i >= 0; i--) {
if (estUneVariable(chaine.charAt(i)))
res = chaine.charAt(i) + res;
else if (estUnOperateur(chaine.charAt(i)))
p.empiler(chaine.charAt(i));
else if (chaine.charAt(i) == '(')
res = p.depiler() + res;
}
return res;
}
public static String toInFixe(String postefixe) {
Pile p = new Pile();
String res = "";

for (int i = 0; i < postefixe.length(); i++) {
if (estUneVariable(postefixe.charAt(i)))
p.empiler(postefixe.charAt(i));
else {
res = p.depiler()+res;
res +=postefixe.charAt(i);
res = p.depiler()+res;
}
}
return res;
}

}


la méthode en question est: toInFixe.
L'exception généré : Exception in thread "main" java.lang.NullPointerException
at pile.Pile.depiler(Pile.java:31)
at pile.Test.toInFixe(Test.java:72)
at pile.Test.main(Test.java:22)
Messages postés
29219
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 août 2020
335
Bonjour,
Cela ressemble à l'énoncé d'un exercice... si c'est bien le cas, je t'invite à lire ceci :
http://codes-sources.commentcamarche.net/forum/affich-1557761-bar-sujet-de-pfe-tp-et-autres-devoirs-scolaires#top


Effectivement c'est un TP, mais c'est l'idée de l'algorithme que je cherche, j'ai déjà essayer plusieurs façons mais ça bloque toujours. Merci d'avance
Messages postés
29219
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 août 2020
335
L'algorithmie n'a rien à voir avec le LANGAGE.. ta question devrait se trouver plus dans le café des membres. .

si tu veux de l'aide montre ce que tu as essayé en expliquant en quoi ça ne correspond pas à tes attentes.

Pour rappel: Ici on ne fait pas dans le tout cuit..
Messages postés
3
Date d'inscription
jeudi 20 novembre 2014
Statut
Membre
Dernière intervention
24 novembre 2014
1
Bonjour,
je voudrai changer la forme d'une expression poste-fixe à une expression infixe . j'ai testé mais j'ai une exception. J'ai changé plusieurs fois le code mais l'exception est toujours là.Voici le corps de la méthode:

public static String toInFixe(String postefixe) {
        Pile p = new Pile();
        String res = "";

        for (int i = 0; i < postefixe.length(); i++) {
            if (estUneVariable(postefixe.charAt(i)))
                p.empiler(postefixe.charAt(i));
            else {
                res = p.depiler()+res;
                res +=postefixe.charAt(i);
                res = p.depiler()+res;
            }
        }
        return res;
    }

merci d'avance.


EDIT : Ajout des balises de code !
Messages postés
29219
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 août 2020
335
1 - Merci de bien vouloir utiliser la coloration syntaxique (les balises de code) lorsque tu postes du code sur le forum.
Explications disponibles ici :
http://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

2 -
. j'ai testé mais j'ai une exception.

Et quelle exception as tu ?