PDA

مشاهدة نسخة كاملة : [درس] : عبارة for في لغات البرمجة


Ali Hamad
30-09-2007, 08:42 PM
السلام عليكم .... أسعد الله اوقاتكم بكل خير :

ملاحظة : الموضوع طويل ومتشعب .


مقدمة :

البرمجة بتعريفها البسيط ( عملية كتابة ، اختبار ، تنفيذ مجموعة أكواد كتبت بلغة برمجة ما لتقوم بعمل ما ) هي عصب الانترنت .
فنظام التشغيل الذي تعمل عليه عبارة عن مجوعة اكواد برمجية بلغات مختلفه معقده . كل شيء تراه في الانترنت امامك عبارة عن اكواد. ولكن تذكر انه باختلاف لغات البرمجة المستخدمة في كتابة الكود ،الكمبيوتر لايعرف الا 0 او 1 فقط .
تختلف الاغراض من كتابة كود معين باختلاف لغات البرمجة المستخدمه . مثلا : لغة البي اتش بي لغة بسيطه تم كتابتها اعتمادا على C/C++ ( بالمناسبة C++ عبارة عن C ولكن مطوره ، بمعنى كل ماهو موجود في C موجود في C++ ) وهذه اللغة ، اعني PHP ، تستخدم بشكل اساسي في تطوير الويب ( المواقع ) . بينما على النقيض تماما لغات برمجة تستخدم في اساس نظام التشغيل على سبيل المثال لا الحصر : Assembly ( تستخدم بشكل اساسي في كتابة drivers بمعنى وسيط التواصل بين انظمة التشغيل مجازا وبين العتاد " الهاردوير " ) ، C/C++ ( لغة البرمجة الام الحنون لاغلب لغات البرمجة واللغة التي كتب بها Linux Kernel ، وايضا Bash ( يستخدم اساسا في نظام Linux غالبا في تسهيل عمل مدير النظام وايضا في تطبيقات ، برامج ، وسكربتات داخل السيرفر ، مثلا سكبرتات الشتغيل rc في مختلف مستويات ال run جميعها كتبت بال bash ) .

الهدف :

لكي تصبح مدير سيرفرات محترف يلزمك دائما تسهيل عملك بعمل برامج مساعدة مساندة لتوفير الوقت والعمل نيابة عنك لتادية بعض المهام. تعلم لغات برمجة اساسية مثل ال C او حتى الـ Bash يغير حياتك العملية الى الافضل بتسهيل عملك وتطوير ادائك .


الموضوع :

درس بسيط للتعرف على أشكال اكواد بعض لغات البرمجة ( java , C and bash ) ، ودراسة عبارة اساسية تقريبا في كل لغات البرمجة loop وبشكل ادق ما ساتكلم عنه هي for loop .

ماهي ال for loop :

عبارة برمجية تعني الاستمرار في تنفيذ ال body الخاص بال loop حتى يتم الوصول الى حالة معينة، ( الوصول الى رقم معين ، تنفيذ امر معين ، تنفيذ شرط معين .... على حسب ماهو شرط استمرار اللوب ) او كسر اللوب ( break ) .

امثلة :

1) JAVA :

public class AwtLoop {
public static void main (String[] args){

for (int i=0; i < 5; i++){

System.out.println("Loop is at " + i);

}
}
}


الشرح :

for (int i=0; i < 5; i++)

int i = 0 تعني تعريف المتغير i بانه integer ووضع قيمته بصفر .
i < 5 تعني الشرط الذي تنتهي عنده اللوب ، بمعنى قم بتنفيذ البودي ( اي عبارة برمجية بين ال } و { حتى تصبح قيمة المتغير i اقل من خمسه .
i++ = قم بزياة قيمة المتغير i بواحد في كل مره تنفذ اللوب مالم يتحقق الشرط .

System.out.println("Loop is at " + i);

البودي الخاص بال for loop ويعني قم بطباعة الجملة ( String ) التالية Loop is at ملحوقة بقيمة المتغير i .

الناتج :

Loop is at 0
Loop is at 1
Loop is at 2
Loop is at 3
Loop is at 4

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

2) C/C++:

#include <stdio.h>
int main ( void ){

int i;
for (i=0; i <5; i++) {
printf("Loop is at %d\n", i);
}
return 0;
}

الشرح :

for (i=0; i <5; i++)

i = 0 تعني وضع قيمة المتغير i بانه صفر ، لاحظ في لغة C لابد من تعريف المتغير خارج اللوب .
i < 5 تعني الشرط الذي تنتهي عنده اللوب ، بمعنى قم بتنفيذ البودي ( اي عبارة برمجية بين ال } و { حتى تصبح قيمة المتغير i اقل من خمسه . لاحظ انه في لغة ال C يمكنك عدم استخدام ال {} .
i++ = قم بزياة قيمة المتغير i بواحد في كل مره تنفذ اللوب مالم يتحقق الشرط .


printf("Loop is at %d\n", i);

البودي الخاص بال for loop ويعني قم بطباعة الجملةالتالية Loop is at ملحوقة بقيمة المتغير i . علامة %d تعني تعريف للمتغير i عند الطباعة وعلامة \n تعني طباعته في سطر جديد .

الناتج :

Loop is at 0
Loop is at 1
Loop is at 2
Loop is at 3
Loop is at 4


3) BASH : التخصص والعشق الاول والاخير :)

#!/bin/bash

for (( i =0; i <5; i++))
do
echo "loop is at $i"
done

#EOF

الشرح :

for (( i =0; i <5; i++))

