Въображаеми числа в C#

Опитвам се да направя проста конзолна програма, която може да решава квадратни уравнения. Все още не съм разбрал как да изчисля отговорите, ако дискриминантът е отрицателно число, така че просто показах съобщение като заместител. Може ли някой да обясни как се прави това? Ще публикувам цялата програма за всякакви предложения. Благодаря.

Правилно работещ код (Благодаря, Гюнтер Фокс):

if(discriminant < 0)
{
    double x1 = -b/(2*a);
    discriminant = -discriminant ;
    double x2 = Math.Sqrt(discriminant)/(2*a);
    double x3 = -Math.Sqrt(discriminant)/(2*a);
    Console.WriteLine(x1.ToString() + " + " + x2.ToString() + " * i ");
    Console.WriteLine(x1.ToString() + " + " + x3.ToString() + " * i ");

    Console.ReadLine();
}

Стар код:

class Program
{
    static void Main(string[] args)
    {
        int choice;
        double ans1;
        double ans2;

        Console.WriteLine("~~~~~~~~ TERMINAL CALCULATOR ~~~~~~~~");

        Console.WriteLine("1. Standard Calculator\n2. Quadratic Equation Solver\n3. Simple Interest Calculator");
        choice = int.Parse(Console.ReadLine());

        try
        {
            if (choice == 2)
            {
                Console.Write("Enter a value for 'a': ");
                double a = double.Parse(Console.ReadLine());

                Console.Write("Enter a value for 'b': ");
                double b = double.Parse(Console.ReadLine());

                Console.Write("Enter a value for 'c': ");
                double c = double.Parse(Console.ReadLine());

                //Quadratic Formula: x = (-b +- sqrt(b^2 - 4ac)) / 2a

                //Solve disriminant: (b*b) - (4*a*c)
                double discriminant = (b * b) - (4 * a * c);

                if (discriminant < 0)
                {
                    Console.WriteLine("No real solutions");
                    Console.ReadLine();
                }
                else
                {
                    double sqrt = Math.Sqrt(discriminant);
                    ans1 = (-b + sqrt) / (2 * a);
                    ans2 = (-b - sqrt) / (2 * a);
                    Console.WriteLine("{" + ans1 + " , " + ans2 + "}");
                    Console.ReadLine();
                }
            }

            if (choice == 1)
            {
                Console.Write("Enter first number: ");
                double num1 = double.Parse(Console.ReadLine());

                Console.Write("Enter second number (Enter 0 if you want to use sqrt): ");
                double num2 = double.Parse(Console.ReadLine());

                //Prompt user to choose an operation
                Console.WriteLine("Choose a math operator:\n1. +\n2. -\n3. x\n4. /\n5. ^\n6. Square root");
                int mathOpr = int.Parse(Console.ReadLine());

                if (mathOpr == 1)
                {
                    double answer = num1 + num2;
                    Console.WriteLine("\n\n" + answer);

                    Console.ReadLine();
                }

                if (mathOpr == 2)
                {
                    double answer = num1 - num2;
                    Console.WriteLine("\n\n" + answer);

                    Console.ReadLine();
                }

                if (mathOpr == 3)
                {
                    double answer = num1 * num2;
                    Console.WriteLine("\n\n" + answer);

                    Console.ReadLine();
                }

                if (mathOpr == 4)
                {
                    double answer = num1 / num2;
                    Console.WriteLine("\n\n" + answer);

                    Console.ReadLine();
                }

                if (mathOpr == 5)
                {
                    double answer = Math.Pow(num1, num2);
                    Console.WriteLine("\n\n" + answer);

                    Console.ReadLine();
                }

                if (mathOpr == 6)
                {
                    if (num1 < 0)
                    {
                        Console.WriteLine("\n\nNo real solutions");
                    }

                    else
                    {
                        double answer = Math.Sqrt(num1);
                        Console.WriteLine("\n\n" + answer);
                    }
                }

                else
                {
                    Console.WriteLine("That is not a valid option, idiot.");

                    Console.ReadLine();
                }
            }

            if (choice == 3)
            {
                Console.WriteLine("Enter initial amount: ");
                double initAmount = double.Parse(Console.ReadLine());

                Console.WriteLine("Enter interest rate (ex. 6% = .06): ");
                double rate = double.Parse(Console.ReadLine());

                Console.WriteLine("Enter time range (Year, Month, Week, etc.): ");
                string timeRange = Console.ReadLine();

                Console.WriteLine("Enter amount of " + timeRange.ToLower() + "s: ");
                int time = int.Parse(Console.ReadLine());

                for (int time2 = 1; time2 <= time; time2++)
                {
                    double totalAmount = initAmount * Math.Pow(1 + rate, time2);
                    Console.WriteLine("\n" + timeRange + " " + time2 + " ---------- " + totalAmount);
                }

                Console.ReadLine();
            }
        }
        catch 
        {
            Console.WriteLine("That is not a valid option.");
        }
    }
}

