Калькулятор (все работает просто хотел узнать можно было как то попроще?) - C#
Формулировка задачи:
Было задание сделать калькулятор , при воде 'q' выход из программы
два варианта получилось
мои вопросы
1 какой вариант получше и читабельный ?
2 и правильно ли я падашол к решению данной задачи ? (не намудрил ли я ?)
using System;
public class Animal0
{
public static void Main()
{
Calkulater cal = new Calkulater();
Calkulater2 cal2 = new Calkulater2();
cal.show();
cal.input();
cal2.show();
cal2.input();
Console.ReadLine();
}
}
class Calkulater
{
bool flag;
long a, b;
public void input()
{
for (;;)
{
Console.Write("Ввидите первое число ");
string first = Console.ReadLine();
if (first != "q")// проверка на выход
{
for (byte i = 0; i < first.Length; i++)
if (!char.IsDigit(first[i]))// проверка на 10ное число
{
flag = true;
break;
}
else
{
a = Convert.ToInt64(first);
flag = false;
}
if (flag)// проверка на ошибку
{
ErrorNumber();
continue;
}
for (;;)
{
if (flag) // проверка после вода оператора
break;
Console.Write("Ввидите второе число ");
string second = Console.ReadLine();
if (second != "q")// проверка на выход
{
for (byte i = 0; i < second.Length; i++)// проверка на 10ное число
if (!char.IsDigit(second[i]))
{
flag = true;
break;
}
else
{
b = Convert.ToInt64(second);
flag = false;
}
if (flag)// проверка на ошибку
{
ErrorNumber();
continue;
}
for (;;)
{
Console.Write("Ввидите операто ");
string _operator = Console.ReadLine();
if (_operator != "q")// проверка на выход
{
switch (_operator)
{
case "*": Console.WriteLine("{0} * {1} = {2}", first, second, (a * b));flag= true; break;
case "/": Console.WriteLine("{0} / {1} = {2} ", first, second, (a / b));flag = true; break;
case "+": Console.WriteLine("{0} + {1} = {2} ", first, second, (a + b));flag = true; break;
case "-": Console.WriteLine("{0} - {1} = {2} ", first, second, (a - b));flag = true; break;
case "^": Console.WriteLine("{0} ^ {1} = {2} ", first, second, Math.Exp(a*Math.Log(b)));flag = true; break;
default: show(); continue;
}
}
else
return;
if (flag)
break;
}
}
else
return;
}
}
else
break;
}
}
void ErrorNumber()
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Можно водит только десятичные числа");
Console.ForegroundColor = ConsoleColor.Gray;
}
public void show()// подсказка команд
{
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("Команды калькулятора \n"
+ "'+'-сложение чисел \n"
+ "'-'-вычитание чисел \n"
+ "'*'-умножение чисел \n"
+ "'/'-деление чисел \n"
+ "'^'-возвидение первого числа в степен второго чисел \n"
+ "'q'-выход их программы \n");
Console.ForegroundColor = ConsoleColor.Gray;
}
}
class Calkulater2
{
bool flag;
long[] number=new long[2];
string numberInput;
public void show()// подсказка команд
{
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("Команды калькулятора \n"
+ "'+'-сложение чисел \n"
+ "'-'-вычитание чисел \n"
+ "'*'-умножение чисел \n"
+ "'/'-деление чисел \n"
+ "'^'-возвидение первого числа в степен второго чисел \n"
+ "'q'-выход их программы \n");
Console.ForegroundColor = ConsoleColor.Gray;
}
public void input()//
{
for (sbyte i=0;i<number.Length;i++)
{
Console.Write("Ввидите {0} ое число ",i+1);
numberInput = Console.ReadLine();
if (exit(numberInput))//проверка на выход
break;
if (NumberTrue(numberInput)) // проверка на дурака(10чное число )
number[i] = long.Parse(numberInput);
else
{
ErrorNumber();// подсказка об ошибке
i--;
}
if (i == 1)//вызываем оператор для чисел
if (_operator(numberInput, number))
i = -1;
}
}
bool _operator(string numberInput, long[] number)//оператор
{
for (;;)
{
Console.Write("Ввидите операто ");
string _operator = Console.ReadLine();
switch (_operator)
{
case "*": Console.WriteLine("{0} * {1} = {2}", number[0], number[1], (number[0] * number[1])); flag = true; break;
case "/": Console.WriteLine("{0} / {1} = {2} ", number[0], number[1], (number[0] / number[1])); flag = true; break;
case "+": Console.WriteLine("{0} + {1} = {2} ", number[0], number[1], (number[0] + number[1])); flag = true; break;
case "-": Console.WriteLine("{0} - {1} = {2} ", number[0], number[1], (number[0] - number[1])); flag = true; break;
case "^": Console.WriteLine("{0} ^ {1} = {2} ", number[0], number[1], Math.Exp(number[0] * Math.Log(number[1]))); flag = true; break;
case "q": flag = false; break;
default: show(); break;
}
if (flag)
return flag;
else
return flag;
}
}
bool exit(string input)//выйти ?
{
if (input == "q")
return true;
return false;
}
bool NumberTrue(string input)// проверка на 10ное число
{
byte _true = 0;
for (byte i = 0; i < input.Length; i++)
{
if (char.IsDigit(input[i]));
else
_true++;
}
if(_true==0)
return true;
return false;
}
void ErrorNumber()//подсказка об ошибке
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Можно водит только десятичные числа");
Console.ForegroundColor = ConsoleColor.Gray;
}
}Решение задачи: «Калькулятор (все работает просто хотел узнать можно было как то попроще?)»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApp4
{
class Program
{
static void Main(string[] args)
{
var calc = new Calc();
calc.FAQ();
calc.Run();
}
}
public class Calc
{
Dictionary<string, Func<float, float, float>> operations;
public Calc()
{
operations = new Dictionary<string, Func<float, float, float>>()
{
["+"] = (x, y) => { return x + y; },
["-"] = (x, y) => { return x - y; },
["*"] = (x, y) => { return x * y; },
["/"] = (x, y) => { return x / y; },
["^"] = (x, y) => { return (float)Math.Pow(x, y); },
};
}
public float ParseNumber(string source)
{
if (source == "q") Environment.Exit(0);
float num;
if (!float.TryParse(source, out num))
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Можно вводить только десятичные числа");
Console.ForegroundColor = ConsoleColor.Gray;
return float.NaN;
}
return num;
}
public void Run()
{
while (true)
{
Console.Write("Введите первое число:");
var num1 = ParseNumber(Console.ReadLine());
if (num1.Equals(float.NaN)) continue;
Console.Write("Введите второе число:");
var num2 = ParseNumber(Console.ReadLine());
if (num2.Equals(float.NaN)) continue;
Console.WriteLine("Введите оператор:");
var oper = Console.ReadLine();
if (!operations.Keys.Contains(oper))
{
Console.WriteLine("Hедопустимый оператор");
continue;
}
Console.WriteLine("{0} {1} {2} = {3}\n", num1, oper, num2, operations[oper](num1, num2));
}
}
public void FAQ()
{
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("Команды калькулятора \n"
+ "'+'-сложение чисел \n"
+ "'-'-вычитание чисел \n"
+ "'*'-умножение чисел \n"
+ "'/'-деление чисел \n"
+ "'^'-возведение первого числа в степень второго числа \n"
+ "'q'-выход из программы \n");
Console.ForegroundColor = ConsoleColor.Gray;
}
}
}