Задать вопрос
  • Почему при вводе программы, я могу вводить только единицы что бы выдало ответ?

    Сыграю в угадайку, раз уж ты не сказал, что ты дал на вход, что ожидал, и что получил.

    1. Ты вводил числа с точкой в качестве разделителя дробной части, а запускаешь ты программу в системе с русским языком. И ты соответственно получил FormatException. (По правилам русского языка в качестве разделителя целой и дробной части числа используется запятая, в отличие от точки, которая используется в английском)

    2. При определённых значениях твоё выражение выдаёт NaN вместо определённого числа. Это значит, что у тебя произошло деление на 0, число ушло в бесконечность, или в мнимые числа. Если такого не должно происходить - значит ты неправильно перенёс формулу из твоего задания в код

    По качеству кода

    1. Не нужно заворачивать в объект чистые функции.
    2. Вместо транслита лучше бы в переводчик закинуть более осмысленное название
    3. Не нужно вставлять лишние скобки
    4. Для удобства чтения длинных математических выражений, можно его разбить на несколько строк и расставить отступы.
    Console.WriteLine("Введите x: ");
    var x = double.Parse(Console.ReadLine());
    Console.WriteLine("Введите a: ");
    var a = double.Parse(Console.ReadLine());
    Console.WriteLine("Введите n: ");
    var n = double.Parse(Console.ReadLine());
    
    var result = Solution.Calculate(x, a, n);
    Console.WriteLine($"Ответ: {result}");
    
    public static class Solution {
      public static double Calculate(double x, double a, double n) =>
        Math.Pow(Math.Tan(Math.Exp(a+2)), 1.0/3.0) * 
        Math.Pow(
          Math.Pow(a*x*n, 3) * 
          Math.Sqrt(1.0 / Math.Tan(Math.Pow(x, Math.Exp(a+2)))),
         3);
    }


    Вариант с исправленной формулой

    public static class Solution {
      public static double Calculate(double x, double a, double n) =>
        // По заданию мы тут берём корень 3-ей степени и сразу возводим в 3ю степень. Убираем их, тк эти две операции отменяют друг друга.
        Math.Tan(Math.Exp(a+2)) *
        Math.Pow(
          Math.Pow(a*x*n, 3) * 
          //котангенс(x) = 1/тангенс(x)
          Math.Sqrt(1.0 / Math.Tan(Math.Pow(x, Math.Exp(a+2)))),
         3);
    }

    Ответ написан
    8 комментариев