PDA

View Full Version : حرفه ای: تبدیل یک تابع از نوع رشته ای به ریاضی



wolome
سه شنبه 20 مهر 1389, 22:48 عصر
کسی میدونه که چطوری میشه یک تابع از نوع رشته ای رو به ریاضی تبدیل کرد مثلا 2x+4 را در یک textbox وارد کنی و بعد خود برنامه مقدار x رو درون یک textbox دیگه بگیره و y رو محاسبه کنه.

group45
چهارشنبه 21 مهر 1389, 00:50 صبح
سلام
دوست عزیز مثل اینکه شما از prefix,postfix,infix جیزی نمیدونید.بهتون توصیه میکنم اول این مفاهیم رو متوجه بشید بعد.........

ASKaffash
چهارشنبه 21 مهر 1389, 09:03 صبح
سلام
این سورس را ببین :
http://www.barnamenevis.org/forum/showthread.php?t=163394

wolome
چهارشنبه 21 مهر 1389, 14:35 عصر
یه روش به غیر از استفاده ازپشته بگید


و الا این رو نوشتم



using System;

using System.Collections;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;



namespace postcalc

{

public partial class Form1 : Form
{

Stack stack = new Stack();

Stack revstack = new Stack();

string lastnum;

char[] ramy;

bool empty = true;





public Form1()
{

InitializeComponent();

}



private void Form1_Load(object sender, EventArgs e)
{



}



private void button1_Click(object sender, EventArgs e)
{

ramy = textBox1.Text.ToCharArray();



foreach (char c in ramy)
{

if (char.IsDigit(c))

lastnum = lastnum + c.ToString();

else
{

stack.Push(lastnum);



if (empty == true)
{

revstack.Push(c);

empty = false;

}

else
{

switch (c)
{

case '+':

while (revstack.Peek().ToString() == "*" || revstack.Peek().ToString() == "/" ||

revstack.Peek().ToString() == "+" || revstack.Peek().ToString() == "-")

stack.Push(revstack.Pop());



revstack.Push(c);

break;

case '-':

while (revstack.Peek().ToString() == "*" || revstack.Peek().ToString() == "/" ||

revstack.Peek().ToString() == "+" || revstack.Peek().ToString() == "-")

stack.Push(revstack.Pop());



revstack.Push(c);

break;

case '*':

while (revstack.Peek().ToString() == "*" || revstack.Peek().ToString() == "/")

stack.Push(revstack.Pop());



revstack.Push(c);

break;

case '/':

while (revstack.Peek().ToString() == "*" || revstack.Peek().ToString() == "/")

stack.Push(revstack.Pop());



revstack.Push(c);

break;

}

}

}



}

stack.Push(lastnum);



while (revstack.Peek().ToString() == "+" ||

revstack.Peek().ToString() == "-" ||

revstack.Peek().ToString() == "*" ||

revstack.Peek().ToString() == "/")

stack.Push(revstack.Pop());



while (stack.Peek().ToString() != "")

revstack.Push(stack.Pop());



while (revstack.Peek().ToString() != "")

textBox2.Text = textBox2.Text + revstack.Pop().ToString();

}
}







}