الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تحويل Infix

بدأه ضحى حسان في 15 نوفمبر 2008 · 2 رد · 520 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

انا استخدمت برنامج للتحويل الى infix بس ما يقبل يعمل تنفيذ

  1.  
  2. include<iostream>
  3. #include<string>
  4. using namespace std
  5.  
  6.  
  7. const char max=30
  8. class polish
  9. {
  10. private:
  11. int topstack
  12. char entry[max]
  13. public:
  14. polish()
  15. {
  16. topstack=-1
  17. }
  18. int Topstack()
  19. {return topstack}
  20.  
  21.  
  22.  
  23. bool full()
  24. {
  25. return(topstack==max-1)
  26. }
  27.  
  28.  
  29. bool empty()
  30. {
  31. return(topstack==-1)
  32. }
  33.  
  34.  
  35.  
  36.  
  37. char push(char value)
  38. {
  39. if (!full())
  40. {
  41. topstack++
  42. int x= entry[topstack]=value
  43. return x
  44. }
  45. else
  46. cout<<"stack is full n"
  47. return-99
  48. }
  49.  
  50.  
  51.  
  52.  
  53. char pop()
  54. {
  55. if(!empty())
  56. {
  57. char x=entry[topstack]
  58. topstack--
  59. return x
  60. }
  61. else
  62. {
  63. cout<<"stack is empty n"
  64. return 'z'
  65. }
  66. }
  67.  
  68. bool operand(char x)
  69. {
  70. switch(x)
  71. {
  72. case 0:'0'
  73. case 1:'1'
  74. case 2:'2'
  75. case 3:'3'
  76. case 4:'4'
  77. case 5:'5'
  78. case 6:'6'
  79. case 7:'7'
  80. case 8:'8'
  81. case 9:'9'
  82. return true
  83. break
  84. default:
  85. return false
  86. }
  87. } /*** isoperand ***/
  88.  
  89. bool isoperator(char y)
  90. {
  91. switch(y)
  92. {
  93. case 0:
  94. case 1:
  95. case 2:
  96. case 3:
  97. return true
  98. break
  99. default:
  100. return false
  101. }
  102. }
  103. bool leftbracket(char a)
  104. {
  105. return (a=='(')
  106. }
  107.  
  108. bool rightbracket(char B)
  109. {
  110. return (b==')')
  111. }
  112.  
  113. bool priorty(char inf, char top)
  114. {
  115. int x,y
  116. switch(inf)
  117. {
  118. case '+':
  119. case '-':
  120. x=1
  121. break
  122. case '*':
  123. case '/':
  124. x=2
  125. break
  126. }
  127.  
  128.  
  129. switch(top)
  130. {
  131. case '+':
  132. case '-':
  133. y=1
  134. break
  135. case '*':
  136. case '/':
  137. y=2
  138. break
  139. }
  140.  
  141. if(x>y)
  142. return true
  143. else
  144. return false
  145. }
  146.  
  147.  
  148. }//end class
  149.  
  150. int main()
  151. {
  152. polish st
  153.  
  154.  
  155. char postfix[50]
  156. char infix[50]
  157.  
  158. cout<<"enter the infix"
  159.  
  160. cin>>infix
  161.  
  162. int counter=0
  163.  
  164. int j=0
  165.  
  166. //if infix is operand, save it on postfix
  167. for(int i=0 i!='\0' i++)
  168.  
  169. { //for
  170. if(st.operand(infix))
  171. {
  172. postfix[counter]=infix
  173. j++
  174.  
  175. counter++
  176.  
  177.  
  178.  
  179. } //if
  180. }
  181. //if infix oprator
  182. if(st.isoperator(infix))
  183. if(st.empty())
  184. st.push(infix)
  185.  
  186. else{
  187. if(st.leftbracket(st.Topstack()))
  188. st.push(infix)
  189. }
  190. else
  191.  
  192. {
  193. if(st.isoperator(st.Topstack())&& st.priorty(infix,st.Topstack()))
  194. st.push(infix)
  195.  
  196.  
  197. else
  198. if(st.isoperator(st.Topstack()))
  199. {
  200. postfix[counter]= (st.pop())
  201.  
  202. st.push(infix)
  203. j++
  204. }
  205. counter++
  206. j++
  207.  
  208.  
  209. } /*** end else ***/
  210.  
  211.  
  212. //if infix left bracket
  213. if(st.leftbracket(infix))
  214. st.push(infix)
  215.  
  216. else
  217. {
  218. if(st.rightbracket(infix))
  219. for(int j=st.Topstack() j>=0 j--)
  220. {
  221. if(st.Topstack()=='(')
  222. {
  223. st.pop()
  224. break
  225. }
  226. else
  227. postfix[counter]=st.pop()
  228.  
  229. }
  230. j++
  231. counter++
  232. }
  233.  
  234.  
  235. //if infix string is terminated
  236. if(infix=='\0')
  237. for(int j=max-1 j!=-1j--)
  238. st.pop()
  239. for(int g=0g!='\0'i++)
  240.  
  241. j++
  242. counter++
  243. for(char k=0k='\0'k++)
  244. cout<<postfix[k]
  245.  
  246.  
  247.  
  248.  
  249.  
  250.  
  251. return 0
  252. }
  253.  

تم تعديل هذه المشاركة بواسطة djug في 16 نوفمبر 2008 في 10:47 — السبب: وضع الكود داخل وسم gcode

سيصبح كل شئ على ما يرام ذات يوم ....هذا هو املنا

اما ان نقول كل شئ على ما يرام اليوم....فهذا هو الوهم

#2

رجاء اريد احد يساعدني

سيصبح كل شئ على ما يرام ذات يوم ....هذا هو املنا

اما ان نقول كل شئ على ما يرام اليوم....فهذا هو الوهم

#3

هناك اخطاء وجدتها بسرعه لكن البرنامج يحتاج قراءه اكثر.

const char max=30;

المفروض int

max

موجود ومعرف داخل الهدات في السي لذلك يعترض عليه الكمبايلر

غير الي اسم اخر مناسب

هناك مشكله بالنسبه لقوس for i

tvquran_6.gif

مواضيع مشابهة