Калькулятор (все работает просто хотел узнать можно было как то попроще?) - C#

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

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

Было задание сделать калькулятор , при воде 'q' выход из программы два варианта получилось мои вопросы 1 какой вариант получше и читабельный ? 2 и правильно ли я падашол к решению данной задачи ? (не намудрил ли я ?)
Листинг программы
  1. using System;
  2. public class Animal0
  3. {
  4. public static void Main()
  5. {
  6. Calkulater cal = new Calkulater();
  7. Calkulater2 cal2 = new Calkulater2();
  8. cal.show();
  9. cal.input();
  10. cal2.show();
  11. cal2.input();
  12. Console.ReadLine();
  13. }
  14. }
  15. class Calkulater
  16. {
  17. bool flag;
  18. long a, b;
  19. public void input()
  20. {
  21. for (;;)
  22. {
  23. Console.Write("Ввидите первое число ");
  24. string first = Console.ReadLine();
  25. if (first != "q")// проверка на выход
  26. {
  27. for (byte i = 0; i < first.Length; i++)
  28. if (!char.IsDigit(first[i]))// проверка на 10ное число
  29. {
  30. flag = true;
  31. break;
  32. }
  33. else
  34. {
  35. a = Convert.ToInt64(first);
  36. flag = false;
  37. }
  38. if (flag)// проверка на ошибку
  39. {
  40. ErrorNumber();
  41. continue;
  42. }
  43. for (;;)
  44. {
  45. if (flag) // проверка после вода оператора
  46. break;
  47. Console.Write("Ввидите второе число ");
  48. string second = Console.ReadLine();
  49. if (second != "q")// проверка на выход
  50. {
  51. for (byte i = 0; i < second.Length; i++)// проверка на 10ное число
  52. if (!char.IsDigit(second[i]))
  53. {
  54. flag = true;
  55. break;
  56. }
  57. else
  58. {
  59. b = Convert.ToInt64(second);
  60. flag = false;
  61. }
  62. if (flag)// проверка на ошибку
  63. {
  64. ErrorNumber();
  65. continue;
  66. }
  67. for (;;)
  68. {
  69. Console.Write("Ввидите операто ");
  70. string _operator = Console.ReadLine();
  71. if (_operator != "q")// проверка на выход
  72. {
  73. switch (_operator)
  74. {
  75. case "*": Console.WriteLine("{0} * {1} = {2}", first, second, (a * b));flag= true; break;
  76. case "/": Console.WriteLine("{0} / {1} = {2} ", first, second, (a / b));flag = true; break;
  77. case "+": Console.WriteLine("{0} + {1} = {2} ", first, second, (a + b));flag = true; break;
  78. case "-": Console.WriteLine("{0} - {1} = {2} ", first, second, (a - b));flag = true; break;
  79. case "^": Console.WriteLine("{0} ^ {1} = {2} ", first, second, Math.Exp(a*Math.Log(b)));flag = true; break;
  80. default: show(); continue;
  81. }
  82. }
  83. else
  84. return;
  85. if (flag)
  86. break;
  87. }
  88. }
  89. else
  90. return;
  91. }
  92. }
  93. else
  94. break;
  95. }
  96. }
  97. void ErrorNumber()
  98. {
  99. Console.ForegroundColor = ConsoleColor.Red;
  100. Console.WriteLine("Можно водит только десятичные числа");
  101. Console.ForegroundColor = ConsoleColor.Gray;
  102. }
  103.  
  104. public void show()// подсказка команд
  105. {
  106. Console.ForegroundColor = ConsoleColor.White;
  107. Console.WriteLine("Команды калькулятора \n"
  108. + "'+'-сложение чисел \n"
  109. + "'-'-вычитание чисел \n"
  110. + "'*'-умножение чисел \n"
  111. + "'/'-деление чисел \n"
  112. + "'^'-возвидение первого числа в степен второго чисел \n"
  113. + "'q'-выход их программы \n");
  114. Console.ForegroundColor = ConsoleColor.Gray;
  115. }
  116. }
  117. class Calkulater2
  118. {
  119. bool flag;
  120. long[] number=new long[2];
  121. string numberInput;
  122. public void show()// подсказка команд
  123. {
  124. Console.ForegroundColor = ConsoleColor.White;
  125. Console.WriteLine("Команды калькулятора \n"
  126. + "'+'-сложение чисел \n"
  127. + "'-'-вычитание чисел \n"
  128. + "'*'-умножение чисел \n"
  129. + "'/'-деление чисел \n"
  130. + "'^'-возвидение первого числа в степен второго чисел \n"
  131. + "'q'-выход их программы \n");
  132. Console.ForegroundColor = ConsoleColor.Gray;
  133. }
  134. public void input()//
  135. {
  136. for (sbyte i=0;i<number.Length;i++)
  137. {
  138. Console.Write("Ввидите {0} ое число ",i+1);
  139. numberInput = Console.ReadLine();
  140. if (exit(numberInput))//проверка на выход
  141. break;
  142. if (NumberTrue(numberInput)) // проверка на дурака(10чное число )
  143. number[i] = long.Parse(numberInput);
  144. else
  145. {
  146. ErrorNumber();// подсказка об ошибке
  147. i--;
  148. }
  149. if (i == 1)//вызываем оператор для чисел
  150. if (_operator(numberInput, number))
  151. i = -1;
  152. }
  153. }
  154. bool _operator(string numberInput, long[] number)//оператор
  155. {
  156. for (;;)
  157. {
  158. Console.Write("Ввидите операто ");
  159. string _operator = Console.ReadLine();
  160. switch (_operator)
  161. {
  162. case "*": Console.WriteLine("{0} * {1} = {2}", number[0], number[1], (number[0] * number[1])); flag = true; break;
  163. case "/": Console.WriteLine("{0} / {1} = {2} ", number[0], number[1], (number[0] / number[1])); flag = true; break;
  164. case "+": Console.WriteLine("{0} + {1} = {2} ", number[0], number[1], (number[0] + number[1])); flag = true; break;
  165. case "-": Console.WriteLine("{0} - {1} = {2} ", number[0], number[1], (number[0] - number[1])); flag = true; break;
  166. case "^": Console.WriteLine("{0} ^ {1} = {2} ", number[0], number[1], Math.Exp(number[0] * Math.Log(number[1]))); flag = true; break;
  167. case "q": flag = false; break;
  168. default: show(); break;
  169. }
  170. if (flag)
  171. return flag;
  172. else
  173. return flag;
  174. }
  175. }
  176. bool exit(string input)//выйти ?
  177. {
  178. if (input == "q")
  179. return true;
  180. return false;
  181. }
  182. bool NumberTrue(string input)// проверка на 10ное число
  183. {
  184. byte _true = 0;
  185. for (byte i = 0; i < input.Length; i++)
  186. {
  187. if (char.IsDigit(input[i]));
  188. else
  189. _true++;
  190. }
  191. if(_true==0)
  192. return true;
  193. return false;
  194. }
  195. void ErrorNumber()//подсказка об ошибке
  196. {
  197. Console.ForegroundColor = ConsoleColor.Red;
  198. Console.WriteLine("Можно водит только десятичные числа");
  199. Console.ForegroundColor = ConsoleColor.Gray;
  200. }
  201. }

