Salut je demande une aide en urgence

Résolu
benabied Messages postés 4 Date d'inscription jeudi 29 janvier 2009 Statut Membre Dernière intervention 22 février 2009 - 22 févr. 2009 à 10:07
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 - 23 févr. 2009 à 11:55
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

coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
22 févr. 2009 à 14:17
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.
3
benabied Messages postés 4 Date d'inscription jeudi 29 janvier 2009 Statut Membre Dernière intervention 22 février 2009
22 févr. 2009 à 14:34
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();
}
0
benabied Messages postés 4 Date d'inscription jeudi 29 janvier 2009 Statut Membre Dernière intervention 22 février 2009
22 févr. 2009 à 14:39
il faut que j'utilise les piles
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
22 févr. 2009 à 14:48
tu peux le faire sans les piles de facon super simple en quelques lignes.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
benabied Messages postés 4 Date d'inscription jeudi 29 janvier 2009 Statut Membre Dernière intervention 22 février 2009
22 févr. 2009 à 14:52
mais le prof nous a demendé de le faire avec les piles
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
23 févr. 2009 à 11:55
#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;
}
0