Public Class Form1 Class Complex Public R As Double, I As Double, EPS As Double Public Sub New(R As Double, I As Double, EPS As Double) Me.R = R : Me.I = I : Me.EPS = EPS End Sub Public Sub New(R As Double, I As Double) Me.R = R : Me.I = I : Me.EPS = 0.000001 End Sub Public Sub New(R As Double) Me.R = R : Me.I = 0 : Me.EPS = 0.000001 End Sub Public Function minusCom() As Complex Return New Complex(-Me.R, -Me.I, Me.EPS) End Function Public Function addDbl(R As Double) As Complex Return New Complex(Me.R + R, Me.I, Me.EPS) End Function Public Function subDbl(R As Double) As Complex Return New Complex(Me.R - R, Me.I, Me.EPS) End Function Public Function mulDbl(R As Double) As Complex Return New Complex(Me.R * R, Me.I * R, Me.EPS) End Function Public Function divDbl(R As Double) As Complex If Math.Abs(R) < Me.EPS Then MsgBox("逆数で0割りが起こりました") Return New Complex(0, 0) Else Return New Complex(Me.R / R, Me.I / R, Me.EPS) End If End Function Public Function Abs() As Double Return Math.Sqrt(Me.R * Me.R + Me.I * Me.I) End Function Public Function inv() As Complex Dim ImageP As Double, RealP As Double, S As Double ImageP = Me.I : RealP = Me.R If Math.Abs(ImageP) < Me.EPS Then If Math.Abs(RealP) < Me.EPS Then MsgBox("逆数で0割りが起こりました") Return New Complex(0, 0) Else Return New Complex(1 / RealP, 0) End If Else S = RealP * RealP + ImageP * ImageP If Math.Abs(S) < Me.EPS Then MsgBox("逆数で0割りが起こりました") Return New Complex(0, 0) Else Return New Complex(RealP / S, -ImageP / S) End If End If End Function Public Overrides Function ToString() As String Dim S As Double, SS As Double Dim K As String S = Me.I : SS = Me.R If Math.Abs(S) < 0.000005 And Math.Abs(SS) < 0.000005 Then Return "0.0000" ElseIf Math.Abs(S) < 0.000005 Then Return Format(Me.R, "#0.0000") ElseIf Math.Abs(SS) < 0.000005 Then Return Format(S, "#0.0000") & "*j" Else K = " - " If S > 0 Then K = " + " S = Math.Abs(S) Return Format(SS, "#0.0000") & K & Format(S, "#0.0000") & "*j" End If End Function Public Function Sqrt() As Complex Dim SS As Double SS = Math.Sqrt(Me.R * Me.R + Me.I * Me.I) Return New Complex(Math.Sqrt((SS + Me.R) / 2), Math.Sqrt((SS - Me.R) / 2)) End Function Public Function Exp() As Complex Dim EP As Double, TH As Double EP = Math.Exp(Me.R) : TH = Me.I Return New Complex(Math.Cos(TH) * EP, Math.Sin(TH) * EP) End Function Public Overrides Function Equals(obj As Object) As Boolean Return MyBase.Equals(obj) End Function Public Overrides Function GetHashCode() As Integer Return MyBase.GetHashCode() End Function Public Shared Operator +(ByVal a As Complex, ByVal b As Complex) As Complex Return New Complex(a.R + b.R, a.I + b.I) End Operator Public Shared Operator -(ByVal a As Complex, ByVal b As Complex) As Complex Return New Complex(a.R - b.R, a.I - b.I) End Operator Public Shared Operator *(ByVal a As Complex, ByVal b As Complex) As Complex Return New Complex(a.R * b.R - a.I * b.I, a.R * b.I + a.I * b.R) End Operator Public Shared Operator /(ByVal a As Complex, ByVal b As Complex) As Complex Return a * b.inv() End Operator Public Shared Operator ^(ByVal X As Complex, ByVal N As Integer) As Complex Dim P As Complex = New Complex(1, 0) Dim abN As Integer = Math.Abs(N) Do While abN > 0 If (abN Mod 1) Then P = P * X abN = abN / 2 : X = X * X Loop If N < 0 Then Return P.inv() Else Return P End If End Operator End Class Public C1 As Complex, C2 As Complex, CR As Complex Public Function setImage(I As Double) As Complex Return New Complex(0, I) End Function Public Function strCom(A As Complex) As String Dim S As Double, SS As Double Dim K As String S = A.I : SS = A.R If Math.Abs(S) < 0.000005 And Math.Abs(SS) < 0.000005 Then strCom = "0.0000" ElseIf Math.Abs(S) < 0.000005 Then strCom = Format(A.R, "#0.0000") ElseIf Math.Abs(SS) < 0.000005 Then strCom = Format(S, "#0.0000") & "*j" Else K = " - " If S > 0 Then K = " + " S = Math.Abs(S) strCom = Format(A.R, "#0.0000") & K & Format(S, "#0.0000") & "*j" End If End Function Private Sub setData() Dim R1 As Double, I1 As Double, R2 As Double, I2 As Double R1 = Val(TextBox1.Text) : I1 = Val(TextBox2.Text) : C1 = New Complex(R1, I1) R2 = Val(TextBox3.Text) : I2 = Val(TextBox4.Text) : C2 = New Complex(R2, I2) End Sub Private Sub setResult() TextBox5.Text = CR.R : TextBox6.Text = CR.I End Sub Private Sub Comp() Dim S As String = ComboBox1.SelectedItem Select Case S Case "+" : CR = C1 + C2 Case "-" : CR = C1 - C2 Case "*" : CR = C1 * C2 Case "/" : CR = C1 / C2 Case "+$" : CR = C1.addDbl(C2.R) Case "-$" : CR = C1.subDbl(C2.R) Case "*$" : CR = C1.mulDbl(C2.R) Case "/$" : CR = C1.divDbl(C2.R) Case "Abs" : CR = New Complex(C1.Abs()) Case Else : CR = New Complex(0, 0) End Select End Sub Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click setData() Comp() setResult() End Sub Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load ComboBox1.Items.Add("+") ComboBox1.Items.Add("-") ComboBox1.Items.Add("*") ComboBox1.Items.Add("/") ComboBox1.Items.Add("+$") ComboBox1.Items.Add("-$") ComboBox1.Items.Add("*$") ComboBox1.Items.Add("/$") ComboBox1.Items.Add("Abs") End Sub End Class