المقدمة

بِسْمِ الله و الصَّلاةُ و السَّلامُ عَلَى رَسُولِ الله و عَلَي آلِهِ و صَحْبِهِ و مَنْ وَالاه

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

مميزات لغة الخوارزم

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

المراحل العامة لمترجم الخوارزم

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

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

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

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

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

في لغة الخوارزم ، نقوم بتقسيم البرنامج إلى أجزاء باستخدام الدوال والتصنيفات و الرزم مما يجعل البرنامج أسهل للفهم والتعديل.


                           بسم الله الحكيم الخبير
               
                                                               

استعمل 			الخوارزم.وسائط.شاشة 

   الدالة  الاصل() {
   
       شاشة::اكتب("السلام عليكم ورحمة الله") 

}	
                                                                               

الصفرة 1-1 خوارزمية لكتابة السلام عليكم ورحمة الله على الشاشة

من يمكنه استعمال لغة الخوارزم

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

جميع الحقوق محفوظة © alkhawarizm.org

البداية

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

  • تثبيت الخوارزم عل نظامي الويندوز واللينكس
  • كتابة وشرح برنامج بسيط يكتب السلام عليكم

التنصيب

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

ملحوظة : لاستعمال الخوارزم يمكن تحميل 'بيئة التطوير المتكاملة للخوارزم' من https://alkhawarizm.org

التنصيب

السلام عليكم

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

كتابة وتشغيل برنامج الخوارزم

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

الآن افتح ملف اصل.خ الذي أنشأته للتو وأدخل الصفرة الموجودة في الصفرة 1-1.

                           بسم الله الحكيم الخبير
               
                                                               
الرزمة    اختبارات 

استعمل 	 الخوارزم.وسائط.شاشة 

الصنف      اختبار  {	

   الدالة  الاصل() {
   
       شاشة::اكتب("السلام عليكم ورحمة الله") 
   }
}	
                                                                               

ملحوظة: هذا المثال أعد لتبيان بعد مميزات اللغة. يمكن تبسيطه بشكل كبير كالآتي :

                           بسم الله الحكيم الخبير
               
                                                               


استعمل 	 الخوارزم.وسائط.شاشة 

   

   الدالة  الاصل() {
   
        اكتب("السلام عليكم ورحمة الله") 
   }

                                                                               

الصفرة 1-1 خوارزمية لكتابة السلام عليكم ورحمة الله على الشاشة

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


>.\الخوارزم  اصل.خ 
> .\اختبار 
>
>السلام عليكم ورحمة الله 
                                                                               

على الوندوز ادخل الامر اختبار.exe بدل .\اختبار .

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

الآن وقد تم كتابة 'السلام عليكم ورحمة الله على الشاشة' تهانينا ! لقد كتبت رسميًا برنامجا عن طريق الخوارزم. هذا يجعلك مبرمجًا للخوارزم - مرحبًا!

تشريح برنامج الخوارزم

دعونا نستعرض بالتفصيل ما حدث للتو في برنامج 'السلام عليكم...' الخاص بك! . إليك الخيط الأول من اللغز:


                           بسم الله الحكيم الخبير
                                                                                               

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



...
                                               
الرزمة    اختبارات 

استعمل 			الخوارزم.وسائط.شاشة 
...
                                                                               

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



الصنف      اختبار  {	

   ....
}	
                                                                               

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


   ...

   الدالة  الاصل() {
   
       شاشة::اكتب("السلام عليكم ورحمة الله") 
   }
   ...
                                                                               

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

ملحوظة: لان التعليمات لا تنتهي ب ؛ فهذه العلامة ليست واجبة في الخوارزم كبعض اللغات المعروفة.

خوارزمية إقليدس

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

                           بسم الله الحكيم الخبير
               
                                                               


استعمل 			الخوارزم.وسائط.شاشة



   الدالة  الاصل() {
       المتغير ا صحيح  := 164
       المتغير ب صحيح  := 232
       المتغير الباقي صحيح  := 0	


       كرر {
               الباقي := ا نمط ب
               ا := ب
               ب := الباقي		
               
       } مادام الباقي ليس= 0
               
       شاشة::اكتب("القاسم المشترك الاكبر ل ا و ب هو : ") 
       شاشة::اكتب(ا)
       
   }
   
                                                                               

لحساب القاسم المشترك الاكبر نحتاج الى تعريف عددين ا و ب مع اعطائهما قيمتين صحيحتين مثلا على التوالي : 164 و 232.

    
       المتغير ا صحيح  := 164
       المتغير ب صحيح  := 232
                                                                                

ونحتاج ايضا الى عدد نضع فيه باقي القسمة : الباقي.

    
      المتغير الباقي صحيح  := 0	
                                                                                

لحساب باقي القسمة نستعمل عامل الرياضيات نمط . نقوم بحساب باقي قسمة العددين ا على ب،

    
     الباقي := ا نمط ب
                                                                                

فاذا ساوى الصفر فان ا هو القاسم الشترك الاكبر والا فاننا نكرر العملية باستبدال ا ب ب و ب ب الباقي حتى نحصل على الباقي مساوٍ ل 0.
هكذا يكر البرنامج التعليمات حتى نحصل على الباقي مساوٍ ل 0 فينتهي التكرار ومن تم نكتب النتيجة باستعمال الدالة اكتب الموجودة في الصنف شاشة.