i = 0 تعني وضع قيمة المتغير i بانه صفر ، لاحظ في لغة الباش لانحتاج لتعريف نوع المتغير ، مثلا هل هو integer , double , long , short , string , char ...etc
i < 5 تعني الشرط الذي تنتهي عنده اللوب ، بمعنى قم بتنفيذ البودي ( اي عبارة برمجية بين ال do و done حتى تصبح قيمة المتغير i اقل من خمسه( شرط اغلاق اللوب ) . لاحظ انه في لغة الباش لاتستخدم ال }{ في تحديد البودي الخاص باللوب ، بل يستخدم do , done .
i++ = قم بزياة قيمة المتغير i بواحد في كل مره تنفذ اللوب مالم يتحقق الشرط .

echo "loop is at $i"

قم بطباعة loop is at ملحوقة بقيمة المتغير i .

الناتج :

loop is at 0
loop is at 1
loop is at 2
loop is at 3
loop is at 4

ماذا تعني break ؟

عكس العبارة continue بمعنى .. break تعني قم بالخروج خارج اللوب ، قم بانهاء اللوب بدون الرجوع للشرط الاساسي لاستمرار اللوب .

مثال بسيط بلغة الجافا Java لتقريب المعلومة :

public class AwtLoop {
public static void main (String[] args){

for (int i=0; i < 5; i++){
if (i == 3){
System.out.println("Going to break the loop");
break;
}
System.out.println("Loop is at " + i);
}
}
}

الشرح :

if (i == 3){
System.out.println("Going to break the loop");
break;
}

لاحظ ان الشرط الخاص باستمرار اللوب هو ان يقوم بطباعة قيمة i من 0 الى 4 ( اقل من خمسه ) ولكن وضعنا جملة شرطية بانه في حالة كانت القيمة للمتغير i تساوي 3 ، قم بالخروج من اللوب باستخدام الامر break بعد ان تقوم بطباعة الجملة Going to break the loop حتى وان لم يتم تحقق الشرط الخاص باستمرار اللوب.

الناتج :

Loop is at 0
Loop is at 1
Loop is at 2
Going to break the loop

ماذا تعني Nested Loop ؟

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

مثال بسيط لتقريب المعلومة بلغة Bash :

الكود في الاسفل يعطيك حاصل الضرب للاعداد من 1 الى 3 في الاعداد من 1 الى 3 ، شاهد الناتج لتوضح النتيجة :

#!/bin/bash

for (( i =1; i <=5; i++))
do
echo "The main loop is at $i"
echo "## The multiplication table of $i ##"

for ((x=1; x<=3; x++))
do
echo "## The inner loop is at $x ##"
echo " $i * $x = $(($i * x))"
done
done

#EOF


الشرح :

لاحظ وجود اللوب الثانية في داخل اللوب الاولى :

for ((x=1; x<=3; x++))

الناتج :

## The multiplication table of 1 ##
## The inner loop is at 1 ##
1 * 1 = 1
## The inner loop is at 2 ##
1 * 2 = 2
## The inner loop is at 3 ##
1 * 3 = 3
The main loop is at 2
## The multiplication table of 2 ##
## The inner loop is at 1 ##
2 * 1 = 2
## The inner loop is at 2 ##
2 * 2 = 4
## The inner loop is at 3 ##
2 * 3 = 6
The main loop is at 3
## The multiplication table of 3 ##
## The inner loop is at 1 ##
3 * 1 = 3
## The inner loop is at 2 ##
3 * 2 = 6
## The inner loop is at 3 ##
3 * 3 = 9

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

المثال اعلاه بلغة C للتوضيح بشكل اكبر ( ارجو التركيز في علامة فتح البودي الخاص باللوب } وعلامة اغلاقها {:

#include <stdio.h>

int main ( void ){
int i,x,result;

for (i =1; i <=3; i++) { <-- لاحظ فتح البودي لللوب الاولى
printf(" ## The main loop is at %d ## \n",i);
printf(" ## The multiplication table of %d ## \n", i);

for (x =1; x<=3; x++){ <-- لاحظ فتح البودي لللوب الثانية مع اننا لم نغلق الاولى
printf(" ## The inner loop is at %d ## \n ",x);
result = i * x;
printf("%d * %d = %d \n",i,x,result);
} <-- لاحظ اقفال البودي لللوب الثانية قبل الاولى
} <-- لاحظ اقفال البودي لللوب الاولى في النهاية

printf(" ## The End of All loops \n ");
return 0;
}

الناتج :

## The main loop is at 1 ##
## The multiplication table of 1 ##
## The inner loop is at 1 ##
1 * 1 = 1
## The inner loop is at 2 ##
1 * 2 = 2
## The inner loop is at 3 ##
1 * 3 = 3
## The main loop is at 2 ##
## The multiplication table of 2 ##
## The inner loop is at 1 ##
2 * 1 = 2
## The inner loop is at 2 ##
2 * 2 = 4
## The inner loop is at 3 ##
2 * 3 = 6
## The main loop is at 3 ##
## The multiplication table of 3 ##
## The inner loop is at 1 ##
3 * 1 = 3
## The inner loop is at 2 ##
3 * 2 = 6
## The inner loop is at 3 ##
3 * 3 = 9
## The End of All loops


هل ال syntax الخاص ب for-loop متساوي في كل لغات البرمجة ؟

حقيقه منطقيا نعم ( شرط التحقق ، العداد ، الجملة الاساسية ، بودي اللوب تقريبا متواجدة في كل لغات البرمجة ، ولكن تختلف في ( الشكل ) .. لتقريب المعلومة .. كانت لدي فكرة وانا اقوم بكتابة الموضع بشرح طريقة ال for loop بلغة ADA ، ولكن توقفت لاني اعتقدت انها ستخرج الموضوع عن syntax الي تستخدمه اغلب لغات البرمجة والي ذكرته اعلاه ، لكن للعلم فقط وشرح اوجه التشابه في المنطق والاختلاف في syntax، تعريف for loop في Ada :

loop
statment;
exit when cond;
end loop;

الشرح :

يبدا فتح اللوب بكلمة loop وينهيها بكلمة end loop ، والجملة الشرطية تاتي بعد الجملة
exit when ! لاحظ وجود ( شرط التحقق ، الجمله الاساسية ، بودي اللوب ... ولكن بشكل اخر ) .


الفائدة المرجوة من الموضوع :

1) تعرف على ثلاث اشكال اساسية من لغات البرمجة .
2) التعرف بشكل اكبر على اللوجيك ( المنطق ) الخاص بال for-loop بشكل عام ورؤيته بشكل واضح في لغات برمجة اخرى بامثلة بسيطه .
3) اعطاء دافع هنا لاعضاء الويب العربي بتعلم لغات برمجة مفيده في مجال ادارة السيرفرات مثل C, Bash , Java .


في ابعاد المعلومات :

