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