اخر عشرة مواضيع بالمنتدى
80برنامج لجميع انواع الموبيلbeshoy بواسطة: beshoy sa3ed | نكت قبيحه جدا جدا ممنوع دخول البنات بواسطة: m7mod | الدكـاتـره والشنـط الـجـلـد بواسطة: m7mod | جميع أهداف الألمانى توماس موللر الذى حصل على لقب الهداف فى كأس العالم 2010 بواسطة: m7mod | تعلم كيف تتغلب علي قلة الثقة بالنفس بواسطة: mba degree | تعلم مهارات الاتصال الفعال بواسطة: mba degree | مهارات الاتصال الفعال بواسطة: mba degree | كيف تكون شخص منظم و تترك انطباع جيد عند الاخرين بواسطة: mba degree | كيف تنمي مهارة الابداع في شخصيتك بواسطة: mba degree | مهارات ااقناع بواسطة: mba degree
إضافة رد 
 
تقييم الموضوع:
  • 0 اصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
برامج رياضيه
02-07-2010, 02:28 AM (اخر تعديل لهذه المشاركة : 02-07-2010 02:35 AM بواسطة مصطفى الشريف.)
مشاركات: #1
برامج رياضيه
السلام عليكم


لن تصدق كم الاخطاء التي ستقابلك عند محاوله كتابه برنامج يقوم بحساب معادله بسيطه...

والسبب في هذه الاخطاء هو ليس عدم معرفتك بصيغه الكود او ال syntax او مبادئ اللغه التي تستخدمها في كتابه الكود..

ولكن السبب هو الاهمال في تعلم الجزئ الخاص بأنواع البيانات وكيفيه التحويل ينها.!!!

على العموم البرامج التي سنضعها هنا هي للتدريب على هذا الجزئ. والتي بأذن الله سترفع مستواك بشكل كبير في هذ المفهوم الهام على شرط الفهم التام لكل سطر من الكود

نبتدي ببرنامج لحساب الدفعه الشهريه

-لمبلغ قرض معلوم
-معدل فائده معلوم
-مده قرض او اجل استحقاق محدد




بغض النظر عن طريقه حساب الدفعه يدوياً المفروض ان الاخوه خريجي تجاره دمنهور (وانا منهم) يكونوا حافضين المعادله اما الساده الباش مهندسين فسيتخدموا الدوال الجاهزه Big GrinBig GrinBig Grin



لتحميل البرنامج LoanCalc.rar


البرنامج يعتمد على داله جاهزه تقوم بحساب الدفعه الشهريه اسمها ()Pmt بالبحث عنها في ال MSDN نجد المعلومات التاليه

اولاً الصيغه العامه

كود:
Function Pmt( _
   ByVal Rate As Double, _
   ByVal NPer As Double, _
   ByVal PV As Double, _
   Optional ByVal FV As Double = 0, _
   Optional ByVal Due As DueDate = DueDate.EndOfPeriod _
) As Double

ثانياً المعاملات

Parameters
Rate
Required. Double specifies the interest rate per period. For example, if you get a car loan at an annual percentage rate (APR) of 10 percent and make monthly payments, the rate per period is 0.1/12, or 0.0083.

معدل الفائده نوع double

NPer
Required. Double specifies the total number of payment periods in the annuity. For example, if you make monthly payments on a four-year car loan, your loan has a total of 4 × 12 (or 48) payment periods.

مده القرض بالاشهر نوع double

PV
Required. Double specifies the present value (or lump sum) that a series of payments to be paid in the future is worth now. For example, when you borrow money to buy a car, the loan amount is the present value to the lender of the monthly car payments you will make.

قيمه القرض نوع double

FV
Optional. Double specifying future value or cash balance you want after you have made the final payment. For example, the future value of a loan is $0 because that is its value after the final payment. However, if you want to save $50,000 during 18 years for your child's education, then $50,000 is the future value. If omitted, 0 is assumed.

القيمه المستقبليه وهي اختياريه من النوع double

Due
Optional. Object of type DueDate Enumeration that specifies when payments are due. This argument must be either DueDate.EndOfPeriod if payments are due at the end of the payment period, or DueDate.BegOfPeriod if payments are due at the beginning of the period. If omitted, DueDate.EndOfPeriod is assumed.

استحقاق الفائده يعني يتم الدفع مقدماً او مؤخر


الكود الخاص بحساب الدفعه
PHP كود:
Dim Payment As Double
        Dim InterRate 
As Double
        Dim LoanDuration 
As Integer
        Dim LoanVal 
As Integer
        Dim payEarly 
As DueDate

        
Try
            
LoanVal CInt(TextBox1.Text)
            
InterRate 0.01 Convert.ToDouble(TextBox2.Text) / 12
            Debug
.WriteLine("InterRate = " InterRate.ToString)
            
LoanDuration CInt(TextBox3.Text)

            If 
CheckBox1.Checked Then
                payEarly 
DueDate.BegOfPeriod
            
Else
                
payEarly DueDate.EndOfPeriod
            End 
If

            
Payment Pmt(InterRateLoanDuration, -LoanVal0payEarly)
            
Label6.Text Payment.ToString("#.00")

        Catch 
ex As Exception
            MsgBox
("خطأ في : " vbCrLf ex.MessageMsgBoxStyle.Critical)
        
End Try 

اولاً التعريفات
كود:
Dim Payment As Double
        Dim InterRate As Double
        Dim LoanDuration As Integer
        Dim LoanVal As Integer
        Dim payEarly As DueDate

في الكود السابق قمت بتعريف المعاملات حسب ذكر انواعهم في ال MSDN
فيما عدا مبلغ القرض عرفته رقم صحيح Integer حيث انه من المستبعد ان يقترض شخص 1000 و 0.5 جني
كذلك عرفت مده القرض كرقم صحيح.

ثانياً استدعاء الداله
كود:
Try
            LoanVal = CInt(TextBox1.Text)
            InterRate = 0.01 * Convert.ToDouble(TextBox2.Text) / 12
            Debug.WriteLine("InterRate = " & InterRate.ToString)
            LoanDuration = CInt(TextBox3.Text)

            If CheckBox1.Checked Then
                payEarly = DueDate.BegOfPeriod
            Else
                payEarly = DueDate.EndOfPeriod
            End If

            Payment = Pmt(InterRate, LoanDuration, -LoanVal, 0, payEarly)
            Label6.Text = Payment.ToString("#.00")

        Catch ex As Exception
            MsgBox("خطأ في : " & vbCrLf & ex.Message, MsgBoxStyle.Critical)
        End Try

بما ان المدخلات ستكون من التكستات بالفورمه فان انواعها ستكون STRING و بالتالي وجب تحويل الانواع كلاً على حسب التعريف يعني مثلاً في الكود التالي
كود:
LoanVal = CInt(TextBox1.Text)

قمت بتحويل القيمه في مربع النص الى قيمه رقميه صحيحه (ارجوا الرجوع الى الدرس الخاص بتحويل انواع البيانات)

الكود التالي


مقتبس: InterRate = 0.01 * Convert.ToDouble(TextBox2.Text) / 12

لتحويل معدل الفائده من ارقام مثل 14 الي القيمه المؤيه يعني 0.14 ثم قسمتها على 12

كود:
If CheckBox1.Checked Then
                payEarly = DueDate.BegOfPeriod
            Else
                payEarly = DueDate.EndOfPeriod
            End If

الكود السابق يقوم بتحديد المتغير payEarly الى DueDate.BegOfPeriod او DueDate.EndOfPeriod.


كود:
Payment = Pmt(InterRate, LoanDuration, -LoanVal, 0, payEarly)
            Label6.Text = Payment.ToString("#.00")

الكود السابق يقوم باستدعاء الداله و تمرير المدخلات لها
ثم في السطر الثاني يقوم بعرض ناتج الداله لاحظ تنسيق طريقه العرض
حيث ان المخرجات تكون كبيره جداً من النوع Double لذا استخدمت طريقه التنسيق.


[b]===============================================
[/b]

لو حملت المثال ستجد الكود فيه بعض الزيادات و الغرض منها هو تصحيح الاخطاء وتنقيح المدخلات يعني مثلاً في حاله ادخال المستخدم حروف في التكستات او رموز عنده سيفشل تحويل الانواع من String الى Integer ....

يعني مثلاً الاجراء التالي


PHP كود:
Private Sub TextBox1_KeyPress(ByVal sender As ObjectByVal e As System.Windows.Forms.KeyPressEventArgsHandles TextBox1.KeyPress
        
If e.KeyChar Chr(8Then
            lblStat
.Text ""
            
Exit Sub
        End 
If

        If 
Not Char.IsDigit(e.KeyCharThen
            lblStat
.Text "ادخل ارقام فقط"
            
e.Handled True
        End 
If

    
End Sub 

حيث لا يقبل اي ادخال لا يعرف على انه رقم ( Not Char.IsDigit(e.KeyChar
كذلك يقبل الادخال ذو الكود Chr(8) يعني زر ال Back space او المسح.

لكن الكود فيه مشكله حقيقيه حيث يتم تعريف المدخلات على انها Integer والجدير بالذكر ان هذا النوع اقصى قيمه له هي 2,147,483,647

يعني لو حاول المستخدم حساب الدفعات الشهريه لمبلغ الدين الخارجي المستحق على جمهوريه مصر العربيه الشعبيه...!!!!!!!!!!

او اي قيمه اكبر من 2,147,483,647 مثل 2,147,483,6470
سيحدث خطأ OverFlow
لذلك الكود التالي فائدته هو التحق من ان ادخال المستخدم لم يتعدى الحد المسموح

PHP كود:
If CDbl(TextBox1.Text) > Int32.MaxValue Then
            MsgBox
("قيمه القرض اكبر من المفروض"MsgBoxStyle.Critical)
            Exit 
Sub
        End 
If 

حيث يقارن الكود بين قيمه التكست بوكس و اكبر قيمه في النوع Integer

الاخوه اللي بيبرمجوا بال #C لن يستطيعوا الوصول لفضاء الاسماء Financial لانه مقتصر على الفيجوال بيسك لذلك قم باستيراد اسم Microsoft.VisualBasic اولاً
كالتالي
;using Microsoft.VisualBasic

ثم قم باستدعاء الداله.

السلام عليكم
اخر مواضيعى


01100001-00101101-01101100-00101101-01101100-00101101-01100001-00101101-01101000
عرض جميع مشاركات هذا العضو
اقتباس هذه الرسالة فى الرد
02-07-2010, 04:06 AM
مشاركات: #2
RE: برامج رياضيه
جزاكم الله خيرا
اخر مواضيعى



عرض جميع مشاركات هذا العضو
اقتباس هذه الرسالة فى الرد
إضافة رد 


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

إتصل بناشباب دمنهورالعودة للأعلىالعودة للمحتوىالأرشيفخلاصات RSS
Bookmark and Share Free counter and web stats Powered by  MyPagerank.Net