ملحوظة : العامل ':=' يقوم بوضع قيمة المتغير على اليسار في المتغير على اليمين . مثالا : ا := ب تعني ان ا ياخذ قيمة ب.

عندما نحتاج الى متغير فاننا نستعين بالمفردة المتغير كما في الرياضيات عندما نود استعمال كائنات او اعداد رياضية.
يمكنك الان الاستمتاع بحساب قواسم اخرى بتغيير قيمة المتغيرات ا و ب ثم تنفيذ الخوارزمية.

مفاهيم البرمجة الشائعة

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

الكلمات المفتاحية

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

المتغيرات

لماذا تستخدم المتغيرات

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

في الواقع ، في ذاكرة الوصول العشوائي بجهاز الحاسوب ، لا يوجد بالطبع صندوق حقيقي ، وليس هناك ملصقات حقيقية مثبتة عليه. في الحاسوب ، فعليًا ، يوجد موقع ذاكرة ، يتم رصده بواسطة عنوان ثنائي. إذا قمنا بالبرمجة بلغة مفهومة بشكل مباشر من قبل الجهاز ، فيجب علينا كتابة بياناتنا على الشكل الثنائي 10011001 10001001.

إعلان المتغيرات

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

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

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

لاعلان متغير نستعمل الكلمة المفتاحية المتغير متبوعة باسم المتغير ثم بنوعه . مع امكانية الحاق قيمة به عند الاعلان مباشرة (وضع شيء في الصندوق) مثلا.

    
      المتغير  متغير_1 صحيح  
      المتغير متغير_2 صحيح طبيعي := 10  
      المتغير متغير_3 منطقي := صواب  	
      
                                                                                

أنواع البيانات

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

الأنواع العددية

يمثل النوع العددي قيمة واحدة. يحتوي الخوارزم على أربعة أنواع أساسية عددية: الأعداد الصحيحة ، والحقيقية ، والمنطقية ، والحروف. دعنا نر طريقة عملهم في الخوارزم.

الأعداد الصحيحة

عدد صحيح هو رقم بدون مكون كسري. استخدمنا نوعًا صحيحًا واحدًا في الفصل 2 : النوع صحيح. يشير إعلان النوع هذا إلى أن القيمة المرتبطة به يجب أن تكون عددًا صحيحًا. يوضح الجدول 3-1 أنواع الأعداد الصحيحة المدمجة في الخوارزم. يمكن استخدام كل متغير في الأعمدة الطبيعية وغير الطبيعية للإعلان عن نوع قيمة عدد صحيح.

الجدول 3-1: الأعداد الصحيحة في الخوارزم

الطول سالبي طبيعي
8 صحيح8 صحيح8 طبيعي
16 صحيح16 صحيح16 طبيعي
32 صحيح صحيح طبيعي

ملحوظة: يشير الطول في الجدول الى عدد وحدات التخزين في ذاكرة الحاسوب.

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

يمكنك كتابة عدد صحيح حرفي في أي من النماذج الموضحة في الجدول 3-2.

جدول 3-2:حرفية عدد صحيح في الخوارزم

حرفية العدد مثال
عشري 57100
ستعشري 0س0ج1
ثماني 0ث701
ثنائي 0ز110011000000

لكن كيف تعرف أي نوع من الأعداد الصحيحة للاستخدام؟ إذا لم تكن متأكدًا ، فإن الإعدادات الافتراضية لـ الخوارزم هي خيارات جيدة بشكل عام ، وأنواع الأعداد الصحيحة الافتراضية هي صحيح32 (اي صحيح) : هذا النوع هو الأسرع عمومًا ، حتى في أنظمة 64 بت.

الاعداد الحقيقية

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

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

إليك مثالا يوضح استعمال الأرقام الحقيقية :

    
    المتغير  ح حقيقي := 3.14159265358979323846 		
    المتغير  مهمش_ حقيقي32  :=  1.1920929أ-07_ح32 
      
                                                                                

يتم تمثيل أرقام الفاصلة العائمة وفقًا لمعيار IEEE-754. النوع حقيقي32 هو تعويم أحادي الدقة ، و حقيقي64 له دقة مزدوجة.

العمليات الرقمية

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

    
    المتغير  ناتج_جمع صحيح  := 10 + 164 
    
    المتغير  ناتج_فرق حقيقي := 3.141 - 0.01 
    
    المتغير  ناتج_ضرب صحيح := 111 × 121212 
    
    المتغير  ناتج_قسمة حقيقي :=3.141 \ 1.0 
    
    المتغير  باقي_قسمة صحيح := 51 نمط 5 		
                                                                                

كل تعبير في هذه العبارات يستخدم عامل حسابي ويقيم إلى قيمة واحدة ، والتي ترتبط بعد ذلك بالمتغير. يحتوي الملحق (ب) على قائمة بجميع العوامل التي يوفرها الخوارزم.

النوع المنطقي

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

    
المتغير  توقف منطقي := صواب 
المتغير  م 	منطقي := خطا 
      
                                                                                

الطريقة الرئيسية لاستخدام القيم المنطقية هي من خلال الشروط ، مثل تعبير اذا. سنغطي كيفية عمل التعبيرات في الخوارزم في فصل "التحكم في مسار التنفيذ".

