|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
NOTATION POLONAISE INFIXÉE SUFFIXÉE EN C
Information sur la source
Description
L'idée est de transformer les expressions infixée en expression suffixée puis de les evaluer.
Source
- #include<conio.h>
- #include<stdio.h>
- #include<string.h>
- #include<stdlib.h>
-
- //------------------------------------------------------------------------
-
-
- typedef struct
-
- {float tab [99]; //structure Pile
- int taille ;
- }pile;
-
- char equation[99]; //tableau Saisie
-
- int Q[99]; //tableau Intermediare
- int tailleq;
-
- int P[99]; //tableau Final
- int taillep;
-
- float valeur; //Resultat Final
- //-------------------------------------------------------------------
-
-
- void push(pile*p,float x)
- {if (p->taille <100 )
- {
- p->tab [ p->taille]=x;
- p->taille ++;
- }
- else
- printf("pile pleine");
- }
-
- float pop (pile*p)
- {
- p->taille --;
- return ( p->tab[p->taille]);
- }
-
- void init (pile*p)
- {
- p->taille=0;
- }
-
- int pile_pleine (pile*p)
- {
- if (p->taille==100)
- return 1;
- else
- return 0;
- }
-
- int pile_vide (pile*p)
- { if (p->taille == 0)
- return 1;
- else
- return 0;
- }
-
- float top (pile*p)
- {
- return p->tab[p->taille-1];
- }
-
- //-------------------------------------------------------------------
- int prio(int x)
- {
- if ((x=='*')||(x=='/'))
- return 2;
- else
- return 1;
- }
-
-
- //--------------------------------------------------------------------
- void saisi0()
- {
- int i;
- clrscr();
- textcolor(4);
- cprintf (" copyright 2004-2005 .sfar..MAMINO.corp.\n");
- cprintf ("********************************************************************************\n");
- ("********************************************************************************\n");
- }
-
-
-
-
-
- //-----------------------------------------------------------------------
-
-
-
- void saisie()
- {char *e[1];
-
-
-
- int k=0;
- int i=0;
- int A,B;
- printf("entrer votre equation :\n");
- scanf("%s",equation);
- while (i<strlen(equation))
- {
-
- if ((equation[i]!='+' )&& (equation[i]!='-' ) && (equation[i]!='*') && (equation[i]!='/' ) && (equation[i]!='(' )&& (equation[i]!=')' ) )
-
- {e[0]= equation[i] ;
- A=atoi(e);
- i++;
- while ((equation[i]!='+' )&& (equation[i]!='-' ) && (equation[i]!='*') && (equation[i]!='/' ) && (equation[i]!='(' ) && (equation[i]!=')' )&& (i<strlen(equation)) )
- { e[0]= equation[i] ;
- B=atoi(e) ;
- A=((A*10)+B);
- i++;
- }Q[k]=(A);k++;
-
-
- }
- else
- { switch(equation[i])
- {
- case 43 :Q[k]='+' ;
- break;
-
- case 45 :Q[k]='-' ;
- break;
-
- case 42 :Q[k]='*' ;
- break;
-
- case 47 :Q[k]='/' ;
- break;
-
- case 40 :Q[k]='(' ;
- break;
-
- case 41 :Q[k]=')' ;
- break;
- } i++;k++;
-
- }
-
- }tailleq=k;
-
- }
-
-
- //--------------------------------------------------------------------
-
-
-
- void infixe_suffixe()
- {
- pile stack;
- int x;
- int i=0;
- init(&stack);
- taillep=-1;
- push(&stack,'(');
- Q[tailleq]=')';
- while ((pile_vide(&stack))==0)
- {
- if ((Q[i]!='+' )&& (Q[i]!='-' ) && (Q[i]!='*') && (Q[i]!='/' ) && (Q[i]!='(' ) && (Q[i]!=')'))
- {taillep++;
- P[taillep]=Q[i]; }
- else
- if((Q[i]=='(')) push (&stack,Q[i]);
- else
- {
- if(Q[i]==')')
- {while (top(&stack)!='(')
- {x=pop(&stack);
- taillep++;
- P[taillep]=x;
- }
- pop(&stack);
- }
- else
- {if ((top(&stack)!='(')&&(top(&stack)!=')') )
- while (prio(top(&stack)) > prio(Q[i]) )
-
- { x=pop(&stack);
- taillep++;
- P[taillep]=x;
- }push (&stack,Q[i]);
- }
-
- }i++;
- }
- }
- //------------------------------------------------------------------
-
- void suffixe_evaluation ()
- {
- pile stack;
- int i;
- float A,B,C;
- //
- init(&stack);
-
- for (i=0;i<=taillep;i++)
- {
- if ((P[i]!='+') && (P[i]!='-')&&(P[i]!='*')&&(P[i]!='/'))
- {push(&stack,P[i]); }
- else
- {A=pop(&stack);
- B=pop(&stack);
-
- switch(P[i])
- {
- case '+' :C=B+A ;
- break;
-
- case '-' :C=B-A ;
- break;
-
- case '*' :C=B*A ;
- break;
-
- case '/' :C=B/A ;
- break;
- }
- push(&stack,C); }
-
- valeur=top(&stack);
- }
-
-
-
-
- }
- //--------------------------------------------------------------
- void affiche_infixe()
- {
- char e[10];
- char infixe[99];
- int i,k=0,j;
- for (i=0;i<=taillep;i++)
- { infixe[k]=' ';k++;
- if ((P[i]!='+') && (P[i]!='-')&&(P[i]!='*')&&(P[i]!='/'))
- {
-
-
- itoa(P[i],e, 10);
- for (j=0;j<strlen(e);j++)
- {
- infixe[k]=e[j];
- k++;
- }
- }
- else if
- ((P[i]=='+') || (P[i]=='-') || (P[i]=='*') || (P[i]=='/'))
-
- switch(P[i])
- {
- case '+' :infixe[k]='+'; k++;
- break;
-
- case '-' :infixe[k]='-'; k++;
- break;
-
- case '*' :infixe[k]='*'; k++;
- break;
-
- case '/' :infixe[k]='/'; k++;
- break;
-
- }
- }infixe[k]='\0';
-
- textcolor(5);
- cprintf("\n Equation infixe = %s",infixe );
-
- }
-
-
-
- //--------------------------------------------------------------
- void affiche()
- {
-
-
- clrscr();
- textcolor(4);
- printf ("UTC Email :maminomamino@hotmail.com");
- printf (" copyright 2004-2005 .sfar..MAMINO.corp.");
- printf ("********************************************************************************\n");
- cprintf("\n###########################################################");
- printf("\n");
- cprintf ("\n*********");
- textcolor(6);
- cprintf("Projet en C |Infixe-->Suffixe-->Resultat");
- textcolor(4);
- cprintf ("*********:");
- printf("\n");
- cprintf("\n###########################################################");
-
- printf("\n");
- printf("\n");
-
-
- textcolor(6);
- printf("\n");
- cprintf("\n EQUATION :%s ",equation);
- printf("\n");
- affiche_infixe() ;
- printf("\n");
- textcolor(6);
- cprintf("\n LE RESULTAT apres traitement :%f ",valeur);
-
-
-
- }
- //---------------------------------------------------------------
- void main()
- {
- saisi0();
- saisie();
- infixe_suffixe();
- suffixe_evaluation ();
- affiche();
- getch();
- }
#include<conio.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//------------------------------------------------------------------------
typedef struct
{float tab [99]; //structure Pile
int taille ;
}pile;
char equation[99]; //tableau Saisie
int Q[99]; //tableau Intermediare
int tailleq;
int P[99]; //tableau Final
int taillep;
float valeur; //Resultat Final
//-------------------------------------------------------------------
void push(pile*p,float x)
{if (p->taille <100 )
{
p->tab [ p->taille]=x;
p->taille ++;
}
else
printf("pile pleine");
}
float pop (pile*p)
{
p->taille --;
return ( p->tab[p->taille]);
}
void init (pile*p)
{
p->taille=0;
}
int pile_pleine (pile*p)
{
if (p->taille==100)
return 1;
else
return 0;
}
int pile_vide (pile*p)
{ if (p->taille == 0)
return 1;
else
return 0;
}
float top (pile*p)
{
return p->tab[p->taille-1];
}
//-------------------------------------------------------------------
int prio(int x)
{
if ((x=='*')||(x=='/'))
return 2;
else
return 1;
}
//--------------------------------------------------------------------
void saisi0()
{
int i;
clrscr();
textcolor(4);
cprintf (" copyright 2004-2005 .sfar..MAMINO.corp.\n");
cprintf ("********************************************************************************\n");
("********************************************************************************\n");
}
//-----------------------------------------------------------------------
void saisie()
{char *e[1];
int k=0;
int i=0;
int A,B;
printf("entrer votre equation :\n");
scanf("%s",equation);
while (i<strlen(equation))
{
if ((equation[i]!='+' )&& (equation[i]!='-' ) && (equation[i]!='*') && (equation[i]!='/' ) && (equation[i]!='(' )&& (equation[i]!=')' ) )
{e[0]= equation[i] ;
A=atoi(e);
i++;
while ((equation[i]!='+' )&& (equation[i]!='-' ) && (equation[i]!='*') && (equation[i]!='/' ) && (equation[i]!='(' ) && (equation[i]!=')' )&& (i<strlen(equation)) )
{ e[0]= equation[i] ;
B=atoi(e) ;
A=((A*10)+B);
i++;
}Q[k]=(A);k++;
}
else
{ switch(equation[i])
{
case 43 :Q[k]='+' ;
break;
case 45 :Q[k]='-' ;
break;
case 42 :Q[k]='*' ;
break;
case 47 :Q[k]='/' ;
break;
case 40 :Q[k]='(' ;
break;
case 41 :Q[k]=')' ;
break;
} i++;k++;
}
}tailleq=k;
}
//--------------------------------------------------------------------
void infixe_suffixe()
{
pile stack;
int x;
int i=0;
init(&stack);
taillep=-1;
push(&stack,'(');
Q[tailleq]=')';
while ((pile_vide(&stack))==0)
{
if ((Q[i]!='+' )&& (Q[i]!='-' ) && (Q[i]!='*') && (Q[i]!='/' ) && (Q[i]!='(' ) && (Q[i]!=')'))
{taillep++;
P[taillep]=Q[i]; }
else
if((Q[i]=='(')) push (&stack,Q[i]);
else
{
if(Q[i]==')')
{while (top(&stack)!='(')
{x=pop(&stack);
taillep++;
P[taillep]=x;
}
pop(&stack);
}
else
{if ((top(&stack)!='(')&&(top(&stack)!=')') )
while (prio(top(&stack)) > prio(Q[i]) )
{ x=pop(&stack);
taillep++;
P[taillep]=x;
}push (&stack,Q[i]);
}
}i++;
}
}
//------------------------------------------------------------------
void suffixe_evaluation ()
{
pile stack;
int i;
float A,B,C;
//
init(&stack);
for (i=0;i<=taillep;i++)
{
if ((P[i]!='+') && (P[i]!='-')&&(P[i]!='*')&&(P[i]!='/'))
{push(&stack,P[i]); }
else
{A=pop(&stack);
B=pop(&stack);
switch(P[i])
{
case '+' :C=B+A ;
break;
case '-' :C=B-A ;
break;
case '*' :C=B*A ;
break;
case '/' :C=B/A ;
break;
}
push(&stack,C); }
valeur=top(&stack);
}
}
//--------------------------------------------------------------
void affiche_infixe()
{
char e[10];
char infixe[99];
int i,k=0,j;
for (i=0;i<=taillep;i++)
{ infixe[k]=' ';k++;
if ((P[i]!='+') && (P[i]!='-')&&(P[i]!='*')&&(P[i]!='/'))
{
itoa(P[i],e, 10);
for (j=0;j<strlen(e);j++)
{
infixe[k]=e[j];
k++;
}
}
else if
((P[i]=='+') || (P[i]=='-') || (P[i]=='*') || (P[i]=='/'))
switch(P[i])
{
case '+' :infixe[k]='+'; k++;
break;
case '-' :infixe[k]='-'; k++;
break;
case '*' :infixe[k]='*'; k++;
break;
case '/' :infixe[k]='/'; k++;
break;
}
}infixe[k]='\0';
textcolor(5);
cprintf("\n Equation infixe = %s",infixe );
}
//--------------------------------------------------------------
void affiche()
{
clrscr();
textcolor(4);
printf ("UTC Email :maminomamino@hotmail.com");
printf (" copyright 2004-2005 .sfar..MAMINO.corp.");
printf ("********************************************************************************\n");
cprintf("\n###########################################################");
printf("\n");
cprintf ("\n*********");
textcolor(6);
cprintf("Projet en C |Infixe-->Suffixe-->Resultat");
textcolor(4);
cprintf ("*********:");
printf("\n");
cprintf("\n###########################################################");
printf("\n");
printf("\n");
textcolor(6);
printf("\n");
cprintf("\n EQUATION :%s ",equation);
printf("\n");
affiche_infixe() ;
printf("\n");
textcolor(6);
cprintf("\n LE RESULTAT apres traitement :%f ",valeur);
}
//---------------------------------------------------------------
void main()
{
saisi0();
saisie();
infixe_suffixe();
suffixe_evaluation ();
affiche();
getch();
}
Conclusion
pour me contacter : maminomamino@hotmail.com
Fichier Zip
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
Télécharger le zip
Historique
- 10 décembre 2004 21:51:11 :
- ....
- 24 octobre 2006 20:12:36 :
- rajout des mot clé !!
- 11 avril 2007 18:55:17 :
- modification mot clés
Sources de la même categorie
Sources en rapport avec celle ci
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Calcul Mathematique [ par WaFFel ]
je voudrais savoir comment on fait un extraction de racine avec c++ ??? merci
matrice calcul [ par altay ]
L'analyste programmeur a 3 dimensionmercredi je passe un oral de math pendant lequel je doit presenter un programme de calcul matriciel et je n'ai eu
Calcul Date a partir d'un nombre de jours [ par Trinita16 ]
Je cherche si il existe une fonction simple pour convertir un nombre de jour en une date. Sachant que la date départ peut varier....Merci d'avance....
Calcul date à partir d'un nombre de jours [ par Trinita16 ]
Bonjour,1. Une date fixe de debut de comptage de jours2. Un nombre de jours depuis la date en 13. Je veux le nombre de jour en une date.Voila mon prob
verif CRC16 [ par sena ]
Bonjour,voila j'ai un pti prog pour calculer le CRC16.Je voudrai savoir si kelkun pouvait me dire si ce code fonctionne merci. Car je n'ai qu'un seul
getch [ par portoroz ]
g poser un message je n'arrive pas a le rretrouver.je suis sous environnement dos, avec DEV C++ telecharger sur internet en version us.comprend pas po
Calculatrice Inverse Polonaise [ par vpieplu ]
J'ai un probleme. Je n'arrive pas a coder la calculatrice ... Je ne sais qu'elle commande mettre dans les fonctions + - * / Sin Inv Cos C'est super UR
Problème avec la barre de progres [ par Kinkajou ]
Bonjour,Voila j'ai crée une petite application qui lance un boîte de dialogue puis effectue un gros calcul en affichant la progression dans une barre
Calcul simple sous eMbedded Visual C++ pour PocketPC [ par gaude ]
Bonjour à vous tous !Je débute sous Visual C++. Je souhaite faire des calculs très simples (multiplication, additin, ...) pour mon PocketPC et je dois
calcul trigo sur float [ par djl ]
j'utilise visual c++ 6.0 et je voudrais savoir si cosf est plus rapide que cos sur un float
|
Téléchargements
Logiciels à télécharger sur le même thème :
Comparez les prix Nouvelle version
|