(โจทย์ project ของผม)
Write a program using C# convert a infix expression
to a postfix expression using stack data structure
ผมต้องเขียนโปรแกรม C# ทำการแปลงค่า infix เป็น postfix ซึ่งต้องมีเครื่องหมาย + -*/ ^ ) ( ใช่มั้ยครับ
แล้วก็มาติดตรงที่ เครื่องหมายยกกำลัง ^ กับ เครื่องหมาย ( ) วงเล็บ ที่ทำไม่ได้
โปรแกรมผมก็เลยแปลงค่าได้แค่รูปแบบนี้ Infix : A+B*C/D-E
Postfix : ABC*D/+E-
ถ้าโปรแกรมรันผ่าน จะแปลงค่า Infix : (A+B^C)*D+E^5
เป็น Postfix : A B C ^ + D * E 5 ^ + ได้แบบนี้
ตัวอย่างเว็บ Coverter Infix to postfix ที่ถูกต้องนะครับ :
http://scanftree.com/Data_Structure/prefix-postfix-infix-online-converter
ใครมีความสามารถในการเขียนโปรแกรมเก่งๆ ช่วยผมด้วยนะครับ ปล. code ที่ผมทำไว้ได้ถึงแค่ + - * /
_______________________________________________________________________________
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Project_Infix_to_Postfix
{
class Program
{
static bool convert(ref string infix, out string postfix)
{
int prio = 0;
postfix = "";
Stack<Char> s1 = new Stack<char> ();
for (int i = 0; i < infix.Length; i++)
{
char ch = infix
;
if (ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch == '(' || ch == ')' || ch == '^')
{
if (s1.Count <= 0)
s1.Push(ch);
else
{
if (s1.Peek() == '*' || s1.Peek() == '/')
prio = 1;
else
prio = 0;
if (prio == 1)
{
if (ch == '+' || ch == '-')
{
postfix += s1.Pop();
i--;
}
else
{
postfix += s1.Pop();
i--;
}
}
else
{
if (ch == '+' || ch == '-')
{
postfix += s1.Pop();
s1.Push(ch);
}
else
s1.Push(ch);
}
}
}
else
{
postfix += ch;
}
}
int len = s1.Count;
for (int j = 0; j < len; j++)
postfix += s1.Pop();
return true;
}
static void Main(string[] args)
{
string infix = "";
string postfix = "";
Console.WriteLine("\n\t\t PROGRAM TO CONVERT INFIX TO POSTFIX.");
Console.WriteLine("_______________________________________________________________________________");
System.Console.Write("\n Enter Expression In Infix Form : ");
infix = Console.ReadLine();
convert(ref infix, out postfix);
System.Console.WriteLine("\n The Expression in Postfix Form Is : " + postfix);
Console.ReadLine();
}
}
}
ใครเขียน Program C# เก่ง ๆ ช่วยผมหน่อยครับ
Write a program using C# convert a infix expression
to a postfix expression using stack data structure
ผมต้องเขียนโปรแกรม C# ทำการแปลงค่า infix เป็น postfix ซึ่งต้องมีเครื่องหมาย + -*/ ^ ) ( ใช่มั้ยครับ
แล้วก็มาติดตรงที่ เครื่องหมายยกกำลัง ^ กับ เครื่องหมาย ( ) วงเล็บ ที่ทำไม่ได้
โปรแกรมผมก็เลยแปลงค่าได้แค่รูปแบบนี้ Infix : A+B*C/D-E
Postfix : ABC*D/+E-
ถ้าโปรแกรมรันผ่าน จะแปลงค่า Infix : (A+B^C)*D+E^5
เป็น Postfix : A B C ^ + D * E 5 ^ + ได้แบบนี้
ตัวอย่างเว็บ Coverter Infix to postfix ที่ถูกต้องนะครับ : http://scanftree.com/Data_Structure/prefix-postfix-infix-online-converter
ใครมีความสามารถในการเขียนโปรแกรมเก่งๆ ช่วยผมด้วยนะครับ ปล. code ที่ผมทำไว้ได้ถึงแค่ + - * /
_______________________________________________________________________________
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Project_Infix_to_Postfix
{
class Program
{
static bool convert(ref string infix, out string postfix)
{
int prio = 0;
postfix = "";
Stack<Char> s1 = new Stack<char> ();
for (int i = 0; i < infix.Length; i++)
{
char ch = infix;
if (ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch == '(' || ch == ')' || ch == '^')
{
if (s1.Count <= 0)
s1.Push(ch);
else
{
if (s1.Peek() == '*' || s1.Peek() == '/')
prio = 1;
else
prio = 0;
if (prio == 1)
{
if (ch == '+' || ch == '-')
{
postfix += s1.Pop();
i--;
}
else
{
postfix += s1.Pop();
i--;
}
}
else
{
if (ch == '+' || ch == '-')
{
postfix += s1.Pop();
s1.Push(ch);
}
else
s1.Push(ch);
}
}
}
else
{
postfix += ch;
}
}
int len = s1.Count;
for (int j = 0; j < len; j++)
postfix += s1.Pop();
return true;
}
static void Main(string[] args)
{
string infix = "";
string postfix = "";
Console.WriteLine("\n\t\t PROGRAM TO CONVERT INFIX TO POSTFIX.");
Console.WriteLine("_______________________________________________________________________________");
System.Console.Write("\n Enter Expression In Infix Form : ");
infix = Console.ReadLine();
convert(ref infix, out postfix);
System.Console.WriteLine("\n The Expression in Postfix Form Is : " + postfix);
Console.ReadLine();
}
}
}