با سلام واحترام در فایل پیوستی ، می خواهم میانگین چند عدد را در فرم بدست آورم ودر صورتی که یک یا چند تکست باکس صفر باشد آنها در میانگین اعداد منظور نشوند با تشکر
با سلام واحترام در فایل پیوستی ، می خواهم میانگین چند عدد را در فرم بدست آورم ودر صورتی که یک یا چند تکست باکس صفر باشد آنها در میانگین اعداد منظور نشوند با تشکر
با سلام مجدد ،دوستان واساتید محترم ، منتظر راهنمایی ارزشمند شما هستم
سلام و روز خوش
1- بهتره با توضیح دقیق مسئله رو روشن کنین:
n عدد داریم که k تای اونها صفر هست (k<>n)،
در مخرج فرمول میانگین گیری به جای n ، مقدار n-k باشه.
همین خواسته شماست؟
2- فرم شما bound هست یا unbound ؟
سلام وعرض ادب خدمت استاد بزرگوار وتشکر ازراهنمایی های ارزشمند شما که همیشه راه گشا وآموزنده بوده است
فرم Unbound است وبه شی خاصی متصل نیست
در مثال ارائه شده در فایل ، چهار عدد داریم می خواهم اگر سه عدد نوشته شود جمع اعداد تقسیم بر سه شود وعددی که صفر است در میانگین
منظور نشود واگر دو عدد نوشته شود میانگین دو عدد حساب شود ممنون از صبر وحوصله شما
با سلام و احترام متقابل
این پرسش شما گرچه ظاهر ساده ای داره،
ولی نکات مهمی درش نهفته هست و ارزش بررسی بیشتری داره.
من اول یک نمونه براتون آماده میکنم که مشکل شما رو در کوتاه مدت حل کنه،
بعد اگر عمری باقی بود به تدریج این نکات رو هم مطرح میکنم و راه حل هر کدوم رو هم میگم.
این نمونه پیوست کار شما رو راه میندازه،
ولی برنامه خوبی نیست!
دلایلش رو در پست های بعدی توضیح میدم.
Option Compare Database
Option Explicit
Private Sub BTN_CALC_Click()
CalcAverage
End Sub
Private Sub BTN_CLEAR_ALL_Click()
TB_NUMBER_1 = Null
TB_NUMBER_2 = Null
TB_NUMBER_3 = Null
TB_NUMBER_4 = Null
TB_SUM = Null
TB_AVERAGE = Null
TB_NON_ZERO_COUNT = Null
TB_NON_ZERO_AVERAGE = Null
End Sub
Private Sub CalcAverage()
Const N As Long = 4
Dim sum_all As Long
Dim non_zero_count As Long
sum_all = 0
non_zero_count = 0
If TB_NUMBER_1 <> 0 Then
non_zero_count = non_zero_count + 1
sum_all = sum_all + TB_NUMBER_1
End If
If TB_NUMBER_2 <> 0 Then
non_zero_count = non_zero_count + 1
sum_all = sum_all + TB_NUMBER_2
End If
If TB_NUMBER_3 <> 0 Then
non_zero_count = non_zero_count + 1
sum_all = sum_all + TB_NUMBER_3
End If
If TB_NUMBER_4 <> 0 Then
non_zero_count = non_zero_count + 1
sum_all = sum_all + TB_NUMBER_4
End If
TB_SUM = sum_all
TB_AVERAGE = sum_all / N
TB_NON_ZERO_COUNT = non_zero_count
If non_zero_count > 0 Then
TB_NON_ZERO_AVERAGE = sum_all / non_zero_count
Else
TB_NON_ZERO_AVERAGE = "Atleast one number should be none zero/null !"
End If
End Sub
2.png
حالا چرا این برنامه پست شماره 6 خوب نیست:
1- درستی مقادیر چک نمیشه (validation)
2- HardCode هست - اگر تعداد شماره ها کم و زیاد بشه کد باید تغییر کنه.
3- اگر تعداد شماره ها زیاد باشه (مثلا 20 یا 50 و ...)
این روش عملا قابل پیاده سازی نیست - بخصوص که validation هم همپای کد اصلی بزرگ میشه و هم کد اولیه و هم نگهداری اون سخت هست.
4- جدای از کد، خود طراحی فرم هم با کم و زیاد شدن شماره ها باید تغییر کنه،
و در تعداد زیاد شماره ها در عمل طراحی فرم single view به مشکل میخوره و عملی نیست.
سلام درود بر شما استاد بزرگوار ، مطالب ارزشمندو مفیدی ارائه نمودید توضیحات شما قابل تامل وتفکر است ممنون وسپاسگزارم