person pcnThird    schedule 20.12.2012    source източник
comment
Въображаеми числа или генерирани от системата числа?   -  person bonCodigo    schedule 20.12.2012
comment
@bonCodigo: Въображаеми числа.   -  person pcnThird    schedule 20.12.2012
comment
разгледайте това stackoverflow.com/questions/1452276/complex-number-notation също направете търсене в Google за комплексни числа с C# stackoverflow   -  person MethodMan    schedule 20.12.2012
comment
stackoverflow.com/ въпроси/10252740/   -  person MethodMan    schedule 20.12.2012
comment

Възможно ли е да деактивирате или изтриете cron задание от базата данни на magento.
Добавих cron задание и случайно добавих *, което изпълнява cron заданието на всеки секунди и функцията добавя данни в базата данни.
Поради което моят ftp достъп е спрял.
Искам да го деактивирам/изтрия от phpmyadmin.
Моля, помогнете

  -  person phant0m    schedule 20.12.2012


Отговори (2)


Обърнете дискриминацията и умножете по i:

double discriminate = (b*b)-(4*a*c);
if(discriminate < 0){
    double x1 = -b/(2*a);
    discriminate = -discriminate ;
    double x2 = Math.Sqrt(discriminate)/(2*a);
    double x3 = -Math.Sqrt(discriminate)/(2*a);
}
Console.WriteLine(x1.ToString() + " + " + x2.ToString() + " * i ");
Console.WriteLine(x1.ToString() + " + " + x3.ToString() + " * i ");
person Foggzie    schedule 20.12.2012
comment
Това ли имахте предвид: if (дискриминант ‹ 0) { double x1 = -b / (2 * a); дискриминант = -дискриминант; двойно x2 = Math.Sqrt(дискриминант) / (2 * a); двойно x3 = -Math.Sqrt(дискриминант) / (2 * a); Console.WriteLine(x1 + (x2 * Math.Sqrt(-1))); Console.WriteLine(x1 + (x3 * Math.Sqrt(-1))); Console.ReadLine(); } - person pcnThird; 20.12.2012
comment
Програмата показва NaN (не е число), за съжаление, или може би правя нещо нередно. Преди това опитах това: vcskicks.com/quadratic-formula.php, но все още показваше NaN като отговор. - person pcnThird; 20.12.2012
comment
Това е така, защото отговорът не е реално число. Стойността на Math.Sqrt(-1) не може да бъде представена с float или double. Вие сте WriteLines все още се опитвате да изчислите sqrt(-1). Вместо това просто добавете *i в края на вашия низ. - person Foggzie; 20.12.2012
comment
Тъй като 'i' е еквивалентен на корен квадратен от (-1), реших, че Math.Sqrt(-1) също ще работи, но пренебрегнах използването на 'double' в този случай. И така, какъв е правилният начин да направите това? Благодаря. - person pcnThird; 20.12.2012
comment
Това е така, защото отговорът не е реално число. Стойността на Math.Sqrt(-1) не може да бъде представена с float или double. Вие сте WriteLines все още се опитвате да изчислите sqrt(-1). Вместо това просто добавете *i към края на вашия низ.. Разбирам. Сега ще го пробвам. - person pcnThird; 20.12.2012
comment
Просто не поставяте отговора в двойно. Вие го форматирате като низ. Редактирах отговора си отново. - person Foggzie; 20.12.2012

Ако дискриминантът е отрицателен, можете ли просто да обърнете знака на дискриминанта, да направите изчислението на корена, след което да добавите i в края на резултата?

person Jonathan Huss    schedule 20.12.2012