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

محاسبات کسری

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

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

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

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

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

۱.	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 به نمایش در می آید.

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

موفق باشید !

داریوش فرخی

داریوش فرخی هستم از سال 92 شروع به یادگیری برنامه نویسی و از سال 93 در بخش برنامه نویسی و تولید محتوای سایت mspsoft.com مشغول هستم. فعالیتم نیز بیشتر در زمینه های برنامه نویسی با سی شارپ و asp.net بوده است. اوقات فراغتم را هم غالبا با تماشای فیلم یا بازی های کامپیوتری پر میکنم .

نوشته‌های مرتبط

دیدگاه‌ها

*
*

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.

    پوریا پاسخ

    لینک دانلود 404

      داریوش فرخی پاسخ

      اصلاح شد!
      موفق باشید!

ما یک پرسشنامه‌ی کوچولو داریم، که قول میدیم وقتتون رو خیلی نمی‌گیره، ولی کلی به ما کمک می‌کنه، چون هم assessment مونه ,و هم شما به ما در این زمینه کمک میکنید.بزن بریم