Решение задачи: «Калькулятор (все работает просто хотел узнать можно было как то попроще?)»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4.  
  5. namespace ConsoleApp4
  6. {
  7.     class Program
  8.     {
  9.         static void Main(string[] args)
  10.         {
  11.             var calc = new Calc();
  12.             calc.FAQ();
  13.             calc.Run();
  14.         }
  15.     }
  16.  
  17.     public class Calc
  18.     {
  19.         Dictionary<string, Func<float, float, float>> operations;
  20.         public Calc()
  21.         {
  22.             operations = new Dictionary<string, Func<float, float, float>>()
  23.             {
  24.                 ["+"] = (x, y) => { return x + y; },
  25.                 ["-"] = (x, y) => { return x - y; },
  26.                 ["*"] = (x, y) => { return x * y; },
  27.                 ["/"] = (x, y) => { return x / y; },
  28.                 ["^"] = (x, y) => { return (float)Math.Pow(x, y); },
  29.             };
  30.         }
  31.  
  32.         public float ParseNumber(string source)
  33.         {
  34.             if (source == "q") Environment.Exit(0);
  35.  
  36.             float num;
  37.  
  38.             if (!float.TryParse(source, out num))
  39.             {
  40.                 Console.ForegroundColor = ConsoleColor.Red;
  41.                 Console.WriteLine("Можно вводить только десятичные числа");
  42.                 Console.ForegroundColor = ConsoleColor.Gray;
  43.  
  44.                 return float.NaN;
  45.             }
  46.  
  47.             return num;
  48.         }
  49.  
  50.         public void Run()
  51.         {
  52.             while (true)
  53.             {
  54.                 Console.Write("Введите первое число:");
  55.                 var num1 = ParseNumber(Console.ReadLine());
  56.                 if (num1.Equals(float.NaN)) continue;
  57.  
  58.                 Console.Write("Введите второе число:");
  59.                 var num2 = ParseNumber(Console.ReadLine());
  60.                 if (num2.Equals(float.NaN)) continue;
  61.  
  62.                 Console.WriteLine("Введите оператор:");
  63.                 var oper = Console.ReadLine();
  64.  
  65.                 if (!operations.Keys.Contains(oper))
  66.                 {
  67.                     Console.WriteLine("Hедопустимый оператор");
  68.                     continue;
  69.                 }
  70.  
  71.                 Console.WriteLine("{0} {1} {2} = {3}\n", num1, oper, num2, operations[oper](num1, num2));
  72.             }
  73.         }
  74.  
  75.         public void FAQ()
  76.         {
  77.             Console.ForegroundColor = ConsoleColor.White;
  78.             Console.WriteLine("Команды калькулятора \n"
  79.                              + "'+'-сложение чисел \n"
  80.                              + "'-'-вычитание чисел \n"
  81.                              + "'*'-умножение чисел \n"
  82.                              + "'/'-деление чисел \n"
  83.                              + "'^'-возведение первого числа в степень второго числа \n"
  84.                              + "'q'-выход из программы \n");
  85.             Console.ForegroundColor = ConsoleColor.Gray;
  86.         }
  87.     }
  88. }

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


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

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

15   голосов , оценка 3.733 из 5

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

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

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