"كلمات" هي لغة برمجة عربية سهلة تعمل على معظم أنظمة التشغيل.
أصبح الناشئة اليوم *مستهلكين* بارعين للتقنية، يمضون أيامهم على هواتفهم الذكية أو حواسيبهم يلعبون بالألعاب بل ويتبارون أيهم يملك إصدارة أحدث أو عنده مهارة أكبر في الاستخدام.
نأمل في أن يتوجه الناس و خصوصا الأطفال إلى الابتكار والإبداع بدلا من الاستهلاك وأن تكون عندهم القدرة على بناء برامج مهما كانت بسيطة. لأن ذلك سينطلق بهم بالضرورة إلى مستوى أعلى في فهم الحاسوب والتعامل معه. ونأمل أيضا أن يتوجه عدد أكبر من الناشئة إلى سبر أغوار الحاسوب والاحتراف في بناء البرمجيات.
وهنا نأتي إلى موضوعنا … البرمجة!
ما هو برنامج الحاسوب ؟
برنامج الحاسوب هو مجموعة من الخطوات (الأوامر الموجهة للحاسوب) يكتبها المبرمج ليقوم الحاسوب بتنفيذها لتحقيق غاية ما.
نتعامل مع ما يشبه برمجة الحاسوب كثيرا في حياتنا … تخيل أن تكتب لشخص آخر على ورقة مجموعة من الخطوات …
مثلا الأب والأم خارج البيت ويكتبان لابنهما مجموعة خطوات لينفذها إذا ما عاد إلى البيت من المدرسة :
ما كتبناه هنا هو برنامج حقيقي، به مجموعة من الأوامر التي تم صياغتها على شكل خطوات لتحقيق غاية.
كانت هنالك مقدمة للبرنامج لتهيئته للتنفيذ : التحية وذكر خروج الأب والأم وطلب تنفيذ الخطوات، ثم مجموعة الخطوات نفسها. فلنصنف أنواع أو أنماط الخطوات :
أ - القيام بتنفيذ أمر مباشر : اغلق الباب …، غير ملابسك …، سخن الطعام، خذ قيلولة ….
ب - شرط (إذا كان الحال كذا نفذ الأمر كذا) : إذا كنت جائعا قم بتسخين الطعام …
ج - تكرار مجموعة من الأوامر على قدر مجموعة من العناصر : لكل مادة من المواد الدراسية التي أخذتها اليوم ، قم بمراجعتها وعمل الواجب المنزلي. أو تكرار مجموعة من الأوامر إلى أن يتحقق شرط معين : إلى حين وصولنا إلى البيت قم بفعل كذا أو كذا.
وهكذا انتهى البرنامج.
ذاك برنامج موجه للبشر والأمثلة على البرامج الموجهة للبشر كثيرة، أشهرها وصفات تحضير الطعام. وهي عبارة عن مجموعة من الأوامر التي يتم صياغتها على شكل خطوات للوصول في النهاية إلى تجهيز الطبق.
تتميز فكرة البرمجة هنا أن مجموعة الخطوات تلك *مكتوبة* لكي يمكن تنفيذها من قبل طرف آخر بعيدا عمن كتبها.
فلننتقل من برمجة البشر إلى برمجة الحواسيب … الحقيقة أن الحاسوب ليس سوى آلة يمكنها القيام بأمور محددة وبسيطة فقط لا غير. أي أن الحاسوب لا يعرف إلا عددا قليلا من المفردات التي يمكنك استخدامها معه. مثلا …
… وهكذا.
ولكن ميزات الحاسوب، رغم بساطته، أنه :
أولا - مثابرٌ و ذو جَلَد، فلا يتعب من طول الأوامر ولا يمل من التكرار.
ثانيا - ذو ذاكرة قوية يمكنه تذكر كل شيء تريده أن يتذكره
ثالثا - ماهر بالرياضيات فيقدر على حساب الأرقام مهما كانت معقدة
رابعا - غبي جدا (يخلو من أي ذكاء أو قدرة على فهم ما يجب عمله لوحده) ولكنه في الوقت نفسه دقيق جدا. لذلك عليك التفصيل تماما في إعلامه بما يجب عليه أن يعمل.
فالحاسوب إذا خادم مطيع لا يعصيك ما أمرته ويفعل ما يؤمر … الحالة الوحيدة التي قد يعصي الحاسوب لك فيها أمرا هي أن تُقَصّر أنت في التعبير بشكل كاف أو دقيق عما تريد أو أن تعطيه معلومات خاطئة فيلتبس عليه الأمر. حينئذ فقط يستنكف البرنامج إما بإعطاء نتائج خاطئة أو بإعطاء رسالة خطأ أو بأن يُصاب بالشلل بل قد يصل به الحال إلى أن ينهار كلية.
تخيل الحاسب رجلا آليا ينفذ أوامرك … ولكن الرجل الآلي ذاك لا يأخذ الأوامر منك بشكل مباشر (افعل كذا وكذا وأنت تراقبه) بل يأخذ الأوامر منك كاملة (بكافة تفاصيلها وشروطها وما يجب أن يستقرئه وما يجب أن يفعله) قبل أن يبدأ بتنفيذ أي شيء. فإذا أخطأت أنت في أوامرك فعليك برمجته مرة أخرى من جديد وكذلك عليك برمجته من جديد إذا رغبت بأن يقوم بخطوات أكثر أو أن يحقق غاية جديدة.
أنت في هذه الحالة بالنسبة للحاسب مبرمج، تكتب له ماذا يفعل (أو كيف يتصرف) مع المستخدم وهو شخص مختلف عنك من وجهة نظر الحاسب. فكأن الحاسب هو خادم المبرمج، ينفذ المهام والخطوات والتعليمات التي سبق وأن أعطاه إياها المبرمج … يقوم بتنفيذ التعليمات تلك على الحاسب ويتفاعل مع المستخدم فور أن يطلب منه المستخدم البدء بالتنفيذ.
نعرج هنا على مجموعة من الأمثلة (الدروس)، كل يدرس يعلمك إمكانات جديدة في البرمجة. عليك أولا أن تكتب الدرس و تجعله يعمل، ثم تُحلل ما كتبته و تقوم بتغيير بعض الأشياء لتتأكد من فهمك ومن ثم يمكنك عمل أي شيء آخر.
تجد في هذا الرابط مرجعا للغة "كلمات" و هنا دليلا سريعا للاستخدام.
تتضمن برمجة الحاسوب التعامل مع مجموعة بسيطة من المفاهيم الأساسية والتي ينطلق منها البرمج ليصنع الشئ الذي يريد. البرمجة (وبشكل أساسي) تدور حول وجود بيانات (في ملفات أو على الشابكة أو تؤخذ من المستخدم أو تعطى له) ومتغيرات لحفظ البيانات أو أجزاء منها وأوامر للحساب أو القراءة أو الإظهار و جمل شرطية تحكم عملية تنفيذ الأوامر التي بداخلها وحلقات تدور على مجموعة من الأوامر عدد معين من المرات.
المُتغيرات هي أوعية تحوي معلومات. ويتم تسمية كل وعاء باسمه الخاص والفريد. ويمكن للمُبرمج إعادة ملء وعاء المتغير بأي شيء يريد. و يمكن للمتغيرات أن تحوي أنواعا مختلفة من المعلومات، مثل :
ملاحظة: عليك أن تعرف أن إشارة المساواة ”=“ المُستخدمة في التعامل مع المتغيرات تعني تعيين القيمة وهي ليست مساواة الرياضيات (التي تستخدمها في المعادلات ص = 6×س +3). فمثلا س = س + 4 تعني تعيين قيمة جديدة ل س بحيث تكون القيمة السابقة ل س زائد أربعة.
<html>
<pre style=“direction:rtl; text-align:right” >الاسم = “محمد عيسى”
العمر = 13
المواد.الدراسية.المفضلة = [“اللغة العربية”، “الرياضيات”، “العلوم”]
برنامج.النشاطات.الإسبوعي = {“السبت” ⇒ “متابعة حلقة جديدة من دكتور هو”، “الأحد” ⇒ “المساعدة في تنظيف البيت”، “الإثنين” ⇒ “محطة اللعب”، “الثلاثاء” ⇒ “لعب كرة القدم مع أصدقائي”}
أحب.الرسم = خطأ
أحب.السباحة = صحيح
– في العام القادم
العمر = العمر + 1
</pre>
</html>
أبسط أشكال التفاعل مع المستخدم هو طباعة نصوص وقراءة قيم، ويتم ذلك من خلال الأمرين اطبع و اقرأ. يتقبل أمر اطبع أي عدد من المعطيات. سواء أكانت نصوصا أم متغيرات. حيث يقوم بطباعتها بالترتيب الذي ترد فيه. أما أمر اقرأ فيمكنه طباعة نص للمستخدم ومن ثم قراءة قيمة نصية أو رقمية إذا كان اسم المتغير مسبوقا بإشارة الرقم #.
ينفذ الحاسوب مجموعة الأوامر المرتبطة بالجملة الشرطية إذا تحقق الشرط فقط. وفما عدا ذلك فإنه يقفز عن تلك الأوامر كأنها ليست موجودة.
<html>
<pre style=“direction:rtl; text-align:right”>اقرأ “أدخل لونك المفضل: ”، اللون
اللون = تقليم (اللون)
إذا اللون = “أزرق” :
حدد.لون.النص (4)
اطبع “الأزرق لَونٌ هادئ”
وإلا إذا اللون = “أحمر” :
حدد.لون.النص (8)
اطبع “الاحمر لونٌ حار”
وإلا :
اطبع “لم استطع التعرف على اللون”
تم
</pre>
</html>
يستطيع الحاسوب أن يدور في حلقة لأي عدد تشاء من المرات للقيام بأعمال مختلفة. تذكر إذا دخل الحاسوب في حلقة لا نهائية فسيصاب برنامجك بالشلل.
<html>
<pre style=“direction:rtl; text-align:right”>لكل س من - 5 إلى 5 بخطوة 2.5 :
اطبع س
تابع
الإجابة = 0
كرر مادام الإجابة <> 64 :
اقرأ “كم حاصل ضرب ثمانية في ثمانية؟ ”، # الإجابة
تابع</pre>
</html> ملاحظة : الرمز ”<>“ المُستَخدم في الشرط يعني “لا يساوي”.
الدالة و الإجراء هي طريقة لتبسيط كتابة النص المصدري وإعادة استخدام الأجزاء المتكررة. فهي تتيح لك تجميع أي عدد من الأوامر في وحدة واحدة لتقوم باستدعاء اسم الدالة أو الإجراء فيقوم النظام بتنفيذ مجموعة الأوامر التي فيها. ويمكن تحديد أي عدد من المتغيرات التي تُمرر إلى الدالة أو الإجراء. الفرق الوحيد بينهما هو أن الدالة تُرجع نتيجة يمكن وضعها في متغير أما الإجراء فهو لتنفيذ الأوامر دون إرجاع أية نتيجة.
<html>
<pre style=“direction:rtl; text-align:right”>
قدم.التحية (“سامي”)
العلامات = [89، 90، 88، 96، 93، 85]
العلامة.النهائية = احسب.المتوسط (العلامات)
اطبع “العلامة النهائية هي : ”، العلامة.النهائية
إجراء قدم.التحية (الاسم):
اطبع “أهلا بك يا ”، الاسم
اطبع “عدد الحروف في اسمك هو: ”، عدد (الاسم)
نهاية
دالة احسب.المتوسط (قيم):
المجموع = 0
العدد = 0
لكل قيمة في قيم :
المجموع = المجموع + قيمة
العدد = العدد + 1
تابع
ارجع ب: المجموع ÷ العدد
نهاية</pre>
</html>
في هذا الدرس ستتعلم كيف تطبع نصوصا على الشاشة وكيف تقرأ ما يكتبه المستخدم وتستخدم ما يدخله مستخدم الحاسب في طباعة رسالة له. تذكر أنت هنا المُبرمج ولَستَ مُتستخدم الحاسب!
<html> <!–
<pre
style=“direction:rtl; text-align:right”>اطبع “بسم الله الرحمن الرحيم”
اطبع “سلامٌ على العالم!”
انتظر (1000)
امسح.الشاشة ()
اقرأ “ما اسمك؟ ”، الاسم
اقرأ “ما عمرك؟ ”، # العمر
حدد.لون.النص (12)
اطبع “أهلا بك يا ”، الاسم، ” لا بد أنك من مواليد “، 2013 - العمر
اطبع “مع السلامة :)”
</pre>
–> </html>
سيطلب البرنامج من المستخدم أن يضمر أي رقم وسيطلب منه إجراء بعض العمليات الحسابية عليه ليعرف كم يبقى معه بالضبط! :)
<html> <!–
<pre style=“direction:rtl; text-align:right”>اطبع “مرحبا بك …”
علامة البداية
اقرأ “هل ترغب باللعب(نعم أم لا)؟ ”، الجواب
إذا الجواب = “نعم” :
اطبع “اضمر رقما [إضغط إدخال عندما تجهز]”
اقرأ إدخال
اطبع ” خذ من أبيكَ مِثلَهُ [إضغط إدخال]“
اقرأ إدخال
– توليد رقم عشوائي زوجي من 2 إلى 22
رقم = عشوائي (10)× 2 + 2
اطبع “خذ مني ”، رقم، ” [إضغط إدخال]“
اقرأ إدخال
اطبع “ارمِ نصف ما معك في البحر [إضغط إدخال]”
اقرأ إدخال
اطبع “أَرجع إلى أبيك ما أخذتَه منه [إضغط إدخال]”
اقرأ إدخال
اطبع “سأحاول أن أعرف كم بقي معك …”
انتظر (1000)
اطبع “ممم. بقي معك … لقد عرفت ! ”، رقم ÷ 2، ” !!“
اذهب إلى البداية
وإلا :
اطبع “لا بأس. مع السلامة :)”
تم
</pre>
يسأل البرنامج المستخدم عن عواصم بلدان أو بلدان عواصم ليعطيك في النهاية علامتك من عشرة.
<html> <!–
<pre style=“direction:rtl; text-align:right”>بلدان.عواصم = {“اليابان” ⇒ “طوكيو”، “بلجيكا” ⇒ “بروكسل”، “إيطاليا” ⇒ “روما”، “إسبانيا” ⇒ “مدريد”، “ألمانيا” ⇒ “برلين”، “عمان” ⇒ “مسقط”، “اليمن” ⇒ “صنعاء”، “المغرب” ⇒ “الرباط”، “تركيا” ⇒ “اسطنبول”، “موريتانيا” ⇒ “نواكشط”}
البلدان = مفاتيح (بلدان.عواصم)
العلامة = 0
اطبع “أهلا بك في لعبة البلدان”
لكل بلد في البلدان :
اطبع “سؤال: ” …
– فلنسأل عشوائيا مرة عن دولة العاصمة ومرة عن عاصمة الدولة
إذا عشوائي (2)> 0 :
اطبع “ما هي الدولة التي عاصمتها ”، بلدان.عواصم [بلد]، ” ؟ “ …
اقرأ الإجابة
الإجابة.الصحيحة = بلد
وإلا :
اطبع “ما هي عاصمة ”، بلد، ” ؟ “ …
اقرأ الإجابة
الإجابة.الصحيحة = بلدان.عواصم [بلد]
تم
الإجابة = تقليم (الإجابة)
إذا الإجابة = الإجابة.الصحيحة :
اطبع “أحسنت!”
العلامة = العلامة + 1
وإلا :
اطبع “خطأ! الإجابة الصحية كانت ”، الإجابة.الصحيحة، ” ولكن إجابتك كانت “، الإجابة، ”.“
تم
انتظر (1000)
امسح.الشاشة ()
تابع
اطبع “علامتك في اللعبة ”، العلامة، ” من 10!“
</pre>
–> </html>
بإمكانك رسم خطوط ودوائر ونقاط (تذكر أن نقطة 0،0 هي في أعلى يمين الشاشة وأن النقطة 800،600 (وهي أبعد نقطة يمكن رسمها) تقع في أسفل يسار الشاشة. ونرسم هنا بعض المعادلات الرياضية أيضا … مستخدمين درس الإزاحة والتكبير والتدوير الذي أخذته في مقرر الرياضيات.
<html>
<pre style=“direction:rtl; text-align:right”>لكل أ من 0 إلى 20 :
س1 = عشوائي (800)
ص1 = عشوائي (600)
س2 = عشوائي (800)
ص2 = عشوائي (600)
لون = عشوائي (15)
نصف.القطر = عشوائي (50)
ارسم.خط (س1، ص1)- (س2، ص2)، لون
ارسم.نقطة (س1 + 5، ص1 - 3)، لون
ارسم.مستطيل (س1، ص1)- (س2، ص2)، لون
ارسم.دائرة (س2، ص1)، نصف.القطر، لون، صحيح
تابع
انتظر (2000)
امسح.الشاشة ()
رسم.بياني.خلفية ()
لكل س من - 8 إلى 8 بخطوة 0.1 :
ص = 0.6 × س + 2
رسم.بياني.نقطة (س، ص)
ص = جذر (25 - س × س)
رسم.بياني.نقطة (س، ص)
ص = جا (س)
إذا س <> 0 :
ص = 1 ÷ س
رسم.بياني.نقطة (س، ص)
تم
تابع
إجراء رسم.بياني.نقطة (س، ص):
ارسم.دائرة (س × 50 + 400، ص × 50 + 300)، 2، 12، صحيح
نهاية
إجراء رسم.بياني.خلفية ():
لكل أ من 1 إلى 16 :
ارسم.خط (أ × 50، 0)- (أ × 50، 600)، 14
ارسم.خط (0، أ × 50)- (800، أ × 50)، 14
تابع
ارسم.خط (0، 300)- (800، 300)، 0
ارسم.خط (400، 0)- (400، 600)، 0
نهاية
</pre>