تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
كلاس Conversions من برمجتي لتحويلات الأنظمة العددية (كود + شرح + مثال)
#1
السلام عليكم و رحمة الله و بركاته
اليوم أقدم لكم Class من برمجتي 100% لتحويلات الأنظمة العددية،
فالنبدأ بالشرح مباشرتاً:

الكلاس به 15 دالة منهم دالتين أساسيتين و البقية تعتمد على تلك الدالتين

قبل البدء أبحث في موقع You Tube عن فيديو بعنوان
Number System - Base System - 1 of 2
لمعرفة طريقة التحويل على الورق التي سوف نحولها إلى كود برمجي

لم أضع الرابط مباشرتاً لأنه يظهر في هيئة *******


الدالة الأولى:BaseToDecimal
الكود:
PHP كود :
''' <summary>
    ''' 
Converts (numberfrom (currentBaseto Base 10
    
''' </summary>
    ''' 
<param name="number">The number that you want to convert it Base</param>
    
''' <param name="currentBase">The current Base for (number)</param>
    ''' 
<returns></returns>
    
''' <remarks></remarks>
    Public Function BaseToDecimal(ByVal number As String, ByVal currentBase As UShort) As ULong
        If currentBase < 2 Then Return 0 : Exit Function
        Try
            Dim _OS As Integer() = New Integer() {}
            For I As Integer = 0 To number.Length - 1
                ReDim Preserve _OS(I)
                _OS(I) = (currentBase ^ I)
            Next
            Dim OverAllRes As ULong
            OverAllRes = 0
            For X As Integer = 0 To number.Length - 1
                Dim CharConv As String
                CharConv = number
                If CharConv.Substring(0, 1) = "-" Then CharConv = Strings.Right(CharConv, CharConv.Length - 1)
                CharConv = StrReverse(CharConv)
                CharConv = CharConv.Substring(X, 1)
                If currentBase > 9 Then
                    Select Case CharConv.ToUpper
                        Case "A"
                            CharConv = "10"
                        Case "B"
                            CharConv = "11"
                        Case "C"
                            CharConv = "12"
                        Case "D"
                            CharConv = "13"
                        Case "E"
                            CharConv = "14"
                        Case "F"
                            CharConv = "15"
                        Case "G"
                            CharConv = "16"
                        Case "H"
                            CharConv = "17"
                        Case "I"
                            CharConv = "18"
                        Case "J"
                            CharConv = "19"
                        Case "K"
                            CharConv = "20"
                        Case "L"
                            CharConv = "21"
                        Case "M"
                            CharConv = "22"
                        Case "N"
                            CharConv = "23"
                        Case "O"
                            CharConv = "24"
                        Case "P"
                            CharConv = "25"
                        Case "Q"
                            CharConv = "26"
                        Case "R"
                            CharConv = "27"
                        Case "S"
                            CharConv = "28"
                        Case "T"
                            CharConv = "29"
                        Case "U"
                            CharConv = "30"
                        Case "V"
                            CharConv = "31"
                        Case "W"
                            CharConv = "32"
                        Case "X"
                            CharConv = "33"
                        Case "Y"
                            CharConv = "34"
                        Case "Z"
                            CharConv = "35"
                    End Select
                End If
                CharConv = CInt(CInt(CharConv) * _OS(X))
                OverAllRes += CDec(CharConv)
            Next
            BaseToDecimal = Math.Abs(OverAllRes)
            Return BaseToDecimal
        Catch
            Return 0 : Exit Function
        End Try
    End Function
    '
Programmed by Aly El-Haddad 
طبعاً أنت تقول الآن في ذهنك "ألم يقل شرح :confused: " فأقول لك لو أنتظرت قليلاً لما قلت ذلك Rolleyes
طبعاً كما نعلم أن القواعد العددية لا يمكن أن تقل عن 2 و ذلك هو عمل السطر الأول
ملاحظة: عند حدوث أي خطأ في أي دالة الدالة تعود الدالة بـ0 لذلك تلك الدالة و بقية الدوال موضوعة بين Try و Catch و End Try
ثم بعد ذلك ننشئ مصفوفة رقمية لتحتوي على قيم الأسس
PHP كود :
Dim _OS As Integer() = New Integer() {} 
ثم نعبئها بالقيم عن طريق الكود التالي
PHP كود :
For As Integer 0 To number.Length 1
                ReDim Preserve _OS
(I)
                
_OS(I) = (currentBase I)
            
Next 
ثم نضع الحلقة التكرارية For و لا أعتقد أنها تحتاج إلى شرح لكن سأشرحها للمبتدئين
الحلقة التكرارية For هي لتكرار أمر معين عدة مرات و صيغتها كالتالي:
PHP كود :
For [Variable] As [NumericDataType] = [StartFromTo [FinishAtStep 1
'Your code
Next 

و الآن إلى ما بداخل الحلقة التكرارية For
طبعاً كما رأينا في شرح الفيديو فالأسس يبدأ وضعها من اليمين لليسار لذلك أستخدمت الدالة StrReverse ثم بعد ذلك يتم أستبدال كل حرف بالرقم الذي يواجهه ليتم ضربه في الأس و تستخدم الدالة Math.Abs للعودة بالقيمة الموجبة لرقم


الدالة الثانية: DecimalToBase
الكود:
PHP كود :
''' <summary>
    ''' 
Converts (numberfrom Base 10 to (targetBase)
    
''' </summary>
    ''' 
<param name="number">The number that you want to convert it Base</param>
    
''' <param name="targetBase">The Base that you want to convert to</param>
    ''' 
<returns></returns>
    
''' <remarks></remarks>
    Public Function DecimalToBase(ByVal number As ULong, ByVal targetBase As UShort) As String
        If targetBase < 2 Then Return 0 : Exit Function
        Try
            Dim VN As ULong
            VN = Math.Abs(number)
            Dim B As UShort = targetBase
            Dim R As Decimal
            Dim SOP As String
            Dim OverAll As String = String.Empty
            Do Until VN < 1
                R = VN / B
                R = Decimal.Subtract(R, Math.Truncate(R))
                R = CULng(R * B)
                If B > 9 Then
                    Select Case R
                        Case 10
                            SOP = "A"
                        Case 11
                            SOP = "B"
                        Case 12
                            SOP = "C"
                        Case 13
                            SOP = "D"
                        Case 14
                            SOP = "E"
                        Case 15
                            SOP = "F"
                        Case 16
                            SOP = "G"
                        Case 17
                            SOP = "H"
                        Case 18
                            SOP = "I"
                        Case 19
                            SOP = "J"
                        Case 20
                            SOP = "K"
                        Case 21
                            SOP = "L"
                        Case 22
                            SOP = "M"
                        Case 23
                            SOP = "N"
                        Case 24
                            SOP = "O"
                        Case 25
                            SOP = "P"
                        Case 26
                            SOP = "Q"
                        Case 27
                            SOP = "SOP"
                        Case 28
                            SOP = "S"
                        Case 29
                            SOP = "T"
                        Case 30
                            SOP = "U"
                        Case 31
                            SOP = "V"
                        Case 32
                            SOP = "W"
                        Case 33
                            SOP = "X"
                        Case 34
                            SOP = "Y"
                        Case 35
                            SOP = "Z"
                        Case Else
                            SOP = R
                    End Select
                Else
                    SOP = R
                End If
                VN = Math.Truncate(VN / B)
                OverAll &= SOP
            Loop
            OverAll = StrReverse(OverAll)
            DecimalToBase = OverAll
            Return DecimalToBase
            OverAll = String.Empty
            VN = Nothing
        Catch
            Return 0 : Exit Function
        End Try
    End Function
    '
Programmed by Aly El-Haddad 
أول سطرين كما هو الحال في الدالة السابقة
بعد ذلك نضع متغير تحمل القيمة الموجبة للرقم المدخل ثم متغير يحمل قيمة القاعدة ثم متغير لجلب باقي القسمة ثم متغير لتحويل الأرقام الأكبر من 10 إلى الحروف التي تمثلها ثم متغير للنتيجة النهائية ثم أستخدام الحلقة التكرارية Do Until و أعتقد أنها لا تحتاج إلى شرح لأن أسمها يوضح شرحها
يستخدم الكود التالي لجلب باقي القسمة
PHP كود :
VN B
                R 
Decimal.Subtract(RMath.Truncate(R))
                
CULng(B
ثم يتم تحويل الأرقام إلى الحروف التي تمثلها
ثم تم أستخدام الدالة Math.Truncate لجلب الرقم بدون كسور ثم إضافة الحرف\الرقم إلى متغير النتيجة النهائية و كما لاحظت في الفيديو السابق أنه يأخذ الأرقام من الأسفل إلى الأعلى لذلك تم أستخدام الدالة StrReverse


الدالة الثالثة: BaseToBase
الكود:
PHP كود :
''' <summary>
    ''' 
Converts (numberfrom (currentBaseto (targetBase)
    
''' </summary>
    ''' 
<param name="number">The number that you want to convert it Base</param>
    
''' <param name="currentBase">The current Base for (number)</param>
    ''' 
<param name="targetBase">The Base that you want to convert to</param>
    
''' <returns></returns>
    ''' 
<remarks></remarks>
    Public Function 
BaseToBase(ByVal number As StringByVal currentBase As UShortByVal targetBase As UShort) As String
        
If currentBase 2 Then Return : Exit Function
        If 
targetBase 2 Then Return : Exit Function
        
number BaseToDecimal(numbercurrentBase)
        
number DecimalToBase(numbertargetBase)
        Return 
number
    End 
Function
    
'Programmed by Aly El-Haddad 



أول سطرين كما هو الحال في الدالتين السابقتين
ثم يحول الرقم من النظام الحالي إلى النظام العشري و من ثم إلى النظام المطلوب التحويل إليه

الدالة الرابعة، ......، الدالة الخامسة عشر:

ليس بهم أفكار جديدة فكلها معتمدة بشكلٍ كلي على أول ثلاث دوال

أما بخصوص الكود المكتوب قبل كل دالة
PHP كود :
''' <summary>
    ''' 
Converts (numberfrom (currentBaseto (targetBase)
    
''' </summary>
    ''' 
<param name="number">The number that you want to convert it Base</param>
    
''' <param name="currentBase">The current Base for (number)</param>
    ''' 
<param name="targetBase">The Base that you want to convert to</param>
    
''' <returns></returns>
    ''' 
<remarks></remarks
فهو لوضع شرح للدالة عند كتابتها في محرر كواد الـVB.Net و يكتب بين summary شرح الدالة عموماً و بين param name="name" يتم كتابة وصف البراميتر أما بخصوص returns و remarks فلا أعلم
[FONT=&amp]

[/FONT]
[FONT=&amp]يوجد بالمرفقات الكلاس كاملاً(الـ15 دالة) و مثال عن أستخدامهم[/FONT]
[FONT=&amp]

[/FONT][FONT=&amp]و في النهاية أتمنى من الله أن أكود قد وفقت في شرحي[/FONT][FONT=&amp]

و لا أنتظر منكم سوى الدعوة الصالحة

و السلام عليكم و رحمة الله و بركاته[/FONT]
Smile


الملفات المرفقة
.rar   Conversions.rar (الحجم : 1.65 ك ب / التحميلات : 27)
.rar   Conversions Test.rar (الحجم : 219.59 ك ب / التحميلات : 31)
الرد }}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  صمم الكلاس الخاص بك - كلاس للتعامل مع SQL SERVER ابو ليلى 16 859 03-09-16, 07:43 PM
آخر رد: tryold
  موضوع الاستاذ رامي مثال \ لطريقة تفعيل برنامجك عند العميل وتغيير كلمة مرور اRamilove سعود 7 2,037 26-01-16, 08:07 PM
آخر رد: سعود
  [درس فيديو] تشغيل اوامر Run من البرنامج & مثال غلق الويندوز بعد وقت محدد باستخدام VB.net أحمد النجار 1 535 23-12-15, 04:26 AM
آخر رد: الماجيك مسعد
  [مقال] شرح الدوال العامة في كلاس ( Process ) Dev Saeed 4 1,254 06-04-15, 06:54 PM
آخر رد: es5s930
  مثال القراءة والكتابه على ملف تيكست Txt على الانترنت + مثال + شرح m.sami.ak 9 2,260 20-08-13, 01:12 PM
آخر رد: m.sami.ak
  ابسط مثال لتشغيل ملفات mp3 مستضافة على موقع سعود 4 1,339 01-04-13, 04:04 AM
آخر رد: سامى ابوسريع
  مثال تشغيل ملف صوتى او فيديو RainBow 0 497 14-03-13, 08:37 PM
آخر رد: RainBow
  مثال راع لى برنامج الرسام RainBow 0 606 02-03-13, 03:36 AM
آخر رد: RainBow
  مثال على Custom Serialization من خلال فئة اسم مستخدم وكلمة مرور RaggiTech 0 732 05-10-12, 01:42 AM
آخر رد: RaggiTech
  مثال على عملية إنشاء Windows Service – إنشاء برنامج تشفير تلقائي للملفات RaggiTech 1 579 05-10-12, 01:42 AM
آخر رد: RaggiTech

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم