PDA

View Full Version : متغیرها در VB



Metaldevil
شنبه 01 اردیبهشت 1386, 21:33 عصر
سلام دوستان من دارم با VB یه برنامه مینویسم و به یه متغیری احتیاج دارم که اعداد اعشاری بزرگتر از 32 رقم رو ساپورت کنه این کار رو با Double انجام دادم ولی همون طوری که میدونین Double بیشتر از 16 رقم رو ساپورت نمیکنه پیشنهاد شما چیه؟ :متفکر:در ضمن من تو VB خیلی مبتدی هستم.:خجالت:

CodeMasterX
یک شنبه 02 اردیبهشت 1386, 00:26 صبح
تا اونجایی که من می دونم برای اینکار باید از متغیرهای UnSigned استفاده کنی که توی زبانی مثل ++C-C ساپروت میشه ولی در وی بی نه!
حد اقل توی وی بی 6 همچین چیزی نداریم.
حالا جرا 32 رقمی ؟ مگه چیکار میخوایی بکنی ؟ مشکوک میزنی!
بازی های سنگین و سه بعدی هم فکر نمی کنم به این تعداد ارقام از اعداد اعشاری نیازی داشته باشن!

Metaldevil
یک شنبه 02 اردیبهشت 1386, 13:18 عصر
نه عزیز ما تو این کارا نیستیم یکی اینکه برا اطلاع خودم می خوام بدونم و دومی انکه در اصل می خوام یه ماشین حساب بنویسم.:چشمک:

CodeMasterX
یک شنبه 02 اردیبهشت 1386, 13:54 عصر
ماشین حساب نیازی به داده های اعشاری با 32 رقم نداره !!

Metaldevil
یک شنبه 02 اردیبهشت 1386, 14:03 عصر
نه آخه این ماشین حسابه یخده خفن تره:چشمک:
یه ماشین حساب مهندسی با دقت زیاد.

__H2__
یک شنبه 02 اردیبهشت 1386, 15:03 عصر
سلام
مجبورید، خودتان کلاسسی برای اینکار طراحی کنید و مقادیر بزرگ را به واحدهای 32 بیتی بشکنید. برای راهنمایی میگویم که مثل یک انسان فکر کنید! ما چه طور جمع های بزرگ را روی کاغذ انجام میدهیم در حالی که آنها را به واحد های یک رقمی میشکنیم؟ برای ضرب چه کار میکنیم، در حالی که فقط ضرب یک رقمی را حفظ هستیم؟ و...

البته بد نیست بدانید در VB8 متغییر های 8 و 16 بایتی صحیح هم وجود دارد و نیز قابلیت تعریف مجدد اپراتور نیز وجود دارد که طراحی نوع جدید با ظرفیت بالاتر را بسیار راحت میکند.

Metaldevil
یک شنبه 02 اردیبهشت 1386, 18:21 عصر
H2عزیز از راهنمایی شما ممنونم ولی اینایی رو که شما گفتین اصلا نفهمیدم:ناراحت: اگه میشه منو بیشتر راهنمایی کننین.

__H2__
دوشنبه 03 اردیبهشت 1386, 13:35 عصر
سلام
در مورد overload اپراتورها، امکانی است که به شما اجازه میدهد برای کلاس ها (Class) یا ساختارها (Structure) جدید که تعریف میکنید، اپراتور ها نیز مخصوص آن کلاس یا ساختار مجدداَ تعریف کنید. مثلاَ من در VB8 ساختار جدیدی به نام Int128 تعریف میکنم، حالا میتوان به VB8 بگویم اگر در کدهایم دید که بین دو Int128 اپراتور "+" آمد، چه باید بکنید. منظورم را گرفتید!
در VB6 مجبورم مثلاَ متدی با نام Add تعریف کنم و آن را Call کنم تا دو مقدار از نوعی که من تازه ساخته ام با هم جمع شوند و به هیچ وجه نمیتوانم بین دو ساختار جدید از اپراتور استفاده کنم، به بیان دیگر در VB6 استفاده از اپراتورها (+ - * \ And Or و...) فقط مخصوص نوع های بومی خود VB6 است (Integer و Long و...) و من برنامه نویس نمیتوانم از اپراتورها برای نوع های جدیدی که خودم میسازم استفاده کنم.

در مورد کدشکستن هم به نمونه های زیر توجه کنید که جمع 64 بیتی را به 4 جمع 16 بیتی میشکند. (البته به روش Binary و BCD )


Private Function Binary_Sum(X() As Integer, Y() As Integer) As Integer()
'Binary Sum 64bits By 4*16Bits
'Dim X(0 To 3) As Integer
'Dim Y(0 To 3) As Integer
Dim Sum(0 To 4) As Integer
'
'c c c c
'
' X3 X2 X1 X0
' +Y3 Y2 Y1 Y0
' ------------
'S4 S3 S2 S1 S0
'
Dim c As Long
Dim i As Integer
For i = 0 To 3
c = X(i) + Y(i) + c
s(i) = c And &HFFFF
c = c \ 16
Next
s(4) = c
Binary_Sum = Sum
End Function
Private Function BCD16_Sum(X() As Integer, Y() As Integer) As Integer()
'BCD16 Sum 64bits By 4*16Bits
'Dim X(0 To 3) As Integer
'Dim Y(0 To 3) As Integer
Dim Sum(0 To 4) As Integer
'
'c c c c
'
' X3 X2 X1 X0
' +Y3 Y2 Y1 Y0
' ------------
'S4 S3 S2 S1 S0
'
Dim c As Long
Dim i As Integer
For i = 0 To 3
c = X(i) + Y(i) + c

If c > 10000 Then
s(i) = c - 10000
c = c \ 10000
Else
s(i) = c
c = 0
End If
Next
s(4) = c
BCD16_Sum = Sum
End Function


البته این کدها را به عنوان نمونه نوشته ام و تستشان نکرده ام، ولی فکر کنم صحیح باشند.

Metaldevil
دوشنبه 03 اردیبهشت 1386, 13:39 عصر
H2عزیز ممنون از راهنماییت اگه به مشکلی تو این پروژه برخوردم بازم مزاحم می شم.