아하
검색 이미지
생활꿀팁 이미지
생활꿀팁생활
생활꿀팁 이미지
생활꿀팁생활
어린알파카245
어린알파카24521.04.04

C# 코드 짜는 중 에러가 발생했습니다.

이차방정식의 해를 구하는 코드를 짜고 있는데 오류가 발생했습니다.

if문 전까지는 문제가 없는 거 확인했고 아마 if문이 문제인 듯합니다ㅠ 어디서 잘못된 걸까요?

using System;

class MainClass {

public static void Main (string[] args) {

double a, b, c, D;

Console.WriteLine("2차 방정식 'ax^2 + bx + c'의 해 구하기");

Console.WriteLine("'a, b, c'의 값을 차례대로 입력하세요.");

a = double.Parse(Console.ReadLine());

b = double.Parse(Console.ReadLine());

c = double.Parse(Console.ReadLine());

D = b*b-(4*a*c);

if(D>0)

{

double x, y;

x = (-b+(sqrt(b*b-4*a*c)))/(2*a);

y = (-b-(sqrt(b*b-4*a*c)))/(2*a);

Console.WriteLine(x);

Console.WriteLine(y);

}

else if(D == 0)

{

int x;

x =(-b/2*a);

Console.WriteLine(x);

}

else

{

Console.WriteLine("해가 없습니다.");

}

}

}

55글자 더 채워주세요.
답변의 개수
6개의 답변이 있어요!
  • 먼저, 입력받는 Read 변수 abc를 모두 초기화해주세요.

    그리고 각 Read부분에서 제대로 double변수가 들어왔는지 아니면 이상한 값이

    입력되었는지 확인하는 부분이 필요합니다.

    또한 x,y도 초기화해주어야 합니다.

    그리고 sqrt가 정확히 뭘하는건지 모르겠네요.

    sqrt에 대한 메서드 정의를 정확히 해주시고 프로그램 돌리시면 원하는 값 나올겁니다.


  • 안녕하세요

    소스를 확인해보니 몇군데에서 오류가 발생하네요

    Sqrt 사용하실 때 Math.Sqrt 로 사용해보세요~

    그리고 else if (D == 0) 아래 x = (-b / 2 * a); 가 있는데, x 는 int 이고 b , a 는 double 형식이기 때문에

    결과를 int 로 하거나 double 로 형변환시켜야합니다


  • 안녕하세요.

    예외처리 추가했고, c언어 복사해서 약간 수정한것으로 판단됩니다.

    sqrt => c#에서는 Math.Sqrt

    int x;

    x =(-b/2*a);

    형변환 필요합니다.

    비교해서 직접 분석해보시길 바랍니다.

    using System;

    namespace ConsoleApplication1

    {

    class MainClass

    {

    static void Main(string[] args)

    {

    //true - double값을 받을 때까지 재귀 함수를 계속 반복

    //false - double값이 아니면 종료

    bool bs = true;

    double a, b, c;

    Console.WriteLine("2차 방정식 'ax^2 + bx + c'의 해 구하기");

    Console.WriteLine("'a, b, c'의 값을 차례대로 입력하세요.");

    if (MainClass.DoubleTryParse(out a, "a", bs) && MainClass.DoubleTryParse(out b, "b", bs) && MainClass.DoubleTryParse(out c, "c", bs))

    {

    double D = b b - (4 a * c);

    if (D > 0)

    {

    double e = Math.Sqrt(D);

    double x = (-b + e) / (2 * a);

    double y = (-b - e) / (2 * a);

    Console.WriteLine(x);

    Console.WriteLine(y);

    }

    else if (D == 0)

    {

    double x = -b / (2.0 * a);

    if (double.IsNaN(x))

    x = 0.0;

    Console.WriteLine(x);

    }

    else

    {

    Console.WriteLine("해가 없습니다.");

    }

    }

    Console.WriteLine("종료");

    Console.ReadLine();

    }

    private static bool DoubleTryParse(out double value, string valueText, bool bs)

    {

    Console.WriteLine("{0}의 값을 입력해 주세요.", valueText);

    string temp = Console.ReadLine();

    bool b = double.TryParse(temp, out value);

    if (!b)

    {

    Console.WriteLine("Type : double만 입력 가능합니다.");

    if (bs)

    {

    return MainClass.DoubleTryParse(out value, valueText, bs);

    }

    }

    return b;

    }

    }

    }


  • 안녕하세요

    큰 문제는 없어 보이는데 writeline 할 때 string 으로 변환하는게 필요해 보입니다.

    현재 변수들은 double로 되어 있는데, 값 확인을 위해서는 string 변환이 필요합니다.

    또 하나 확인해야 하는 부분은 IF 문에서 sqrt 할 때

    double의 유효숫자가 범위를 넘었을 수도 있습니다

    이 부분도 확인해 보셔야 할 것 같습니다


  • 안녕하세요.

    main.cs(43,5): error CS0266: Cannot implicitly convert type `double' to `int'. An explicit conversion exists (are you missing a cast?)

    혹시 위와 같은 에러가 생기지 않는지요?

    맞다면

    x =(int)(-b/2*a);

    와 같이 45번 라인 코드에 (int)로 type casting을 해주시면 됩니다.


  • 1. sqrt는 Math 클래스에서 불러져와야 합니다. sqrt 를 Math.Sqrt로 바꾸시면 됩니다.

    2. else if문의 int로 선언되어있는 x에 double형 변수 a,b를 입력하였습니다. x를 double로 선언하세요.

    수정된 코드를 첨부합니다.

    using System;

    class MainClass

    {

    public static void Main(string[] args)

    {

    double a, b, c, D;

    Console.WriteLine("2차 방정식 'ax^2 + bx + c'의 해 구하기");

    Console.WriteLine("'a, b, c'의 값을 차례대로 입력하세요.");

    a = double.Parse(Console.ReadLine());

    b = double.Parse(Console.ReadLine());

    c = double.Parse(Console.ReadLine());

    D = b b - (4 a * c);

    if (D > 0)

    {

    double x, y;

    x = (-b + (Math.Sqrt(b b - 4 a c))) / (2 a);

    y = (-b - (Math.Sqrt(b b - 4 a c))) / (2 a);

    Console.WriteLine(x);

    Console.WriteLine(y);

    }

    else if (D == 0)

    {

    double x;

    x = (-1 b / 2 a);

    Console.WriteLine(x);

    }

    else

    {

    Console.WriteLine("해가 없습니다.");

    }

    }

    }