PDA

View Full Version : مشکل در تبدیل مبنا ها



mahdi.manian
چهارشنبه 18 اردیبهشت 1392, 01:08 صبح
با سلام.

دوستان برنامه ای نوشتم که در مبنای 16 و سایر مبنا ها 4 عمل اصلی را انجام میده. در اولین جمع یا کسر یا ضرب یا تقسیم درست عمل می کنه ولی در محاسبات بعدی اشتباه می کنه! دوستان مشکل کجاست؟


با تشکر.

سپهر-111
چهارشنبه 18 اردیبهشت 1392, 08:14 صبح
با سلام.

دوستان برنامه ای نوشتم که در مبنای 16 و سایر مبنا ها 4 عمل اصلی را انجام میده. در اولین جمع یا کسر یا ضرب یا تقسیم درست عمل می کنه ولی در محاسبات بعدی اشتباه می کنه! دوستان مشکل کجاست؟


با تشکر.

متغیرهایی که در برنامه استفاده کردی را در اخر هر محاسبه مقدارشون صفرکن یا در اول هر محاسبه مقداشون صفر کن

mahdi.manian
چهارشنبه 18 اردیبهشت 1392, 10:59 صبح
ببینید این یک ماشین حساب هست که وقتی روی دکمه های + و - و / و * کاربر کلیک کنه، text1.text توی a ریخته میشه. a از نوع integer هست.

بعد در مبنای 16 که می خواد جمع کنه اول a را تبدیل به مبنای 10 می کنه بعد مقدار دومی که در text1.text هست را تبدیل به مبنای 10 می کنه. بعد این دو تا توی دو تا متغیر ریخته میشه و در مبنای 10 با هم جمع میشن و حاصل توی یک متغیر دیگه ریخته میشه و در نهایت تبدیل به مبنای 16 میشه و نمایش داده میشه.

من تمامی متغیر ها را صفر کردم ولی این متغیر a را نمیشه صفر کرد چون اگه صفر بشه دیگه کار نمی کنه!

مشکل چیه؟! دوستان اگه لازم هست بگید تا سورس کد را بگذارم.


با تشکر.

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

mahdi.manian
چهارشنبه 18 اردیبهشت 1392, 13:15 عصر
متن کامل کد ها:


i = 0
m = 0
d = 0
n = 0
For i = 1 To Len(a)
m = Right(a, 1)
a = Mid(a, 1, Len(a) - 1)
Select Case m
Case "A"
d = 10
Case "B"
d = 11
Case "C"
d = 12
Case "D"
d = 13
Case "E"
d = 14
Case "F"
d = 15
Case Else
d = Val(m)
End Select
aaa = aaa + (d * (16 ^ (i - 1)))
Next i
aa = 0
ii = 0
mm = 0
dd = 0
nn = 0
For ii = 1 To Len(Text1.Text)
mm = Right(Text1.Text, 1)
Text1.Text = Mid(Text1.Text, 1, Len(Text1.Text) - 1)
Select Case mm
Case "A"
dd = 10
Case "B"
dd = 11
Case "C"
dd = 12
Case "D"
dd = 13
Case "E"
dd = 14
Case "F"
dd = 15
Case Else
dd = Val(mm)
End Select
aa = aa + (dd * (16 ^ (ii - 1)))
Next ii
Select Case c
Case Is = 0
resh = Val(aaa + Val(aa))
Case Is = 1
resh = Val(aaa - Val(aa))
Case Is = 2
resh = Val(aaa * Val(aa))
Case Is = 3
resh = Val(aaa / Val(aa))
End Select
Text1.Text = Hex(resh)
End If


من متغیر های زیرا هم در general تعریف کردم:

Dim a As Variant, b As Integer, c As Integer, ms As Integer
Dim aaa, i, m, d, n As Integer
Dim aa, ii, mm, dd, nn As Integer
Dim dobedah1, dobedah2, x, xx, res1, res2, reskol, result As Long


با تشکر.

mahdi.manian
چهارشنبه 18 اردیبهشت 1392, 21:24 عصر
دوستان چطوری این مشکل را حل کنم؟

با تشکر.

سپهر-111
پنج شنبه 19 اردیبهشت 1392, 08:23 صبح
دوستان چطوری این مشکل را حل کنم؟

با تشکر.

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

mahdi.manian
پنج شنبه 19 اردیبهشت 1392, 20:52 عصر
آقا دستت درد نکنه! متغیر ها را ذاشتم توی خود دکمه درست شد! نباید توی general می گذاشتم! ممنون.

الان به لطف شما مبنای 2 و 16 کامل کار می کنه. ولی مبنای 8 مقادیری که حساب می کنه با ماشین حساب یکم متفاوت هست!

کد ها را ببینید:

i = 1
ii = 1
dobedah1 = 1
dobedah2 = 1

Do While a <> 0
x = a Mod 10
a = a / 10
res1 = res1 + x * i
i = i + 1
Loop

dobedah1 = res1

Do While Text1.Text <> 0
xx = Text1.Text Mod 10
Text1.Text = Text1.Text / 10
res2 = res2 + xx * ii
ii = ii + 1
Loop
dobedah2 = res2


Select Case c
Case Is = 0
reskol = Val(dobedah1) + Val(dobedah2)
Case Is = 1
reskol = Val(dobedah1) - Val(dobedah2)
Case Is = 2
reskol = Val(dobedah1) * Val(dobedah2)
Case Is = 3
reskol = Val(dobedah1) / Val(dobedah2)
End Select

Text1.Text = Oct(reskol)


مشکل کجاست؟ من جاهای دیگه هم همینطوری کد نویسی کردم مشکلی نداره! الگوریتم این هست که اول دو مقدار را میگیره تبدیل به مبنای 10 می کنه بعد با هم جمعشون می کنه و سپس حاصل تبدیل به مبنای 8 میشه.

مشکل از کجا می تونه باشه؟


با تشکر.