دروس الاستاذ خالد المسيهيج لتعليم الفيجويل

    • دروس الاستاذ خالد المسيهيج لتعليم الفيجويل

      السلام عليكم ورحمة الله وبركاته إخواني في ساحة العرب |a
      من زمان ما نزلت مواضيع في ساحة الفيجويل بيسك (عارفنكم مشتاقيلي $$t)

      المهم اليوم عندنا موضوع هو عبارة عن دروس للاستاذ خالد المسيهيج في تعلم VB

      عبارة عن 50 درس أنزلها متقطعة ، وسأقوم بإغلاق الموضوع حتى تتم إنزال جميع الدروس ثم سأفتح الموضوع ولذلك للفائدة .

      إعذروني إذا تأخرت في إنزال الدروس ، بسبب إنشغال بالدراسة (عتو دعيولي عن تنسيو|a )
    • لمحة تعريفية بفيجوال بيسك بشكل عام -الحلقة (1)

      نظراً لكون البرمجة هي عصب المعرفة الحاسوبية فستكون هذه الزاوية - واعتباراً من هذا الأسبوع - هي نافذة قرائنا الكرام لتعلم هذه اللغة الحيوية. ويجب أن نعلم بأن البرمجة بذاتها لا تعد معضلة، بل مجرد فكرة يتعلمها المرء، لكن يبقى الإبداع والقيمة الحقيقية في ما يقدمه من أفكار ومعارف.
      يمكن الحصول على نسخة من برنامج Microsoft Visual Basic 6.0 من أقرب متجر حواسيب، أو مباشرة من خلال موقع شركة مايكروسوفت :
      microsoft.com

      بدايتنا كأي بداية عبارة عن جولة تعريفية بالبرنامج والأدوات التي سيستخدمها مبرمج المستقبل. ولكن قبل أن
      نبدأ يجب على من يرغب المتابعة تخصيص ملف لهذه الدروس فهي مترابطة وما سنذكره في هذا الدرس سنعتبره في الدروس القادمة من البديهيات التي يفترض أن القارئ قد ألمَّ بها.

      عند تشغيل البرنامج تظهر لنا شاشة المشروع الجديد New Project وبها عدد من الأوضاع التي يختار من بينها المبرمج الصيغة التي يريد لبرنامجه أن يظهر بها، وسيكون اختيارنا كمتعلمين البرامج المستقلة Standard EXE ، وبعد ذلك تظهر لك صفحة البرنامج الرئيسية، حيث تجد قوائم البرنامج التي لا تختلف كثيراً عن أي برنامج من برامج مايكروسوفت المعروفة، وأسفلها أزرار تنفيذية وهي المرقمة بالحروف الأبجدية.

      حيث الزر المشار إليه بالحرف " أ " لإضافة مشروع برنامج، يليه "ب" لإضافة نافذة جديدة، ثم "ج" لإدراج وتحرير القوائم "ملف، تحرير، عرض ... " ، يأتي بعد ذلك أدوات معروفة لأكثرنا فـ"د" لفتح مشروع محفوظ، "هـ" لحفظ المشروع الحالي، "و" للقص، "ز" للنسخ، "ح" للصق، "ط" للبحث، وأخيراً "ك، ي" للتراجع للخلف والأمام، يلي هذه الأزرار ثلاثة أخرى خاصة بالتحكم، فـ "ل" لتشغيل البرنامج، "م" للتوقف المؤقت، ثم "ن" لإيقاف البرنامج بشكل نهائي. أما الأزرار المشار إليها بالحرف "ص" وعددها ثلاثة فهي خاصة بعرض نوافذ خصائص المشروع ، والزر "ع" لاستعراض المشروع، وأخيراً "ف" للتحكم بالأدوات. وبعد أن تعرفنا على أهم الأزرار التي سيتم التعامل معها باستمرار نأتي للأهم وهو أدوات البرنامج، بمعنى أن البرنامج يتكون من عناصر مهمة كالأزرار ومربعات النصوص واللواصق والصور وغيرها، وسنتناولها بالتفصيل خلال الدروس القادمة.

      وللتعريف بهذه الأدوات فقد أشرنا أمام كل منها برقم ، فمثلاً الأداة رقم "1" تمكن المبرمج من إدراج صندوق صورة، أما المشار إليها بالرقم "2" فهي تحرر مؤشر الفأرة من أي أدوات وتمكن المبرمج من التصرف بكل حرية، الأداة "3" أداة إدراج مربع نص، بينما "4" لتعيين الملصقات، والأداة "5" لإدراج زر، و"6" يدرج منه إطار يوفر الحرية لنقل مجموعة من الأدوات، الأداة "7" تفيد في إدراج خيارات متعددة، بينما "8" صندوق اختيار، "9" إدراج قائمة مستطيلة، بينما "10" يدرج قائمة منسدلة، الأدوات "11و12" لإدراج أشرطة تمرير أفقية ورأسية ، الأدوات "13و15و16" لإدراج محركات الأقراص والأدلة والملفات، بينما "14" لإدراج ساعة توقيت، الأداتين "17و18" لإدراج أشكال هندسية، أداة "19" خاصة بإنشاء قواعد البيانات، أما "20" فهي لإدراج صورة، وأخيراً الأداة "21" وهي قناة ربط بين البرنامج وبقية التطبيقات الأخرى.
      واعتباراً من اللقاء القادم سنبدأ في التطبيق.


    • استخدامات أداتي صندوق النصTextBox والملصق Label وأزرار الأوامر CommandButton. ... - ا

      برمجة فيجوال بيسك - الحلقة (2)

      أخذنا في اللقاء السابق لمحة سريعة تعرفنا من خلالها على أهم الأدوات في فيجوال بيسك، وفي هذا اللقاء سننطلق مع التطبيق العملي. مشروع البرنامج كأي مشروع آخر يبدأ بخطوات متتالية: الفكرة التخطيط التنفيذ التقييم والمراجعة، والتخطيط يرتبط دائماً بحجم المشروع، فهناك مشروعات بسيطة لا يتطلب التخطيط لها أكثر من ترتيب ذهني، بينما هناك مشروعات تحتاج لترتيب على الورق ورسم خرائط تدفق، والتي سنتعرف عليها مستقبلاً إن شاء الله.



      برنامجنا اليوم هو برنامج حسابي بسيط نتعرف من خلاله على استخدامات أداتي صندوق النصTextBox والملصق Label وأزرار الأوامر CommandButton.



      فنبدأ بتشغيل برنامج Visual Basic لتظهر لنا شاشة نختار منها نوع التطبيق، واختيارنا هو Standard EXE حيث نجد أن الشاشة عبارة عن أربعة أقسام القسم الأيسر فيه لوحة الأدوات، والقسم الأيمن العلوي يوضحه الشكل (1) يختص بالتحكم في نوافذ المشروع.



      وكما يتضح من الصورة لا يوجد لدينا سوى نافذة واحدة هي المسماة Form1، ويقع أسفل هذا القسم لوحة خصائص المشروع والموضحة بالشكل (2) أما القسم الأوسط فهو المشتمل على النافذة الأساسية للمشروع وهي خالية، فيقوم المبرمج باستدعاء الأدوات التي يحتاج إليها إما عن طريق السحب والإفلات أو بالنقر المزدوج على الأداة المطلوبة.
      وفي مشروعنا هذا نفترض أننا نريد أن ننشئ برنامجاً يقوم بإيجاد حاصل ضرب عددين، إذن سنحتاج إلى أداة نص اسمها التلقائي (Text1) ندخل بها العدد المضروب، ونحتاج أيضاً ملصق اسمه (Label1) نكتب به علامة الضرب ليعرف من سيتعامل مع البرنامج وظيفته، كذلك نحتاج إلى أداة نص أخرى اسمها (Text2)، أيضاً نأتي بملصق ثانٍ باسم (Label2) نضع فيه علامة المساواة (=)، وبعده مربع نص ثالث اسمه (Text3) لتكتب به النتيجة ، وبعد أن نرتبها نضع زر الأمر (Command1) وبعد أن تكتمل أدواتنا التي نحتاجها في التنفيذ نقوم بتغيير العنوان (وليس الاسم) أي نغير ما يظهر للمستخدم فقط، فمثلاً Label1 نذهب إلى خصائص المشروع ونبحث عن خانة العنوان Caption فنقوم بمسح كلمة Label1 ونكتب بدلاً عنها علامة الضرب (*) ونفس الإجراء مع Label2 حيث نقوم بتبديل عنوانها إلى علامة المساواة (=)، وكلمة Command1 في زر الأمر أيضاً ليست مفهومة فنقوم بتبديلها إلى كلمة (احسب) أو (حساب) أو (تنفيذ)، ثم ننتقل إلى إزالة النصوص التي في أدوات النص الثلاثة، حيث نبحث عن خاصية Text في خصائص المشروع ونجد أن أمامها نفس مسمى أداة النص، بمعنى أن أداة Text1 موجود في خاصية Text كلمة Text1 فنقوم بمسحها، وهكذا مع بقية أدوات النص، وبعد أن انتهينا من ترتيب الأدوات وتنظيم شكل البرنامج نقوم بكتابة الكود البرمجي، وهو بسيط جداً إذا فهمنا فكرته استطعنا إجراء أي عمليات حسابية، حيث سنقوم بالتعامل مع مربعات النصوص على أنها متغيرات (س، ص)، وأول إجراء نتخذه هو النقر المزدوج على الزر الذي وضعناه وأسميناه (احسب) حيث تفتح لنا صفحة فيها سطران بينهما فراغ نكتب به العملية المطلوب تنفيذها، فعندنا Text3 هو حاصل ضرب Text1 في Text2، فنعبر عن هذه العملية بالتالي:

      Text3.Text = Text1.Text * Text2.Text




      ولاحظ هنا أن علامة الضرب بالبرمجة (*)، وبهذه المنطقية يقوم البرنامج بإجراء العملية الحسابية، ليصبح الكود بصورته النهائية على النحو الموضح بالصورة رقم (3) والآن أصبح البرنامج جاهزاً للتنفيذ، ضع الأرقام وستجد النتيجة مطابقة لها في الآلة الحاسبة.




      أنظر الشكل (4) ولتحويل المشروع إلى برنامج ذاتي التنفيذ exe توجـه إلى قائمـة ملف ومنه تجد Make Project1.exe وهو المسئول عن تنفيذ البرامج،

    • 3إجراء عملية حسابية بيسطة للتعرف من خلالها على كيفية التعامل مع الجمع ...... - الحلقة

      تعلمنا في الدرس السابق كيفية استخدام بعض الوظائف والأدوات، وقد تعمدت أن تكون بدايتنا مع الرياضيات لأنها الحاجز الأعلى في نظر الكثيرين فإذا استسهلها المستخدم بدت كل العمليات الأخرى سهلة، فتعلمنا كيف نجري عملية الضرب وبنفس الطريقة يمكننا أن نجري العمليات الأخرى كالطرح والقسمة، لكن الجمع يختلف لأنه يتعامل مع العملية على أنها صف فإذا كتبت قانون الجمع بهذه الصورة :
      Text3.text = Text1.text + Text2.text
      فإن القيم التي يتم إدخالها في خانة Text1 و Text2 ستظهر النتيجة على أن الخانة الأولى آحاد والثانية عشرات بمعنى أنه إذا جمعت + 3 2ستظهر لك النتيجة .23.ويكون المخرج من هذه المشكلة بتعديل صيغة القانون ليصبح :
      Text3.text = Val(Text1.text) + Val(Text2.text)
      وسنتعرف في هذا اللقاء على كيفية إجراء عمليات مركبة، بأن نجري عمليات تعتمد على نتائج عمليات سابقة.
      لنفترض أن عندنا ثلاثة مبالغ ونريد أن نجمعها ونحسب الزكاة الواجبة عليها كيف نكتب برنامجاً يجري هذه العمليات المركبة؟
      علينا أن نعرف أولاً كيفية تعامل البرنامج مع حساب الأولويات وهذا يعني أن تكون الخطوة الأولى هي التخطيط للبرنامج، فنصيغ القانون العام لهذه المسألة :
      (س + ص + ع) * ((÷41)÷10)
      و بعد التبسيط يصبح القانون :

      (س+ص+ع) * 0.025

      الآن نضع الأدوات زر الأمر (Command1) ثم نضع ثلاثة صناديق نصوص بحيث Text1 تمثل (س) ، و Text2 تمثل (ص) و Text3 تمثل (ع) .. ثم نضع ملصق (Label) نسميه (Zakah) لتظهر به نتيجة العملية ثم ننقر نقراً مزدوجاً على زر Command1 الذي غيرنا مسماه من خاصية (Caption) إلى (احسب الآن) فيفتح لنا خانة كتابة الكود فيصبح القانون بالكود على النحو المبين بالصورة رقم (1) .
      وبالمناسبة الأقواس مهمة جداً حيث يحدد بها أولويات الحساب، فالبرنامج لا يقرأ ما تريد أن تفعله ما لم تتعامل معه بمنطق رياضي سليم، ويلاحظ أن الضرب يرمز له بالنجمة (*)، كما أن القسمة يرمز لها بالشرطة المائلة (/) .

      وحتى لا يكون البرنامج أصم لا يفهم منه المستخدم أي شيء يجب أن نعرف متغيراتنا للمستخدم بأن نضع ثلاث ملصقات (Label1, Label2, Label3) ونغير أسماءها بحسب المتغيرات لدينا لتصلح على التوالي (س،ص،ع) ونحتاج إلى ملصق رابع ليكون دليل الناتج (الزكاة الواجبة) وبعد الانتهاء منها نقوم بتشغيل البرنامج (شكل 2) .

    • كيفية التعامل مع أداة التوقيت Timer ...... - الحلقة (4)

      في الدروس السابقة ألقينا نظرة سريعة على جانب مهم وهو الجانب الرياضي، وسنعود لها لاحقاً بإذن الله لكن بعد أن نتعلم بقية الخصائص التي قد نحتاجها في المراحل المتقدمة، وفي درسنا هذا سنتعلم خاصية جديدة وهي خاصية التوقيت، من خلال التعامل مع أداة التوقيت والتي تظهر في الصورة على هيئة ساعة منبه .
      وحتى ننشئ برنامجاً صغيراً يعرض لنا الوقت والتاريخ علينا أن نعرف عناصره، فالعنصر الأهم هو أداة التوقيت وهي المسئولة عن إجراء عمليات برمجية غير مرئية، بينما هناك عناصر مساعدة لعرض الوقت كالملصقات.
      وللتطبيق نقوم باستدعاء أداة التوقيت بالنقر المزدوج عليها في قائمة الأدوات ثم نستدعي ملصقين (Label) بالنقر المزدوج على أداة الملصقات أحدهما يكون للوقت والآخر للتاريخ، ونحتاج أيضاً لزر نخصصه لإغلاق نافذة البرنامج ثم نقوم بترتيبها على النحو المطلوب، علماً بأن أداة الوقت هي أداة خفية تعمل بشكل غير مرئي.



      وبعد الترتيب نبدأ بكتابة الأوامر والجمل البرمجية وهي بسيطة، فنبدأ بالنقر المزدوج على أداة الوقت Timer1 الموجودة في النافذة لتفتح لنا صفحة الأكواد حيث نجد أن هناك سطرين أحدهما رأس الكود والثاني نهايته فنكتب بينهما الجملة البرمجية المكونة من سطرين الأول خاص بالوقت، والثاني يعبر عن التاريخ.
      يلاحظ أن كلاً من الكودين يشتمل على كلمة Format و Now الأولى تعني الصيغة أو الهيئة المطلوبة Format أما الثانية فتعني الوقت الآن والتاريخ الآن فتضاف إلى صفة الآنية صفة أخرى وهي التغير المستمر تبعاً لتغير الوقت والتاريخ فيصبح الكود كاملاً كالظاهر في شكل (2) ، كما يمكن التغيير بصيغة الوقت من الصيغة المطولة للصيغة الأقصر باستبدال Long بالمصطلح Short.



      الخطوة الأخيرة من البرنامج إنشاء زر لإنهاء البرنامج Command1 فيتم النقر المزدوج عليه ليفتح لنا صفحة الأكواد فنضع الكلمة End .
      ويتم تغيير اسم Command1 من خلال الخصائص الواقعة في يسار النافذة عند خاصية التسمية Caption ليصبح بعد التعديل (إغلاق).
      ـــــــــــــــــــــــــــــــ
    • استخدام أدوات استعراض الأقراص والمجلدات والملفات - الحلقة (5)

      <B>في المرحلة السابقة استطعنا التعرف على بعض الأدوات الأكثر استخداماً، وسنتعلم في هذا اللقاء استخدام أدوات جديدة هي أدوات استعراض الأقراص والمجلدات والملفات، وسنرى كيفية الربط بينها بحيث تتغير الملفات تبعاً لتغير الأدلة التي تتغير هي الأخرى بتغير محرك القرص.



      نبدأ بالنقر المزدوج على أداة استعراض الأقراص المشار إليها بالرقم (1) ثم نستدعي أيضاً أداة استعراض المجلدات التي يشير إليها الرقم (2) وبنفس الطريقة نستدعي أداة عرض الملفات (3) وبعد أن نقوم بصفها نقوم بصياغة الكود. كيف؟



      نحن نريد عند تغيير محرك الأقراص تظهر المجلدات المحفوظة عليه وعند دخول المجلد تظهر كافة الملفات التي بداخله، فنبدأ بمحرك الأقراص حيث نكتب الكود بهذا المنطق :


      [INDENT]
      شفرة:
      Dir1.Path = Drive1.Drive


      [/INDENT]


      بمعنى : إذا تغير محرك الأقراص فإن قائمة المجلدات ستتغير تبعاً للقرص الظاهر، والشكل (4) يوضح الكود كاملاً.



      ونفس الحال بالنسبة لتغير المجلدات، فعند النقر المزدوج على مجلد معين المنطق يقول ان الملفات التي ستعرض في قائمة الملفات هي الملفات المحفوظة بداخل ذلك المجلد، لذلك سنكتب الكود بالمنطق التالي :


      [INDENT]
      شفرة:
      File1.Path = Dir1.Path


      [/INDENT]


      بمعنى : إذا تغير المجلد فإن مسار الملفات المعروضة سيتغير تبعاً للمجلد الظاهر، والشكل (5) يوضح الكود كاملاً.
      نقوم الآن بتنفيذ البرنامج، نلاحظ أن البرنامج يعمل بشكل مترابط وسليم كما في الشكل (6).


      اختبار (1) :
      مطلوب إنشاء برنامج يقوم بإيجاد المتوسط الحسابي لثلاثة أرقام، إذا علمت أن القانون العام للمتوسط الحسابي للأرقام الثلاثة هو (مجموع الأرقام الثلاثة مقسوماً على العدد ثلاثة).
      </B>
    • استخدام صندوق الصور وعمل برنامج مستعرض بسيط للصور - الحلقة (6)

      درسنا في هذه الحلقة يعتبر استكمالاً للدرس السابق والذي تعرفنا من خلاله على كيفية استعراض الملفات لكن لم نتعرض لأي وظيفة عملية يؤديها هذا المستعرض لذلك سينصب شرحنا على عمل برنامج مستعرض للصور بحيث نتعرض لوظيفة صندوق الصورة .

      لعمل هذا البرنامج سنحتاج لنفس الأدوات التي تعاملنا معها في الدرس الخامس وهي أداة محرك الأقراص، وأداة مستعرض المجلدات وأداة مستعرض الملفات يضاف إليها أداة عرض الصور وهي ثاني أداة من الأسفل في قائمة الأدوات وبمجرد النقر المزدوج عليها تضع نسخة منها على النموذج وسيكون اسم هذه النسخة Image1 بقي أن نقوم بإجراء الربط ما بين الأدوات (محرك الأقراص ومستعرض المجلدات وكذلك أداة الملفات) بنفس الطريقة في درسنا السابق ثم نقوم بكتابة كود عرض الصورة . كيف؟



      الآن نحن أمام مشكلة، إذا حددنا اسم الصورة التي سنعرضها فإننا سنحتاج لبرنامج مستقل لكل صورة نريد عرضها. ما هو المخرج؟ الحل بسيط نستخدم قيمة متغيرة لأي صــورة ولتكن K ، فبهذه القيمة نحجز مكاناً بحيث يكون البرنامج صالحاً لعرض أي صورة ، وحتى نضمن فاعلية المتغير علينا أن نعرفه على الأداة، فنقول (إذا كان الملف K صورة يجب عرضها) وتكون صيغة الأمر:

      Image1.Picture = LoadPicture (K)

      ويصبح الكود كاملاً كما في الشكل (1) ويلاحظ أننا أضفنا خاصية Picture كملحقة للأداة Image1 وهذه من ضمن مجموعة خصائص تظهر للمستخدم بمجرد اتباع الأداة بنقطة وسنترك التعرف على هذه الخصائص للدروس المستقبلية.



      الآن ننفذ وسنجد أن البرنامج يهمل جميع الملفات ويعرض فقط الصور النقطية أنظر الشكل (2).
      يمكن الحصول على الملفات المصدرية للمشروع من خلال الوصلة:



    • المتغيرات - أنواعها واستخداماتها المختلفة - الحلقة (7)

      تعلمنا في الدروس الستة الماضية كيفية التعامل مع الأدوات وتعديل بعض خصائصها، فغطينا أغلبها وأكثرها استخداماً، وسننتقل اعتباراً من هذه الحلقة إلى مرحلة جديدة تعتبر أكثر تقدماً ويظهر فيها تميز الفكر البرمجي، يمكن أن نسميها مرحلة التطويع وستكون بدايتنا مع المتغيرات.
      هل هناك ثوابت ومتغيرات؟ الجواب: نعم، وسنتعرف على أنواعها وأشكال التصريح بها أو ما يسمى بالإعلان عن المتغيرات ومتى نحتاج لاستخدام كل منها، وقد يتوارد إلى ذهن القارئ السؤال التالي: ما هي الفائدة من المتغيرات؟ والجواب أن البرنامج ينقسم إلى قسمين، معطيات ثابتة ومعطيات متوقعة وهذه الأخيرة يجب أن يحجز لها مكان يناسبها . سنبدأ بعرض أشكال المتغيرات وهي المبينة بالجدول التالي :



      وللتصريح عن أي متغير من المذكورة أعلاه نستخدم الصيغة التالية:
      Dim X As ...
      فلو أردنا الإعلان عن متغير :
      Dim X As Integer
      أو أردنا الإعلان عن تاريخ نقول مثلاً :
      Dim D As Date
      وهكذا مع بقية المتغيرات ، ولكن يجب علينا أن نعلم أنه يمكننا كتابة أي حرف أو اسم كمتغير مثال:
      Dim Khalid As Integer
      ولكن يجب التنبيه على أنه ليس من المأمون دائماً استخدام نفس المتغير في أكثر من إعلان لأنه قد يربك البرنامج وغالباً لا يعمل.

    • تابع لموضوع المتغيرات - كيفية التصريح عن المتغيرات - الحلقة (8)

      امتداداً لدرسنا السابق الذي تحدثنا فيه عن المتغيرات وأنواعها، فسنتعرف اليوم على الإعلان (التصريح) عن تلك المتغيرات، حيث ان الإعلان عن تلك المتغيرات يأخذ أشكالاً عدة سواء من حيث المكان أو نوع التصريح، فمن حيث المكان (الذي هو محور حديثنا في هذا اللقاء) نجد أن التصريح إما أن يكون على مستوى الإجراء أو على مستوى النافذة أو على مستوى المشروع .
      فعلى مستوى الإجراء يكون عمل المتغير محدوداً جداً، بحيث ينتهي دوره بمجرد انتهاء الإجراء والمقصود بالإجراء هنا هو الحدث كالنقر على الزر أو تحريك الفأرة أو النقر عليها، وبعد الانتقال إلى إجراء آخر يهمل البرنامج هذا المتغير وهذا النوع من الإعلان قليل الاستخدام.

      أما الشكل الثاني من أشكال الإعلان وهو الأكثر استخداماً ، الإعلان على مستوى النافذة وهو الذي يكون بالضغط على مزلاج الأدوات في قسم كتابة الأكواد واختيار General وهو المشار إليه في الصورة رقم (1) ومن ثم كتابة التصريح .. مثال:
      Dim K As String
      ويمكنك كتابة ما تشاء من التصريحات، ولكن يجب التنبيه هنا إلى أهمية مراعاة حصر استخدام الإعلان المتغيرات في أضيق نطاق كون هذه المتغيرات تستنزف موارد الذاكرة بشكل كبير مما يتسبب بالإحجام عن استخدام برنامجك.

      الشكل الثالث من التصريح هو التصريح على مستوى المشروع وهو يأخذ الشكل :
      Global K As ...
      وضع محل النقط نوع المتغير، أما المكان الذي سيتم كتابة التصريح به هو ما يسمى الوحدة النمطية البرمجية Module ويضاف من خلال الضغط بزر الماوس الأيمن على النافذة التي تضم أدوات المشروع وهو الموضح في الصورة رقم (2) ومن ثم اختيار إضافة Add ومنه اختيار Module ثم أكتب به الإعلان .


    • الجملة الشرطية ( If ....... Then ....... Else ) - الحلقة (9)

      عندما تواجهك عدد من الخيارات لا بد أن تتخذ قرارك بالاختيار منها لكن بناءً للشروط التي تتوافق مع رغبتك أو الموصفات التي تحددها، درسنا هذا اليوم ينصب على اتخاذ القرارات وفقاً لقاعدة (إذا.. إذن.. وإلا)، ونعبر عنها بالجملة البرمجية(If .....Then .... Else).

      مثال:
      نريد أن ننشئ برنامجاً يحسب الزكاة لأي مبلغ، لكن.. (بشرط) بلوغ النصاب، فتكون صيغة البرنامج:
      (إذا) كان المبلغ أكبر من 65ريالا.. (إذن) احسب الزكاة.. (وإلا) قم بإنهاء البرنامج.. ثم نضع نهاية الشرط.
      والزكاة = المبلغ * نسبة الزكاة (وهي ربع العشر) .

      التطبيق:
      نقوم بإنشاء مشروع جديد بنافذة جديدة من فيجوال بيسك ونضع بها مربع نص ونضع أمامه ملصق (Label1) نكتب فيه المبلغ، ثم نضع ملصقا تعريفيا (Label2) ونكتب فيه (مقدار الزكاة) وملصقا ثالثا نسميه (Zakah) والتسمية كما أسلفنا هي أول الخصائص الواقعة يمين النافذة والمسماة Name وهي تختلف عن خاصية السمة Caption التي تقوم بعرض التسمية للمستخدم، فالأولى هي التي يتعامل بها البرنامج، وبعد إضافة الأدوات السابقة نضيف زرا لتنفيذ البرنامج .

      ثم نقوم بالنقر المزدوج على الزر الذي أسميناه (حساب) لتفتح لنا نافذة تسجيل الأكواد حيث يكون الكود كالظاهر بالصورة (1) .
      نلاحظ أنه في نهاية الكود أغلقنا الشرط بكتابة End If .

      وبعد ذلك نقوم باختبار البرنامج سنجد أنه يخرج عند أي مبلغ يساوي أو يقل عن 65 ريالا، أما إذا أدخلنا مبلغ 66 ريالا فما فوق سيقوم بحساب الزكاة كما يظهر لنا في الصورة رقم (2). وأدوات الترجيح الرياضية التي تستخدم في البرمجة هي: (=) للمساواة ، و (<) أصغر من ، (<) أكبر من ، (<=) أكبر من أو يساوي (>=) أصغر من أو يساوي ، وأخيراً (<>) بمعنى لا يساوي.

    • ربط أداة صندوق الخيار CheckBox مع الدالة الشرطية If - الحلقة (10)

      تحدثنا في اللقاء السابق عن استخدام دالة الشرطIF في اتخاذ القرارات، وهذا الدرس يعتبر استكمالاً لما تناولناه في ذلك اللقاء بحيث نتحدث عن ربط أداة صندوق الخيار CheckBox مع الدالة الشرطية If

      مثال:
      نفرض أننا نريد أن ننشئ برنامجاً يجري عملية الجمع بين عددين، ولكن نريد إتاحة خيار للمستخدم لتحويل هذه العملية من جمع إلى ضرب.



      التطبيق:
      ننشئ نافذة جديدة ونضع عليها مربعين نص Text1 و Text2ونضع بينهما ملصقLabel1 نعينه لأداة العملية (جمع أو ضرب) ونضع مربع خيار CheckBox واسمه Check1 وهو الذي يحدد المسار، وأسفله نضع ملصقين Label2 كتعريف ونكتب في خانة السمة Caption في جانب الخصائص مسمى (الناتج =) كذلك نضيف ملصق Label3 لتكتب فيه نتيجة العملية سواء أكانت ضرب أو جمع، وأخيراً زر Cammnd1 ليكون هو المحرك لتنفيذ العملية ونكتب في خانة السمة Caption في جانب الخصائص (حساب) أو أي معنى قريب من هذا. ثم نبدأ بصياغة الكود بحيث نحدد له أنه في حالة وضع علامة صح على Check1تتحول الإشارة الموجودة في Label1من الزائد إلى الضرب، وبالتالي تكون العملية ضرب محتوى Text1 في Text2وتظهر النتيجة في ملصق Label3 وإلا (أي في حالة عدم وجود علامة في مربع Check1) تكون العلامة في Label1 هي علامة جمع وبالتالي يكون ملصق Label3 هو حاصل جمع محتوى Text مع Text2.
      الآن ننقر نقراً مزدوجاً على الزر المذكور فيفتح لنا خانة لكتابة الكود فنكتب الكود البرمجي وهو كالظاهر في الشكل رقم (1) .
      نلاحظ أننا عبرنا عن قيمة (الصح) في صندوق الخيار Check1 بالرقم 1 وللمعلومية أن الرقم صفر يعني عدم وجود علامة (صح) والرقم 2 يعني تحويل المربع إلى رمادي اللون.



      نطبق نجد أنه عند وضع علامة صح وفي مربع النص Text1 العدد 20وفي مربع Text2العدد 30وعند ضغط الزر يقوم البرنامج بالتعامل مع هذه الأرقام على أنها عملية ضرب فيظهر الناتج على أنه 600كما في الشكل(2).

    • دالة شرطية أخرى هي دالة ElseIf الحلقة (11)

      بعد أن تعلمنا كيفية استخدام دالة الشرط If ... Then ... else نتعلم دالة شرطية أخرى هي دالة ElseIf ويمكن اعتبارها رديفاً للقرار المستخدم مع دالة If ويكثر استخدامها مع القرارات المركبة .

      مثال :
      لو أردت تصميم برنامج يعطي تقديرات على حسب الدرجات، فيكون لديك عدة حالات (امتياز جيد مقبول - ضعيف) فيكون القرار على عدة مسارات .. لذلك يجب أن يقوم البرنامج بمقارنة الدرجات بالشروط فإذا كانت الدرجة من 8 إلى 10 مثلاً يكون التقدير (ممتاز) وإذا كانت من 6 إلى أقل من 8 (جيد) وأقل من 6(راسب) .



      الآن نطبق عملياً .. حيث نفتح نافذة جديدة ونضع فيها مربع نص Text ثم نستدعي زر Command1 لتنفيذ العملية ثم ننقر نقراً مزدوجاً عليه لتفتح خانة نكتب بها الكود وهو كالظاهر بالشكل رقم (1) .
      نلاحظ أننا استخدمنا كذلك في هذا المثال خيار الحصر بعملية أكبر من وأصغر من أي حصرنا مجموعة قيم بين تلك القيمتين.
      وأحب أن أنوه هنا إلى نقطة مهمة وهي كيفية كتابة الملاحظات والتعليقات على الأكواد دون أن تحدث رسائل خطأ حيث يمكنك أن تكتب ما تشاء من تعليقات على أن تسبق كل سطر من ملاحظاتك بالفاصلة المفردة الواقعة جوار حرف الطاء لكن بدون استخدام Shift، حيث يظهر شكل الملاحظة باللون الأخضر.

      اختبار :
      مطلوب إنشاء برنامج يقوم لحساب المعاش التقاعدي لأي شخص بحيث لا يعمل إذا كانت الخدمة تقل عن 18سنة، إذا علمت أن القانون العام لحساب المعاش التقاعدي هو :
      المعاش التقاعدي = (الراتب الأساسي * الخدمة الفعلية) ÷ 35

    • دالة اختيار الحالات Select Case ودورها في اتخاذ القرارات - الحلقة (12)

      نستكمل بدرسنا هذا دروس استخدام الدوال الشرطية ودورها في اتخاذ القرارات، حيث سنتناول دالة اختيار الحالات Select Case والتي تقوم بنفس الدور في معظم الأحيان، وسيتجلى لنا ذلك بعد أن نقوم بشرح المثال الذي لا يختلف كثيراً عن مثالنا في الدرس الحادي عشر .

      مثال :
      نفترض أنك تريد أن تنشئ برنامجاً يساعدك في إيجاد التقديرات المقابلة للدرجات التي يحصل عليها الطلاب، بحيث تضمن عدم حدوث أي أخطاء، وعندك الدرجات المعيارية التي ستقيس عليها، فالرسوب للحاصلين على أقل من خمسين درجة، بينما من نالوا درجات أكبر من خمسين وأقل من سبعين فتقديرهم مقبول، والذين رصدت لهم درجات أكبر من سبعين وأقل من ثمانين فسيكون تقديرهم جيداً، وجيداً جداً لمن وقعت درجاتهم ما بين التسعين والثمانين، ومن تسعين فما فوق فتقديرهم ممتاز .

      التطبيق :
      نقوم بإنشاء نافذة فيجوال بيسك جديدة ونضع فيها مربع نص Text1 نكتب به الدرجات وملصق Label1 تظهر به نتائج التقديرات، ونضع ملصقاً معرفاً أمام مربع النص ونسميه Label3 ونضع بداخله معرف (الدرجة) ليفهم من يتعامل مع البرنامج آلية عمله، ونستدعي ملصقاً آخر Label2 ونضعه أمام Label1 ونصفه بمسمى (التقدير) ثم نضع زر Command1 ونميزه بمسمى (حساب) ونقوم بالنقر المزدوج عليه ليفتح لنا خانة نكتب بها الكود كما يظهر من الصورة رقم (1) .

      الآن ننفذ ماذا نلاحظ؟ نجد أنه يعمل بكفاءة ودون أي أخطاء كما يبدو من الشكل رقم (2).



    • التعامل مع الرسائل - الجزء الأول ...- الحلقة (13)

      من المعلوم أنه كلما كان البرنامج مرناً ويمنح المستخدم حرية أكبر كلما كان ذلك دليل قدرة المبرمج ومهارته، ولكن هذا يتطلب أن يكون هناك لغة حوار وسيطة ما بين المبرمج والمستخدم. كيف؟ بالتأكيد أنه أثناء تجاربك وعملك على الكثير من البرامج صادفت صناديق رسائل تعرض لك خيارات وبناءً على اختيارك يتحدد مسار عمل البرنامج، كحفظ الملفات أو حذفها أو الكتابة فوق ملف موجود أو رسالة لتأكيد الخروج .. وهكذا وتريد أن تصنع شيئاً كهذا، المسألة ليست صعبة وسنخصص درسين لموضوع الرسائل هذا الدرس نتناول من خلاله الرسائل البسيطة بينما نتعرف في الدرس المقبل على استخدام الرسائل في اتخاذ القرارات. لصناعة الرسائل نستخدم الدالة MsgBox حيث تأخذ الرسالة البسيطة الشكل التالي:
      MsgBox Prompt , ## , Title
      فيعبر Prompt عن نص الرسالة، و ## عن الرموز والأزرار، بينما Title يقصد به عنوان النافذة.



      والرموز والأزرار يوضحها الجدول رقم (1) فيظهر لنا أن كل زر أو مجموعة أو رمز حجزت له قيمة ثابتة بحيث يتم استخدام هذه القيم منفردة أو يتم مزجها بعملية الجمع .


      مثال:
      في أحد دروسنا الماضية تعرضنا لبرنامج يقوم بحساب الزكاة، واشترطنا فيه بلوغ النصاب، وكان في ذلك الدرس عند عدم بلوغ النصاب يقوم البرنامج بالخروج، سنستخدم نفس بيانات ذلك المثال وسنضع رسالة تظهر للمستخدم إذا كان المبلغ لم يبلغ النصاب .




      التطبيق :
      نفس بيانات المثال السابق يضاف إليه الرسالة، حيث نقوم بكتابة الكود كالموضح بالشكل(2) وفيه نركب الرسالة بالشكل التالي:
      نحن نحتاج إلى مكان لنص الرسالة ، وعلامة استعلام ، وزر موافق كيف سنحصل على ذلك؟ نقوم بإجراء عملية الدمج ما بين قيم الرمز والأزرار ، فالاستعلام عندنا يرمز له بالرقم 64 بينما زر موافق يرمز له بالصفر فنجمعهما:
      صفر + 64 = 64
      والآن نضع دالة الرسائل ثم نضع نص الرسالة بين علامتي تنصيص تليها فاصلة ثم الرقم 64 وبعده فاصلة ثم نضع عنوان نافذة الرسالة بين علامتي تنصيص .




      نفذ الآن وضع أي مبلغ يقل عن 56 ريالاً ستظهر لك رسالة كالموضحة في الشكل(3) تفيدك بعدم بلوغ النصاب .

    • التعامل مع الرسائل - الجزء الثاني ......- الحلقة (14)

      في الدرس السابق تعرفنا على كيفية إنشاء الرسائل البسيطة والتي لا تعدو كونها رسائل إخبارية، بينما سنتعرف في هذا اللقاء على كيفية الاستفادة من الرسائل في اتخاذ القرارات. كيف؟. عندما تنشئ برنامجاً وتضع فيه زراً للخروج من البرنامج أو حذف ملف ويتطلب الأمر وضع رسالة تحذيرية تتضمن المواصلة أو التراجع، وفي هذه الرسالة زر (نعم)، وزر (لا) فعند ضغط نعم يقوم البرنامج بمواصلة الحدث (سواء أكان خروج أم حذف أو حفظ) بينما لا فيلغي الحدث ويعود للنافذة الرئيسية.
      وقبل أن نأخذ مثالاً على ذلك يجب أن نتعرف على القيم المعادة وهي التي يشار إليها دائماً في كتابة الشروط . وهذه القيم مبينة بالجدول (1).



      مثال:
      نفترض أن لديك برنامجاً ما.. أي برنامج.. وفيه العديد من الأزرار.. ومن ضمنها زر خروج بحيث تضع في اعتبارك أن مستخدم برنامجك قد يقوم بضغط زر خروج بطريق الخطأ وقد يفقده هذا الإجراء غير المقصود الكثير من المعلومات والجهد والوقت، فتجعل هناك رسالة يؤكد من خلالها سلامة هذا الإجراء.



      التطبيق:
      لن نفرض عليك أي برنامج جديد، بل سنجري تعديلاً بسيطاً على برنامجنا في الحلقة13 بحيث أن المبلغ إذا لم يبلغ النصاب يكون لدى المستخدم خيار العودة لحساب زكاة مبلغ جديد، ففي البرنامج السابق الرسالة إخبارية ليس فيها سوى خيار واحد، أما في هذه الحلقة سيكون هناك رسالة إخبارية وتحتوي على خيارين في نفس الوقت Yes و No ومعهما رمز علامة الاستفهام، فنجمع الرقم 4 (أزرار نعم ولا) + 32(علامة الاستفهام) = 36 نبدأ الآن بتركيب الكود (كالظاهر في الشكل 2).
      يلاحظ في الكود السابق أننا وضعنا شرط يحدد مسار البرنامج وهو أنه إذا كانت القيمة المعادة من الإجراء مساوية للعدد 6 فهذا يعني أن المستخدم يرغب في إجراء حسابات جديدة للزكاة وبالتالي يتم العود بقيمة خالية لمربع النص Text1 حيث وضعنا علامتي تنصيص فارغة، وحتى نسهل على المستخدم وضعنا التركيز في مربع النص Text1.SetFocus، وإذا كانت القيمة المعادة لا تساوي 6 يتم الخروج من البرنامج، وهنا تجدر الإشارة إلى أن القيمة الأخرى تهمل طالما أن هناك خيارين فقط.


      وعند التطبيق ستظهر الرسالة كما في الشكل (3).

    • استخدام دالة صندوق الإدخال InputBox .......- الحلقة (15)

      تعرفنا في الدروس الفائتة على كيفية التعامل مع الرسائل والاستفادة منها في اتخاذ القرارات، وبعد أن أنهيناها ننتقل إلى مرحلة جديدة تعد استكمالاً للتفاعل بين المستخدم والبرنامج، لنتعرف على كيفية استخدام صناديق الحوار أو الإدخال، بحيث يظهر مربع حوار يطالب المستخدم بإدخال قيمة معينة يبني عليها البرنامج عملية معينة والدالة التي سنستخدمها لهذا الغرض هي دالة InputBox.

      مثال:
      نفترض أنك ترغب في عمل برنامج يطلب من المستخدم إدخال اسمه، ومن ثم يظهر له رسالة ترحيبية تتضمن اسمه بحيث إذا أدخل اسم خالد مثلاً تظهر رسالة (مرحباً بك يا خالد) .. وهكذا ....



      التطبيق:
      نستدعي نافذة جديدة Form1 ونضع به زر أمر Command1 وسنتعرف في هذا الدرس أيضاً على طريقة ضبط إعداد مسمى الزر من خلال المنهج البرمجي، فنقوم بالنقر المزدوج على أي مكان فارغ في النافذة Form1 فيظهر لنا مساحة لكتابة الكود الخاص بـ Form1 الحدث Load أي هذا الكود سينفذ بمجرد تحميل النافذة Form1 فنكتب الكود كالظاهر بالصورة رقم (1).




      ثم ننقر بالماوس نقراً مزدوجاً على زر Command1 لتفتح لنا نافذة البرمجة الخاصة بـ Command1 الحدث Click فنكتب الكود الموضح بالصورة رقم (2).



      نلاحظ أننا في هذه الخطوة قمنا بالإعلان عن متغير اسمه khalid ثم وضحنا قيمة هذا المتغير حيث سيتكون دالة InputBox كخانة للإدخال ومعها دليل يعرف المستخدم بالقيمة المطلوبة فنقول له (أدخل اسمك من فضلك) ، وخانة العنوان الذي سيظهر في شريط عنوان النافذة العلوي، ثم نضع القيمة الافتراضية التي ستظهر لو لم يكتب المستخدم أي شيء.

      التنفيذ :
      بمجرد النقر على زر (دخول) يظهر لنا مربع حوار وفيه مساحة كتب بها الجملة الافتراضية (زائرنا الكريم)، وبمجرد كتابة اسم أو الاكتفاء بالجملة الافتراضية سيقوم البرنامج بإضافة ذلك إلى جملة ثابتة كتبت سابقاً (مرحباً بك يا).


      اختبار:
      اكتب برنامجاً للزكاة بحيث يقوم بعرض مربع حوار (باستخدام الدالة InputBox) يطلب من المستخدم كتابة المبلغ المطلوب حساب الزكاة عنه فإذا كان المبلغ أقل من 56 ريالاً يعرض رسالة يفيده فيها أن المبلغ لم يبلغ النصاب ثم يسأله
      عما إذا كان يريد حساب مبلغاً آخراً . إذا علمت أن القانون هو :

      الزكاة = المبلغ * 0.025 .


    • تغيير الخصائص بالطريقتين اليدوية والبرمجية .......- الحلقة (16)

      درسنا هذا اليوم سنتعرف من خلاله على الطريقة البرمجية لاستخدام خصائص الأدوات، فلكل أداة من أدوات البرمجة خصائص يتم ضبطها بما يتوافق مع رغبة المبرمج، وتشترك بعض الأدوات بخصائص معينة، بينما هناك خصائص أخرى لا تتشابه.
      وسنحاول قدر الإمكان أن نضع المستخدم في بداية الطريق ثم نترك الباقي ليستكشفه بنفسه إذ لا يمكن تغطية هذا الموضوع بحلقة أو حلقتين، لكن يكفي أن يفهم الفكرة ، فهو أمام أحد خيارين، إما الاعتماد على الطريقة المرئية، أو اللجوء للطريقة البرمجية.



      (أ) الضبط بالطريقة المرئية :
      فكما يتضح من الشكل رقم (1) يمكننا تغيير خصائص أي أداة عن طريق تلك النافذة يمين المستخدم، حيث بمجرد الضغط على الأداة يتم نقل التركيز لخصائصها، فمن هناك يمكن تغيير الاسم البرمجي Name أو المسمى الظاهر Caption وكذلك التحكم بالألوان والحجم ونوع الخط ومستوى النفاذ سواء أكان شفافاً أم غير نافذ، وما إلى ذلك.

      (ب) الضبط بالطريقة البرمجية:
      القيم المقابلة للخصائص يمكن تقسيمها إلى ثلاثة أنواع، نوع يأخذ قيماً رقمية (0،1،2،3) كحجم النوافذ أو ونوع يأخذ
      صيغة (متاح، معطل) أو (True , False) بينما النوع الثالث يأخذ صيغاً حرة سواء مطلقة كالأسماء أو محددة كأنواع الخطوط أو أحجامها أو الألوان.



      والكود البرمجي لإثبات الخصائص (غالباً) يتكون من ثلاثة مقاطع (اسم الأداة.الخاصية = قيمة الخاصية) .. مثال :
      أنظر للشكل (2) فستجد أن السطر الأول سيجعل النافذة تفتح على مستوى حجم الشاشة عند بداية التشغيل، بينما السطر الثاني يجعل النافذة تظهر باللون الأخضر البحري، أما السطر الثالث فيسخفي الزر ولإظهاره مرة أخرى يعاد كتابة الكود مع تغيير القيمة إلى True .

      ومن المعلوم أن برنامج فيجوال بيسك يقوم على أساس خاصية الإكمال التلقائي، فبمجرد كتابة النقطة بعد اسم الأداة تظهر لك كل الخصائص المتاحة والمسموح بها وما عليك إلا الاختيار فقط.

      اختبار :
      مطلوب كتابة برنامج فيه خانات نصوص ثلاث Text1.Text وText2.TextوText3.Text وهناك زرين الأول Command1 والثاني Command2 بحيث يتم عند تشغيل البرنامج عدم إتاحة كافة خانات النصوص باستخدام الخاصية (Enabled)، فيقوم المستخدم بضغط الزر الأول Command1 فتتاح النصوص للكتابة ومن ثم جمع محتوى النصين الأول والثاني وإظهار النتيجة في الثالث، وعند الضغط على الزر الثاني يعيد الأدوات إلى ما كانت عليه.
    • استخدام جمل الدوران وحلقات التكرار - الجزء الأول - الحلقة (17)

      أحياناً تحتاج إلى تكرار عملية عدد كبير من المرات، كإعادة تسمية مئات الملفات أو تغيير امتداداتها، أو كتابة عدد كبير من الأعداد، فإن اعتمدت على الطريقة اليدوية التقليدية في الإدخال فإن ذلك سيكلفك الكثير من الجهد والوقت، لكن في عالم البرمجة هناك مخرج من هذه المشكلة . ما هو؟
      إنه بناء حلقات التكرار، ومن المعلوم أن هناك تكرارا محدودا وتكرارا غير محدود أو غير منته .. وسنتناول في هذا الدرس حلقات التكرار المنتهية باستخدام For..Next .

      مثال :
      لو افترضنا أنك ترد أن تصنع برنامجاً يقوم بطباعة قائمة بالدروس التي ألقاها المعلم في أحد الفصول الدراسية ومن ثم قصها واستخدامها كملصقات، بحيث تكتب بطريقة آلية وسريعة، لكن عليه أن يقوم بإدخال العدد المطلوب لهذه الدروس.

      التطبيق :
      فتح مشروع جديد Project1 متضمناً نافذة جديدة Form1 ثم نضع فيها زرين أحدهما يقوم بتنفيذ البرنامج Command1 ،بينما الثاني للخروج من البرنامج Command2 .



      ثم نقوم بكتابة شيفرة البرنامج (كما تظهر من الصورة 1).
      نلاحظ أننا استخدمنا دالة InputBox وذلك من أجل إتاحة الفرصة للمستخدم لإدخال العدد الذي يريد.



      سنبدأ بالتطبيق الآن .. ونشغل البرنامج لتظهر لنا شاشة تطلب منا إدخال عدد الدروس وهي الموضحة بالشكل رقم(2) فقمنا بإدخال الرقم 15 ثم موافق OK ماذا حدث؟



      لقد قام البرنامج بطباعة قائمة بخمسة عشر درساً بشكل مرتب .. أنظر للشكل(3)، هذه إحدى الوظائف الكبيرة التي تؤديها جملة الدوران التكراري.

    • جمل الدوران وحلقات التكرار - الجزء الثاني - الحلقة (18)

      تعرفنا في درسنا السابق على أحد أنواع حلقات التكرار باستخدام جملتي For .. Next وهي ما يطلق عليها اصطلاحاً مسمى العداد ويستخدم عند معرفتنا بعدد مرات التكرار، وسيكون هذا الدرس استكمالاً لما بدأناه في تلك الحلقة، غير أننا سنتعلم على كيفية استخدام جملة التكرار مع شيء من التخصيص . كيف؟

      مثال :
      في الدرس السابق تعلمنا كيفية طباعة جميع الدروس من 1إلى 15، لكننا سنحدد في هذا المثال الدروس ذات الأعداد الفردية فقط باستخدام جملة Step والتي تعني مقدار التغير في كل خطوة .



      فنضيف لكل خطوة 2
      فيصبح الكود كالمبين بالصورة (1) .
      ننفذ الآن . ماذا نلاحظ ؟



      أن البرنامج قد طبع لنا فقط الأرقام الفردية .
      أنظر الشكل (2)


      اختبار :
      لنفترض أن لديك نفس بيانات مثالنا السابق . والمطلوب هو كتابة برنامج يقوم بطباعة الأعداد الزوجية فقط.


    • جمل الدوران وحلقات التكرار - الجزء الثالث - الحلقة (19)

      بعد أن تعرفنا على التكرار باستخدام جملتي For و Next سنتعرف في هذا اللقاء على نوع آخر من حلقات التكرار باستخدام الجمل Do و Loop. وتستخدم جملة التكرار Do و Loop عندما نريد تنفيذ مجموعة من العبارات أو الأوامر حتى تتحقق شروطاً معينة أو طالما أن نتيجة شروط معينة تكون صحيحة. وهناك صيغتين لاستخدم هذا النوع من الحلقات:



      ولكل صيغة من الصيغتين المبينتين بالشكل رقم (1) أثر مختلف على البرنامج، ففي الأولى يتم تنفيذ مجموعة التعبيرات أو الأوامر سواء أتحقق الشرط أم لم يتحقق، بمعنى أن هذه التعبيرات تنفذ على الأقل لمرة واحدة. بينما نجد أنه في الصيغة الثانية إذا لم تتحقق شروط الدوران لن يتم تنفيذ أي أمر من الأوامر بمعنى أنه يتم إهمال الدوران. أنظر للمثالين المبين بالصورة (2).





      والمبين بالصورة (3)




      نلاحظ أنه في المثال الأول يتم تنفيذ الدورة لمرة واحدة: بغض النظر عن قيمة Khalid ، بينما في المثال الثاني قد يهمل الدوران كلياً إذا تجاوزت قيمة Khalid المقدار 15.

    • أساسيات المنطق الرياضي - الجزء الأول...- الحلقة (20)

      اعتباراً من هذه الحلقة ولعدة دروس قادمة سيكون محور دراستنا على المنطق الرياضي في لغة فجوال بيسك لنتعرف على الكيفية التي يتم التعامل بها مع المسائل الرياضية.
      وسنبدأ الآن مع عملية القسمة، وكلنا نعلم أن القسمة أحياناً يترتب عليها وجود باقي أو لنقل ينتج عنها عدد كسري (أي عدد صحيح وبعض الكسور) ونحن في هذه الحالة أمامنا إحدى طريقتين.. إما أن نجري عملية تظهر العدد والكسور، أو يتم احتساب العدد الصحيح فقط وحذف الكسور (وأؤكد حذف الكسور وليس التقريب لأقرب عدد صحيح)، وستتضح الصورة عندما نبدأ بالتطبيق العملي.

      مثال:
      نريد أن نكتب برنامجاً يؤدي وظيفتين الأولى قسمة عدد على عدد بدون احتساب باقٍ أو كسور، بينما الوظيفة الثانية تجري القسمة بين عددين بشكل طبيعي ومع الكسور.

      التطبيق:
      نقوم بإنشاء مشروع جديد Project1 وفي النافذة الرئيسية للمشروع Form1 نقوم باستدعاء صندوقي نص Text1 و Text2 وزر أمر Command1 ثم نستدعي ملصقين لتكتب بها النتائج Label1 و Label2 وبعد ذلك نضع ملصقين آخرين Label3 نضبط عنوانه Caption في نافذة الخصائص على (الناتج مع الكسور) وLabel4 وعنوانه (الناتج بدون كسور) وذلك للتمييز بين العمليتين، ثم نضع ملصقاً خامساً Label5 ونضبط عنوانه Caption على علامة القسمة (÷).



      ننقر نقراً مزدوجاً على Command1 لبناء الكود على النحو المبين بالصورة رقم (1).
      لاحظ أنه في الشكل الذي حددنا بالمستطيل الأول وأشرنا إليه بالحرف (أ) تم استخدام الشرطة المائلة ذات الرأس العلوي المائل لليسار () والقسمة مع هذه العلامة تقوم فقط باحتساب الأعداد الصحيحة وتهمل أي كسور يمين العدد الصحيح مهما بلغ قيمة هذه الكسور، بينما في المستطيل الثاني الذي أشرنا له بالحرف (ب) يتم استخدام الشرطة المائلة برأسها العلوي إلى اليمين (/) وهذه تجري عملية قسمة طبيعية مع كامل كسورها.




      نطبق الآن.. أنظر للشكل (2) ماذا تلاحظ؟
      لقد قمنا بقسمة العدد 99على 10فقام البرنامج بالمرحلة الأولى بحساب الناتج كاملاً مع الكسور، بينما قام بالمرحلة الثانية بإهمال الكسر مع أنه يقترب من العدد 1صحيح.
      قد يتساءل أحد ما هي الفائدة من إجراء قسمة بدون كسور؟ أو متى تستخدم مثل هذه القسمة؟ الجواب - وبكل بساطة هناك أشياء لا يمكن أن تقبل التجزيء كالإنسان مثلاً ، فمثلاً لو أن عندك فصلين وتسعة طلاب.. وتريد أن تقسمهم على الفصلين فحتماً سيخصص خمسة للأول بينما الثاني يخصص له الأربعة.


    • أساسيات المنطق الرياضي - الجزء الثاني - (21)

      برمجة فيجوال بيسك - الحلقة (21)


      كنا قد بدأنا لقاءنا السابق في أولى حلقات المنطق الرياضي وإجراء العمليات الرياضية في فجوال بيسك، وتحدثنا عن إجراء عمليات القسمة بباقي وبدون باق. وفي هذه الحلقة سنتعرف على دالتين من الدوال الرياضية، دالة التربيع باستخدام (^2)، وعكسها دالة الجذر التربيعي SQR .


      مثال :
      سنقوم بعمل برنامج يقوم بحساب مربع العدد وجذره التربيعي باستخدام دالتيهما، فنحن بحاجة لثلاثة مربعات نصوص Text1 ويخصص للعدد المراد حساب مربعه وجذره، وText2 لحساب مربع العدد، وText3 لحساب جذره التربيعي. كما نحتاج إلى ملصقين Label1 كعنوان لمربع العدد، و Label2 لعنوان الجذر، وأخيراً زر Command1 يقوم بتنفيذ العملية.
      نقوم الآن ببناء الكود على النحو التالي :












      لاحظ أنه بمقدورنا الاستعاضة عن كتابة دالة تربيع العدد بأن نكتب كود التربيع على النحو التالي ليؤدي نفس النتيجة :
      Text3.Text = Text1.Text * Text1.Text














      نقوم بالتطبيق الآن بأن نقوم بإدخال الرقم (4) ونجري العملية فينتج عن ذلك أن مربعه (16) بينما جذره هو العدد (2) :

    • أساسيات المنطق الرياضي - الجزء الثالث - (22)

      لازلنا مستمرين في دروس العمليات الرياضية، وسنتعلم هذا اليوم إجراء ثلاث عمليات باستخدام ثلاث دوال من دوال فيجوال بيسك الرياضية، وهذه الدوال تعتبر جاهزة وتوفر على المستخدم الكثير من الوقت والجهد، إذ أن كلاً منها يحتاج في حسابه إلى برنامج ضخم مستقل.
      أولى الدوال هي دالة Int وهي اختصار Integer التي تعني العدد الصحيح، وعملها ليس ببعيد عن هذا المعنى إذ أنها تقوم بجبر الأعداد العشرية بإضافة واحد مقابل الكسر مهما بلغت قيمته .. أي أن القيمة الصحيحة للعدد (1.1) وفقاً لهذا المفهوم هو العدد (2).
      أما الدالة الثانية فهي دالة ABS أي القيمة المطلقة، وأعتقد أن الجميع يعرف بأن القيمة المطلقة تعني القيمة الموجبة للعدد حتى وإن كان بالسالب .. والدالة الثالثة هي Log بمعنى اللوغاريتم وتقوم بإيجاد اللوغاريتم لأي عدد .. وستتضح العمليات بعد التطبيق .

      تطبيق :
      نود أن نعمل آلة حاسبة بسيطة تقوم بحساب القيمة الصحيحة لأي عدد يتم إدخاله، وكذلك قيمته المطلقة ولوغاريتمه . فسنحتاج إلى مربع نص واحد Text1 و ثلاث ملصقات هي Label1 و Label2 و Label3 على التوالي، وثلاثة ملصقات أخرى نضعها أعلى منها لبيان مدلولات الملصقات السابقة والتي ستوضع بها القيم، وأخيراً نحتاج إلى زر أمر Command1 لتنفيذ العمليات.




      نقوم ببناء الكود .. والذي سيكون كالشكل الظاهر في الصورة رقم (1) حيث يظهر لنا أن سطر الأمر المشار إليه بالرمز (A) يقوم بحساب القيمة الصحيحة للعدد، بينما السطر المشار إليه بالرمز (B) يقوم بحساب القيمة المطلقة للعدد، وأخيراً الرمز (C) يشير إلى عملية حساب اللوغاريتم، ويلاحظ أننا قمنا بحساب اللوغاريتم للقيمة المطلقة إذ أنه لا يمكن حساب اللوغاريتم لعدد سالب، لذلك وحتى نضمن عدم خروج أي رسائل خطأ فإننا سنعمد مباشرة إلى حساب لوغاريتم القيمة المطلقة.




      نقوم بتشغيل البرنامج الآن .. ونضع أي رقم .. وليكن (-9.12) سالب تسعة وإثنتي عشرة بالمئة ثم نرى (أنظر الشكل 2) :

      لو استخدمت آلة حاسبة علمية وحسبت لوغاريتم العدد المذكور لخرجت بنفس النتيجة.

    • معالجة إدخال البيانات.. والتحكم بالحقول الرقمية (1/2)- (23)

      سائل كريم يقول : كيف أجعل المستخدم لا يستطيع إدخال الحروف أو الرموز في المربعات المخصصة للعمليات الحسابية؟! السؤال وجيه جداً .. فالبرنامج إذا أدخل به بيانات غير رقمية وطلب منه الحساب يقوم بعرض رسالة خطأ .. وقد تنتهي إلى عمليات حرجة تؤدي إلى غلق البرنامج .. فكيف الخروج من هذه المعضلة؟!
      لدينا شرط لحصر عملية الإدخال على الأرقام فقط .. ويمكننا استخدامه بطريقتين الأولى، بجعل الشرط يعمل بعد إتمام عملية الإدخال وضغط أمر التنفيذ أما الطريقة الثانية فندع البرنامج يقوم بالمقارنة أثناء الكتابة فإذا كانت القيمة غير رقمية يعرض رسالة تنبيهية ثم يقوم بإعادة المستخدم إلى البداية، عموماً سنتناول كلا الطريقتين في هذه الحلقة والحلقة القادمة، وستكون بدايتنا مع الطريقة الأولى.
      مثال :
      نريد أن نجري تعديلاً بسيطاً على مثال الجذر والمربع بأن لا يسمح للمستخدم بإدخال القيم غير الرقمية بحيث تظهر له هذه المرة رسالة تخبره بأن القيمة التي قام بإدخالها غير مناسبة، فيصبح الكود على النحو المبين بالشكل رقم (1)


      نلاحظ في الكود أننا أضفنا بعد الشرط قيمة فارغة لمربع النص Text1 وهذا من أجل أن نتيح للمستخدم فرصة التصحيح بإزالة الخطأ.
      ننفذ الآن .. قم بإدخال أي حرف أو رمز غير الرموز المعتبرة في عالم الرياضيات ماذا يحدث؟ نعم .. رسالة خطأ كما في الشكل رقم (2).



    • معالجة إدخال البيانات.. والتحكم بالحقول الرقمية (2/2) - (24)

      الدرس السابق تناولنا الشق الأول من الإجابة على سؤال صديقنا الذي يتساءل عن الكيفية التي نحصر بها عملية الإدخال على الأرقام فقط، وشاهدنا كيف أنه بمجرد ضغط زر التنفيذ تخرج لنا رسالة تفيد بأن المدخلات غير صالحة، وهذا الدرس يعد الجزء الثاني من الإجابة ويختلف عن الأول في أن الأخير تظهر الرسالة فيه بمجرد الكتابة وذلك من خلال ربط المقارنة بعملية التغيير في مربع النص Text1_Change وستتجلى المسألة وتبدو أكثر وضوحاً مع التمثيل.

      مثال :
      كما اتفقنا في الدرس السابق على إجراء تعديل بسيط على مثال الجذر والمربع بأن لا يسمح للمستخدم بإدخال القيم غير الرقمية بحيث تظهر له هذه المرة وبمجرد الإدخال رسالة تخبره بأن القيمة التي قام بإدخالها غير مقبولة، فيكون الكود على النحو المبين بالشكل رقم (1)



      نلاحظ في الكود السابق أننا أضفنا بعد الشرط Text1.SetFocus وهذا الإجراء يقوم بنقل التركيز إلى مربع النص Text1 والذي هو المختص عن عملية الإدخال وأعتقد أن الغاية من ذلك معلومة فهي ليتمكن المستخدم من الكتابة مباشرة دون الحاجة إلى استخدام الماوس في نقل التركيز.
      ننفذ الآن .. قم بإدخال أي حرف أو رمز غير الرموز المعتبرة في عالم الرياضيات ماذا يحدث؟ نعم .. رسالة خطأ كما في الشكل رقم (2).


    • تحديد أولويات الحساب ......- (25)

      عندما يطلب أحد منك تنفيذ مجموعة أعمال تجد أن أول ما تفكر به هو ترتيب هذه الأعمال حسب الأهمية وتضع لها الأولويات وفقاً لمعايير معينة وتبدأ في تنفيذ الأهم ثم المهم وهكذا، الكمبيوتر يعمل نفس الشيء لكن هناك فارق عندما يتعلق الأمر في المسائل الرياضية خصوصاً في العمليات المركبة كالفارق عند إجراء القسمة ثم الرفع لقوة والذي تختلف نتيجته عنها عند الرفع لقوة ثم إجراء القسمة، وحتى نعرف الكيفية التي يستخدمها الكمبيوتر في حساب الأولويات سنخصص هذه الحلقة لهذا الموضوع.

      لاحظ الشكل رقم (1) والذي يمثل جدولاً يحدد الأولويات لأكثر العمليات استخداماً في عالم البرمجة.



      فنجد أنك لو قمت بإجراء عملية حسابية مركبة سيقوم بترتيب أولوية التنفيذ بنفس الترتيب الوارد في الجدول . وحتى يكون حديثنا واضحاً سنوضح ذلك بمثال تخطيطي يمثل هذه العملية (أنظر الشكل 2) .



      يلاحظ أن أول جزء يتم البدء فيه من العملية هو إيجاد قيمة العدد X بعد رفعه إلى القوة Y بحيث يصبح عدداً واحداً .. ثم إيجاد حاصل ضرب C في D ليصبح عدداً واحداً وبعد ذلك طرح الناتج من حاصل العملية الأولى ليصبح الناتج عدداً واحداً ثم تتم قسمة العدد B على ناتج العملية رقم 3 وبعد أن يظهر لنا عدداً واحداً ليطرح من العدد A كآخر خطوة في هذه العملية.

      لذلك فإن الأقواس غالباً تحدد الأولويات، فمثلاً العملية التالية كم تتوقع ناتجها :

      3 * 5 + 7 = ؟ سيقوم الحاسب بحسابها على أنها 3 * 5 = 15 ثم يضيف إليه 7 ليصبح الناتج النهائي 22 بينما لو وضعت الأقواس وأصبحت العملية:

      (3 * (5+7)) ستصبح النتيجة 12 * 3 = 36 .

      هل أدركت الفرق الآن؟
    • استخدام صندوق الخيارات في العمليات الرياضية- (26)

      اليوم سنتعلم مجموعة من الأشياء جملة واحدة، سنتعلم كيف نضع قيمة افتراضية يبدأ بها الحساب لضمان عدم احتساب قيمة خالية، وسنتعلم كيفية استخدام صندوق الخيار في تحديد مسار العملية الرياضية، وكيف نجمع مجموعة أدوات في إطار واحد لتسهيل عملية نقلها، ونتعلم أيضاً كيفية اختصار الشرط الرياضي، وهذا يحدث عندما يكون لديك عمليتان فقط.
      مثال :
      لنفترض أننا نريد أن نعمل برنامجاً يقوم بتحويل درجات الحرارة ما بين المئوي والفهرنهايت، ولكن بدلاً من أن نجعل لكل عملية مربع نص TextBox وملصق Label وزر أمر Command يكفينا أداة واحدة من كل نوع نستخدمه لكلا العمليتين، ولكن بالمقابل نحتاج صندوقي خيار OptionButton لتحديد مسار العملية.
      لنبدأ التطبيق نقوم بتشغيل مشروع جديد ونستدعي مربع نص Text1 لنخصصه للإدخال ، وإطار Frame1 وصندوقي خيارات Option1 و Option2 لتحديد الدرجة المطلوب التحويل منها وملصق Label1 لعرض النتيجة. وحتى يتم الحساب بشكل سليم نريد أن نشترط على البرنامج في أنه إذا كان الاختيار للخيار رقم 1فإن التحويل سيكون من الدرجة المئوية إلى الفهرنهايت وإلا سيحدث العكس. كان بالإمكان أن نضع شرطاً آخراً للتحويل من الفهرنهايت إلى المئوي لكننا آثرنا الاختصار.


      وسيكون الكود على النحو الظاهر بالصورة رقم (1).
      لاحظ أننا قد وضعنا (صفر) كقيمة ابتدائية لمربع النص ستحتسب مع إقلاع البرنامج لضمان وجود عدد يتم حسابه وحتى لا تظهر رسالة الخطأ عند ضغط المستخدم لزر التحويل مباشرة دون أن يضع قيمة صحيحة




    • حالة تقييد الشروط باستخدام حرفي (و) و (أو) - (27)

      لا زلنا في فصل المنطق الرياضي، لكننا نريد أن نخرج قليلاً لدراسة حالة تقييد الشروط باستخدام حرفي (و) و (أو) ، ولمزيد من الإيضاح نفترض أنك قد دعوت أحمد ومحمداً إلى منزلك .. وتريد أن تغلق البوابة لحين وصولهما ورغبت أن تجعل عملية فتح البوابة مقيدة بحضورهما فأخبرت البواب بشرطك . فكيف سيكون الشرط؟ سيأخذ إحدى صيغتين :
      فإما أن تقول له (لا تفتح البوابة إلا عندما يحضر أحمد ومحمد) أو تقول له (لا تفتح البوابة إلا عندما يحضر أحمد أو محمد) أنظر إلى الجملتين جيداً، هل يوجد فرق بينهما؟ بالتأكيد فعندما قلت أحمد ومحمد فهذا يعني أنه حتى لو جاء أحدهما قبل الآخر فلن يفتح الباب إلا عندما يجتمع الإثنان بينما قولك (أحمد أو محمد) هذا يعني أن البوابة ستفتح لأي منهما عند حضوره.
      مثال تطبيقي :
      لديك برنامج يحتوي على مربعي نص وتريد أن التنفيذ يتم بطريقتين الأولى بأنه إذا ضغط زر الأمر الأول يعطي رسالة عندما يحتوي أحد مربعي النص على قيمة غير رقمية، بينما الثانية لا تعطي الرسالة إلا إذا تم ضغط الزر الثاني وكلا المربعين لا يحتوي على قيم رقمية.



      أنظر للكود في الشكل رقم (1) تلاحظ أن زر الأمر Command1 يقوم بعرض رسالة الخطأ عندما يحتوي أي مربع نص على قيمة غير رقمية، بينما الثاني لا يعرض الرسالة إلا اذا اجتمعت القيم غير الرقمية في كلا المربعين نفذ الآن، هل لاحظت؟.


      وبالمناسبة فالجملة On Error Resume Next تفيد في حالة وجود أخطاء من قبل المستخدم بحيث تمنع الرسائل القاتلة فتتجاهل الخطأ بتجاوزه إلى الخطوة التالية. لذلك ينصح باستخدامها دائماً


    • الدوال الرياضية المستخدمة بالفيجوال بيسك - (28)

      في بداية دراستنا للجانب الرياضي في الفيجوال بيسك تعرضنا لعدة دوال من الدوال الرياضية الجاهزة التي يمكن استخدامها مباشرة في الفيجوال بيسك، وذكرنا أن هذه الدوال تساعد المبرمج على إجراء العمليات الرياضية بشكل دقيق وميسر، فلو أنه أراد أن يجري عملية حساب الجذر مثلاً بدون استخدام الدوال لتطلب ذلك منه عملية قد تأخذ الكثير من الوقت والجهد ومع ذلك لا تخلو من الأخطاء التي قد تفسد العمل كله. في هذه الحلقة سنستعرض لبقية الدوال وطريقة استخدامها.



      لو أردنا إيجاد قيمة جيب الزاوية لعدد يتم إدخاله في مربع نص TextBox وليكن هذا المربع على سبيل المثال Text1 فإن الكود سيأخذ الصيغة التالية :
      Sin(Text1)
      وهكذا ولو جعلنا الدالة لحساب قيمة محولة إلى ملصق Label ستأخذ العملية مساراً آخر ، لأن الملصق لا يسمح للمستخدم بعملية الادخال، ولكن قد يكون نتيجة مثلاً لعملية سابقة .. كأن يحسب جيب الزاوية لنتيجة مجموع عددين، وتكون صيغة الكود على النحو التالي :
      Sin(Label1.Caption)


      تطبيق عملي :
      نفرض أننا نريد أن نعمل برنامجاً يقوم بضرب عددين ومن ثم إيجاد جيب الزاوية لناتج الضرب، فنحتاج لمربعي نص Text1 وText2 وملصق Label1 لحساب حاصل ضرب العددين المدخلين في Text1 وText2 وملصق Label2 لحساب جيب الزاوية للناتج في Label1 ، وزر Command1 لتنفيذ عملية الحساب.



      ثم نقوم بكتابة الكود ليظهر كما هو مبين في الشكل رقم (2) .
      وما سبق ليس إلا مثال لبقية الدوال حيث توضع الدالة ثم تتبع بقوس يضم الأداة المراد حساب دالة محتواها .

    • تطبيق شامل (حل معادلات الدرجة الأولى بمتغيرين) - (29)

      في هذه الحلقة سنأخذ تطبيقاً شاملاً يتم من خلاله ترسيخ بعض المفاهيم التي سبق وإن تناولناها في الدروس السابقة، وليعرف القارئ الكريم أنه ببعض التفكير يمكن التغلب على بعض المعضلات الرياضية والاستفادة من التقنية في عملية اختصار الجهد والوقت في الوصول لأهدافنا. وسيكون هذا التطبيق عبارة عن برنامج يقوم بحل نظام معادلتين من الدرجة الأولى بمتغيرين.
      التطبيق :
      علينا أولاً أن نحدد احتياجاتنا من الأدوات التي سنستخدمها في هذا البرنامج، فالمعادلة الأولى مكونة من معامل (س) ومعامل (ص) أو ما يسمى بطرف المعادلة المتغير، كما يقع في الطرف الآخر القيمة الثابتة أو ما يسمى بطرف المعادلة الثابت، ونفس الوضع بالنسبة للمعادلة الثانية، وهذا يعني أننا سنحتاج إلى ست مربعات نصوص TextBox يكون المربعين الأول والثاني لمتغيرات المعادلة الأولى، والمربعين الثالث والرابع لمتغيرات المعادلة الثانية، والمربعين الخامس والسادس لثوابت المعادلتين على التوالي. ونحتاج إلى زرين الأول لتنفيذ عملية الحساب، بينما الثاني للخروج، ونحتاج إلى ست ملصقات لبيان مدلولات مربعات النصوص. هذا فيما يخص عملية الإدخال، ونحتاج إلى مربعي نص للنتائج وملصقين لبيان مدلولات كل مربع.

      الآن نقوم ببناء الكود على النحو المبين بالشكل رقم (1). وكما يلاحظ فإننا لم نضع شرط القيم الرقمية لجميع المربعات النصوص حتى لا يظهر الكود كبيراً لذلك تركته لكم لإكماله بنفس الأسلوب لبقية المربعات النصية .
      هل نجرب؟ لنفرض أن لدينا النظام التالي :
      س + ص = 36
      2س + 3ص = 96
      بطبيعة الحال معاملات س وص في المعادلة الأولى هي العدد واحد ضع القيم حسبما هو مبين بالبرنامج ماذا ترى؟ الحل بأقل من ثانية