ورود / ثبت نام
0
0

محاسبه کسری در ویژوال بیسیک

389 بازدید
محاسبات کسری

محاسبات کسری

در این مقاله با هم یک متد ساده برای تبدیل بخش های اعشاری یک عدد به ارائه دهنده ی کسری آن خواهیم دید ، کلاسی که مینویسیم قابلیت استفاده مجدد را نیز دارد. برای این کار ما از ویژوال بیسیک استفاده میکنیم. با من همراه باشید …

محاسبه و ساده سازی یک کسر

برای محاسبه ی یک عدد کسری باید بخش صحیح را از قسمت اعشاری جدا کنیم. بیایید عدد ۱۲.۶۵را به عنوان نمونه استفاده کنیم.ابتدا آن را به صورت ۱۲ +۰.۶۵ در می آوریم. سپس به سراغ قسمت اعشاری میرویم و آن را به صورت کسری مینویسیم. یعنی به جای ۰.۶۵ مینویسیم ۶۵/۱۰۰ و سپس با محاسبه ی بزرگترین مخرج مشترک (ب.م.م) کسرمان را به ۱۳/۲۰ ساده میکنیم.

یافتن بزرگترین مخرج مشترک

قطعه کد زیر مربوط به یافتن ب.م.م بین دو عدد است :

۱.	Private Function gcd(ByVal n1 As Integer, ByVal n2 As Integer) As Long  
۲.	      Dim minimum As Long  
۳.	      If n1 < n2 Then  
۴.	          minimum = n1  
۵.	      Else  
۶.	          minimum = n2  
۷.	      End If  
۸.	      For i As Long = minimum To 1 Step -1  
۹.	          If n1 Mod i = 0 And n2 Mod i = 0 Then  
۱۰.	              Return i  
۱۱.	          End If  
۱۲.	      Next  
۱۳.	End Function  

محاسبه کسری

در زیر کد مربوط به محاسبه ی کسرمان آورده شده است که احتیاج به یک نوع اعشاری به عنوان پارامتر ورودی دارد.

۱.	Public Function Calculate(value As Decimal) As String  
۲.	        Dim intPart As Long = Math.Truncate(value)  
۳.	        Dim numerator As Long = CType((value - intPart).ToString.Substring(2), Long)  
۴.	        Dim denominator As Long = CType("1" & StrDup(numerator.ToString.Length, "0"), Long)  
۵.	   
۶.	        Dim _gcd As Long = gcd(numerator, denominator)  
۷.	        Dim nDiv As Long = _gcd  
۸.	   
۹.	        While nDiv > 1  
۱۰.	   
۱۱.	            If numerator Mod nDiv = 0 And denominator Mod nDiv = 0 Then  
۱۲.	                numerator /= nDiv  
۱۳.	                denominator /= nDiv  
۱۴.	                nDiv = _gcd  
۱۵.	            Else  
۱۶.	                nDiv -= 1  
۱۷.	            End If  
۱۸.	   
۱۹.	        End While  
۲۰.	   
۲۱.	        Dim retVal As String = ""  
۲۲.	        If intPart > 0 Then retVal = intPart.ToString & " + ("  
۲۳.	        retVal &= numerator.ToString + " / " + denominator.ToString  
۲۴.	        If intPart > 0 Then retVal &= ")"  
۲۵.	        Return retVal  
۲۶.	End Function  

تابع قسمت صحیح عدد را برای استفاده در بخش های بعدی برنامه ذخیره میکند و سپس بزرگترین مخرج را محاسبه میکند. با افزودن صفر به تعداد رقم های اعشار و قرار دادن کسر مربوط به آن و سپس ساده کردن آن قسمت کسری موردنظر نیز بدست می آِید (۱۲.۵۶ = ۱۲ + ۱۳/۲۰).

کلاس کسری

سورس کامل یک کلاس با قابلیت استفاده ی مجدد به صورت زیر خواهد بود :