انا شخصيا أؤمن باهمية البرمجة في تطوير العمل الداخلي او حتى في تطوير اداء وكيفية عملنا في قسم الاستضافة .. ابعاد المعلومات مؤسسة كانت اساسا تهتم وتعنى بالبرمجة فقط قبل ان تتفرع الى اقسام عديدة . ترى نتائج اعمال قسم البرمجة واضحه ( انفنتي ، الكومبو ، ديواني ، تسكين ... ) وايضا سيكون قريبا ناتج عمل قسم الاستضافة ROE قريبا ان شاء الله وهو اول برنامج معلن عنه رسميا. في ابعاد المعلومات نحترف لغات البرمجة ( Java , Bash, C , ADA , PHP , CGI ) ونعمل جاهدين على تطوير العمل الداخلي والويب العربي ( الانترنت ) ككل .

قبل الختام :

1) انا اسف ان كانت اللهجة الي استخدمتها عامية بحته ، ولكن حاولت تقريب الفكرة باكثر من لغة برجمة والتنويع لتقريب الفكرة بافضل مااستطيع بلهجة بسيطه مفهومه للكل.
2) انا اسف مسبقا على الاخطاء الاملائية او النحوية ان وجدت ..
3) شكرا لك على وقتك لقراءة الموضوع .
4) اذا كان لديك اي سؤال او استفسار في لغات البرمجة Bash , Ada , Java or C ، الرجاء التكرم بوضعه في هذا الموضوع ولكن لي رجاء بان يكون السؤال ليس واجب دراسي مطلوب من دكتورك الجامعي لاني لان اقوم بحله من الان :)

علي حمد ، قسم الاستضافة .
أبعاد المعلومات .

Coldfusion
01-10-2007, 04:21 AM
درس رائع جداً
بارك الله فيك....

Ali Hamad
01-10-2007, 06:59 AM
الغالي :

انا سعيد بمرورك وان شاء الله انك استفدت من الموضوع ..

لك التحية ،
علي حمد .

F.alMutairi
01-10-2007, 09:10 PM
بارك الله فيه ^^

Ramy Allam
03-10-2007, 04:06 PM
جزاك الله خيرا ع الإفادة

JeddaHost
04-10-2007, 04:05 AM
يعطيك العافية أخوي علي

بس حبيت استفسر اذا ممكن تعطيني رابط موقع أقدر اتعلم منه Bash Programing

انا عندي خبـرة ولكن بالأمور الأساسية حاب اطور نفسي أكثر واتعلم :)

فإذا عندك رابط موقع ياريت تفيدني

مع تحياتتي

The golden city
04-10-2007, 07:39 PM
موضوع جميل جدآآ وشرح رائع أخوي علي
ولكن لي تنبية بسيط باأنها لاتسمى عبارة وأنما دالة

شكرآآ مره أخرى على الدرس الحـــلــو

تحية طيبة

Ali Hamad
07-10-2007, 02:37 AM
بارك الله فيه ^^

حياك الله يالغالي ...

RoMiO NeT :

سعيد بتواصلك ...

JeddaHost :

هلا والله عبدالرحمن ( مانيب واهم صح :) ) ، كيف حالك ؟ عسى امورك تمام ؟

حقيقه ماعندي رابط موقع معين ممكن يفيدك ، لكن فيه كتاب متقدم اسمه :

Classic Shell Scripting

والكاتب اسمه : Arnold Robbins من اصدارات oreilly .

الكتاب ضخم ( 600 وشوي صفحة تقريبا ) وبالانجليزي ، شفته في يد مديري في العمل واعجبني وقريت فيه شوي . بس عيبه التعقيد ، بيرل ابروش اكثر منه باش ابروش ، ويستخدم تول من برا الباش كثير ... يعني بلهجتنا ، يلوح من بعيد :)

اذا حبيت تسال عن شيء معين ، او موضوع معين ، لايردك الا الكيبورد .. اكتبه هنا في الموضوع هذا او اذا شفت انه طويل ارسل لي في ابعاد اسم الموضوع الي تبي نكتب عنه ، وراح اكتب عنه هنا بالتفصيل ونسولف فيه على راحتنا جميع .

لك التحية وانا سعيد بتواصلك ،


The golden city :

