المختصر فى لغه البرمجه باستخدام لغه ال(c)الجزء(2)
الـ Loop أو قل (الجمل التكرارية)
لا يكاد كود يخلو من هذه الجمل فهي توفر علينا مشقة الإعادة.
من هذه الجمل:
For
While
Do while
Foreach
وغيرها ....
ما رأيك بأن نبدأ بمثال بسيط ولم يذكر من قبل لترى معي أهمية هذه الجمل ..
نفرض بأنك مبرمج ألعاب (Game Programmer) وتستخدم أي لغة برمجة مع مكتبات الـ DirectX.
الآن تريد أن تبرمج بطل هذه اللعبة وهو عبارة عن وحش بأربعة أرجل ويدان وخمسة عيون وأنياب كبيرة وحراشف على الظهر ولسان طويل وأذنان... أصبح (مسخ)
المهم ...
هل تعلم كم من الوقت يحتاج المبرمجون لفعل ذلك ... آه ... لنرى .... ماذا ... نعم قرابة الشهرين إلى ستة شهور ..
ولأكن لماذا ... أنا أقول لك لماذا ..
لأن الـ DirectX يقوم برسم أي مجسم بإستخدام المثلثات.. ولك أن تتخيل ما معنى هذا... أعتقد أنك لم تستوعب بعد حجم هذه الكارثة ... لا بأس سأطلب منك تطبيق عملي أريد منك أن تأخذ قطعة من الورق وتقصها إلى قطع صغيرة وتكون بشكل مثلثات .. الآن أريد منك أن تصنع لي مجسم (لكوب)بواسطة هذه القطع... أترى مدى الكارثة.
الآن تخيل بأن بطلنا أقصد مسخنا ... سوف نعمله بهذا النظام فكم عدد الإحداثيات والمتجهات التي سأستخدمها لرسم هذا الجسم ولا تنسى أن المثلثات يجب أن تتوضع بشكل دقيق وإلا فأنه سيتحول إلى لعبة x و o ..
ولأكن هل هذا فعلاً ما يحدث .. في الحقيقة لا ... هناك طريقة أخرى ...
عندما أريد عمل المسخ الذي بالأعلا .... فكل ما علي فعله هو أن أرسم الجسم في الـ 3D MAX أو Maya ... وأقوم بتخزين هذا الشكل بصيغة أكس File.
الآن صنعت الشكل وبقي لدي أن أقرأه بواسطة الـ DirectX ليتسنى لي بعد ذلك تحريكه كما أشاء..
الآن لقراءة ملف أكس File بواسطة الـ DirectX سيحتاج بالطريقة العادية لقرابة عشرة أيام أو أكثر قليلاً لكتابة كود يستطيع قراءة هذا الملف الذي يحوي مسخنا .. أي أننا وفرنا على أنفسنا مسافة كبيرة ... هذا جميل أليس كذلك .... لا أعتقد أنك توافقني الرأي وخصوصاً إذا علمنا أن اللعبة الواحدة من الممكن أن تحوي ملايين الأشكال ...
آن آوان الخطوة الأخيرة وهي إستخدام جمل الـ Loop لقراءة الملف .. أتدري كم من الوقت ستحتاج لكتابة كود يقوم بقراءة هذا الملف ... أراهن أنها أقل من خمسة دقائق ...
أليس هذا رائعاً ..
إذن هيا نلقي نظرة على هذا الإختراع الـ Loop
نبدأ بشرح القاعدة الذهبية لجمل الـ Loop (الجمل التكرارية).
لأي جملة من الجمل التكرارية .. قاعدة ثابته إذا لم تلتزم بها فتوقع حدوث دوامة من الأرقام الانهائية أو أخطاء في النتائج ..
أي جمل تكرارية يجب أن تحدد لها ثلاثة أشياء
الأول: أين البداية.
الثاني: أين النهاية.
الثالث: كيفية العرض.
سوف نقوم هنا بأخذ الجملة For وتنطبق فكرة عملها على باقي الجمل...
لنفرض بأني أريد طباعة الأرقام من 1 إلى 200 .
في الحالة العادية سيكون تمثيل الكود كالتالي:
إطبع 1
إطبع 2
إطبع 3
إطبع 4
إطبع 5
إطبع 6
………
………
………
إطبع 200
أعتقد بأن هذا المثال يذكرك بقصاصات الورق في المثال بالأعلا .. أي أن هذا الكلام غير عملي ..
حسناً لنأخذ نفس المثال بالأعلا وهو طباعة الأرقام إلى العدد 200 ولأكن بإستخدام جملة الـ For
For (i=0;i==200;i++)
{
إطبع i
}
الآن لاحظ أننا في الطريقة العادية قمنا بكتابة 200 سطر من الأكواد من أجل طباعة الأرقام إلى 200
أما في الجملة For فقد قمنا بكتابة أربعة أسطر فقط ..
حسناً ما رأيك أن نستخرج القوعدة الذهبية التي تكلمنا عنها بالأعلا من جملة For
البداية هي :0 أي إبدأ طباعة الأرقام من الرقم صفر
النهاية هي : 200أي عندما تصل إلى الرقم 200 توقف
طريقة العرض i++ أي رقم وراء الآخر.
حيث أن i++ هي إختصار لي i = i + 1
أي أن الزيادة ستكون بمقدار واحد.
ومن الممكن إستخدام i— من أجل تحديد عملية النقصان بمقدار واحد.
ما رايك الآن بأن نذهب في العمق قليلاً لنرى كيف يقوم المعالج (Processor) بهذا العمل.
عندما نبدأ بالتكلم عن جمل الـ Loop ففي الحقيقة بأن الكمبيوتر لا يميز بين For أو While او اي من الجمل المذكورة ...
كل ما يهم المعالج هي المسجلات وقد شرحنا في مقالات سابقة عن هذه المسجلات..
فالمسجل الذي يختص بتحديد عدد مرات التكرار هو المسجل CX .. وهذا يعني أننا لو ترجمنا الكود بالأعلا الذي يقوم بي عملية طباعة الأرقام من 1 إلى 200 سيكون كالتالي:
أولا: قم بوضع العدد 200 في المسجل CX والتي تمثل عدد مرات التكرار
ثانياً: قم بوضع العدد 0 في المسجل AX والتي تمثل البداية
ثالثاً: قم بإستدعاء المقاطعة الخاصة بي طباعة الأرقام على الشاشة وهي int 21h
نلاحظ أثناء عمل run بأن االمسجل CX ينقص بمقدار واحد.
والمسجل AX يزيد بمقدار واحد.
وعندما يصبح المسجل CX صفر يتوقف الـ LOOP
الـ Loop أو قل (الجمل التكرارية)
لا يكاد كود يخلو من هذه الجمل فهي توفر علينا مشقة الإعادة.
من هذه الجمل:
For
While
Do while
Foreach
وغيرها ....
ما رأيك بأن نبدأ بمثال بسيط ولم يذكر من قبل لترى معي أهمية هذه الجمل ..
نفرض بأنك مبرمج ألعاب (Game Programmer) وتستخدم أي لغة برمجة مع مكتبات الـ DirectX.
الآن تريد أن تبرمج بطل هذه اللعبة وهو عبارة عن وحش بأربعة أرجل ويدان وخمسة عيون وأنياب كبيرة وحراشف على الظهر ولسان طويل وأذنان... أصبح (مسخ)
المهم ...
هل تعلم كم من الوقت يحتاج المبرمجون لفعل ذلك ... آه ... لنرى .... ماذا ... نعم قرابة الشهرين إلى ستة شهور ..
ولأكن لماذا ... أنا أقول لك لماذا ..
لأن الـ DirectX يقوم برسم أي مجسم بإستخدام المثلثات.. ولك أن تتخيل ما معنى هذا... أعتقد أنك لم تستوعب بعد حجم هذه الكارثة ... لا بأس سأطلب منك تطبيق عملي أريد منك أن تأخذ قطعة من الورق وتقصها إلى قطع صغيرة وتكون بشكل مثلثات .. الآن أريد منك أن تصنع لي مجسم (لكوب)بواسطة هذه القطع... أترى مدى الكارثة.
الآن تخيل بأن بطلنا أقصد مسخنا ... سوف نعمله بهذا النظام فكم عدد الإحداثيات والمتجهات التي سأستخدمها لرسم هذا الجسم ولا تنسى أن المثلثات يجب أن تتوضع بشكل دقيق وإلا فأنه سيتحول إلى لعبة x و o ..
ولأكن هل هذا فعلاً ما يحدث .. في الحقيقة لا ... هناك طريقة أخرى ...
عندما أريد عمل المسخ الذي بالأعلا .... فكل ما علي فعله هو أن أرسم الجسم في الـ 3D MAX أو Maya ... وأقوم بتخزين هذا الشكل بصيغة أكس File.
الآن صنعت الشكل وبقي لدي أن أقرأه بواسطة الـ DirectX ليتسنى لي بعد ذلك تحريكه كما أشاء..
الآن لقراءة ملف أكس File بواسطة الـ DirectX سيحتاج بالطريقة العادية لقرابة عشرة أيام أو أكثر قليلاً لكتابة كود يستطيع قراءة هذا الملف الذي يحوي مسخنا .. أي أننا وفرنا على أنفسنا مسافة كبيرة ... هذا جميل أليس كذلك .... لا أعتقد أنك توافقني الرأي وخصوصاً إذا علمنا أن اللعبة الواحدة من الممكن أن تحوي ملايين الأشكال ...
آن آوان الخطوة الأخيرة وهي إستخدام جمل الـ Loop لقراءة الملف .. أتدري كم من الوقت ستحتاج لكتابة كود يقوم بقراءة هذا الملف ... أراهن أنها أقل من خمسة دقائق ...
أليس هذا رائعاً ..
إذن هيا نلقي نظرة على هذا الإختراع الـ Loop
نبدأ بشرح القاعدة الذهبية لجمل الـ Loop (الجمل التكرارية).
لأي جملة من الجمل التكرارية .. قاعدة ثابته إذا لم تلتزم بها فتوقع حدوث دوامة من الأرقام الانهائية أو أخطاء في النتائج ..
أي جمل تكرارية يجب أن تحدد لها ثلاثة أشياء
الأول: أين البداية.
الثاني: أين النهاية.
الثالث: كيفية العرض.
سوف نقوم هنا بأخذ الجملة For وتنطبق فكرة عملها على باقي الجمل...
لنفرض بأني أريد طباعة الأرقام من 1 إلى 200 .
في الحالة العادية سيكون تمثيل الكود كالتالي:
إطبع 1
إطبع 2
إطبع 3
إطبع 4
إطبع 5
إطبع 6
………
………
………
إطبع 200
أعتقد بأن هذا المثال يذكرك بقصاصات الورق في المثال بالأعلا .. أي أن هذا الكلام غير عملي ..
حسناً لنأخذ نفس المثال بالأعلا وهو طباعة الأرقام إلى العدد 200 ولأكن بإستخدام جملة الـ For
For (i=0;i==200;i++)
{
إطبع i
}
الآن لاحظ أننا في الطريقة العادية قمنا بكتابة 200 سطر من الأكواد من أجل طباعة الأرقام إلى 200
أما في الجملة For فقد قمنا بكتابة أربعة أسطر فقط ..
حسناً ما رأيك أن نستخرج القوعدة الذهبية التي تكلمنا عنها بالأعلا من جملة For
البداية هي :0 أي إبدأ طباعة الأرقام من الرقم صفر
النهاية هي : 200أي عندما تصل إلى الرقم 200 توقف
طريقة العرض i++ أي رقم وراء الآخر.
حيث أن i++ هي إختصار لي i = i + 1
أي أن الزيادة ستكون بمقدار واحد.
ومن الممكن إستخدام i— من أجل تحديد عملية النقصان بمقدار واحد.
ما رايك الآن بأن نذهب في العمق قليلاً لنرى كيف يقوم المعالج (Processor) بهذا العمل.
عندما نبدأ بالتكلم عن جمل الـ Loop ففي الحقيقة بأن الكمبيوتر لا يميز بين For أو While او اي من الجمل المذكورة ...
كل ما يهم المعالج هي المسجلات وقد شرحنا في مقالات سابقة عن هذه المسجلات..
فالمسجل الذي يختص بتحديد عدد مرات التكرار هو المسجل CX .. وهذا يعني أننا لو ترجمنا الكود بالأعلا الذي يقوم بي عملية طباعة الأرقام من 1 إلى 200 سيكون كالتالي:
أولا: قم بوضع العدد 200 في المسجل CX والتي تمثل عدد مرات التكرار
ثانياً: قم بوضع العدد 0 في المسجل AX والتي تمثل البداية
ثالثاً: قم بإستدعاء المقاطعة الخاصة بي طباعة الأرقام على الشاشة وهي int 21h
نلاحظ أثناء عمل run بأن االمسجل CX ينقص بمقدار واحد.
والمسجل AX يزيد بمقدار واحد.
وعندما يصبح المسجل CX صفر يتوقف الـ LOOP