Нашел интересную задачку и совершенно не понимаю как это делать, но очень интересено посмотреть решение, и если вдруг у вас есть интерессная ссылка или статья про такие вот фишки с функциями буду благодарен если поделитесь
1)Для каждого числа должна быть своя функция, т. е. от 0 (“zero”) до 9 (“nine”);
2)Должна быть функция для каждой из следующих математических операций: plus, minus, times (умножение), dividedBy (деление);
3)Самая внешняя функция представляет собой левый операнд, самая внутренняя функция представляет собой правый операнд;
4)По возможности пользоваться стрелочными функциями;
Пример:
1)Вызов:
seven(times(five()));
Результат:
Результат: 7 * 5 = 35
2)Вызов:
four(plus(nine()));
Результат:
Результат: 4 + 9 = 13
JavaScript
Калькулятор из функций
Я бы делел через структуры оператор-операнд. Примерчик на c#:
public class Operation
{
public enum OpType { Load, Add, Subtract, Multiply, Divide}
public double Operand;
public OpType Operator;
public Operation(double _Operand, OpType _Operator)
{
Operand = _Operand;
Operator = _Operator;
}
public override string ToString()
{
return Operand.ToString();
}
}
public class Calc: IDisposable
{
private Operation PerformOp(Operation _Op1, Operation _Op2)
{
switch(_Op1.Operator)
{
case Operation.OpType.Add: return new Operation(_Op1.Operand + _Op2.Operand, Operation.OpType.Load);
case Operation.OpType.Multiply: return new Operation(_Op1.Operand * _Op2.Operand, Operation.OpType.Load);
case Operation.OpType.Divide: return new Operation(_Op1.Operand / _Op2.Operand, Operation.OpType.Load);
case Operation.OpType.Subtract: return new Operation(_Op1.Operand - _Op2.Operand, Operation.OpType.Load);
}
return _Op1;
}
public Operation One(Operation _Op1 = null)
{
if (_Op1 == null)
return new Operation(1, Operation.OpType.Load);
return PerformOp(_Op1, new Operation(1, Operation.OpType.Load));
}
public Operation Two(Operation _Op1 = null)
{
if (_Op1 == null)
return new Operation(2, Operation.OpType.Load);
return PerformOp(_Op1, new Operation(2, Operation.OpType.Load));
}
public Operation Plus(Operation _Op1)
{
return new Operation(_Op1.Operand, Operation.OpType.Add);
}
public Operation Times(Operation _Op1)
{
return new Operation(_Op1.Operand, Operation.OpType.Multiply);
}
public void Dispose()
{
}
}
class Program
{
static void Main(string[] args)
{
using (Calc c = new Calc())
{
Console.WriteLine(c.Two(c.Times(c.One(c.Plus(c.Two())))));
}
Console.ReadKey();
}
}
public class Operation
{
public enum OpType { Load, Add, Subtract, Multiply, Divide}
public double Operand;
public OpType Operator;
public Operation(double _Operand, OpType _Operator)
{
Operand = _Operand;
Operator = _Operator;
}
public override string ToString()
{
return Operand.ToString();
}
}
public class Calc: IDisposable
{
private Operation PerformOp(Operation _Op1, Operation _Op2)
{
switch(_Op1.Operator)
{
case Operation.OpType.Add: return new Operation(_Op1.Operand + _Op2.Operand, Operation.OpType.Load);
case Operation.OpType.Multiply: return new Operation(_Op1.Operand * _Op2.Operand, Operation.OpType.Load);
case Operation.OpType.Divide: return new Operation(_Op1.Operand / _Op2.Operand, Operation.OpType.Load);
case Operation.OpType.Subtract: return new Operation(_Op1.Operand - _Op2.Operand, Operation.OpType.Load);
}
return _Op1;
}
public Operation One(Operation _Op1 = null)
{
if (_Op1 == null)
return new Operation(1, Operation.OpType.Load);
return PerformOp(_Op1, new Operation(1, Operation.OpType.Load));
}
public Operation Two(Operation _Op1 = null)
{
if (_Op1 == null)
return new Operation(2, Operation.OpType.Load);
return PerformOp(_Op1, new Operation(2, Operation.OpType.Load));
}
public Operation Plus(Operation _Op1)
{
return new Operation(_Op1.Operand, Operation.OpType.Add);
}
public Operation Times(Operation _Op1)
{
return new Operation(_Op1.Operand, Operation.OpType.Multiply);
}
public void Dispose()
{
}
}
class Program
{
static void Main(string[] args)
{
using (Calc c = new Calc())
{
Console.WriteLine(c.Two(c.Times(c.One(c.Plus(c.Two())))));
}
Console.ReadKey();
}
}
Раз вы нормальные ответы "не считаете полезными", то не обессудьте... Лично я вам отвечать больше никогда не буду. И других к этому призываю
человек столько трудился писал все это а вы его вопрос вообще убрали.
Похожие вопросы
- Вопрос по JavaScript, обращение к функции, которая находится в функции...
- Почему функция постоянно возвращает true или false? (но не должна)
- Проверка вызывалась ли функция (подробности внутри)
- Как в данном случае лучше заменить стрелочную функцию на обычную?
- Помогите доделать задачу используя функции
- Зачем разработчики js сделали так что там где могли быть функции они добавили методы встроенных объектов.
- Почему так работают функции?
- Как сделать что бы 2 функции выполнялись поочередно.JS
- Объясните мне, пожалуйста, что это за аргументы функции в javascript ( function(arg1, arg2, ..) ).
- почему в javascript в функцию можно передавать параметры без типа?
public Operation(double Operand, OpType Operator) {
this.Operand = Operand;
this.Operator = Operator;
}