النوع حرف

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

    
المتغير ا حرف := 'ب' 	
المتغير استفهام حرف := '؟' 
المتغير عدد حرف := '0' 
      
                                                                                

تشمل ڨيم النوع حرفعلى الحروف الابجدية و الأرقام من 0 الى 9 و بعض الرموز.

الأنواع المركبة

يمكن أن تجمع الأنواع المركبة قيمًا متعددة في نوع واحد. الخوارزم له نوع مركب بدائي:المصفوفات.

المصفوفات

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

في الخوارزم ، تتم كتابة القيم التي تدخل الصفيف كقائمة مفصولة بفواصل داخل الأقواس المربعة:


    الدالة  الاصل() {
                    
            المتغير جدول [7] صحيح := [ 1، 2، 3 ، 4 ، 5، 6، 7] 
    }																			

يقرأ الاعلان بشكل طبيعي كالتالي : المتغير جدول صفيفا من 7 قيم من النوع صحيح تأخذ القيم 1، ...الى 7.

الوصول إلى عناصر المصفوفة

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


    الدالة  الاصل() {
                    
                المتغير جدول [7] صحيح := [ 1، 2، 3 ، 4 ، 5، 6، 7] 
                
                شاشة::اكتب(  جدول[0]  )؛	
                شاشة::اكتب(  جدول[1]  )؛	
    }																			

في هذا المثال ، ستكتب القيمة 1 ، لأن هذه هي القيمة في الفهرس [0] في الصفيف. ثم القيمة 2 من الفهرس [1] في المصفوفة.

حذاري من أن تفوق قيمة الفهرس الحجم الكامل للمصفوفة -1 فإن ذلك سيأذي الى خطأ في التنفيذ.

الدوال

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

                                            
الدالة  الاصل() {
   شاشة::اكتب("السلام عليكم ") 
   دالة_اخرى() 																				
}																		
            
الدالة  دالة_اخرى() {
   شاشة::اكتب("ورحمة الله وبركاته") 
}		
                                                                                

تبدأ تعريفات الدوال في الخوارزم ب الدالة ولديها مجموعة من الأقواس بعد اسم الدالة. تخبر الأقواس المتعرجة { } المترجم أين يبدأ جسم الدالة وأين ينتهي.

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

منطلقات الدالة

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

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

تُظهر النسخة المعاد كتابتها من دالة_اخرى شكل المنطلقات في الخوارزم:

                                            
الدالة  الاصل() {
        دالة_اخرى(19) 																				
}																		
            
الدالة  دالة_اخرى(عدد صحيح) {
   شاشة::اكتب("قيمة العدد = ") 
   شاشة::اكتب(عدد) 		   
}	
                                                                                

عند اطلاق البرنامج ستطبع النتيجة التالية على الشاشة:

قيمة العدد = 19

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

عندما تريد أن تحتوي الدالة على منطلقات متعددة ، افصل تعريفات المنطلقات بفواصل ، كالآتي:

                                            

الدالة  الاصل() {
    اكتب_باقي_قسمة(19، 2) 
}

الدالة  اكتب_باقي_قسمة(عدد_اول صحيح ، عدد_ثان صحيح ) {
        شاشة::اكتب("قيمة باقي القسمة للعددين = ") 
            شاشة::اكتب(عدد_اول نمط عدد_ثان) 	
}	

                                                                                

لأننا أطلقنا الدالة بـحيث يتم تمرير القيمة 19 لـ عدد_اول و 2 كقيمة لـ عدد_ثان ، تتم طباعة باقي القسمة لبهذه القيم.

دوال ذات قيم مرجعة

يمكن للدوال إرجاع القيم إلى التعليمات البرمجية التي تستدعيها. عند الاعلان لا نذكر قيم الإرجاع ، لكننا نعلن نوعها.

يمكنك الارجاع من الدالة ما باستخدام الكلمة الأساسية ارجع مع تحديد القيمة المراد ارجاعها. فيما يلي مثال على الدالة تُرجع قيمة:


الدالة  الاصل() {
        المتغير نتيجة صحيح  
        نتيجة	:=	ضرب(5، 6) 
        شاشة::اكتب(نتيجة) 	
}

الدالة  ضرب(عدد_اول صحيح ، عدد_ثان صحيح )  صحيح {
        ارجع 	عدد_اول × عدد_ثان 
}									
                                                        

التعليقات

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

إليك تعليقا بسيطا:

    
(۩  هذا تعليق ۩)
                                                                                

يمكن للتعليق أن يكون كبيرا نسبيا و الامتداد على عدة اسطر:

    
(۩
        نكتب شيئًا معقدًا   بما فيه الكفاية، نحتاج
  أسطرا متعددة من التعليقات للقيام بذلك!
  نأمل أن هذا التعليق سوف يشرح ما يحدث.
۩)
                                                                                

لنستعمل التعليقات لإضافة بعد التوضيح لخوارزمية اقليدس !:

                                        بسم الله الحكيم الخبير
                                        
(۩	اعلان الرزمة التي ينتمي اليها الصنف الحالي	 ۩)
الرزمة    اختبارات

 
 (۩	استعمال الصنف شاشة للكتابة على الشاشة	 ۩)
استعمل 			الخوارزم.وسائط.شاشة

 
(۩		اعلان الصنف  	 ۩)
الصنف      اختبار  {	

 
(۩		الدالة المدخلية	 ۩)
   الدالة  الاصل() {
   
   (۩		الاعلان عن المتغيرات المستعملة في في هذه الدالة	 ۩)

       المتغير  ا صحيح  := 164

       المتغير  ب صحيح  := 232

       المتغير  الباقي صحيح  := 0	

 

 (۩		تكرار عملية حساب الباقي	 ۩)

       كرر {

               الباقي := ا نمط ب

               ا := ب

               ب := الباقي		

               

       } مادام  الباقي ليس= 0
       

     (۩	 الخروج من التكرار عندما يكون الباقي منعدما
                ثم 		
        كتابة الناتج على الشاشة 	 ۩)    

       شاشة::اكتب("القاسم المشترك الاكبر ل ا و ب هو : ") 

       شاشة::اكتب(ا)

       

   }

}	
                                                                                

لاحظ انه يمكن وضع التعليق في اي موضع من الصفرة.

مسار التنفيذ

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

التعبيرات الشرطية باذا

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

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

                                            


الدالة  الاصل() {
    المتغير  عدد صحيح := 19
    
    اذا عدد < 20 {
         شاشة::اكتب("الشرط كان صحيحا ! ")
     } والا {
         شاشة::اكتب("الشرط كان خاطئا ! ")
     }
}	
                                                                                

كل تعبيرات اذا تبدأ بالكلمة المفتاحية اذا ، والتي يتبعها شرط. في هذه الحالة ، الشرط عدد < 20 يتحقق من أن المتغير عدد له قيمة أقل من 20. أم لا. يتم وضع فقرة الصفرة التي نريد تنفيذها إذا كان الشرط صحيحًا فورًا بعد الشرط داخل الأقواس المعقوفة.

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

حاول تشغيل هذه الخوارزمية ؛ ستحصل على الناتج التالي:

الشرط كان صحيحا !

لنحاول تغيير قيمة عدد إلى قيمة تجعل الشرط خاطئًا لمعرفة ما يحدث:

                                            
    المتغير  عدد صحيح := 21	
                                                                                

سنحصل على النتيجة:

الشرط كان خاطئا !

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

                                            

الدالة  الاصل() {
    المتغير  عدد صحيح := 19
    
    اذا عدد  {
         شاشة::اكتب("الشرط كان صحيحا ! ")
    
     }
}	
                                                                                

الخوارزم يخبرك بوجود خطأ:

المطلوب جملة منطقية

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

االتعامل مع شروط متعددة مع اذا و الا

                                            


الدالة  الاصل() {
    المتغير  عدد صحيح := 8
    
    اذا عدد نمط 5 = 0 {
         شاشة::اكتب("العدد قابل للقسمة على 5 ")
     } والا اذا عدد نمط 4 = 0 {
         شاشة::اكتب("العدد قابل للقسمة على 4 ")
     }  والا اذا عدد نمط 2 = 0 {
         شاشة::اكتب("العدد قابل للقسمة على 2 ")
     }  والا {
         شاشة::اكتب("العدد غير قابل للقسمة على 5 ولا على 4 ولا على 2 ")
     }
}	
                                                                                

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

العدد قابل للقسمة على 4

عندما يتم تنفيذ هذا البرنامج ، فإنه يتحقق من كل تعبير ل اذا وينفذ أول تعليمات تسري عليه الحالة الشرطية. لاحظ أنه على الرغم من أن 8 قابلة للقسمة على 2 ، إلا أننا لا نرى النتيجة العدد قابل للقسمة على 2 ، ولا نرى النتيجة الاخيرةالعدد غير قابل للقسمة على 5 ولا على 4 ولا على 2. هذا لأن الخوارزم لا ينفذ إلا التعليمات المحصورة للحالة الحقيقية الأولى ، وبمجرد أن يجدها ، فإنه لا يفتحص الباقي.

التكرار ب الحلقات

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

الخوارزم لديه ثلاثة أنواع من الحلقات: كرر ، مادام ، لاجل . دعونا نجرب كل واحدة.

تكرار التعليمات ب مادام

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

                                            


الدالة  الاصل() {
    المتغير  عدد صحيح := 10
                    
    مادام عدد ليس= 0 {
        شاشة::اكتب(عدد)				
        عدد := عدد - 1
    }	
}	
                                                                                

هذا المثال يكتب الاعداد من 10 الى 1. الخوارزمية تقول : " مادام العدد ليس = 0 فكرر { كتابة هذا العدد على الشاشة ثم قم بنقص 1 من نفس العدد }" .

لاحظ انه اذا كان المتغيرعدد منعدما قبل بدء الحلقة فلن يتم تنفيذ اي تعليمة لان شرط دخول الحلقة هو الا يكون المتغير منعدما.

تكرار التعليمات ب كرر

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

                                            


الدالة  الاصل() {
    
    المتغير  عدد صحيح := 10
                    
    كرر {
        
        شاشة::اكتب(عدد)				
        عدد := عدد - 1
        
    }	مادام عدد ليس= 0
}	
                                                                                