الغالي ، عاد شف انا في العربي في لغة الكمبيوتر من جنبها لاني مادرسته بالعربي ولاتعلمته بالعربي :) بس الي اعرفه مضبوط انها تسمى Statement بالانجليزي عاد وش الترجمة بالعربي الحرفية ؟ بيان .. وبيان مالها تفسير .. فاسهل كلمة عبارة من بيان ومن دالة . دالة لا اعتقد لان الدالة Function or method ( فنكشن في الباش وفي البي اتش ابي وفي ال C ) ومثود ( في الجافا ، والبايثون ) ومعناتها كود صغير يقوم بتنفيذ عملية معينه . اما عبارة فاعتقد من وجهة نظري انها افضل ترجمة لكلمة Statement .. وفي كل الاحوال انا غير مهتم بمعرفة المعنى بكثر اهتمامي لمعرفة طريقة العمل .

لكم التحية ،
علي حمد ،

حــاتم بن هاشم
07-10-2007, 11:23 PM
الله يعطيكم العافية

JeddaHost
08-10-2007, 07:09 AM
JeddaHost :

هلا والله عبدالرحمن ( مانيب واهم صح :) ) ، كيف حالك ؟ عسى امورك تمام ؟

حقيقه ماعندي رابط موقع معين ممكن يفيدك ، لكن فيه كتاب متقدم اسمه :

Classic Shell Scripting

والكاتب اسمه : Arnold Robbins من اصدارات oreilly .

الكتاب ضخم ( 600 وشوي صفحة تقريبا ) وبالانجليزي ، شفته في يد مديري في العمل واعجبني وقريت فيه شوي . بس عيبه التعقيد ، بيرل ابروش اكثر منه باش ابروش ، ويستخدم تول من برا الباش كثير ... يعني بلهجتنا ، يلوح من بعيد :)

اذا حبيت تسال عن شيء معين ، او موضوع معين ، لايردك الا الكيبورد .. اكتبه هنا في الموضوع هذا او اذا شفت انه طويل ارسل لي في ابعاد اسم الموضوع الي تبي نكتب عنه ، وراح اكتب عنه هنا بالتفصيل ونسولف فيه على راحتنا جميع .

لك التحية وانا سعيد بتواصلك ،


عبدالمحسن :)

يعطيك العافية
شفت الكتاب على Google شكله ممتاز بإذن الله اقرئه واذا في شي مافهمته حأرجعلك :p

f33f33
23-10-2007, 10:33 PM
السلام عليكم ورحمة الله وبركاته
تسلم اخوي علي حمد على هالموضوع البسيط في شكله والكبير جدددددددددددددددددددا في مضمونه
والله انك تستاهل (((((((((((( الله يعطيك العافية)))))))))))))))))))))))
ويجزاك الخير

UEFA
26-10-2007, 04:08 PM
يعطيك ألف عافية..

طيوف هوست
06-11-2007, 09:06 AM
جزاك الله خير

مشكور اخوي وماقصرت

wsws17
20-11-2007, 05:05 PM
مشكوووور اخوي

Nitta
27-01-2008, 12:29 AM
شكرا على الموضوع :)

حلم بكرة
14-02-2008, 01:33 AM
شكرا ليك على الدرس الرائع دة

3arabfuture.com
15-08-2008, 12:52 PM
مشكور على الافادة

computer angel
26-09-2008, 10:15 AM
برافو والله جميل جدا

computer angel
26-09-2008, 10:16 AM
الله الله عليك تسلم ايديك

فيصل فارس
22-12-2008, 12:12 AM
تسلم على الإفادة

معلومات هوست
01-12-2009, 02:35 AM
متميز بجد شرح كامل والحمدللة
شكراً لك اخي الكريم اوللة يوفقك

J4n4.com
01-12-2009, 02:54 AM
متميز جدا بشرحك الوافى تقبل مروري

kkk1
28-02-2010, 12:02 AM
مشكورررر اخوي

كارم ابراهيم
14-11-2011, 04:50 AM
تذكرت الموضوع وصاحبه قلنا نلقي التحية ونذكر الناس بأهمية الموضوع لمديري السرفرات

الله يعطيك العافية يا أحلي صديق ومدير سرفرات عملت معه

hebaSunsoft
15-11-2011, 11:55 AM
جميل جداااااااا
ألف شكر لحضرتك