@Hilor

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication39
{
    class Program
    {
        static void Main(string[] args)
        {
            double x, a, n;
            Console.WriteLine("Введите x: ");
            x = Convert.ToDouble(Console.ReadLine());
            Console.WriteLine("Введите a: ");
            a = Convert.ToDouble(Console.ReadLine());
            Console.WriteLine("Введите n: ");
            n = Convert.ToDouble(Console.ReadLine());
 
            new Reshenie(x,a,n).raschet();
            Console.ReadKey();
        }
    }
    class Reshenie
    {
        private double x;
        private double a; 
        private double n;
        private double D;
        public Reshenie(double x, double a, double n)
        {
            this.x = x;
            this.a = a;
            this.n = n;
        }
        public void raschet()
        {
            D = Math.Tan(Math.Exp(a+2)) *Math.Pow(Math.Pow(a*x*n, 3) *Math.Sqrt(1.0 / Math.Tan(Math.Pow(x, Math.Exp(a+2)))), 3);
            Console.WriteLine("Ответ: {0}", D);
        }
    }
}


Не понимаю в чём здесь проблема, укажите пожалуйста неучу
6403707c90003378545056.jpeg 5е задание
  • Вопрос задан
  • 113 просмотров
Решения вопроса 1
vabka
@vabka Куратор тега C#
Токсичный шарпист
Сыграю в угадайку, раз уж ты не сказал, что ты дал на вход, что ожидал, и что получил.

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);
}

Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы