Salut je demande une aide en urgence [Résolu]

Signaler
Messages postés
4
Date d'inscription
jeudi 29 janvier 2009
Statut
Membre
Dernière intervention
22 février 2009
-
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
-
j'ai un tp a rendre aprés demain, est pour objet d'evaluer une expression donnée en format préfixé
 ( ex : / + 10 2 3 ) puis il la reaffiche en format infixé c a d avec les parentthése( ex: (10+2)/3). j'ai fait un code mais il marche juste avec les chiffres de 1 a 9. merci d'avance

6 réponses

Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
39
salut

si tu expliquais quel est ton probleme exactement, on pourrait peut-etre t'aider.

l'algo est super simple, il s'agit d'un truc recursif vraiment bidon...

tu devrais poster ton code ici, on pourrait alors te dire ce qui ne va pas dans ton algo.
Messages postés
4
Date d'inscription
jeudi 29 janvier 2009
Statut
Membre
Dernière intervention
22 février 2009

j'ai un tp a rendre aprés demain,c' est pour objet d'evaluer une expression arithemetique donnée en format préfixé
 ( ex : / + 10 2 3 ) puis il la reaffiche en format infixé c .a .d avec les parentthése( ex: (10+2)/3). j'ai fait un code mais il marche juste avec les chiffres de 1 a 9. merci d'avance
voila mon code

/*****************fonction***********************/


typedef struct element
{
 char c;
 struct element *suiv;
}Pilec;
typedef struct ah
{
double a;
 struct ah *su;
}Pilei;


Pilec *empile(Pilec *pile,char elm)
{
 Pilec *cur;
 cur=(Pilec*)malloc(sizeof(Pilec));
 cur->c=elm;
 cur->suiv=pile;
 pile=cur;
 return pile;
}


Pilec *depile(Pilec *pile)
{
 Pilec *cur;
 cur=pile;
 cur=pile->suiv;
 delete(pile);
 pile=cur;
 return pile;
}
void affiche(Pilec *pile)
{
 Pilec *cur;
 cur=pile;
if(pile==NULL)
printf("pile est vide\n");
else
 while(cur!=NULL)
 {
  printf("%c",cur->c);
  cur=cur->suiv;
 }
}
void aff(Pilei *pile)
{
 Pilei *cur;
 cur=pile;
 while(cur!=NULL)
 {
  printf("%f",cur->a);
  cur=cur->su;
 }
}




char somc(Pilec *pile)
{


 char z=pile->c;
 return z;
}
Pilei *emp(Pilei *p,double elt)
{
 Pilei *cur;
 cur=(Pilei*)malloc(sizeof(Pilei));
 cur->a=elt;
 cur->su=p;
 p=cur;
 return p;
}
Pilei *dep(Pilei *p)
{
 Pilei *cur;
 cur=p;
 cur=p->su;
 delete(p);
 p=cur;
 return p;
}
double somi(Pilei *p)
{
 double z=p->a;
 return z;
}


//programme principale

#include<stdio.h>
#include<stdlib.h>
#include
#include<conio.h>
#include"projet de la pile.h"


void main()
{
 Pilec *infix=NULL;
 Pilei *pile=NULL;
 char  a,b,*p;


 double i,y,f,x,q,j;
 printf("Entrez l'expression arithmetiqe en format infixe séparé par des espaces:\n");


 while(a)
 { 
  scanf("%c",&a);


  if(a==':') break;
  else
   if( a != (' '))
  infix=empile(infix,a);
 }
 while(infix!=NULL)
  b=somc(infix);
 {


  if(b=='*')
  {
  y=somi(pile);
     pile=dep(pile);
     f=somi(pile);
  pile=dep(pile);
        x=y*f;
  pile=emp(pile,x);
  }
  else if (b=='/')
  {
  y=somi(pile);
     pile=dep(pile);
     f=somi(pile);
        x=y/f;
  pile=dep(pile);
  pile=emp(pile,x);
  }
  else if(b=='+')
  {
     y=somi(pile);
     pile=dep(pile);
     f=somi(pile);
        x=y+f;
  pile=dep(pile);
  pile=emp(pile,x);
  }
  else if(b=='-')
  {
  y=somi(pile);
     pile=dep(pile);
     f=somi(pile);
        x=y-f;
  pile=dep(pile);
  pile=emp(pile,x);
  }
  else if(b=='s')
  {
   
   q=somi(pile);
   j=q;
   pile=dep(pile);
   pile=emp(pile,j);
  }
  else
  {
  p=&b;
  i=atoi(p);
  pile=emp(pile,i);
  }


  infix=depile(infix); 
 }
 printf("La resultat du calcul est:\n");
 aff(pile);
 while(pile!=NULL)
 {
  pile=dep(pile);
 }
 printf("\n");
        getch();
}
Messages postés
4
Date d'inscription
jeudi 29 janvier 2009
Statut
Membre
Dernière intervention
22 février 2009

il faut que j'utilise les piles
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
39
tu peux le faire sans les piles de facon super simple en quelques lignes.
Messages postés
4
Date d'inscription
jeudi 29 janvier 2009
Statut
Membre
Dernière intervention
22 février 2009

mais le prof nous a demendé de le faire avec les piles
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
39
#include <stdio.h>
#include <stdlib.h>

int is_num(char c){
return c >= '0' && c <= '9';
}

int op(char c){
if ( c == '+' ) return 1;
if ( c == '-' ) return 1;
if ( c == '*' ) return 2;
if ( c == '/' ) return 2;
return 0;
}

void expression(char ** content, int oldop){
int o;
if (o = op(**content)){
char operateur = **content;
(*content)++;
if (o < oldop) putchar('(');
expression(content, o);
putchar(operateur);
expression(content, o);
if (o < oldop) putchar(')');
}else if (**content == ' '){
(*content)++;
expression(content, oldop);
}else{
while (is_num(**content)){
putchar(**content);
(*content)++;
}
}
}


int main(){
char *truc= "* 5 + 2 / + 10 2 3";
expression(&truc, 0);
putchar('\n');
return 0;
}