Validité d'une expression mathématique

Fermé
aki - 7 nov. 2010 à 23:40
ydurce Messages postés 78 Date d'inscription samedi 9 octobre 2010 Statut Membre Dernière intervention 12 décembre 2010 - 8 nov. 2010 à 00:21
Bonjour, svp qqn pourrait-il me dire pourquoi mon prog ne marche pas ??????

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 10
typedef struct stack stack;
struct stack {
char vec[MAX];
int sommet;
};
stack st;
void stackinit()
{ st.sommet=-1;
return;
}
int stackempty()
{ if(st.sommet=-1) return 1 ;
else return 0;
}
void stackpush(char c)
{ if(st.sommet==MAX-1)
{perror("stackoverflow");
return;
}
else
{
st.sommet++;
st.vec[st.sommet]=c;

return ;}
}
char stackpop()
{char result;
if(stackempty())

{return('*');}

else
{
result=st.vec[st.sommet];
st.sommet--;
return(result);
}
}
main()
{ char o;
char c;
int correct=1;
char x='a';
stackinit();
if(stackempty())
printf("la pile est vide\n");
stackpush(x);
printf("%c\n",st.vec[st.sommet]);
stackpop();
printf("%d",st.sommet);

printf("tapez votre expression:\n");
stackinit();
while((c=getchar())!='\n')
{ switch(c)
{ case '(' : stackpush(c) ; break;
case '{' : stackpush(c) ; break;
case '[' : stackpush(c) ; break;
case ')' : {o=stackpop() ; if(o!='(') correct=0;};break;
case '}' : {o=stackpop() ; if(o!='{') correct=0;};break;
case ']' : {o=stackpop() ; if(o!='[') correct=0;};break;
}
}
if((stackempty()==1) && (correct==1))
printf("\nl'expression est correcte\n");
else
printf("\nl'expression est incorrecte\n");
getch();
}

2 réponses

enfait la premiere partie n'est qu'un essaie on peut bien s'en passer mais sa ne marche tjrs pas
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 10
typedef struct stack stack;
struct stack {
char vec[MAX];
int sommet;
};
stack st;
void stackinit()
{ st.sommet=-1;
return;
}
int stackempty()
{ if(st.sommet=-1) return 1 ;
else return 0;
}
void stackpush(char c)
{ if(st.sommet==MAX-1)
{perror("stackoverflow");
return;
}
else
{
st.sommet++;
st.vec[st.sommet]=c;

return ;}
}
char stackpop()
{char result;
if(stackempty())

{return('*');}

else
{
result=st.vec[st.sommet];
st.sommet--;
return(result);
}
}
main()
{ char o;
char c;
int correct=1;

printf("tapez votre expression:\n");
stackinit();
while((c=getchar())!='\n')
{ switch(c)
{ case '(' : stackpush(c) ; break;
case '{' : stackpush(c) ; break;
case '[' : stackpush(c) ; break;
case ')' : {o=stackpop() ; if(o!='(') correct=0;};break;
case '}' : {o=stackpop() ; if(o!='{') correct=0;};break;
case ']' : {o=stackpop() ; if(o!='[') correct=0;};break;
}
}
if((stackempty()==1) && (correct==1))
printf("\nl'expression est correcte\n");
else
printf("\nl'expression est incorrecte\n");
getch();
}
0
ydurce Messages postés 78 Date d'inscription samedi 9 octobre 2010 Statut Membre Dernière intervention 12 décembre 2010 18
8 nov. 2010 à 00:21
bonjour,

à part le if dans stackempty(), c'est tout bon.

cdlt
0