۱.	Public Class Fraction  
۲.	   
۳.	    Dim _value As Decimal  
۴.	    Dim _fraction As String  
۵.	   
۶.	    Public ReadOnly Property Value As String  
۷.	        Get  
۸.	            Return _fraction  
۹.	        End Get  
۱۰.	    End Property  
۱۱.	   
۱۲.	    Public Property Number As Decimal  
۱۳.	        Get  
۱۴.	            Return _value  
۱۵.	        End Get  
۱۶.	        Set(value As Decimal)  
۱۷.	            _value = value  
۱۸.	            _fraction = Calculate(_value)  
۱۹.	        End Set  
۲۰.	    End Property  
۲۱.	   
۲۲.	    Public Sub New(value As Decimal)  
۲۳.	        _value = value  
۲۴.	        _fraction = Calculate(_value)  
۲۵.	    End Sub  
۲۶.	   
۲۷.	    Public Sub New()  
۲۸.	        _value = 0  
۲۹.	        _fraction = 0  
۳۰.	    End Sub  
۳۱.	   
۳۲.	    Private Function gcd(ByVal n1 As Integer, ByVal n2 As Integer) As Long  
۳۳.	        Dim minimum As Long  
۳۴.	        If n1 < n2 Then  
۳۵.	            minimum = n1  
۳۶.	        Else  
۳۷.	            minimum = n2  
۳۸.	        End If  
۳۹.	   
۴۰.	        For i As Long = minimum To 1 Step -1  
۴۱.	            If n1 Mod i = 0 And n2 Mod i = 0 Then  
۴۲.	                Return i  
۴۳.	            End If  
۴۴.	        Next  
۴۵.	    End Function  
۴۶.	   
۴۷.	    Public Function Calculate(value As Decimal) As String  
۴۸.	        Dim intPart As Long = Math.Truncate(value)  
۴۹.	        Dim numerator As Long = CType((value - intPart).ToString.Substring(2), Long)  
۵۰.	        Dim denominator As Long = CType("1" & StrDup(numerator.ToString.Length, "0"), Long)  
۵۱.	   
۵۲.	        Dim _gcd As Long = gcd(numerator, denominator)  
۵۳.	        Dim nDiv As Long = _gcd  
۵۴.	   
۵۵.	        While nDiv > 1  
۵۶.	   
۵۷.	            If numerator Mod nDiv = 0 And denominator Mod nDiv = 0 Then  
۵۸.	                numerator /= nDiv  
۵۹.	                denominator /= nDiv  
۶۰.	                nDiv = _gcd  
۶۱.	            Else  
۶۲.	                nDiv -= 1  
۶۳.	            End If  
۶۴.	   
۶۵.	        End While  
۶۶.	   
۶۷.	        Dim retVal As String = ""  
۶۸.	        If intPart > 0 Then retVal = intPart.ToString & " + ("  
۶۹.	        retVal &= numerator.ToString + " / " + denominator.ToString  
۷۰.	        If intPart > 0 Then retVal &= ")"  
۷۱.	        Return retVal  
۷۲.	    End Function  
۷۳.	   
۷۴.	End Class  

در داخل سورسی که به همراه این مقاله قرار داده شده است ، من یک مثال ساده در Windows Froms برایتان قرار داده ام که برای نمایش درستی کد ما ، شامل یک TextBox و چندین Label میشود

محاسبه کسری

قسمت Code Behinde نیز به صورت زیر خواهد بود :

۱.	Public Class Form1  
۲.	   
۳.	    Dim f As New Fraction  
۴.	   
۵.	    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click  
۶.	        f.Number = CType(TextBox1.Text, Decimal)  
۷.	        Label3.Text = f.Value  
۸.	    End Sub  
۹.	End Class  

زمانی که بر روی دکمه کلیک میکنیم ، خصوصیت عدد از قسمت کلاس کسری مشخص میشود و با محاسبه ی موارد توضیح داده شده در انتها مقدار کسری شده به صورت کامل در Label3 به نمایش در می آید.

امیدوارم از آن لذت برده باشید.

موفق باشید !

آیا این مطلب را می پسندید؟
https://www.mspsoft.com/?p=15639
اشتراک گذاری:
واتساپتوییترفیسبوکپینترستلینکدین
داریوش فرخی
داریوش فرخی هستم از سال 92 شروع به یادگیری برنامه نویسی و از سال 93 در بخش برنامه نویسی و تولید محتوای سایت mspsoft.com مشغول هستم. فعالیتم نیز بیشتر در زمینه های برنامه نویسی با سی شارپ و asp.net بوده است. اوقات فراغتم را هم غالبا با تماشای فیلم یا بازی های کامپیوتری پر میکنم .
مطالب بیشتر
برچسب ها:

نظرات

2 نظر در مورد محاسبه کسری در ویژوال بیسیک

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *