Akıncı
30/01/2007, 19:26
soru:Verilen 'operatörler arada' ifadesini ' operatörler sonda ' ifadeye ceviren C kodunu yazınız.
Bütün günümü bu soruyla geçirdim fakat bir türlü hatam nedir bulamadım.Böylede olunca sinirlenmemek elde degil.
Operatorler Arada ifadesi = A*B+D/E**K
Operatoler sonda ifadesinin yani sonucun AB*DEK**/+ olmasi lazim, ben ise asagidaki kodla ABDEK**/+* ifadesini else ediyorum.
hatam nerdedir koda bir bakarmisiniz
#include <stdio.h>
#include <stdlib.h>
char OpArdYaz(int s);
int YON(int Mik,int Yon);
int GON(int Gon, char x);
main()
{
/* Operatorler sonda ifadeye donusturulecek olan, operatorler arada ifadesi (OpArd [10]) */
char OpArd[10]={'A','*','B','+','D','/','E','^','K','a'};
int Mik=0,Yon,Gon,s;
char Yigin[0],x;
Yigin[0]='e'; /* buradaki 'e' karakteri eksi sonsuz karakteridir ve Yiginin ilk elemanidir */
OpArdYaz(s);
printf("\n");
for(s=0;s<=9;s++) /*OpArd[10] ifadesi bitene kadar dongu islenir*/
{
x = OpArd[s]; /*sirasiyla OpArd[10] ifadesinden bir eleman alir */
if(x == 'a') /* 'a' karakteri arti sonsuz karakteridir ve Yiginin bittigini belirtir
ve o zaman yigindaki tum elemanlari ekrana basar */
{
while(Mik>=0)
{
printf("%c",Yigin[Mik]); /*yigindan eleman cikartir*/
Mik=Mik-1;
}
printf("%c",x);
printf("\n");
printf("\n");
}
else if(x=='A' || x=='B'|| x=='D' || x=='E' || x=='K')
{
printf("%c",x); /*x bir degisken ise dogrudan ekrana yazdirilir*/
}
else /* sonraki eleman bir operatordur.*/
{
while(YON(Mik,Yon) >= GON(Gon,x))
{
printf("%c",Yigin[Mik]); /*yigindan eleman cikar*/
Mik=Mik-1;
}
Mik=Mik+1;
Yigin[Mik]=x; /*yigina eleman ekle*/
}
}
system("pause");
}
/* Bu fonksiyon, operatorler arada ifadesinin(OpArd[10]) degerlerinin sirasiyla ekrana basar .*/
char OpArdYaz(int s)
{
char OpArd[10]={'A','*','B','+','D','/','E','^','K','a'};
for(s=0;s<=9;s++)
{
printf("OpArd[%d] = %c\n",s,OpArd[s]);
}
}
/*Bu fonksiyon Yigin icindeki operatorlerin oncelik degerlerini 'Yon' degiskenine atar */
int YON(int Mik, int Yon)
{
char Op[6]={'^','*','/','+','-'};
char Yigin[Mik];
Yigin[0]='e';
if(Yigin[Mik]==Op[0]) /* '^' karakteri üs anlamına gelir */
{
Yon=3;
}
else if(Yigin[Mik]==Op[1] || Yigin[Mik]==Op[2])
{
Yon=2;
}
else if(Yigin[Mik]==Op[3] || Yigin[Mik]==Op[4])
{
Yon=1;
}
else
{
Yon=0;
}
return Yon;
}
/*Bu fonksiyon, operatorlerin, yigina gelirken sahip olduklari oncelik
degerlerini 'Gon' degiskenine atar */
int GON(int Gon, char x)
{
char Op[6]={'^','*','/','+','-'};
if(x == Op[0])
{
Gon=4;
}
else if(x == Op[1] || x==Op[2])
{
Gon=2;
}
else if(x == Op[3] || x==Op[4])
{
Gon=1;
}
else
{
Gon=0;
}
return Gon;
}
Bütün günümü bu soruyla geçirdim fakat bir türlü hatam nedir bulamadım.Böylede olunca sinirlenmemek elde degil.
Operatorler Arada ifadesi = A*B+D/E**K
Operatoler sonda ifadesinin yani sonucun AB*DEK**/+ olmasi lazim, ben ise asagidaki kodla ABDEK**/+* ifadesini else ediyorum.
hatam nerdedir koda bir bakarmisiniz
#include <stdio.h>
#include <stdlib.h>
char OpArdYaz(int s);
int YON(int Mik,int Yon);
int GON(int Gon, char x);
main()
{
/* Operatorler sonda ifadeye donusturulecek olan, operatorler arada ifadesi (OpArd [10]) */
char OpArd[10]={'A','*','B','+','D','/','E','^','K','a'};
int Mik=0,Yon,Gon,s;
char Yigin[0],x;
Yigin[0]='e'; /* buradaki 'e' karakteri eksi sonsuz karakteridir ve Yiginin ilk elemanidir */
OpArdYaz(s);
printf("\n");
for(s=0;s<=9;s++) /*OpArd[10] ifadesi bitene kadar dongu islenir*/
{
x = OpArd[s]; /*sirasiyla OpArd[10] ifadesinden bir eleman alir */
if(x == 'a') /* 'a' karakteri arti sonsuz karakteridir ve Yiginin bittigini belirtir
ve o zaman yigindaki tum elemanlari ekrana basar */
{
while(Mik>=0)
{
printf("%c",Yigin[Mik]); /*yigindan eleman cikartir*/
Mik=Mik-1;
}
printf("%c",x);
printf("\n");
printf("\n");
}
else if(x=='A' || x=='B'|| x=='D' || x=='E' || x=='K')
{
printf("%c",x); /*x bir degisken ise dogrudan ekrana yazdirilir*/
}
else /* sonraki eleman bir operatordur.*/
{
while(YON(Mik,Yon) >= GON(Gon,x))
{
printf("%c",Yigin[Mik]); /*yigindan eleman cikar*/
Mik=Mik-1;
}
Mik=Mik+1;
Yigin[Mik]=x; /*yigina eleman ekle*/
}
}
system("pause");
}
/* Bu fonksiyon, operatorler arada ifadesinin(OpArd[10]) degerlerinin sirasiyla ekrana basar .*/
char OpArdYaz(int s)
{
char OpArd[10]={'A','*','B','+','D','/','E','^','K','a'};
for(s=0;s<=9;s++)
{
printf("OpArd[%d] = %c\n",s,OpArd[s]);
}
}
/*Bu fonksiyon Yigin icindeki operatorlerin oncelik degerlerini 'Yon' degiskenine atar */
int YON(int Mik, int Yon)
{
char Op[6]={'^','*','/','+','-'};
char Yigin[Mik];
Yigin[0]='e';
if(Yigin[Mik]==Op[0]) /* '^' karakteri üs anlamına gelir */
{
Yon=3;
}
else if(Yigin[Mik]==Op[1] || Yigin[Mik]==Op[2])
{
Yon=2;
}
else if(Yigin[Mik]==Op[3] || Yigin[Mik]==Op[4])
{
Yon=1;
}
else
{
Yon=0;
}
return Yon;
}
/*Bu fonksiyon, operatorlerin, yigina gelirken sahip olduklari oncelik
degerlerini 'Gon' degiskenine atar */
int GON(int Gon, char x)
{
char Op[6]={'^','*','/','+','-'};
if(x == Op[0])
{
Gon=4;
}
else if(x == Op[1] || x==Op[2])
{
Gon=2;
}
else if(x == Op[3] || x==Op[4])
{
Gon=1;
}
else
{
Gon=0;
}
return Gon;
}