PDA

View Full Version : مشکل جمع اعداد بزرگ در VB



milad-fa
شنبه 01 آبان 1389, 17:11 عصر
سلام دوستان چطور میتونم اعداد بزرگ رو با هم جمع کنم که نتیجش اینجوری 1.001E+17 نباشه؟!
تشکر.

parsiyan_mohsen
شنبه 01 آبان 1389, 18: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, 21:17 عصر
دستت درد نکنه مرسی.
واسه ضرب هم فانکشی داری؟!
آیا راه های دیگه ای هم برای انجام این کار وجود داره؟
کسی میدونه با چه الگوریتمی میشه این رو 1.001E+17 به عدد تبدیل کرد؟!
ممنون.
تشکر.

MoS4k1
یک شنبه 02 آبان 1389, 00:39 صبح
بهترین روش استفاده از ارایه هاست

parsiyan_mohsen
یک شنبه 02 آبان 1389, 23: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



با تشکر