Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace ConsoleApplicationHW
- {
- class Dialog
- {
- static int AskForCommand(int qtyOfCommands)
- {
- int act;
- bool ok;
- do
- {
- Console.Write("Команда: ");
- string buf = Console.ReadLine();
- ok = int.TryParse(buf, out act) && act >= 0 && act <= qtyOfCommands;
- if (!ok)
- Console.WriteLine("Доступны команды 0 - " + qtyOfCommands + ".");
- } while (!ok);
- return act;
- }
- static double AskForDouble()
- {
- double res;
- string val = "";
- bool ok;
- do
- {
- Console.Write("operand> ");
- val = Console.ReadLine();
- ok = double.TryParse(val, out res);
- if (!ok)
- {
- Console.WriteLine("Ошибка. Проверьте вводимые данные");
- }
- } while (!ok);
- return res;
- }
- static DegreeValue AskForDegree()
- {
- DegreeValue res;
- string val = "";
- do
- {
- Console.Write("operand> ");
- val = Console.ReadLine();
- res = Parse(val);
- if (res == null)
- {
- Console.WriteLine("Ошибка. Проверьте вводимые данные");
- }
- } while (res == null);
- return res;
- }
- static int AskForInt()
- {
- int res;
- string val = "";
- bool ok;
- do
- {
- Console.Write("operand> ");
- val = Console.ReadLine();
- ok = int.TryParse(val, out res);
- if (!ok)
- {
- Console.WriteLine("Ошибка. Проверьте вводимые данные");
- }
- } while (!ok);
- return res;
- }
- static DegreeValue Parse(string operand)
- {
- try
- {
- string[] dms = operand.Split('.');
- int deg = Convert.ToInt32(dms[0]);
- int min = Convert.ToInt32(dms[1]);
- int sec = Convert.ToInt32(dms[2]);
- return new DegreeValue(deg, min, sec);
- }
- catch (Exception)
- {
- return null;
- }
- }
- static void ShowDegreeValueMenu()
- {
- Console.WriteLine("0. В меню");
- Console.WriteLine("1. +");
- Console.WriteLine("2. -");
- Console.WriteLine("3. *");
- Console.WriteLine("4. /");
- Console.WriteLine("5. sin");
- Console.WriteLine("6. cos");
- Console.WriteLine("7. tg");
- Console.WriteLine("8. ctg");
- //Console.WriteLine("9. Ввести новое значение операнда\n");
- }
- static void ShowDoubleMenu()
- {
- Console.WriteLine("0. В меню");
- Console.WriteLine("1. arcsin");
- Console.WriteLine("2. arccos");
- Console.WriteLine("3. arctg");
- Console.WriteLine("4. arcctg");
- //Console.WriteLine("5. Ввести новое значение операнда\n");
- }
- static DegreeValue Multiply(DegreeValue v1)
- {
- Console.Clear();
- v1.Show();
- Console.WriteLine("*");
- int factor = AskForInt();
- return Calculator.Multiply(v1, factor);
- }
- static void Main(string[] args)
- {
- int mainCycle = -1;
- int act = 0;
- do
- {
- Console.Clear();
- Console.WriteLine("0. Выход\n1. Калькулятор\n");
- mainCycle = AskForCommand(1);
- switch (mainCycle)
- {
- case 1:
- object result = null;
- int choise = 0;
- Console.Clear();
- Console.WriteLine("Градусы, минуты и секунды вводятся в одну строку без пробелов и разделяются точкой.\n");
- Console.WriteLine("0. Назад\n1. Ввести градус\n2. Ввести число");
- choise = AskForCommand(2);
- Console.Clear();
- switch (choise)
- {
- case 1:
- result = AskForDegree();
- break;
- case 2:
- result = AskForDouble();
- break;
- }
- Console.Clear();
- int operation = 0;
- do
- {
- if (result is DegreeValue)
- {
- DegreeValue degree = (DegreeValue)result;
- DegreeValue degree2;
- Console.Clear();
- degree.Show();
- Console.WriteLine();
- ShowDegreeValueMenu();
- operation = AskForCommand(8);
- switch (operation)
- {
- case 1:
- Console.Clear();
- degree.Show();
- Console.WriteLine("+");
- degree2 = AskForDegree();
- result = Calculator.Plus(degree, degree2);
- degree = result as DegreeValue;
- degree.Show();
- Console.ReadLine();
- break;
- case 2:
- Console.Clear();
- degree.Show();
- Console.WriteLine("-");
- degree2 = AskForDegree();
- result = Calculator.Minus(degree, degree2);
- degree = result as DegreeValue;
- degree.Show();
- Console.ReadLine();
- break;
- case 3:
- Console.Clear();
- degree.Show();
- Console.WriteLine("*");
- int factor = AskForInt();
- result = Calculator.Multiply(degree, factor);
- degree = result as DegreeValue;
- degree.Show();
- Console.ReadLine();
- break;
- case 4:
- Console.Clear();
- degree.Show();
- Console.WriteLine("/");
- int devisor = AskForInt();
- result = Calculator.Divide(degree, devisor);
- degree = result as DegreeValue;
- degree.Show();
- Console.ReadLine();
- break;
- case 5:
- result = Calculator.Sin(degree);
- double val = (double)result;
- Console.WriteLine("\nsin({0}) = {1}", degree, val);
- Console.ReadLine();
- break;
- case 6:
- result = Calculator.Cos(degree);
- val = (double)result;
- Console.WriteLine("\ncos({0}) = {1}", degree, val);
- Console.ReadLine();
- break;
- case 7:
- result = Calculator.Tg(degree);
- val = (double)result;
- Console.WriteLine("\ntg({0}) = {1}", degree, val);
- Console.ReadLine();
- break;
- case 8:
- result = Calculator.Ctg(degree);
- val = (double)result;
- Console.WriteLine("\nctg({0}) = {1}", degree, val);
- Console.ReadLine();
- break;
- }
- }
- else if (result is double)
- {
- double val = (double)result;
- Console.Clear();
- Console.WriteLine(val);
- Console.WriteLine();
- ShowDoubleMenu();
- operation = AskForCommand(4);
- DegreeValue degree;
- switch (operation)
- {
- case 1:
- if (!(val <= -1 || val >= 1))
- {
- result = Calculator.ArcSin(val);
- degree = result as DegreeValue;
- Console.Write("\narcsin({0}) = ", val);
- degree.Show();
- Console.ReadLine();
- }
- else
- {
- Console.WriteLine("Введенные данные не удовлетворяют области значений функции ArcSin");
- Console.ReadLine();
- }
- break;
- case 2:
- if (!(val <= -1 || val >= 1))
- {
- result = Calculator.ArcCos(val);
- degree = result as DegreeValue;
- Console.Write("\narccos({0}) = ", val);
- degree.Show();
- Console.ReadLine();
- }
- else
- {
- Console.WriteLine("Введенные данные не удовлетворяют области значений функции ArcCos");
- Console.ReadLine();
- }
- break;
- case 3:
- result = Calculator.ArcTg(val);
- degree = result as DegreeValue;
- Console.Write("\narctg({0}) = ", val);
- degree.Show();
- Console.ReadLine();
- break;
- case 4:
- result = Calculator.ArcCtg(val);
- degree = result as DegreeValue;
- Console.Write("\narcctg({0}) = ", val);
- degree.Show();
- Console.ReadLine();
- break;
- }
- }
- } while (operation != 0);
- break;
- }
- } while (mainCycle != 0);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement