⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 圆周率计算.frm

📁 在数值计算中
💻 FRM
字号:
VERSION 5.00
Begin VB.Form Form1 
   BackColor       =   &H80000016&
   BorderStyle     =   1  'Fixed Single
   Caption         =   "Pi Calculator"
   ClientHeight    =   5580
   ClientLeft      =   45
   ClientTop       =   330
   ClientWidth     =   7320
   LinkTopic       =   "Form1"
   MaxButton       =   0   'False
   MinButton       =   0   'False
   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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -