Доброго времени суток.
Написал скрипт, которые решает квадратное уравнение вида a*x^2+b*x+c=0. Autoit работает с десятичными дробями, а вот с обыкновенными вроде нет, а я хочу, что бы ответы были представлены обыкновенными дробями или выражениями. Но возникла проблема с уравнением 12*x^2-7*x+1=0. как я не крутил - число под корнем десятичная дробь. Подскажите, что я не учел?
Написал скрипт, которые решает квадратное уравнение вида a*x^2+b*x+c=0. Autoit работает с десятичными дробями, а вот с обыкновенными вроде нет, а я хочу, что бы ответы были представлены обыкновенными дробями или выражениями. Но возникла проблема с уравнением 12*x^2-7*x+1=0. как я не крутил - число под корнем десятичная дробь. Подскажите, что я не учел?
Код:
Local $R = ""
$win = GUICreate("",200 , 100)
$a = GUICtrlCreateInput("12", 10, 10, 150, 17)
$b = GUICtrlCreateInput("-7", 10, 30, 150, 17)
$c = GUICtrlCreateInput("1", 10, 50, 150, 17)
$button = GUICtrlCreateButton("GO", 100, 70, 50)
GUISetState()
While True
Global $msg = GUIGetMsg()
If $msg =-3 Then Exit
If $msg = $button Then
go()
EndIf
WEnd
func go()
Local $An = Number(GUICtrlRead($a))
Local $Bn = Number(GUICtrlRead($b))
Local $Cn = Number(GUICtrlRead($c))
Global $A1 = - $Bn/$An/2
Global $A2 = - $Bn/$An/2
Global $e = $A1^2 - $Cn/$An
If $e > 0 Then
_q()
If StringIsInt(Sqrt($e)) = 1 Then
If StringIsInt(Abs($A1)) = 1 And StringIsInt(Abs($A2)) = 1 Then
$A1 = $A1 + Sqrt($e)
$A2 = $A2 - Sqrt($e)
Else
$A1 &= " + " & Sqrt($e)
$A2 &= " - " & Sqrt($e)
EndIf
ElseIf StringIsInt(Sqrt($e)) = 0 Then
If StringIsInt($e) = 0 Then
For $tr = 1 To 100000 Step +1
$jr = $e*$tr
If StringIsInt($jr) = 1 Then
$e = $jr & "/" & $tr
ExitLoop
EndIf
Next
EndIf
$A1 &= " + " & "Sqrt" & "(" & $e & ")"
$A2 &= " - " & "Sqrt" & "(" & $e & ")"
EndIf
ElseIf $e < 0 Then
_q()
If StringIsInt(Sqrt(Abs($e))) = 1 Then
$A1 &= " + " & Sqrt(Abs($e)) & "*i"
$A2 &= " - " & Sqrt(Abs($e)) & "*i"
Else
If StringIsInt(Abs($e)) = 0 Then
For $t = 1 To 100000
$j = $e*$t
If StringIsInt($j) = 1 Then
$e = $j & "/" & $t
ExitLoop
EndIf
Next
EndIf
EndIf
$A1 &= " + " & "Sqrt" & "(" & -$e & ")*i"
$A2 &= " - " & "Sqrt" & "(" & -$e & ")*i"
ElseIf Abs($e) = 1 Then
_q()
$A1 &= " + i"
$A2 &= " - i"
EndIf
$R = ConsoleWrite("X1 = " & $A1 & @CR & "X2 = " & $A2 & @CR)
Return $R
EndFunc
Func _q()
If StringIsInt(Abs($A1)) = 0 Then
For $m = 1 To 100000
$o = $A1*$m
If StringIsInt($o) = 1 Then
$A1 = $o & "/" & $m
ExitLoop
EndIf
Next
ElseIf StringIsInt(Abs($A1)) = 1 Then
Return $A1
EndIf
If StringIsInt(Abs($A2)) = 0 Then
For $v = 1 To 100000
$y = $A2*$v
If StringIsInt($y) = 1 Then
$A2 = $y & "/" & $v
ExitLoop
EndIf
Next
ElseIf StringIsInt(Abs($A2)) = 1 Then
Return $A2
EndIf
;~ If StringIsInt(Abs($e)) = 0 Then
;~ For $t = 1 To 100000
;~ $j = $e*$t
;~ If StringIsInt($j) = 1 Then
;~ $e = $j & "/" & $t
;~ ExitLoop
;~ EndIf
;~ Next
;~ EndIf
EndFunc