لاحظ انه اذا كان المتغير عدد منعدما قبل بدء الحلقة فسيتم تنفيذ التعليمات مرة واحدة لان شرط الخروج من الحلقة يوجد في آخر التركيب.

تكرار التعليمات ب لاجل

يتيح لك الخوارزم صيغة اخرى اكتر تطورا للتكرار حيث تمكنك من تهيئة المتغيرات و تحديد الشروط و تغيير متغيرات الشرط في سطر واحد. يوضح المثال الآتي شكلا من أشكال استعمال هذا النوع من الحلقات:

                                            


الدالة  الاصل() {
    
    المتغير  عدد صحيح
        لاجل عدد := 10  ؛ عدد ليس= 0 ؛ عدد := عدد - 1  {
            شاشة::اكتب(عدد)				
        }
}	
                                                                                

تتكون صيغة التكرار هذه من ثلاثة وظائف:

  • التهئة: عدد := 10 يمثل التهيىئة وهي تعليمات تنجز مرة واحد قبل دخول الحلقة.
  • الشروط: عدد ليس= 0 هو شرط التكرار وهو أيضا شرط لدخول حلقة التكرار.
  • تعليمات تغيير: عدد := عدد - 1 تستعمل غالبا لتغيير المتغيرات المكونة للشرط.

وتتبع هذه الوظائف بالتعليمات المراد تكرارها.

تصبح هذا الشكل من الخوارزميات مفيذا عندما لا نحبذ تواجد تداخل بين التعليمات المراد تكرارها وادوات التكرار. او عندما نحتاج الى متغير واحد في الشرط عندما نريد الانتقال مثلا بين مكونات مصفوفة.

اعلان انواع جديدة

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

نوضح من خلال الصفرة التالية كيفية اعلان نوع جديد:

                                                                                

النوع موجه [ 100 ] حقيقي 
النوع مصفوفة [100][200] صحيح 
       
                

لاستعمال النوع نستخدم التعريف كما لو كان نوعا اساسيا في الخوارزم:

                                                                                

المتغير   م موجه
المتغير  ص مصفوفة	
       
                

استخدام الاشياء لهيكلة البيانات ذات الصلة

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

تحديد و إنشاء الاشياء

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

                                            


المتغير مستطيل شيء {
            طوله صحيح  
            عرضه صحيح  
}	؛
                                                                                

الصفرة 5-1: تعريف الشيء مستطيل

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

لنكتب خورازمية اكثر تطورا تستعمل الشيء مستطيل في الفصل التالي.

مثال برنامج باستخدام الاشياء

لفهم متى قد نرغب في استخدام الأشياء، فلنكتب برنامجًا يحسب مساحة المستطيل.

                                            


    الدالة  الاصل() {
        
        المتغير مستطيل شيء {
            طوله صحيح 	
            عرضه صحيح 			
        }			:= { 10، 5 } ؛
            
        شاشة::اكتب("مساحة المستطيل : ")
        شاشة::اكتب(مستطيل.طوله × مستطيل.عرضه)
        
    }			   
        
                                                                                

عن طريق عامل التخصيص := نقوم بتهيئة خصائص المستطيل عن طريق التعبير := { 10، 5 } فيتم تخصيص طول المستطيل ب 10 و عرضه ب 5.

ملحوظة: يمكن تخصيص كل سمة على حدة كأن نكتب مستطيل.طوله := 10

بعد تحديد وتخصيص المستطيل يمكن الان استعمال خصائصه ؛ فنستطيع مثلا حساب مساحته وكتابته على الشاشة.

هذا ما تفعله الخوارزمية عن طريق الولوج الى خصائص المستطيل من طول و عرض عن طريق العامل ..

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

استخدام الرزم والتصنيفات للتمكن من إعادة استخدام التعليمات البرمجية وتنظيمها

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

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

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

  • بشكل افتراضي ، تكون الدوال والأنواع والجوامد والوحدات النمطية عامة. تجعل الكلمة المفتاحية خاص أي عنصر خاصا وبالتالي غير خارج الصنف الخاص بها.

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

الاصناف والرزم ونظام الملفات

سنتحدث في هذا الفصل عن ماهية الرزم والاصناف و علاقتها بنظام الملفات. وذلك من خلال استعمال اصناف خوارزمية كمثال.

تعريف الاصناف و الرزم

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

المعجم: القاموس المحيط صنّف الأشياء , قسَّمها ورتَّبها في نظام خاصّ وعلى أساس معيّن يبيّن العلاقات بينها ويميّز بعضَها عن بعض :- صنَّف النَّباتات / الحشرات - صنّف الثَّمرَ .

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

                           بسم الله العليم الحكيم

الرزمة     علبة_ادوات 

