代碼如下﹕另存為窗口﹐先申明不是我寫的
VERSION 5.00
Begin VB.Form Form1
BackColor = &H80000016&
BorderStyle = 1 'Fixed Single
Caption = "Pi Calculator"
ClientHeight = 5580
ClientLeft = 45
ClientTop = 330
ClientWidth = 7320
Icon = "Pi.frx":0000
LinkTopic = "Form1"
MaxButton = 0 'False
MinButton = 0 'False
MouseIcon = "Pi.frx":030A
MousePointer = 99 'Custom
ScaleHeight = 5580
ScaleWidth = 7320
StartUpPosition = 2 'CenterScreen
Begin VB.TextBox OutputBox
BeginProperty Font
Name = "MS Sans Serif"
Size = 13.5
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
ForeColor = &H0000FF00&
Height = 1575
Left = 0
MultiLine = -1 'True
ScrollBars = 2 'Vertical
TabIndex = 2
Top = 675
Width = 7335
End
Begin VB.TextBox TextBox_LengthOfNumbers
BackColor = &H80000014&
BeginProperty Font
Name = "Times New Roman"
Size = 18
Charset = 0
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
ForeColor = &H0000FF00&
Height = 480
Left = 45
TabIndex = 1
Text = "10"
Top = 45
Width = 4335
End
Begin VB.CommandButton CalculateButton
Caption = "Pi !"
BeginProperty Font
Name = "Times New Roman"
Size = 26.25
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 630
Left = 45
TabIndex = 0
Top = 4905
Width = 1785
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Dim CalculatingPi As Integer
Sub CalculateButton_Click()
If CalculatingPi = False Then
CalculatePi
Else
End
End If
End Sub
Sub CalculatePi()
Dim TimeSpent As Double
TimeSpent = Timer
OutputBox = "Initializing": DoEvents
CalculatingPi = True
CalculateButton.Caption = "Stop!"
Dim X As Integer
Dim CarryPosition As Integer
Dim NumberOfLoops As Integer
Dim LengthOfNumbers As Integer
LengthOfNumbers = TextBox_LengthOfNumbers + 3
NumberOfLoops = Int(2 / 3 * LengthOfNumbers)
ReDim ArcTangent5(1 To LengthOfNumbers) As String * 1
ReDim ArcTangent239(1 To LengthOfNumbers) As String * 1
ReDim MultipliedArcTangent5(1 To LengthOfNumbers + 1) As String * 1
ReDim MultipliedArcTangent239(1 To LengthOfNumbers + 1) As String * 1
OutputBox = "Calculating ArcTangent of 1/5": DoEvents
FindArcTangent 5, NumberOfLoops, LengthOfNumbers, ArcTangent5()
OutputBox = "Calculating the ArcTangent of 1/239": DoEvents
FindArcTangent 239, NumberOfLoops, LengthOfNumbers, ArcTangent239()
OutputBox = "Multiplying ArcTan of 1/5 by 16": DoEvents
MultiplyArray ArcTangent5(), 16, MultipliedArcTangent5()
OutputBox = "Multiplying ArcTan of 1/239 by 4": DoEvents
MultiplyArray ArcTangent239(), 4, MultipliedArcTangent239()
OutputBox = "Subtracting the Multiplied Arctangents": DoEvents
For X = LengthOfNumbers To 1 Step -1
If MultipliedArcTangent5(X) < MultipliedArcTangent239(X) Then
CarryPosition = X - 1
Do Until MultipliedArcTangent5(CarryPosition) <> "0"
MultipliedArcTangent5(CarryPosition) = "9"
CarryPosition = CarryPosition - 1
Loop
MultipliedArcTangent5(CarryPosition) = CStr(CInt(MultipliedArcTangent5(CarryPosition)) - 1)
MultipliedArcTangent5(X) = CStr((CInt(MultipliedArcTangent5(X)) + 10) - CInt(MultipliedArcTangent239(X)))
Else
MultipliedArcTangent5(X) = CStr(CInt(MultipliedArcTangent5(X)) - CInt(MultipliedArcTangent239(X)))
End If
DoEvents
Next X
Dim PiValue As String
OutputBox = ""
For X = 1 To LengthOfNumbers - 3
PiValue = PiValue & MultipliedArcTangent5(X)
If X Mod 5 = 0 Then
PiValue = PiValue & " "
End If
Next X
OutputBox = PiValue
MsgBox "Pi calculated to " & LengthOfNumbers - 3 & " decimal places." & Chr$(13) & "Completed " & NumberOfLoops & " iterations." & Chr$(13) & "Spent " & (Timer - TimeSpent) / 60 & " minutes calculating.", 64, "Calculations Complete"
CalculatingPi = False
End Sub
Sub FindArcTangent(ArcTanToFind As Integer, NumberOfLoops As Integer, LengthOfNumbers As Integer, ArcTangent() As String * 1)
Dim StartPos As Integer
Dim Sum As Long
Dim X As Integer
Dim Divisor As Long
Dim Remainder As Long
Dim CarryPosition As Long
Dim DividedInto As Integer
ReDim Answer(1 To LengthOfNumbers) As String * 1
ReDim Divided(1 To LengthOfNumbers) As String * 1
StartPos = 1
For X = 1 To LengthOfNumbers
ArcTangent(X) = "0"
Divided(X) = "0"
Answer(X) = "0"
Next X
Select Case ArcTanToFind
Case 5
ArcTangent(1) = "2"
Case 239
X = 1
FillInNumbers:
If X <= LengthOfNumbers Then ArcTangent(X) = "0": X = X + 1
If X <= LengthOfNumbers Then ArcTangent(X) = "0": X = X + 1
If X <= LengthOfNumbers Then ArcTangent(X) = "4": X = X + 1
If X <= LengthOfNumbers Then ArcTangent(X) = "1": X = X + 1
If X <= LengthOfNumbers Then ArcTangent(X) = "8": X = X + 1
If X <= LengthOfNumbers Then ArcTangent(X) = "4": X = X + 1
If X <= LengthOfNumbers Then ArcTangent(X) = "1": X = X + 1
If X <= LengthOfNumbers Then GoTo FillInNumbers
End Select
For X = 1 To LengthOfNumbers
Answer(X) = ArcTangent(X)
Next X
Divisor = 3
Do Until (Divisor - 1) / 2 = NumberOfLoops + 1
For X = Int(StartPos) To LengthOfNumbers
Remainder = Remainder * 10
Remainder = Remainder + CInt(Answer(X))
Do Until Remainder < (ArcTanToFind ^ 2)
Remainder = Remainder - (ArcTanToFind ^ 2)
DividedInto = DividedInto + 1
Loop
Answer(X) = CStr(DividedInto)
Divided(X) = Answer(X)
DividedInto = 0
DoEvents
Next X
DoneDividing = 0
Remainder = 0
DividedInto = 0
For X = Int(StartPos) To LengthOfNumbers
Remainder = Remainder * 10
Remainder = Remainder + CInt(Divided(X))
Do Until Remainder < Divisor
Remainder = Remainder - Divisor
DividedInto = DividedInto + 1
Loop
Divided(X) = CStr(DividedInto)
DividedInto = 0
DoEvents
Next X
Remainder = 0
DividedInto = 0
If Divisor Mod 4 = 1 Then
For X = LengthOfNumbers To 1 Step -1
Sum = Sum + CInt(Divided(X)) + CInt(ArcTangent(X))
ArcTangent(X) = CStr(Sum Mod 10)
Sum = Int(Sum / 10)
DoEvents
Next X
Sum = 0
Else
For X = LengthOfNumbers To 1 Step -1
If ArcTangent(X) < Divided(X) Then
CarryPosition = X - 1
Do Until ArcTangent(CarryPosition) <> "0"
ArcTangent(CarryPosition) = "9"
CarryPosition = CarryPosition - 1
Loop
ArcTangent(CarryPosition) = CStr(CInt(ArcTangent(CarryPosition)) - 1)
ArcTangent(X) = CStr((CInt(ArcTangent(X)) + 10) - CInt(Divided(X)))
Else
ArcTangent(X) = CStr(CInt(ArcTangent(X)) - CInt(Divided(X)))
End If
DoEvents
Next X
CarryPosition = 0
End If
Divisor = Divisor + 2
OutputBox = "Calculating ArcTangent of 1/" & ArcTanToFind & ", Done with iteration " & (Divisor - 1) / 2
DoEvents
StartPos = StartPos + 1.25
Loop
End Sub
Sub MultiplyArray(ArrayToMultiply() As String * 1, NumberToMultiplyBy As Integer, Answer() As String * 1)
Dim Position As Integer
Dim SmallAnswer As Integer
Dim NumberToCarry As Integer
For Position = TextBox_LengthOfNumbers + 3 To 1 Step -1
SmallAnswer = (CInt(ArrayToMultiply(Position)) * NumberToMultiplyBy) + NumberToCarry
Answer(Position) = Right$(CStr(SmallAnswer), 1)
If SmallAnswer < 10 Then
NumberToCarry = 0
Else
NumberToCarry = CInt(Left$(CStr(SmallAnswer), CInt(Len(CStr(SmallAnswer))) - 1))
End If
DoEvents
Next Position
End Sub
本文地址:http://com.8s8s.com/it/it6551.htm