سلام...یک سوال دارم..واقعا هم روی این سوال فکر کردم ولی چون به نتیجه نرسیدم این تاپیک را زدم..
برنامه ای میخوام که دو رشته عددی نامحدود را بگیره و 4 عمل اصلی(+*-/) را روی اون ها انجام بده...از long که نمیشه استفاده کرد چون گفتم نامحدود...من خودم تصمیم داشتم از تابع mid استفاده کنم و این کار را هم کردم ولی واقعا گیج شدم..اگر ممکنه سورس این برنامه را در اختیارم بزارید
بزار ببینم:
آها خوب من برات Sum رو نوشتم خیلی راحت می تونی به تفریق تبدیلش کنی و از همن کد و الگوریتم ایده بگیر برای ضرب و تقسیم. کد های خودت رو بزار تا ببینیم چی کار کردی:
کد:
A$ = InputBox("Please Input First Number:", "Number 1")
B$ = InputBox("Please Input Second Number:", "Number 2")
Dim LrgLenNum As String, SmlLenNum As String
LrgLenNum = IIf(Len(A) > Len(B), A, B)
SmlLenNum = IIf(Len(A) <= Len(B), A, B)
ISumS = Len(SmlLenNum) + 1
For ISum = Len(LrgLenNum) To 1 Step -1
ISumS = ISumS - 1
If ISumS > 0 Then
mSm = Val(Mid$(LrgLenNum, ISum, 1)) + Val(Mid$(SmlLenNum, ISumS, 1)) + M10
Else
mSm = Val(Mid$(LrgLenNum, ISum, 1)) + M10
End If
If mSm >= 10 Then
M10 = mSm \ 10
mSm = mSm - 10
Else
M10 = 0
End If
SumNums = CStr(mSm) & SumNums
Next ISum
If Not M10 = 0 Then SumNums = CStr(M10) & SumNums
MsgBox "Sum= " & SumNums
اگر در این کد ها هم سوالی داشتی بپرس (;
LrgLenNum = IIf(Len(A) > Len(B), A, B)
این یعنی چی....iif تابع است
SumNums = CStr(mSm) & SumNums
سلام....خیلی ممنون از راهنمائیتون...darg من به این برنامه خیلی نیاز دارم...تا حدودی برنامه را درک کردم ولی نه کامل...برنامه ای میخوام که قبل از شروع عملگر را بگیره و سپس دو تا رشته عددی و در انتها جواب را نمایش بده...اگر ممکنه سورس کامل برنامه را در اختیارم بذار ...من هم اصلا نمیخوام که فقط حالت پرسش و پاسخ پیدا کنه ولی واقعا به این برنامه نیاز دارم !!
بله IIF یک تابعست که خروجی با بررسی شرط انجام می شه. وقتی به کار میره که شما می خوای یک شرط طولانی رو با فرمان IF بررسی کنید که با وجود IIF
کد کمتری استفاده میشه و به این ترتیب خوانایی کد بالا میره.
مثلا هر دو کد زیر یک جواب رو دارند ولی کدوم بهتره؟
IF A>C Then B=A+C Else B=A-C
---------------------------------------
B=IIF(A>C,A+C,A-C)
و شکل فرمانش هم به این شکله:
IIF(expersion,TruePart,FalsePart)
که expersion همون شرط مورد نظره.
اما یک نکته مهم درباره IIF که حتما مد نظر داشته باش:
* در زمانی که شما از IIF استفاده می کنی وی بی ابتدا هر دو قسمت TruePart و FalsePart رو محاسبه می کنه بعد شرط رو بررسی می کنه و با توجه به جواب شرط (درستTrue یا غلطFalse) جواب آخر خودش رو بر می گردونه.
مثلا در مورد مثالی که در بالا اومده وی بی ابتدا در IIF جواب هر دو عبارت A+C و
A-C رو محاسبه می کنه بعد میره سراغ بررسی شرط, یعنی اگر A بزرگتر از C باشه جواب A+C و اگر کوچکتر باشه جواب A-C رو بر می گردونه.
اما در خود IF این طور نیست. یعنی اگر شرط در IF برقرار بود فقط فرمان های قسمت Then اجرا می شه و در غیر آن صورت فرمان های بخش Else
این خاصیت IIF هم خوبه هم بد.
خوبیش اینه که شما می تونی توابع مورد نظرت رو (مثلا در قفل های نرم افزار) در هر صورت اجرا کنی
بدیش اینه که اگر فرمان هات طولانی باشند با توجه به اینکه هر دو فرمان ابتدا و به یکباره اجرا می شند, این خودش هزینه بر هست.
_______________________________________________
در مورد Cstr
توابعی وجود دارند که باعث می شند توع یک آرایه به طور کامل تغییر کنه مثلا در این مورد Cstr باعث میشه که یک آرایه از هرنوعی به نوع رشته ای تبدیل بشه:
A$=Cstr(B%) <Code
یا مثلا داریم توابع Cint که باعث تبدیل نوع یک آرایه از هر نوع به نوع Integer میشند. لیست کاملش در زیر اومده:
CBool Boolean
CByte Byte
CChar Char
CDate Date
CDbl Double
CDec Decimal
CInt Integer
CLng Long
CObj Object
CShort Short
CSng Single
CStr String
اما چه ربطی داره که من توی کد:
SumNums = CStr(mSm) & SumNums
از تابع Cstr استفاده کردم.
ببین هدف من اونجا تبدیل کردن داده mSm از حالت عددی (حالا کار ندارم Integer هست یا Long) به رشته ای بوده.
اما ما تابعی داریم به اسم Str$ که خودش میاد و یک داده عددی رو رشته می کنه (دقت کن که برای Str$ ما داده رو تغییر نوع می دیم اما با Cstr نوع آرایه حافظه تغییر پیدا می کنه به رشته ای).
حالا چرا من از Str$ استفاده نکردم دلیلش تا چند لحظه دیگه برات روشن میشه. مثال:
Str$(1)=" 1" <Code
Str$(+1)=" 1" <Code
Str$(-1)="-1" <Code
اما:
CStr(1)="1" <Code
CStr(+1)="1" <Code
CStr(-1)="-1" <Code
خوب حالا می دونم متوجه شدی که تابع Str$ وفتی یک عدد مثبت رو به یک رشته تبدیل می کرد یک فضای خالی در سمت چپ رشته اون عدد میزاره که اون نشون دهده علامت (مثبت) عدده.
اما خوبه Cstr اینه که دیگه اون فضای خالی (علامت مثبت) رو اضافه نمی کنه و کار خراب نمی شه...
از توضیحات خوب شما ممنون..........ولی اگر ممکنه سورس کامل برنامه را در اختیارم بزارید....(باور کنید روم نمیشه این حرف را بزنم چون به من توی این انجمن به اندازه کافی کمک شده)