# Native Code > برنامه نویسی با C > برنامه نویسی با زبان C و ++C >  خواهش می کنم... کدی ساده برای تبدیلاتinfix postfix prefix

## amator

باز هم سلام
من فرصت کمی دارم.
لطفا کمک کنید

برنامه  پیمایشی تبدیل عبارات infix postfix prefix به یکدیگر به صورت بازگشتی و غیر بازگشتی به ساده ترین شکل و روش

Very Very Tanx

----------


## navid_R

به بین این به دردت می خوره


/*    

       Prog.  &#58;  Prog. to convert Infix To Postfix


*/

#include&lt;iostream.h>
#include&lt;conio.h>
#include&lt;stdio.h>
#include&lt;string.h>

struct node
&#123;
    char value;
    float res;
    node *left, *right;
&#125;;

int isVariable&#40;char&#41;;
void inorder&#40;node *&#41;;
void preorder&#40;node *&#41;;
void postorder&#40;node *&#41;;
float eveluate&#40;node *&#41;;
void listexpr&#40;node *&#41;;

main&#40;&#41;
&#123;
    node *temp;
    node *stack &#91;20&#93;;
    char postfix&#91;20&#93;;
    int top = -1, i = 0;
    float result = 0;
    clrscr&#40;&#41;;

    cout &lt;&lt; "\n Enter the Postfix notation &#58;- ";
    cin  >> postfix;

    while&#40;postfix&#91;i&#93; != '\0'&#41;
      &#123;
	  temp = new node;
	  temp->left = NULL;
	  temp->right = NULL;
	  temp->value = postfix&#91;i&#93;;

	  if&#40;!isVariable&#40;postfix&#91;i&#93;&#41;&#41  ;
	    &#123;
	       temp->right  = stack&#91;top--&#93;;
	       temp->left   = stack&#91;top--&#93;;
	    &#125;
	  stack&#91;++top&#93; = temp;
	  i++;
      &#125;
    node *root;
    root = stack&#91;top--&#93;;

    cout &lt;&lt; "\n In Order   &#58; ";
    inorder&#40;root&#41;;
    cout &lt;&lt; "\n Pre Order  &#58; ";
    preorder&#40;root&#41;;
    cout &lt;&lt; "\n Post Order &#58; ";
    postorder&#40;root&#41;;

    cout &lt;&lt; "\n\n";
    result = eveluate&#40;root&#41;;
    listexpr&#40;root&#41;;
    cout &lt;&lt; "\n\n The Result of the Expression is &#58;- " &lt;&lt; result;

    getch&#40;&#41;;
    return 0;

&#125;

//    Function to eveluate the expression and find its result.
float eveluate&#40;node * list&#41;
&#123;
   float res = 0;

   switch&#40;list->value&#41;
     &#123;
	case '+' &#58;  res  = eveluate&#40;list->left&#41;;
		    res += eveluate&#40;list->right&#41;;
		    break;

	case '-' &#58;  res  = eveluate&#40;list->left&#41;;
		    res -= eveluate&#40;list->right&#41;;
		    break;

	case '*' &#58;  res  = eveluate&#40;list->left&#41;;
		    res *= eveluate&#40;list->right&#41;;
		    break;

	case '/' &#58;  res  = eveluate&#40;list->left&#41;;
		    res /= eveluate&#40;list->right&#41;;
		    break;

	default  &#58;  cout &lt;&lt; " Enter the value for " &lt;&lt; list->value &lt;&lt; " &#58;- ";
		    cin  >> res;
		    list->res = res;
     &#125;

   return res;
&#125;

//    Function to check whether its variable or operator.
int isVariable&#40;char ch&#41;
&#123;
  if &#40;
       ch != '+' &amp;&amp;
       ch != '-' &amp;&amp;
       ch != '*' &amp;&amp;
       ch != '/' &amp;&amp;
       ch != '&#40;' &amp;&amp;
       ch != '&#41;'
     &#41;
       return 1;
  else
       return 0;
&#125;


//    Function to travel In-Orderly &#40;Recursive&#41;.
void inorder&#40;node *list&#41;
&#123;
    if&#40;list == NULL&#41;
       return;

    inorder&#40;list->left&#41;;

    cout &lt;&lt; "  " &lt;&lt; list->value;

    inorder&#40;list->right&#41;;
&#125;

//    Function to travel Post-Orderly &#40;Recursive&#41;.
void postorder&#40;node *list&#41;
&#123;
    if&#40;list == NULL&#41;
       return;

    postorder&#40;list->left&#41;;

    postorder&#40;list->right&#41;;

    cout &lt;&lt; "  " &lt;&lt; list->value;
&#125;

//    Function to travel Pre-Orderly &#40;Recursive&#41;.
void preorder&#40;node *list&#41;
&#123;
    if&#40;list == NULL&#41;
       return;

    cout &lt;&lt; "  " &lt;&lt; list->value;

    preorder&#40;list->left&#41;;

    preorder&#40;list->right&#41;;
&#125;


//    Function to display the values in the expression.
void listexpr&#40;node *list&#41;
&#123;
    if&#40;list == NULL&#41;
       return;

    listexpr&#40;list->left&#41;;

    if&#40;isVariable&#40;list->value&#41;&#41;
       cout &lt;&lt; "  " &lt;&lt; list->res;
    else
       cout &lt;&lt; "  " &lt;&lt; list->value;

    listexpr&#40;list->right&#41;;
&#125;

/*    OUTPUT

 Enter the Postfix notation &#58;- ab*cd/+e-

 In Order   &#58;   a  *  b  +  c  /  d  -  e
 Pre Order  &#58;   -  +  *  a  b  /  c  d  e
 Post Order &#58;   a  b  *  c  d  /  +  e  -

 Enter the value for a &#58;- 2
 Enter the value for b &#58;- 3
 Enter the value for c &#58;- 6
 Enter the value for d &#58;- 2
 Enter the value for e &#58;- 4
  2  *  3  +  6  /  2  -  4

 The Result of the Expression is &#58;- 5

*/

----------


## H_Ghaffarian

سلام
شما اگه یکمی خودتون وقت می گذاشتید و کتابها ساختمان داده رو مطالعه می کردید نیازمند  طرح این سئوال نبودید. به هرحال شما دانشجوی کامپیوتر هستید. مگه نه ::نوشتن::

----------


## amator

نوید جان بابت کمک شما بسیار بسیار تشکر :flower:  :reading:  :موفق: 
خدا خیرت بدهد.


اما H_Ghaffarian عزیز ، بنده زیاد مقصر نیستم، چون اولا یک روز تا دو روز اون هم بین امتحانات وقت دارم برای پروژه تازه تعریف شده.
دوما دانشگاه ما تازه تاسیس و متاسفانه اساتید هم بی تجربهو تازه وارد تر از ما، استاد  از جزوه ای به ما تدریس نمود که مواردی چون مرتب سازی و ماتریسها و ... آن تا جلسه آخر طول کشید و موارد مهمی مثل لیست پیوندی و همین infix و... را در جلسه فوق العاده تدریس کرد و جالب آن که از مبحث های ماتریس و مرتب سازی سوالی در امتحان نداده و می گوید آنها جزو سیلابس ها نیستند.
حالا خودت ببین ...
به هر حال از توجه شما هم ممنون.

----------


## navid_R

خواهش می کنم!

----------

