아하
생활

생활꿀팁

어린알파카245
어린알파카245

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개의 답변이 있어요!
    • 빠른백로295
      빠른백로295

      먼저, 입력받는 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("해가 없습니다.");

      }

      }

      }