PROGRAM LOGICAL_EXPRESSION
IMPLICIT NONE
REAL :: A, B, C, DISCRIMINANT, ROOT1, ROOT2
COMPLEX :: CROOT1, CROOT2
! PUT INITIAL VALUE
READ *, A, B, C
! CALCULATE THE DISCRIMINANT
DISCRIMINANT = B**2-(4. * A * C)
! CHECK IF DISCRIMINANT IS NONNEGATIVE. IF IT IS,
! CALCULATE AND DISPLAY THE ROOTS. OTHERWISE DISPLAY
! THE VLAUE OF THE DISCRIMINANT
! AND A NO-REAL-ROOTS MESSAGE.
IF (DISCRIMINANT < 0) THEN
!PRINT *, "COUPLE ROOTS"
DISCRIMINANT = SQRT(DISCRIMINANT)
PRINT *, "COMPLEX ROOTS"
CROOT1 = ((-B) + CMPLX(DISCRIMINANT)) / (2.*A)
CROOT2 = ((-B) - CMPLX(DISCRIMINANT)) / (2.*A)
PRINT *, "COMPLEX ROOT1", CROOT1
PRINT *, "COMPLEX ROOT2", CROOT2
ELSE
PRINT *, "COUPLE ROOTS"
DISCRIMINANT = SQRT(DISCRIMINANT)
ROOT1 = ((-B) + DISCRIMINANT) / (2.*A)
ROOT2 = ((-B) - DISCRIMINANT) / (2.*A)
PRINT *, "ROOT1=", ROOT1
PRINT *, "ROOT2=", ROOT2
END IF
END
근을 구하는 문제인데요 DISCRIMINANT가 0보다 작으면 복소수 값을 출력하는 프로그램을
만들려고 하는데요, 복소수를 어떻게 표현해야 하는지를 모르겠네요?
고수님들 부탁드립니다.
위의 프로그램은 DISCRIMINANT가 0보다 작으면 복소수 값을 출력하고 그렇지 않으면 실수형의
한 근 혹은 두 근을 출력하는 프로그램입니다.
보니까 DISCRIMINANT = SQRT(DISCRIMINANT) 이부분에서 에러가 나는군요. 음수다 보니까 근이 안구해지네요. 이렇게 하면 어떨까요? 위에 문장앞에 DISCRIMINANT=DISCRIMINANT*(-1.) 을 곱해서 양수로 만들어 줍니다. 그다음 복소수로 Z를 하나 선언하시고, 위위문장 다음에 Z=(0.,1.) 를 씁니다. 그다음 CROOT 구하는 식
첫댓글 제가 현제 포트란을 사용하지 못해서요. 포트란 도움말중 복소수찾아서 보시면 힌트를 얻을수 있을것입니다.
보니까 DISCRIMINANT = SQRT(DISCRIMINANT) 이부분에서 에러가 나는군요. 음수다 보니까 근이 안구해지네요. 이렇게 하면 어떨까요? 위에 문장앞에 DISCRIMINANT=DISCRIMINANT*(-1.) 을 곱해서 양수로 만들어 줍니다. 그다음 복소수로 Z를 하나 선언하시고, 위위문장 다음에 Z=(0.,1.) 를 씁니다. 그다음 CROOT 구하는 식
에서 CMPLX(DISCRIMINANT) 에 Z를 곱해주는 겁니다.