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

Messages postés
3
Date d'inscription
jeudi 20 novembre 2014
Statut
Membre
Dernière intervention
24 novembre 2014
- - Dernière réponse : oudda
Messages postés
3
Date d'inscription
jeudi 20 novembre 2014
Statut
Membre
Dernière intervention
24 novembre 2014
- 24 nov. 2014 à 14:59
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.
Afficher la suite 

4 réponses

Messages postés
26969
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
7 décembre 2019
318
0
Merci
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


Commenter la réponse de jordane45
0
Merci
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
jordane45
Messages postés
26969
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
7 décembre 2019
318 -
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..
Commenter la réponse de oudda
Messages postés
3
Date d'inscription
jeudi 20 novembre 2014
Statut
Membre
Dernière intervention
24 novembre 2014
0
Merci
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 !
jordane45
Messages postés
26969
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
7 décembre 2019
318 -
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 ?
Commenter la réponse de oudda
Messages postés
3
Date d'inscription
jeudi 20 novembre 2014
Statut
Membre
Dernière intervention
24 novembre 2014
0
Merci
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)
Commenter la réponse de oudda