View Full Version : مشکل جمع اعداد بزرگ در VB
  
milad-fa
شنبه 01 آبان 1389, 18:11 عصر
سلام دوستان چطور میتونم اعداد بزرگ رو با هم جمع کنم که نتیجش اینجوری 1.001E+17 نباشه؟!
تشکر.
parsiyan_mohsen
شنبه 01 آبان 1389, 19:25 عصر
با سلام و احترام
دوست عزیز مراحلی رو که میگم دنبال کن :
1- سه تا تکست بزار تو فرمت به ترتیب اولی txtFirstNumber دومی txtSecondNumber سومی که حاصل جمع رو نشون میده رو بزار txtResult 
2- یک کامند
3- اسم فرمتم بزار frmmain 
------------------------------------
تو قسمت جنرال این کد رو بنویس : 
Option Explicit
 
یه فانکشن به صورت زیر تعریف میکنیم :
Function Add(ByVal Value1 As String, ByVal value2 As String) As String
    Dim v1, v2, t2 As String
    Dim Temp, t As Byte
    Dim i, j, k, TotalLength As Long
    Dim Result As String
    
    If (Len(Value1) > Len(value2)) Then
        v1 = Value1
        v2 = value2
    Else
        v2 = Value1
        v1 = value2
    End If
    
    ReDim ArrayV1(1 To Len(v1)) As Byte
    ReDim ArrayV2(1 To Len(v2)) As Byte
    k = Len(v1) + Len(v2) + 1
    ReDim ArrayResult(1 To k - 1) As Byte
    
    For i = 1 To Len(v1)
        t2 = Mid$(v1, i, 1)
        If (Not IsNumeric(t2)) Then
            Add = "Number is not Valid"
            Exit Function
        End If
        ArrayV1(i) = CByte(t2)
    Next i
    
    For i = 1 To Len(v2)
        t2 = Mid$(v2, i, 1)
        If (Not IsNumeric(t2)) Then
            Add = "Number is not Valid"
            Exit Function
        End If
        ArrayV2(i) = CByte(t2)
    Next i
    
    j = Len(v1)
    Temp = 0
    Result = ""
    
    For i = Len(v2) To 1 Step -1
        t = ArrayV2(i) + ArrayV1(j) + Temp
        Temp = t \ 10
        k = k - 1
        ArrayResult(k) = (t - Temp * 10)
        j = j - 1
    Next i
    
    For i = j To 1 Step -1
        t = ArrayV1(i) + Temp
        Temp = t \ 10
        k = k - 1
        ArrayResult(k) = (t - Temp * 10)
    Next i
    
    
    'Result = String((Len(v1) + Len(v2)), " ")
    
    If (Temp > 0) Then
        Result = Temp
    End If
    
    TotalLength = (Len(v1) + Len(v2))
    For i = k To TotalLength
        'Result = Result & ArrayResult(i)  original
        Result = Result + CStr(ArrayResult(i))
    Next i
    
    
    Add = Result
End Function
توی کامندتم اینها رو بنویس :
        Dim strStatistic, strResult As String
    Dim dblStartTime, dblEndTime As Double
    frmmain.txtResult.Text = ""
    
               
    
    frmmain.Refresh
    
    strResult = Add(Trim$(frmmain.txtFirstNumber.Text), Trim$(frmmain.txtSecondNumber.Text))
    frmmain.txtResult.Text = strResult
سؤاله خوبی بود چون تا حالا دقت نکرده بودم به چنین چیزی اما حالا به لطف شما تونستم این برنامه رو بنویسم. امیدوارم به دردت خورده باشه.
با تشکر
milad-fa
شنبه 01 آبان 1389, 22:17 عصر
دستت درد نکنه مرسی.
واسه ضرب هم فانکشی داری؟!
آیا راه های دیگه ای هم برای انجام این کار وجود داره؟
کسی میدونه با چه الگوریتمی میشه این رو 1.001E+17 به عدد تبدیل کرد؟!
ممنون.
تشکر.
MoS4k1
یک شنبه 02 آبان 1389, 01:39 صبح
بهترین روش استفاده از ارایه هاست
parsiyan_mohsen
دوشنبه 03 آبان 1389, 00:24 صبح
با سلام و احترام 
دوست عزیز من راه دیگری به ذهنم نمیرسه ، جواب این دوستمون هم که نوشتن از آرایه ها استفاده کن منم دقیقاً تو فانکشن از آرایه استفاده کردم.
واسه ضرب هم از این فانکشن استفاده کن :
 
Function Add(ByVal Value1 As String, ByVal value2 As String) As String
    Dim v1, v2, t2 As String
    Dim Temp, t As Byte
    Dim i, j, k, TotalLength As Long
    Dim Result As String
    
    If (Len(Value1) > Len(value2)) Then
        v1 = Value1
        v2 = value2
    Else
        v2 = Value1
        v1 = value2
    End If
    
    ReDim ArrayV1(1 To Len(v1)) As Byte
    ReDim ArrayV2(1 To Len(v2)) As Byte
    k = Len(v1) * Len(v2) + 1
    ReDim ArrayResult(1 To k - 1) As Byte
    
    For i = 1 To Len(v1)
        t2 = Mid$(v1, i, 1)
        If (Not IsNumeric(t2)) Then
            Add = "Number is not Valid"
            Exit Function
        End If
        ArrayV1(i) = CByte(t2)
    Next i
    
    For i = 1 To Len(v2)
        t2 = Mid$(v2, i, 1)
        If (Not IsNumeric(t2)) Then
            Add = "Number is not Valid"
            Exit Function
        End If
        ArrayV2(i) = CByte(t2)
    Next i
    
    j = Len(v1)
    Temp = 0
    Result = ""
    
    For i = Len(v2) To 1 Step -1
        t = ArrayV2(i) * ArrayV1(j) + Temp
        Temp = t \ 10
        k = k - 1
        ArrayResult(k) = (t - Temp * 10)
        j = j - 1
    Next i
    
    For i = j To 1 Step -1
        t = ArrayV1(i) + Temp
        Temp = t \ 10
        k = k - 1
        ArrayResult(k) = (t - Temp * 10)
    Next i
    
    
    'Result = String((Len(v1) + Len(v2)), " ")
    
    If (Temp > 0) Then
        Result = Temp
    End If
    
    TotalLength = (Len(v1) * Len(v2))
    For i = k To TotalLength
        'Result = Result & ArrayResult(i)  original
        Result = Result + CStr(ArrayResult(i))
    Next i
    
    
    Add = Result
End Function
با تشکر
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.