Решить уравнение - C# (181804)

Узнай цену своей работы

Формулировка задачи:

Написать программу: человек вводит вместо х число, программа показывает все возможны варианты решения(вместо "?" ставит знак "-+*/") если решения нет отобразить этона экране. (((1?2)?3)?4)?5) = x;

Решение задачи: «Решить уравнение»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. public class Program
  5. {
  6.  
  7.    
  8.     private static void Main()
  9.     {
  10.        
  11.         while (true)
  12.         {        
  13.            
  14.             int X ;
  15.             char[] operators = "*/+-".ToCharArray();
  16.             string expression = "(((1?2)?3)?4)?5) = x";
  17.  
  18.             Console.Write("\nВведите Х (ввод символа - выход): ");
  19.  
  20.             if (! Int32.TryParse(Console.ReadLine(),out X))
  21.                  break;
  22.             do
  23.             {
  24.                 string[] strarr = expression.Remove(16).Split('?');
  25.                 string exp = String.Concat(strarr[0], operators[0], strarr[1], operators[1], strarr[2], operators[2], strarr[3], operators[3], strarr[4]);
  26.                 int res = 0;
  27.                 res = Evaluate(exp);
  28.                 Console.Write(String.Format("{0} = {1}",exp,res));
  29.                 if (res != X)
  30.                 Console.Write("  Решения нет.");
  31.                 Console.WriteLine();
  32.             } while (NextPermutation(operators));
  33.         }
  34.  
  35.         Console.ReadKey(true);
  36.     }
  37.  
  38.   private  static void Swap<T>(ref T x, ref T  y)
  39.     {
  40.  
  41.         T temp = x;
  42.         x = y;
  43.         y = temp;
  44.     }
  45.     private static bool NextPermutation(char[] arr)
  46.     {
  47.         int j = 0, k = 0;
  48.         for (j = arr.Length - 2; j != -1 && arr[j] >= arr[j + 1]; j--) ;
  49.         if (j == -1)
  50.             return false;
  51.         for (k = arr.Length - 1; arr[j] >= arr[k]; k--);
  52.         Swap(ref arr[j], ref arr[k]);
  53.         int left = j + 1;
  54.         Array.Reverse(arr, left, arr.Length - left);
  55.         return true;
  56.     }
  57.  
  58.     private static int Evaluate(string exp)
  59.     {
  60.         Stack<string> stack = new Stack<string>();
  61.         for (int i = 0; i < exp.Length; i++)
  62.         {
  63.             char ch = exp[i];
  64.             if (ch == '(')
  65.                 continue;
  66.             else if (ch == ')')
  67.             {
  68.                 string right = stack.Pop();
  69.                 string op = stack.Pop();
  70.                 string left = stack.Pop();
  71.                 stack.Push(Calc(left, op, right));
  72.             }
  73.             else if (ch == '+' ||
  74.                  ch == '/' ||
  75.                  ch == '-' ||
  76.                  ch == '*')
  77.                 stack.Push(ch.ToString());
  78.             else if (char.IsDigit(ch))
  79.                 stack.Push(ch.ToString());
  80.             else
  81.                 break;
  82.         }
  83.         return Convert.ToInt32(stack.Peek());
  84.     }
  85.     private static string Calc(string left, string op, string right)
  86.     {
  87.         int l = int.Parse(left);
  88.         int r = int.Parse(right);
  89.         switch (op)
  90.         {
  91.             case "+":
  92.                 return (l + r).ToString();
  93.             case "-":
  94.                 return (l - r).ToString();
  95.             case "*":
  96.                 return (l * r).ToString();
  97.             case "/":
  98.                 return (l / r).ToString();
  99.             default:
  100.                 throw new ArgumentException();
  101.         }
  102.     }
  103. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.333 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы