Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace ConsoleApplication54
- {
- class Program
- {
- static string ToPr(string s)
- {
- char temp = '';
- var rez = new StringBuilder();//строка вывода
- var stack = new Stack<string>();
- var i = 0;
- var priority = new Dictionary<char, int>();
- priority.Add('(', 0);
- priority.Add(')', 1);
- priority.Add('+', 2);
- priority.Add('-', 2);
- priority.Add('*', 3);
- priority.Add('/', 3);
- priority.Add('^', 4);
- for (;i<s.Length;i++)
- {
- if (s[i] == '(')
- {
- stack.Push("(");
- }
- else
- if (s[i] == ')')
- {
- while (stack.Peek() != "(")
- {
- rez.Append(stack.Pop());
- }
- stack.Pop();
- }
- else
- if (priority.ContainsKey(s[i]))
- {
- temp = s[i];
- while (true)
- if (priority[temp] <= priority[stack[u]])
- {
- rez += stack[u].toString();
- u--;
- }
- else break;
- u++;
- stack[u] = temp;
- }
- else
- if (s.charAt(i) == ' ') ;
- else
- {
- rez += s.charAt(i).toString();
- if (i>0)
- if (stack[u] == '~')
- {
- rez += stack[u].toString();
- u--;
- }
- }
- }
- }
- for (; u >= 0; u--)
- {
- rez += stack[u].toString();
- }
- return rez;
- }
- static void Main(string[] args)
- {
- function ToInf(s)
- {
- var pred = "";
- var pr = [];
- var rez = "";//строка вывода
- var stuck = [];
- var u = -1;//u - указатель на текущую позицию в стеке
- var i = 0;
- var priority = [];
- priority['('] = 0;
- priority[')'] = 1;
- priority['+'] = 2;
- priority['-'] = 2;
- priority['~'] = 2;
- priority['*'] = 3;
- priority['/'] = 3;
- priority['^'] = 4;
- var i = 0;
- for (i=0;i<s.length;i++)
- {
- if (s.charAt(i) == '~')
- {
- if ((u == 0) && (stuck[u].length == 1))
- stuck[u] = '-' + stuck[u];
- else
- if (stuck[u].length == 1)
- stuck[u] = '(' + ('-' + (stuck[u] + ')'));
- else
- {
- stuck[u] = '-' + ('(' + (stuck[u] + ')'));
- if (s.charAt(i+1) in priority)
- stuck[u] = '(' + (stuck[u] + ')');
- }
- pr[u] = 2;
- }
- else
- {
- if ((s.charAt(i) == '+') || (s.charAt(i) == '-') ||
- (s.charAt(i) == '/') || (s.charAt(i) == '*') ||
- (s.charAt(i) == '^'))
- {
- if (pr[u] < priority[s.charAt(i)])
- {
- stuck[u] = '(' + (stuck[u] + ')');
- }
- if (pr[u-1] < priority[s.charAt(i)])
- {
- stuck[u-1] = '(' + (stuck[u-1] + ')');
- }
- pred = s.charAt(i);
- stuck[u-1] = stuck[u-1] + (s.charAt(i) + stuck[u]);
- pr[u-1] = priority[s.charAt(i)];
- u--;
- }
- else
- if (s.charAt(i) == ' ') ;
- else
- {
- u++;
- stuck[u] = s.charAt(i);
- pr[u] = 5;
- }
- }
- }
- var rez ="";
- for (i=0; i<=u; i++)
- rez += stuck[i].toString();
- WSH.Echo(rez);
- return rez;
- }
- //Здесь начинается сама программа!!!)
- var fso = new ActiveXObject("Scripting.FileSystemObject");
- if (WScript.arguments.length == 0)
- {
- WSH.Echo ("File is not exist");
- WScript.Quit();
- }
- if (fso.FileExists(WScript.arguments(0)))
- var text = fso.OpenTextFile(WScript.arguments(0));
- else
- {
- WSH.Echo ("File is not exist");
- WScript.Quit();
- }
- var s="";
- s = text.ReadAll();
- text.close();
- if (WScript.arguments.length == 1)
- {
- WSH.Echo ("Operation is not exist");
- WScript.Quit();
- }
- if (WScript.arguments(1) == "InfToPr")//из инфексной в префиксную
- {
- var k = "";
- var i = 0;
- for (i=0;i<s.length;i++)
- if (s.charAt(i) != ' ') k += s.charAt(i).toString();
- var s = ToPr(s);
- if (ToInf(s) == k) WSH.Echo(s);
- else WSH.Echo("wrong expression");
- }
- else
- if (WScript.arguments(1) == "PrToInf")//из префиксной в инфексную
- {
- var k = "";
- var i = 0;
- for (i=0;i<s.length;i++)
- if (s.charAt(i) != ' ') k += s.charAt(i).toString();
- var s = ToInf(s);
- if (ToPr(s) == k) WSH.Echo(s);
- else WSH.Echo("wrong expression");
- }
- else//если ни то, ни то
- WSH.Echo("unknown command");
- WScript.Quit();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment