![]() |
|
فصل العمليات الحسابية ، واخراج الناتج ... الكثير . - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182) +--- قسم : قسم مقالات VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=184) +--- الموضوع : فصل العمليات الحسابية ، واخراج الناتج ... الكثير . (/showthread.php?tid=5076) |
فصل العمليات الحسابية ، واخراج الناتج ... الكثير . - RaggiTech - 04-10-12 [b]بسم الله الرحمن الرحيم
[/b]عنوان المقال : فصل العمليات الحسابية ، واخراج الناتج ... الكثير .[b]مستوى المقال : مبتدأ – متوسط . [b]اللغة المستخدمة : VB.Net . [b]تقييم المقال : ( متروك للقارئ ) . [b]-تقديم هام :- كم ناتج 5+4 ؟ قد يتسائل البعض ، ماالغرض من هذا السؤال ، فالإجابة تبدو ببساطة 9 . كذلك اذا اردنا ان يوجد لنا الـ .Net Framework هذا الناتج ، ببساطة : [/b][/b] كود : Msgbox(5+4) '9لكن الأمر لن يكون بهذه البساطة إذا أردت ان تقوم بعمل برنامج لإدخال القيمة الحرفية "5+4" واخراج الناتج ، ان ما سنتبعه في هذا المقال هو فصل اي عملية حسابية ( في شكل سلسلة حرفية ) الى عدة عمليات لنقوم بكل عملية على حدة ، ثم نخرج الناتج . مثلا : في مثالنا لايجاد ناتج "5+4" سيقوم البرنامج – إن شاء الله – بفصل "5+4" الى مصفوفتين : *مصفوفة الأعداد وستكون قيمتها بهذا الشكل {5,4} *مصفوفة العمليات وستكون قيمتها بهذا الشكل {"+"c} ثم بعد ذلك نقوم بايجاد ناتج الرقمين في مصفوفة الاعداد عن طريق اختبار رمز العملية في مصفوفة العمليات . وسأتدرج في المقال من ايجاد ناتج عملية واحدة ("3+2") إلى عمليات متعددة ("4+3/2*3") إلى عمليات الأقواس ("5^(1+2)") الى القيمة المطلقة ، والدوال المثلثية ... إلخ – إن شاء الله – . [b]أولاُ : دالة ايجاد ناتج عملية واحدة [b]نبدأ بسم الله الرحمن الرحيم :- قم بانشاء مشروع جديد من النوع Windows Application ، ثم اضف أداة مربع النص ( TextBox ) ودعها بإسما كما هي إفتراضيا ( TextBox1 ) ، [b]الخطوة الأولى الآن هي جعل صيغة العملية جاهزة للعمل عليها ، مثلا لو أن العملية المطلوب تنفيذها هي "-3-4" ، اذا اعتبرنا ان علامة "-" تمثل عملية طرح ، فان حسب ماقله سابقا ستكون قيم :- *مصفوفة الأعداد بهذا الشكل {0,3,4} ( جرب فصل "-3-4" على حسب الرمز "-" بالدالة Split) *مصفوفة العمليات بهذا الشكل {"-"c,"-"c} وهنا نجد ان عدد الاعداد المدخلة في المصفوفة اكبر من عدد أعداد العملية الأصلية ، لذلك لن اعتبر عملية الطرح عملية رياضية اصلا ، بل سأستعيض عنها بجمع للمعكوس الجمعي ، سنقوم الآن بتعريف دالة لهذا الغرض :- قم بتعريف الدالة التالية باسم Filter : [/b][/b] كود : Function Filter(ByVal Str As String) As String لاحظ أن وظيفة الدالة Filter هي الآتي :- *تحويل عمية الطرح إلى جمع للمعكوس الجمعي ( باختصار تحويل الرمز "-" إلى "+-") ، وهذا الأمر يتم عن طريق : **تحويل جميع الرموز "-" الى الرمز "&" ( كرمز مساعد ) **تحويل الرموز "&" إلى "+-" . **سينتج من عملية التحويل رموز غير مرغوب فيها ( مثل "4^-2" ستصبح "4^+-2" ) ؛ لذلك سأقوم بتحويل الرموز ( "^+-" و "*+-" و"/+-" و"E+" ) إلى ( "^-" و "*-" و"/-" و"E" ) على الترتيب . *ازالة العمليات المكررة . ( تحويل الرموز "-+" و "--" و "++" إلى "+-" و "+" و "+" على الترتيب) *إذا نتج عن ذلك أن بدأ التعبير المدخل بالعلامة "+" يتم حذفها . الخطوة التالية في تجهيز صيغة العملية هي تعريف دالة تقوم بحذف جميع الأرقام من العملية المدخلة ، لنحصل على قيمة من النوع String تمثل رموز العمليات الموجودة بالقيمة المدخلة ، قم بتعريف WihtoutNums : [/b][/b] كود : Function WihtoutNums(ByVal str As String) Dim NewStr As String = strكما تلاحظ ؛ تقوم الدالة باستبدال الأرقام من 0-9 و كذلك علامة "." و "-" و"E" بلا شيء [b]الخطوة الثانية الأن ؛ تعريف الدالة التي تقوم بايجاد ناتج نص العملية من النوع String ، قم بتعريف الدالة OneSum التي تقوم بهذا الغرض :- كود : [b][b][b][b][b][b][b][b] Function OneSum(ByVal str As String) As Doubleكود : Dim New_Str As String = Filter(str)*قمت بتعريف المتغير New_Str لتخرين ناتج تجهيز نص العملية باستخدام الدلة Filter ، *قمت بتعريف المصفوفة NumArray() ( كما قلت في التقديم ) لتخزين أعداد العملية , بفصلها عن الأعداد بالدالة Split () . *قمت بعريف المتغير SumChar لتخزين رمز العملية ، واسندت له الفيمة المخرجة من الدالة WihtounNums ( نص العملية بدون أرقام ) . *في هذة الدالة لم استخدم مصفوفة لتخزين رموز العمليات الأساسية داخل نص العملية ، لأن هذه الدالة تعود بناتج نص عملية واحدة فقط ، فلن نكون بحاجة إلى المصفوفة . بعد ذلك قمت باختبار قيمة المتغير SumChar ( اختبار نوع العملية ) عن طريق Select Case ، ثم استبدال قيمة العدد الأول في المصفوفة NumArray بقيمة العملية ، مثلا ان كانت قيمة SumChar هي "+"c عندها يتم استبدال NumArray(0) بـ NumArray(0) + NumArray(1) واخيرا يتم ارجاع قيمة NumArray(0) ، إلى هنا انتهى الجزء الأول من الموضوع ، بقي تجربة الدالة ، في حدث KeyDown لـ TextBox1 ضع هذا الكود :- كود : If e.KeyData = Keys.Enter Then الآن قم بتجربة المشروع إضغط F5 ،ثم قم بكتابة 5+4 ، ثم اضغط الزر Enter ( ما النتيجة ! ) [/b][/b] عن نفسي اعتبر هذا الجزء تقديم هام لفهم باقي الأجزاء . ==> تحميل المشروع الى ان توقفنا <==[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b] |