نمایش نتایج 1 تا 3 از 3

نام تاپیک: تبدیل Postfix به Infix

  1. #1

    تبدیل Postfix به Infix

    سلام
    تبدیل عبارت PostFix به Infix
    این تبدیل توسط یک پشته باید انجام بشه. به این صورت که با پردازش عبارت postfix از چپ به راست و با کمک پشته میتونیم به نتیجه برسیم. اگر سر پشته operand (مقدار) بود از رشته میخوانیم و در پشته قرار میدیم تا به یک operator (علامت) برسیم که در این صورت اون علامت رو روی دو operand سر پشته اعمال کرده (دو operand از سر پشته حذف میشن) و نتیجه رو به عنوان یک operand داخل پشته میزاریم. زمانی که به انتهای رشته رسیدیم و پشته دارای یک عنصر بود عبارت infix همان عنصر درون پشته است. اگر در طول پردازش عبارت به جایی برسیم که رشته را کامل پردازش کردیم ولی بیش از دو عنصر در پشته بود عبارت اولیه اعتبار نداره و postfix نیست.
    مثال: میخواهیم عبارت
     ABC-D*+

    رو به infix تبدیل کنیم.
    1- خوب از سر رشته میخونیم و در پشته میزاریم تا به یک علامت برسیم. A,B,C میرن داخل پشته:

    پشته
    C
    B
    A

    2- منها (-) یک عملگر هست پس دوتا عنصر از پشته میخونیم و عملگر رو روی اونها اعمال کرده نتیجه در پشته قرار میگره

    پشته
    B-C
    A

    3- D میره تو پشته

    پشته
    D
    B-C
    A

    4- به عملگر ضرب (*) میرسیم دو عنصر سر پشته رو میخونیم و ضرب رو روشون اعمال میکنیم و نتیج رو داخل پشته میزاریم

    پشته
    (B-C)*D
    A

    5- عملگر جمع رو روی دو عنصر سر پشته اعمال کرده نتیجه داخل پشته:

    پشته
    A+(B-C)*D

    6- به انتهای عبارت رسیدیم و فقط یک عنصر در پشته هست پس عبارت اولیه postfix است و عنصر درون پشته معادل Infix آن.




    این هم کدهای برنامه:

            Stack<string> stk = new Stack<string>();
    bool flag;

    private void button1_Click(object sender, EventArgs e)
    {
    stk.Clear();
    flag = true;
    string s = textBox1.Text.Trim();
    textBox2.Clear();

    if (s != string.Empty)
    {
    for (int i = 0; i < s.Length; i++)
    {
    p(s[i]);
    if (flag == false)
    break;
    }

    if (stk.Count != 1)
    flag = false;


    if (flag == true)
    {
    textBox2.BackColor = Color.GreenYellow;
    textBox2.ForeColor = Color.Black;
    textBox2.Text = stk.Pop();
    }
    else
    {
    textBox2.BackColor = Color.Yellow;
    textBox2.ForeColor = Color.Red;
    textBox2.Text = "The input is not Postfix";
    }
    }
    else
    {
    textBox2.BackColor = Color.Yellow;
    textBox2.ForeColor = Color.Red;
    textBox2.Text = "Please Input The Postfix";
    }
    }

    private void p(char ch)
    {
    if (ch == '+' || ch == '-' || ch == '*' || ch == '/')
    {
    if (stk.Count >= 2)
    {
    string t2 = stk.Pop();
    string t1 = stk.Pop();
    stk.Push("(" + t1 + ch + t2 + ")");
    }
    else if (stk.Count < 2)
    {
    flag = false;
    return;
    }
    }
    else
    {
    stk.Push(Convert.ToString(ch));
    }
    }
    آخرین ویرایش به وسیله Mahmoud.Afrad : شنبه 13 شهریور 1395 در 14:14 عصر

  2. #2

    نقل قول: تبدیل Postfix به Infix

    man ino tu C++‎ zadam eror dad????????

  3. #3

    نقل قول: تبدیل Postfix به Infix

    حالا اگه بخوایم مقدار کل عبارت رو نمایش بده چی؟
    آخرین ویرایش به وسیله daniyaltjm : شنبه 13 شهریور 1395 در 17:43 عصر

تاپیک های مشابه

  1. سورس تبدیل عبارت postfix به infix
    نوشته شده توسط ali.eskandari در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 5
    آخرین پست: سه شنبه 14 دی 1389, 16:40 عصر
  2. تبدیل postfix به infix
    نوشته شده توسط parva-88 در بخش C#‎‎
    پاسخ: 1
    آخرین پست: پنج شنبه 02 دی 1389, 18:00 عصر
  3. سوال: تبديل عبارت prefix و postfix به infix
    نوشته شده توسط kamran_14 در بخش الگوریتم، کامپایلر، هوش مصنوعی و ساختمان داده ها
    پاسخ: 2
    آخرین پست: یک شنبه 22 فروردین 1389, 17:52 عصر
  4. برنامه تبديل postfix به infix و بلعكس
    نوشته شده توسط mahshid888 در بخش C#‎‎
    پاسخ: 3
    آخرین پست: یک شنبه 12 خرداد 1387, 12:29 عصر
  5. تبدیل infix به postfix توسط پاسکال
    نوشته شده توسط Nabi در بخش برنامه نویسی در Delphi
    پاسخ: 4
    آخرین پست: پنج شنبه 08 دی 1384, 12:55 عصر

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •