Решить уравнение - C# (181804)
Формулировка задачи:
Написать программу: человек вводит вместо х число, программа показывает все возможны варианты решения(вместо "?" ставит знак "-+*/") если решения нет отобразить этона экране.
(((1?2)?3)?4)?5) = x;
Решение задачи: «Решить уравнение»
textual
Листинг программы
using System; using System.Collections.Generic; public class Program { private static void Main() { while (true) { int X ; char[] operators = "*/+-".ToCharArray(); string expression = "(((1?2)?3)?4)?5) = x"; Console.Write("\nВведите Х (ввод символа - выход): "); if (! Int32.TryParse(Console.ReadLine(),out X)) break; do { string[] strarr = expression.Remove(16).Split('?'); string exp = String.Concat(strarr[0], operators[0], strarr[1], operators[1], strarr[2], operators[2], strarr[3], operators[3], strarr[4]); int res = 0; res = Evaluate(exp); Console.Write(String.Format("{0} = {1}",exp,res)); if (res != X) Console.Write(" Решения нет."); Console.WriteLine(); } while (NextPermutation(operators)); } Console.ReadKey(true); } private static void Swap<T>(ref T x, ref T y) { T temp = x; x = y; y = temp; } private static bool NextPermutation(char[] arr) { int j = 0, k = 0; for (j = arr.Length - 2; j != -1 && arr[j] >= arr[j + 1]; j--) ; if (j == -1) return false; for (k = arr.Length - 1; arr[j] >= arr[k]; k--); Swap(ref arr[j], ref arr[k]); int left = j + 1; Array.Reverse(arr, left, arr.Length - left); return true; } private static int Evaluate(string exp) { Stack<string> stack = new Stack<string>(); for (int i = 0; i < exp.Length; i++) { char ch = exp[i]; if (ch == '(') continue; else if (ch == ')') { string right = stack.Pop(); string op = stack.Pop(); string left = stack.Pop(); stack.Push(Calc(left, op, right)); } else if (ch == '+' || ch == '/' || ch == '-' || ch == '*') stack.Push(ch.ToString()); else if (char.IsDigit(ch)) stack.Push(ch.ToString()); else break; } return Convert.ToInt32(stack.Peek()); } private static string Calc(string left, string op, string right) { int l = int.Parse(left); int r = int.Parse(right); switch (op) { case "+": return (l + r).ToString(); case "-": return (l - r).ToString(); case "*": return (l * r).ToString(); case "/": return (l / r).ToString(); default: throw new ArgumentException(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д