الصنف       محرك {

   المتغير برغي شيء {
       حجمه صحيح 
       ...		
   }؛
   الدالة  فتح_برغي() {
       ...		
   }		
                                                                               

الصفرة 5-1 الملف محرك.خ

كما يبين المثال فالصنف اطارات هو الترتيب المنطقي وتجمع الادوات التي نود استعمالها مستقبلا؛ اما الرزمة علبة_ادوات فهي تشكل المكان الذي توضع فيه الاصناف (مجموعة الادوات).

                           بسم الله الفتاح العليم

الرزمة     علبة_ادوات 

الصنف       اطارات {

   المتغير اداة_النفخ_اطار شيء {
       قوة صحيح ؛
       ...		
   }؛
   الدالة  نفخ_اطار() {
       ...		
   }		
                               
}		
                                                                               

الصفرة 5-2 الملف اطارات.خ

الصنفان ينتميان الى نفس الرزمة علبة_ادوات . كما ذكرنا في مكان تواجد الادوات. فاذا ما اردنا استعمالها فما علينا سوى استخدام المفردة استعمل متبوعة باسم الرزمة. فمثلا اذا اردنا استخدام ادوات الاطارات نكتب التالي: استعمل علبة_ادوات.اطارات؛؛ اي اننا سنستعمل الصنف اطارات الموجود في الرزم علبة_ادوات.
ولو اردنا ان نكون اكثر دقة يمكن ان نقول ان الادوات تتواجد في الورشة و بالتالي يمكن تغيير تعريف الرزمة الى رزمة ورشة.علبة_ادوات؛.
فيكون الطريق الى علبة ادوات الاطارات مثلا عبر الدخول بالورشة ثم الى علبة الادوات لنصل الى ادوات الاطارات. بعبارة الخوارزم :استعمل ورشة.علبة_ادوات.اطارات؛\

لقد رأينا كيفية استعمال الاصناف والرزم؛ لكن ماذا تمثل بالضبط في نظام ملفات الخوارزم ؟

نظام الملفات في الخوارزم

الخوارزم يعتمد على نظام الملفات لحفظ الصفرة وترجمتها. فكل مجموعة من الخوارزمات تنتمي كما رأينا الى صنف معين؛ وهذا الصنف ما هو إلا ملف نصي على نظام الملفات، يحمل نفس اسم الصنف. اذااخذنا المثال السابق "لصفرة 5-1" ، الصنف محرك هو عبارة عن ملف يحمل الاسم محرك.خ.

لكن ماذا عن الرزمة ؟
الخورازم يترجم خوارزمياتنا المكتوبة من لغة مفهومة لنا الى لغة مفهومة للحاسوب. وهو هكذا يترجم الملف محرك.خ تحوي صفرتنا الى محرك.صنف يحوي تعليمات مقروءة بالنسبة للحاسوب. وهكذا ، وبعد الترجمة، نحصل من الملفات المصدرية على ملفات حاسوبية قابلة للاستعمال ، و التنفيذ ان اقتضى الحال. فعليا اي عند ترجمة محرك.خ و اطار.خ نحصل على الصنف محرك.صنف اطار.صنف داخل الحافظة علبة_ادوات على الشكل المبين اسفله ! اجل هو نفس اسم الرزمة.

علبة_ادوات
┤── محرك.صنف
┘── اطار.صنف

بهذه الطريقة ، تشكل الوحدات (الاصناف والرزم) تسلسلًا هرميًا. تكون الاصناف في المستوى الأدنى ، وتكون الرزمة في المستويات الأعلى.

السيطرة على الرؤية

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


الرزمة    حسابيات 

الصنف      اشكال  {	
                


الدالة    مساحة(طوله   صحيح،  عرضه صحيح ) صحيح خاص  {
                    ارجع طوله × عرضه  
        }		
            
            
                }
                                                                                

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

المتغير 'مساحة' غير معلن

متقدم

تركيب السلوكيات

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

تعريف السلوكيات

دعونا نغير خوارزميتنا لحساب المساحة ، فنكتب سلوكية مرتبطة بمستطيل ، كما هو موضح في الصفرة 5-13.

                                            


    
الدالة   (م   مستطيل) مساحة() صحيح  {
    
        ارجع م.طوله × م.عرضه 
        
    }																				

    النوع  مستطيل شيء {
       طوله صحيح 	
       عرضه صحيح 			
            }؛


    الدالة  الاصل() {

        المتغير  م مستطيل := {10، 5}	؛	
        
        شاشة::اكتب("مساحة المستطيل : ")
        شاشة::اكتب(   م.مساحة()  )
        
    }				
                                                                                

لاحظ من الوهلة الأولى أننا نستدعي تعريف النوع مستطيل وليس المتغير مستطيل وذلك باستعمال الكلمة المفتاحية نوع. وهكذا تمكنا من تعريف نوع جديد يمكن تعريف متغيرات من صنفه.

                                                                                                                

    نوع مستطيل شيء {
       طوله صحيح 	
       عرضه صحيح 			
            }؛
       
                
                                                                                

وقمنا ايضا بربط الدالة التي تحسب المساحة بالنوع مستطيل بوضع متغير هذا النوع م بين قوسين قبل اسم الدالة. ولحساب المساحة تم استعمال خصائص هذا المتغير م.

                                            

    الدالة   (م   مستطيل) مساحة() صحيح  {...
                                                            
                
                                                                                

ولحساب مساحة المستطيل نقول باستدعاء الدالة المرتبطة به (السلوك) كأنها خاصية من خصائه عن طريق استعمال العامل ..

                                            
 م.مساحة() 			   
                
                                                                                

ملحوظة: ربط السلوكية لا يقتصر على نوع 'شيء' ؛ إذ يمكن ربط السلوكيات بأي نوع متاح في الخورارزم أو معرف من المطور.

المؤشرات

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

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


    الدالة  الاصل() {
    
        المتغير ا صحيح := 0 
        المتغير ع  ۢ صحيح  

            ع := ؏ ا 

            شاشة::اكتب( ع  ) 		
        
            
    }
                                                                                

يتم تعريف مؤشر الى نوع ما باضافة ۢ (ميم صغيرة فوقية) قبل النوع - فنقول مؤشر الى نوع- في المثال نعرف ا كصحيح و ع كعنوان لصحيح.
التعليمة ع := ؏ا؛ تعنيني اننا نأمر الحاسوب بوضع قيمة عنوان ا داخل ع وذلك باستعمال العامل ؏. ثم نكتب قيمة هذا العنوان.

ما هي المؤشرات ؟

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

المؤشرات المنعدمة

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

        المتغير ع  ۢ صحيح  := عدم  

هذه الممارسة مفيذة جدا مثلا في تحديد ما اذا كان مؤشر ما لا حتوي على عنوان محدد، تماما عندما يكون المتغير بقيمة 0. يمكن القول ان ال عدم يشكل القيمة 0 بالنسبة للمؤشرات.

استنباط النوع

المترجم ذكي بحيث يمكنه استنباط نوع المتغير عند تعيين قيمة له. وهذا يكون عن طريق الكلمة المفتاحية ليكن. فمثلا عادة ما نستخدم الشكل الآتي للتعريف :

    
    المتغير ا صحيح := 10	
                                                                                    

كون بذلك قد عرفنا بمتغير ا ذي نوع صحيح و اعطيناه القيمة 10. ماذا لو اردنا تخفيف العبارة أو اننا لا نعلم نوع مستسصدر من مكتبة أخرى ؟

هنا يأتي دور المترجم ليستنتج النوع بدل المطور. مثلا:

    
    ليكن ا := 10
                                                                                

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


    الدالة  الاصل() {
    
         ليكن ا := 10
         
         المتغير ع  ۢ صحيح  
     
               
         ع := ؏ ا 
     
          اكتب(ڨ  ع  ) 	
        
            
    }
                                                                                

التحميل الزائد لدالة

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

لنعرف الدالة ضرب لأعداد صحيحة كالآتي:

    
   الدالة		ضرب		(	ا صحيح ، ب صحيح  	)	صحيح 	 {
                ارجع ا × ب
    }
                                                                                    

ونقوم بزاية تعريف للدالة ضرب لكن هذه المرة لأعداد حقيقي

    
   الدالة		ضرب		(	ا حقيقي ، ب حقيقي 	)	حقيقي	 {
                ارجع ا × ب
    }
                                                                                

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

الآن يمكن استدعاء الدالتين :


    الدالة الاصل()	{

         المتغير		ا_ص ، ب_ص صحيح  :=   1 ،   2	
        المتغير		ا ، ب حقيقي :=   1.0،  2.0	
    
         اكتب		(	ضرب(	 ا_ص  ، ب_ص 	)		) 
         '/س'.اكتب	()					
         اكتب		(	ضرب( ا 	 ، ب	)		) 			

}		
                                                                                

الناتج هو :

2

2.0000000

يتم استدعاء ضرب العددين الصحيحين والعددين الحقيقين بنفس اسم الدالة ؛ والمترجم يقوم باستنباط الدالة المعرفة التي يجب استدعاؤها .

الملحق

تحتوي الأقسام التالية على مواد مرجعية قد تجدها مفيدة في رحلة مع الخوارزم.

. الملحق أ - الكلمات المفتاحية

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

الكلمات المفتاحية قيد الاستخدام حاليًا

الكلمات المفتاحية التالية لديها وظيفة محدد.

  • استعمل - استيراد الرموز الى الوحدة النظامية
  • استانف - استئناف التكرار
  • اذا - التنفيذ بناءً على نتيجة التعبير الشرطي
  • ارجع - الخروج من الدالة مع او دون ارجاع قيمة
  • ايما - نوع مؤشر يستقبل اي نوع مؤشر
  • والا - احتياطي لـ "إذا" بالتحكم في مسار التنفيذ
  • حجم - تحديد حجم متغير في الذاكرة
  • طول - تحديد طول متغير في الذاكرة من نوع صفيف
  • كما - أداء القولبة
  • لاجل - حلقة التكرار مستخدمة في التسلسل
  • مادام - التعبير الشرطي في حلقة التكرار
  • نوع - حدد نوع الاسم المستعار أو النوع المرتبط
  • صواب - قيمة الصواب المنطقي
  • الصنف - تحديد وحدة نمطية
  • صحيح - تعريف متغير من نوع صحيح حجمه 32 جزءا (بيتات) (-2147483648 الى 2147483647)
  • صحيح8 - تعريف متغير من نوع صحيح حجمه 8 اجزاء (بيتات) (-128 الى 127)
  • صحيح16 - تعريف متغير من نوع صحيح حجمه 16جزءا (بيتات) (-32768 الى 32767)
  • صحيح32 - تعريف متغير من نوع صحيح حجمه 32 جزءا (بيتات) (-2147483648 الى 2147483647)
  • الرزمة - تعريف الرزمة
  • الدالة - تحديد الدالة أو نوع مؤشر الدالة
  • قطع - الخروج من حلقة على الفور
  • حقيقي - تعريف متغير من نوع حقيقي حجمه 64 جزءا (مجموعة أرقام الفاصلة العائمة 64 بت IEEE-754)
  • حقيقي32 - تعريف متغير من نوع حقيقي حجمه 32 جزءا (مجموعة أرقام الفاصلة العائمة 32 بت IEEE-754)
  • حقيقي64 - تعريف متغير من نوع حقيقي حجمه 64 جزءا (مجموعة كافة أرقام الفاصلة العائمة 64 بت IEEE-754)
  • جامد - تحديد العناصر الثابتة أو المؤشرات الأولية الثابتة
  • خطا - قيمة الخطا المنطقي
  • خاص - تشير إلى الرؤية الخاصة
  • شيء - تحديد شيء
  • عدم - قيمة مؤشر عديم
  • سرد - تعريف مجموعة من القيم المسماة
  • طبيعي - اضافة هذا المعرف الى تعريف متغير صحيح يجعل من المتغير عددا طبيعيا

الملحق ب: العوامل والرموز

العوامل والرموز: يحتوي هذا الملحق على معجم لتركيب الخوارزم ، بما في ذلك العوامل و الرموز الأخرى التي تظهر من تلقاء نفسها أو في سياق المسارات ، والسمات ، والتعليقات ، والأقواس.

والرموز

يحتوي الجدول ب-1 على العوامل في الخَوَارزم ، مثالا على كيفية استخدام العامل تظهر في السياق ، وشرحا قصيرا ، وما إذا كان هذا العامل قابلاً للحمل الزائد.

الجدول ب-1 : العوامل

العامل مثال تفسير
ليس ليس التعبير تبديل أو تكامل منطقي
ليس= متغير ليس= تعبير مقارنة عدم المساواة
نمط تعبير نمط تعبير الباقي الحسابي
نمط:= متغير نمط:= تعبير الباقي الحسابي مع التخصيص
؏ ؏متغير عنوان متغير
و تعبير و تعبير واو منطقية
وو:= متغير وو:= تعبير ضرب منطقي على مستوى الثنائيات مع تخصيص
وو تعبير وو تعبير ضرب منطقي على مستوى الثنائيات
× تعبير × تعبير ضرب حسابي
×:= متغير ×:= تعبير ضرب حسابي مع تخصيص
ۢ ۢ الغاء التأشير؛ قيمة المؤشر اليه
ۢ ڨ ڨ الغاء التأشير؛ قيمة المؤشر اليه
+ تعبير + تعبير جمع حسابي
+:= متغير := تعبير جمع حسابي مع تخصيص
++ متغير++ اضافة قيمة احادية من نفس نوع المتغير الحسابي
، تعبير، تعبير فاصلة المنطلقات والعناصر
- - تعبير تغيير اشارة الحسابي
- تعبير - تعبير طرح حسابي
-- متغير-- طرح قيمة احادية من نفس نوع المتغير الحسابي
-= متغير -:= تعبير طرح حسابي مع تخصيص `
. تعبير.معرف استخلاص عضو
-> تعبير->معرف استخلاص عضو من عنصر من نوع مؤشر
\ تعبير \ تعبير قسمة حسابية
\:= معرف \:= تعبير قسمة حسابية مع تخصيص
: معرف : قيمة تخصيص حجم خاصية شيء
؛ تعبير؛ نهاية التعليمات
<< تعبير << تعبير ازاحة الى اليمين
:=<< متغير :=<< تعبير ازاحة الى اليمين مع تخصيص
< تعبير < تعبير المقارنة اصغر من
<= تعبير<= تعبير المقارنة اصغر من او يساوي
:= متغير := تعبير تخصيص
= تعبير = تعبير مقارنة تساوي
> تعبير > تعبير المقارنة اكبر من
>= تعبير >= تعبير المقارنة اكبر من او يساوي
>> تعبير >> تعبير ازاحة الى اليسار
>>= متغير >>= تعبير ازاحة الى اليسار مع تخصيص
امام تعبير امام تعبير او حصرية على مستوى الثنائيات
امام:= متغير امام:= تعبير او حصرية على مستوى الثنائيات مع تخصيص
اواو تعبير اواو تعبير او على مستوى الثنائيات
اواو:= متغير اواو:= تعبير او على مستوى الثنائيات مع تخصيص
او تعبير او تعبير او منتطقية

الجدول ب-2 : بناء الجملة المتعلقة بالمسار

الرمز المعنى
معرف::معرف مسار العمل

يُظهر الجدول ب-3 الرموز التي تنشئ التعليقات

الجدول ب-3: التعليقات

الرمز المعنى
(۩...۩) تعليق

يوضح الجدول ب-4 السياقات التي تستخدم فيها الأقواس المتعرجة.

الجدول ب-4 اقواس متعرجة

السياق تفسير
{...} محاصرة او كتلة تعبيرية
{، ، ...،...} تخصيص قيم شيء

يوضح الجدول ب -5 السياقات التي تستخدم فيها الأقواس المربعة. الجدول ب -5 الأقواس المربعة.

السياق تفسير
[...] تخصيص صفيف
تعبير[تعبير] فهرسة الصفيف