Validité d'une expression mathématique

aki -  
ydurce Messages postés 81 Statut Membre -
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

  1. aki
     
    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
  2. ydurce Messages postés 81 Statut Membre 18
     
    bonjour,

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

    cdlt
    0