public string GetSolution(string numbers) { string[] mathSignsString = { "+", "-", "*", "/" }; string[] numbersRomanArray = { "" }; string solutionString; int solutionInt = 0; char delimiter = '@'; if (Check.CheckDoubleSigns(numbers).Equals(true) || Check.CheckTransfer(numbers.ToCharArray()).Equals(true)) { MessageBox.Show("Проверьте введённый пример на правильность записи", "Внимание!", MessageBoxButton.OK, MessageBoxImage.Warning); return(solutionString = ""); } for (int i = 0; i < mathSignsString.Length; i++) { numbers = numbers.Replace(mathSignsString[i], delimiter + mathSignsString[i] + delimiter); } for (int i = 0; i < numbers.Length; i++) { if (numbers[i].Equals(delimiter)) { numbersRomanArray = numbers.Split(delimiter); break; } } string[] numbersArabicArray = new string[numbersRomanArray.Length]; for (int i = 0; i < numbersRomanArray.Length; i++) { bool check = true; for (int j = 0; j < mathSignsString.Length; j++) { if (numbersRomanArray[i].Equals(mathSignsString[j])) { numbersArabicArray[i] = numbersRomanArray[i]; check = false; break; } } if (check) { numbersArabicArray[i] = (romanToArabic.Transfer(numbersRomanArray[i].ToCharArray())).ToString(); } } numbers = string.Join(null, numbersArabicArray); if (Check.CheckDoubleSigns(numbers).Equals(true)) { MessageBox.Show("Проверьте введённый пример на правильность записи", "Внимание!", MessageBoxButton.OK, MessageBoxImage.Warning); return(solutionString = ""); } try { var solution = new DataTable().Compute(numbers, null); double solutionDouble = Convert.ToDouble(solution.ToString()); solutionInt = Convert.ToInt32(Math.Round(solutionDouble, 0)); } catch (Exception e) { MessageBox.Show(e.Message, "Error!", MessageBoxButton.OK, MessageBoxImage.Error); return(solutionString = ""); } solutionString = arabicToRoman.Transfer(solutionInt); return(solutionString); }
static int Main(string[] args) { RomanToArabic romanToArabic = new RomanToArabic(); ArabicToRoman arabicToRoman = new ArabicToRoman(); FileOperations fileOperations = new FileOperations(); char[] numbers = { 'M', 'D', 'C', 'L', 'X', 'V', 'I' }; string[] signs = { "+", "-", "*", "/" }; if (args.Length < 2) { Console.WriteLine("Введите имя файла, в котором записано выражение, над которым необходимо провести математическую операцию," + " и имя файла, в который будет записан ответ"); Console.ReadKey(); return(1); } string fileNumbers = args[0]; string fileSolution = args[1]; string solutionRomanNumberString; string romanNumbersString = fileOperations.ReadFromFile(fileNumbers).ToUpper(); string transferString = ""; string[] numbersArray = { "" }; int solutionInt = 0; int err = 0; char delimiter = '@'; bool check; if (Check.CheckRead(romanNumbersString).Equals(false)) { Console.ReadKey(); return(-1); } for (int i = 0; i < romanNumbersString.Length; i++) { for (int j = 0; j < numbers.Length; j++) { if (!romanNumbersString[i].Equals(numbers[j])) { err++; } } for (int j = 0; j < signs.Length; j++) { if (romanNumbersString[i].Equals(signs[j])) { err++; } } if (err == 11) { Console.WriteLine("Обнаружен недопустимый символ"); Console.ReadKey(); return(-1); } } for (int i = 0; i < signs.Length; i++) { romanNumbersString = romanNumbersString.Replace(signs[i], delimiter + signs[i] + delimiter); } for (int i = 0; i < romanNumbersString.Length; i++) { if (romanNumbersString[i].Equals(delimiter)) { numbersArray = romanNumbersString.Split(delimiter); } } string[] numbersArabicArray = new string[numbersArray.Length]; for (int i = 0; i < numbersArray.Length; i++) { check = true; for (int j = 0; j < signs.Length; j++) { if (numbersArray[i].Equals(signs[j])) { numbersArabicArray[i] += numbersArray[i]; check = false; } } if (check) { numbersArabicArray[i] += romanToArabic.Transfer(numbersArray[i].ToCharArray()).ToString(); } } transferString = string.Join(null, numbersArabicArray); try { var solution = new DataTable().Compute(transferString, null); double solutionDouble = Convert.ToDouble(solution.ToString()); solutionInt = Convert.ToInt32(Math.Round(solutionDouble, 0)); solutionRomanNumberString = arabicToRoman.Transfer(solutionInt); } catch (Exception e) { Console.WriteLine("Ошибка вычисления"); Console.WriteLine(e.Message); Console.ReadKey(); return(-1); } fileOperations.WriteToFile(fileSolution, solutionRomanNumberString); Console.Write("Ответ: " + solutionRomanNumberString); Console.ReadKey(); return(0); }