Programatorul care se respectă, înainte de a se năpusti să scrie un text sursă oarecare stă și cugetă. El se întreabă:
- dacă se ia în calcul scrierea programului pentru a,b și c diferiți de zero?
- dacă programul calculează numai în cazul rădăcinilor reale și diferite?
- dacă se iau în considerare și cazurile particulare?
- dacă se scrie forma cea mai generală de program?
Răspunsurile la aceste întrebări îl duc pe programator către variante mai simple sau mai complicate de program. Aici este prezentată o variantă de soluționare a problemei folosind un subprogram.
SUBROUTINE REZECGR2(A,B,C,X1RE,X1CMPL,X2RE, X2CMPL,IK)
IF((A.EQ.0).AND.(B.EQ.0).AND.(C.EQ.0)) GO TO 70
IF((A.EQ.0).AND.(B.EQ.0).AND.(C.NE.0)) GO TO 60
IF((A.EQ.0).AND.(B.NE.0).AND.(C.EQ.0)) GO TO 50
IF((A.EQ.0).AND.(B.NE.0).AND.(C.NE.0)) GO TO 40
IF((A.NE.0).AND.(B.EQ.0).AND.(C.NE.0).AND.(-C/A.GT.0)) GO TO 30
IF((A.NE.0).AND.(B.EQ.0).AND.(C.NE.0).AND.(-C/A.LT.0)) GO TO 20
DELTA=B*B 4*A*C
IF(DELTA.LT.0) GO TO 10
IK=1
SQRDELTA=SRQT(DELTA)
X1RE=(-B+SQRDELTA)/(2*A)
X2RE=(-B-SQRDELTA)/(2*A)
X1CMPL=0.
X2CMPL=0.
GO TO sigma
10 IK=2
SQRDELTA=SRQT(-DELTA)
X1RE=(-B)/(2*A)
X2RE=(-B)/(2*A)
X1CMPL=(SQRDELTA)/(2*A)
X2CMPL=(-SQRDELTA)/(2*A)
GO TO sigma
20 IK=3
SQRDELTA=SRQT(-C/A)
X1RE=0.
X2RE=0.
X1CMPL=SQRDELTA
X2CMPL=-SQRDELTA
GO TO sigma
30 IK=4
SQRDELTA=SRQT(C/A)
X1RE=0.
X2RE=0.
X1CMPL=SQRDELTA
X2CMPL=-SQRDELTA
GO TO sigma
40 IK=5
X1RE=-C/B
X2RE=-C/B
X1CMPL=0
X2CMPL=0
GO TO sigma
50 IK=6
X1RE=0
X2RE=0
X1CMPL=0
X2CMPL=0
GO TO sigma
60 IK=7
GO TO sigma
70 IK=8
RETURN
STOP
Variabila IK va avea următoarele valori:
IK = 1 dacă a, b și c sunt toți diferiți de zero și discriminantul este pozitiv;
IK = 2 dacă a, b și c sunt toți diferiți de zero și discriminantul este negativ;
IK = 3 dacă a și c sunt diferiți de 0, b este zero și raportul c/a este negativ;
IK = 4 dacă a și c sunt diferiți de 0, b este zero și raportul c/a este pozitiv;
IK = 5 dacă a este zero, b și c sunt nenuli;
IK = 6 dacă a, și c sunt nuli și b este nenul, soluția este X1=0;
IK = 7 dacă a, b sunt nuliși c este nenul, situație imposibilă;
IK = 8 dacă a, b și c sunt toți egali cu zero și nu avem o ecuație.
Semnificațiile identificatorilor utilizați în subrogram sunt:
REZECGR2 - numele subprogramului de rezolvare ecuație de gradul al II-lea;
A,B,C - coeficienții ecuației de gradul al II-lea;
X1RE - partea reală a primei soluții;
X2RE - partea reală a celei de a doua soluții;
X1CMPL- partea imaginară a primei soluții;
X2CMPL- partea imaginară a primei soluții;
IK - indicatorul de stare al subprogramului;
SQRDELTA - valoarea radicalului din modulul discriminantului.
Cel ce utilizează acest subprogram este obligat să testeze valoarea indicatorului de stare IK și prelucrările sale să fie adaptate la semnificația valorilor atribuite prin execuția subrutinei.
(23 decembrie 2017)
No comments:
Post a Comment