.NET 4.x Подставка значений в формулу - C#
Формулировка задачи:
Есть программа. В неё вводится два значения (допустим A и B), так же вводится формула (допустим 2x+x+3).
Как сделать так, чтобы значение A подставилось вместо первого x, а B вместо второго x и посчиталось?
Решение задачи: «.NET 4.x Подставка значений в формулу»
textual
Листинг программы
using System;
using System.Linq;
using System.Collections.Generic;
class Program
{
private static readonly Dictionary<string, Action<Stack<double>>> w =
new Dictionary<string, Action<Stack<double>>>(StringComparer.OrdinalIgnoreCase)
{
{ "+", s => { s.Push(s.Pop() + s.Pop()); } },
{ "-", s => { double b = s.Pop(); s.Push(s.Pop() - b); } },
{ "*", s => { s.Push(s.Pop() * s.Pop()); } },
{ "/", s => { double b = s.Pop(); s.Push(s.Pop() / b); } },
{ "DUP", s => { s.Push(s.Peek()); } },
{ "SQRT", s => { s.Push(Math.Sqrt(s.Pop())); } },
{ "SWAP", s => { double b = s.Pop(); double a = s.Pop(); s.Push(b); s.Push(a); } },
{ ".", s=> { Console.WriteLine(s.Pop()); } }
};
public static void Main()
{
string input;
while ((input = Console.ReadLine()) != String.Empty)
{
Stack<double> s = new Stack<double>();
Dictionary<string, double> v = new Dictionary<string, double>();
Action<Stack<double>> f;
double n;
foreach (string i in input.Split())
{
if (w.TryGetValue(i, out f))
{
f(s);
}
else if (v.TryGetValue(i, out n) || Double.TryParse(i, out n))
{
s.Push(n);
}
else
{
v[i] = s.Pop();
}
}
}
}
}