بانر

اشتباكات بين جماهير المصرى وجماهير الاهلى واصابه 10 اشخاص

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

وقد تمت السيطرة علي الموقف ونقل المصابين عبر 10 سيارات اسعاف الي مستشفي بورسعيد العام لتلقي العلاج .

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

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

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

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

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

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

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

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

صور حفل زفاف الامير وليام وكيت ميدلتون

صور الامير وليام وكيت ميدلتون 
اثناء حفل الزفاف 












إقرأ المزيد

حفل زفاف الامير وليام وكيت ميدلتون

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

صور الاحتفال بحفل زفاف 
الامير وليام وكيت ميدلتون
















إقرأ المزيد

توقف صادرات الغاز المصري إلي الأردن وإسرائيل وسوريا


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

النيابة تعيد مرتضى منصور للسجن على ذمة قضية "موقعة الجمل"

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

دروس تعليم لغة السى بلس بلس C++

الدرس الخامس لتعليم لغة السى بلس بلس c++

الدرس الخامس لتعليم لغة السى بلس بلس c++
سندرس طريقة جديدة من طرق حفظ البيانات , وهذه الطريقة والحق يقال من الطرق المهمة للغاية , وهذا قول ناتج عن خبرة شخصية وتجربة عملية في لغات البرمجة  .

الدرس وباختصار يتعلق بالمصفوفات , وطرق التعامل معها , والفائدة المرجوة منها في المستقبل .

وسنقوم بطرح فكرة مبسطة عن مصفوفة البعد الواحد , ومصفوفة البعدين , حيث أن هذان النوعان هما من أكثر الأنواع شيوعاً واستعمالاً .

مصفوفة البعد الواحد :

الشكل العام للمصفوفة :
كود:
int array_name[index];
[c]Or[/c]
كود:
type array_name[index];
لا يخفى عليكم أعزائي أنني قد قمت بوضع شكلان عامان للمصفوفة , أحدهما بالصورة التقليدية كما تعودنا في الصورة الأولى , وذلك بتعريف المصفوفة كعنصر صحيح , أو حقيقي , , حيث أن array_name هوا عبارة عن اسم المصفوفة , ونستطيع ترميزه بأي رمز مثل ( x,y,z,xyz,array1 ) , ثم كلمة index , وهيا عناصر المصفوفة .

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

والآن وكما تعودنا نقوم بوضع مثال يوضح فائدة المصفوفة , وطريقة تعامل معالج لغة الـ C مع المصفوفة .

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

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

والآن , طريقة البرنامج كما يلي :

[l]The Program :[/l]
كود:
#include <stdio.h>
#include <conio.h>

void main()
{
 clrscr();
 int x[10],i,sum=0;
 for (i=0;i<10;i++)
 {
  printf("\n Enter X[%d] = ",i);
  scanf("%d",&x[i]);
  sum+=x[i];
 }
 printf("\n Sum = %d ",sum);
 getch();
}
والآن نشرح البرنامج بالتفصيل :

في أول البرنامج قمنا بتعريف متغيرات , منها [10]x , وهذا يعني أن اسم المصفوفة هوا x , وأن هذه المصفوفة تحوي داخلها عشرة متغيرات , وكل هذه المتغيرات من النوع الصحيح , وذلك لأننا قمنا بتعريف المصفوفة كمتغير صحيح , ثم قمنا بتعريف عداد للمصفوفة Counter , ورمزنا لهذا العداد بالرمز i , ثم قمنا بتعريف المتغير sum , وهوا اختصار لكلمة summation , والتي تعني مجموع , وهوا الذي سنحفظ فيه مجموع عناصر المجموعة .

والآن إلى الخطوة التالية , أرجو الإهتمام والتركيز في هذه الخطوة , حتى نوضع فائدة العداد :

نقوم بوضع المتغير i في جملة for , وذلك لأننا سنعرف i كعداد للمصفوفة , ونقوم بوضع قيمة ابتدائية لـ i وهيا صفر ( 0 ) , لأنه للحصول على 10 عناصر للمصفوفة أو أي عدد في لغة الـ C , تبدأ المصفوفة من المتغير [10]x , وتنتهي عند المتغير [10]x , وعند حسابنا نجدهم 10 عناصر .

والآن نقوم بتحديد الدورة التي سنقوم بها , في أول حالة سيقوم المعالج بوضع قيمة صفر للمتغير i , ثم يقوم بمقارنتها بالعدد 10 , فيجدها أقل منه , لذا يستمر في الدورة أو الحلقة , فيقوم بطباعة جملة
كود:
printf(“\n Enter x[%d] = “,i);
وهذه الجملة هيا مجرد جملة توضيحية للمبرمج , توضح له أنه عليه أن يقوم بإدخال قيمة المتغير المراد تخزينه في الصف [x[%d , حيث أن %d تتغير بتغير i .

ثم يقوم البرنامج باستقبال قيمة المتغير ويضعه في المصفوفة حسب التريب , يستقبله في الخانة [x[i , ونتيجة لذلك فأنه من المستحيل أن يضع قيمتين في نفس الخانة , لأن i تتغير وتزيد بمقدار واحد كل دورة i++ , وهذه فائدة العداد  .
ثم يقوم المعالج بالعملية الحاسبة التالية :
كود:
sum+=x[i];
وهذه العملية هيا نفس العملية :
كود:
sum=sum+x[i];
حيث شرحنا معناها في السابق , ونحيطكم علماً مرة أخرى بأن معناها أن المجموع سيقوم في كل دورة بإضافة قيمة العدد الجديد إلى المجموع , حتى نتحصل على المجموع الكلي .

ويستمر البرنامج بهذه العملية حتى تصل قيمة i للعدد 10 , وفي هذه الحالة يقوم البرنامج بالخروج من الحلقة , ويطبع رسالة النهاية التي توضح قيمة المجموع النهائية على الشاشة .

طبعاً أرجو من الإخوة تجربة البرنامج حتى تتمكنوا من فهمه بطريقة أفضل , فالتجربة خير دليل على صحة البرنامج وأفضل طريقة لفهمه .


المصفوفات ذات البعدين :

الشكل العام :
كود:
int array_name[index1][index2]
نلاحظ زيادة قوسان جديدان , ومعناهما كالتالي :
[l]
array_name = اسم المصفوفة
index1 = عدد الصفوف
index2= عدد الأعمدة
[/l]

لأن المصفوفة الثنائية مكونة من صفوف وأعمدة , وليس صفوف فقط كالأحادية ذات البعد الواحد .

والآن نقوم بكتابة برنامج يقوم بقراءة عدد من القيم وتخزينها في مصفوفة ذات بعدين , ثم يقوم بطباعة هذه القيم على هيئة مصفوفة .

[l]The Program :[/l]
كود:
#include <stdio.h>
#include <conio.h>
#define row 2
#define col 2

void main()
{
 int i,j;
 int x[row][col];
 clrscr();
 for (i=0;i<row;i++)
  for (j=0;j<col;j++)
   {
    printf("\n x[%d][%d] = ",i,j);
    scanf("%d",&x[i][j]);
   }
  printf("\n");
  for (i=0;i<row;i++)
  {
   for (j=0;j<col;j++)
    printf("%d \t ",x[i][j]);
    printf("\n");
  }
  getch();
}
قد يبدو لكم البرنامج معقداً , ولكنه في الحقيقة بسيط وسهل , يحتاج إلى شرح بسيط وبإذن الله ستفهمونه .

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

إقرأ المزيد

الدرس الرابع لتعليم لغة السى بلس بلس c++

الدرس الرابع يتحدث عن بعض الجمل الهامة جداً في لغة الـ C ونستطيع تسميتها بجمل الاختيار والتبديل , وهيا شائعة الاستخدام في الكثير من البرامج , ومتشابهة من حيث الفكرة في كل لغات البرمجة , لما لها من أهمية في هذه اللغات .

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


والآن نقوم بشرح أول جملة .


الشكل العام لهذه الجملة :
كود:

   statement;
next statement;
نشرح الآن الشكل العام :

يتكون الشكل العام لهذه الجملة من الصيغة الرئيسية المتمثلة في if , والذي يعني إذا , وبعد ذلك كلمة نقوم بفتح قوس وإغلاق قوس , ومحتوى القوسين يكون شرط التنفيذ Condition , وهذا الشرط هوا الذي تتوقف عليه تنفيذ الجملة Statement إذا ما كان الشرط صحيح , أو ينتقل إلى الجملة Next statement إذا ما كان الشرط غير صحيح .

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

[l]The Program : [/l]
كود:
#include <stdio.h>
#include <conio.h>
main()
{
int number;
clrscr();
printf(“\n Enter the number : “);
scanf(“%d”,&number);
if ( number > 0 )
 printf(“The %d is positive number “,number);
getch();
return 0;
والآن نقوم بشرح البرنامج :

بعد أن قمنا بتعريف مكتبتين في السطر الأول والثاني نقوم بتعريف المتغير number في السطر الخامس , ثم نقوم بمسح شاشة الإخراج لمسح أي مخرجات قديمة عن طريق clrscr() في السطر السادس , ثم يقوم البرنامج بطبع رسالة معنى مضمونها هوا أدخل الرقم Enter the number , وبعد ذلك يقوم البرنامج باستقبال الرقم من لوحة المفاتيح وتخزينه في ذاكرة البرنامج , وبعد ذلك يقوم البرنامج باختبار هذا الرقم عن طريق جملة if , وذلك كما رأينا في البرنامج بمقارنة هذا الرقم مع الصفر مقارنة منطقية , فإذا كان الرقم أكبر من صفر يقوم البرنامج بطباعة رسالة إخراج معناها أن الرقم موجب , وإذا كان الرقم صفر أو أقل من الصفر يتجاهل طبع هذه الرسالة وينتقل إلى الجملة التالية والتي هيا جملة إيقاف الشاشة حتى ترى النتائج getch() , وبعد ذلك يصل إلى نهاية البرنامج .

[color=red ملاحظة : [/color] أرجو أن تقوموا بإدخال عدد موجب , وعدد سالب , وصفر حتى تتأكدوا بأنفسكم من صحة البرنامج وطريقة عمله , وتستوعبون فكرته .

قد يقوم البرنامج بتنفيذ أكثر من جملة في حالة صحة الشرط , وتتمل هذه العملية بوضع هذه الجمل بين قوسين { , وقوس } , وهوا ما يعرف في لغات البرمجة بالـ Block , أو الحصر .

الشكل العام في هذه الحالة :
كود:

{
 statement 1;
 statement 2;
 :
 :
 statement n;
}
ويمكن رؤية ذلك بعد تعديل البرنامج السابق بعض الشيء :

[l]The Program : [/l]
كود:
#include <stdio.h>
#include <conio.h>
main()
{
int number;
clrscr();
printf(“\n Enter the number : “);
scanf(“%d”,&number);
if ( number > 0 )
{
printf(“The number is bigger than zero ( %d > 0 )”,number);
printf(“The %d is positive number”,number);
}
getch();
return 0;

والآن ننتقل إلى جملة جديدة .



الشكل العام :
كود:

 statement 1;
else
 statement 2;

هذه الجملة لا تختلف كثيرا عن السابقة , لذا لن نكرر ما شرحنا عن الجزء الأول من هذه الجملة عن معنى if .

وسنشرح الجزء المختص بـ else , والذي هوا جديد علينا , ولكنه بسيط .

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

برنامج توضيحي لعمل هذه الجملة :

[l]The Program : [/l]
كود:
#include<stdio.h>
#include<conio.h>
main()
 {
  int n;
  clrscr();
  printf("Enter the number :");
  scanf("%d",&n);
  if ( n>0 )
   printf("The %d is positive number",n);
  else
   printf("The %d is negative number",n);
  getch();
  return 0;
 }

البرنامج السابق يقوم بنفس خطوات البرنامج الأول , ولكن عند وصوله في الجملة الشرطية يقوم بالتأكد من صحة الشرط , فإذا ما كان الشرط صحيح يقوم بطبع الرسالة أن العدد موجب Positive number , وإذا كان الشرط خطأ يتجاهل جملة الطباعة ويوجه إلى كلمة else , ويقوم بتنفيذ جملتها , والتي هيا في هذا البرنامج طباعة رسالة negative number .

3 ) جملة إذا المتداخلة Nested if statement :

الشكل العام :
كود:

{
 statement 1;
 statement 2;
}
else
 if ( condition 2 )
  {
    statement 3;
    statement 4;
   }

كما رأينا من الشكل العام لهذه الجملة أنه لا فرق بينها وبين جملة if – else statement , ولكنها تحتوي على الكثير من الشروط , ونستعمل هذه الجملة في حالة وجود عدد من الشروط التي تحتاج للكثير من جمل if وتكون مرتبطة ببعض .

وكمثال على ذلك نقوم بتنفيذ نفس البرنامج السابق ولكن بإضافة طباعة رسالة تفيد أن العدد يساوي صفر في حالة كون مساوي للصفر .
[l]The Program : [/l]
كود:
#include <stdio.h>
#include <conio.h>
main()
{
int number;
clrscr();
printf(“\n Enter the number : “);
scanf(“%d”,&number);
if ( number > 0 )
 printf(“The %d is positive number “,number);
else
if ( number <0 )
printf("The %d is negative number",n);
else
printf(“The %d is Zero”,n);
getch();
return 0;

وهذا البرنامج لا يختلف في شرحه عن البرامج السابقة إلا في أشياء بسيطة من الناحية الشرطية .

إذ أن البرنامج يقوم بالتحقق واختبار ما إذا كان العدد أكبر من صفر , في حالة صحة هذا الشرط يطبع رسالة تفيد بأن العدد هوا عدد موجب positive number , ويخرج من الجملة الشرطية دون المرور على باقي جمل else , وذلك لكونه صواباً من الأول .

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

أما إذا كانت كل الشروط السابقة خطأ يمر على الشرط الأخير والذي يفيد بأن العد هوا صفر Zero ويقوم بطاعة رسالة تفيد بأن العديد هوا صفر Zero , وذلك لعدم تحقق الشرطين الأولين .

والآن ننتقل إلى جملة التبديل , والتي هيا آخر مواضيعنا لهذا الدرس إن شاء الله .



الشكل العام :
كود:

 {
   case constant 1 : statement  ;
                                break ;
   case constant 2 : statement ;
                                break ;
   default : statement ;
                  break;
 }

تحل هذه الجملة بدل جملة if في الحالات التي تكثر وتتنوع فيها قيم المتغير , قد نقوم بعملية حسابية لمتغير من نوع صحيح , ويكون ناتج هذه العملية هوا قيمة جديدة للمتغير يتوقف عليها عدد من العمليات , لذا بدل استعمال جملة if في كل قيمة للمتغير , نستعمل جملة switch , وتقوم هذه الجملة بتبديل التعبير المعطى expression بالقيمة لهذا التعبير أو هذا المتغير والمتمثلة في الثوابت الجديدة constant , حيث أنه من الممكن أن يكون هنالك أكثر من ثابت , لذا قمنا بترقيمها , وعند تماثل قيمة المتغير مع قيمة الثابت يقوم بتنفيذ الجملة المقابلة لجملة الثابتة , والتي تتوقف عليها طريقة التعامل مع المتغير .
ووظيفة جملة break; هيا تنبيه المعالج إلى انتهاء معالجة هذا الجزء من المتغير , والانتقال إلى باقي البرنامج .

ووظيفة جملة default هيا أنها في حالة عدم تطابق التعبير ( المتغير ) مع أي من الثوابت المعطية في البرنامج constants , يقوم بالدخول على جملة default , ومعالجة المتغير في هذه الجملة .

والآن حتى تضح طريقة عمل هذه الجملة سنعمل على تطبيقها في برنامج يقوم بقراءة متغير x من النوع الصحيح , وإيجاد قيم المعادلات الآتية عندما تكون قيمة x كالتالي :

[l]
x= -6 >>>-------> y = ( x*x ) – x .
x= 1 or 5 >>>-------> y = ( x*10 ) / 2 .
x=2 >>>-------> y = x + x .
x=4 or -4 >>>-------> y = x*x .
x= أي قيمة أخرى غير السابق >>>-------> y = x + 11 .
[/l]

[l]The Program : [/l]
كود:
#include <stdio.h>
#include <conio.h>

void main()
{
 int x,y;
 clrscr();
 printf("\n Enter Value Of X = ");
 scanf("%d",&x);
 switch (x)
 {
  case -6: y=(x*x)-x ;
        printf("X=%d and (x*x)-x=%d",x,y);
        break;
  case 1: case 5:y=(x*10)/2 ;
       printf("X=%d and (X*10)/2=%d",x,y);
       break;
  case 2: y=x+x;
      printf("X=%d and X+X=%d",x,y);
      break;
  case -4:
  case 4: y=x*x;
      printf("X=%d and X*X=%d",x,y);
      break;
  default: y=x+11;
       printf("X=%d and X+11=%d",x,y);
       break;
 }
 getch();
}
شرح البرنامج :

يقوم البرنامج في بادئ الأمر بقراءة قيمة x التي يتم إدخالها من قبل المبرمج , وبعد ذلك يقوم بتخزينها , ثم معالجتها في جملة switch , حيث يقارن قيمة x المدخلة بالقيمة الثابتة , وفي حالة تساوي قيمة x المدخلة مع أحد الثوابت , يقوم بتنفيذ الجملة المقابلة لهذا الثابت , وحساب العملية الحسابية , وطباعة رسالة بناتج هذه العملية .

في حالة عدم تساوي قيمة x مع أي من هذه الثوابت , يقوم بتنفيذ الجملة المقابلة لـ default , وحساب المعادلة الرياضية وطباعة الرسالة المعطاة .

ولكن قد يسألك أحدكم سؤال مهم , وهوا : ماذا يحدث إذا لم نكتب جملة break; في أحد جمل البرنامج ؟

كما سبق وشرحنا جملة break تحدد نهاية جملة case المخصصة لها , وفي حالة عدم كتابتها سيستمر البرنامج في تنفيذ كل الجملة حتى تقابله جملة break أخرى , أو يتفذ كل جمل البرنامج في حالة عدم وجود break نهايئاً . 3 ) جملة إذا المتداخلة Nested if statement . 1 ) جملة إذا if statement : if ( Condition ) if ( condition ) 2 ) جملة if – else statement ( لا تختلف كثيراً عن الجملة السابقة ) : if ( condition 1 ) switch ( expression ) 1 ) جملة إذا if statement . if ( condition ) 4 ) جملة التبديل Switch statement :
2 ) جملة if – else statement ( لا تختلف كثيراً عن الجملة السابقة ) . 4 ) جملة التبديل Switch statement .



نستعرض ثلاث أنواع من جمل التكرار , وهيا كالتالي .

1 ) جملة ( while statement ) .

2 ) جملة ( do … while statement ) .

3 ) جملة ( for statement ) .

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

جملة ( while statement ) :

الشكل العام للجملة :
كود:
while ( condition )
{
 statement 1;
 statement 2;
:
:
statement n;
}
والآن نشرح معنى هذا الكلام :

نلاحظ من بداية الشكل العام أن الجملة تبدأ بتنفيذ التعبير while , والذي يعني : عندما .

وتقول بالتحقق من الشرط Condition , فإذا وجد المعالج أن الشرط صحيح يقوم بتنفيذ باقي الجمل statements , وإذا وجد أن الشرط خطأ لا يقوم بتنفيذ باقي الجمل , ولا يمر على الجمل أصلاً في حالة الشرط الخطأ .

وحتى نعرف كيفية استخدام هذا الشرط وطريقة قيام المعالج بتنفيذه نقوم ببرمجة هذا البرنامج البسيط والذي يقوم بطباعة الأعداد من 1 ..... إلى 10 .

[l]The Program : [/l]
كود:
#include <stdio.h>
#include <conio.h>
void main()
{
clrscr();
int n=1;
while ( n<=10 )
 {
 printf(“n = %d \n “,n);
 ++n;
 }
getch() ;
}
والآن نشرح هذا البرنامج وطريقة قيام معالج اللغة بمعالجته :
يقوم المعالج في بادئ الأمر بتعريف المتغير الصحيح n , ويحجز له مساحة في الذاكرة , ويساوي قيمته بالعدد 1 .

ثم يقوم المعالج بالمرور على الجملة التالية , وهيا جملة while , ويقوم بالتحقق من الشرط , ولكن كيف ؟

يتم ذلك بأن يستعرض قيمة المتغير n , ويتحقق إذا كانت تساوي أو أقل من القيمة المعطاة في الشرط ( 10 ) وعندما يجد أن 1 أقل من عشرة يقوم بتنفيذ جمل الشرط , ويطبع قيمة n على الشاشة , ثم يقوم بتغيير قيمة n في الذاكرة , ويضع بدلها القيمة الجديدة الناتجة من الجملة ++n , والتي تعني زيادة العدد n مقداراً واحداً .

ويكرر البرنامج جملة التكرار while مرة أخرى , ويتحقق من الشرط , ويجد أن العدد 2 أقل من 10 , فيقوم بطباعة القيمة الجديدة لـ n على الشاشة , وزيادة القيمة الأولى عدداً صحيحاً واحداً .

وهكذا حتى يصل للعدد 10 , وهنا سيجد أن العدد n يساوي العدد 10 , ويقوم بطباعته كما سبق وذكرنا , ولكن عندما يزيد العدد n مقداراً واحداً , ستصبح قيمته 11 , وعند مقارنة هذه القيمة بالشرط سيجد أنها أكبر من الشرط ولا تساويه , لذا سيخرج المعالج من جملة التكرار , وسيتجه للجملة التالية لهذه الجملة , والتي هيا جملة getch() , والتي سبق وذكرنا فائدتها , ثم يتوجه إلى نهاية البرنامج .

هذه إخواني الأعزاء , أخواتي العزيزات جملة while باختصار وإيضاح .


2 ) جملة ( do … while statement ) :

الشكل العام :
كود:
do
{
 statement 1;
 statement 2;
 :
 :
 statement n;
} while ( condition ) ;
من المؤكد أنكم قد لاحظتم تشابه هذه الجملة مع جملة while السابقة , وهيا فعلا تتشابه معها تشابهاً جذرياً من حيث الأداء والشرط , ولكن تختلف عنها بعض الشيء , وهذا الاختلاف هوا كالتالي :

قد لا يمر المعالج على جملة while أبداً , وذلك في حالة عدم صحة الشرط من الأول .
بينما يمر المعالج على جملة do … while على الأقل مرة واحدة , حتى إذا كان الشرط غير صحيح .

كما أن جملة do … while تبدأ بتنفيذ جملة واحدة , أو عدة جمل , ويتم التحقق من هذه الجمل عند نهاية هذه الجملة , عن طريق الشرط .

وحتى تتضح الرؤية سنقوم بحل البرنامج السابق هذه المرة بجملة do while , حتى نستوعب الفرق الذي سيتضح في الشرط :

[l]The Program :[/l]
كود:
#include <stdio.h>
#include <conio.h>
void main()
{
clrscr();
int n=1;
do
 {
  printf(“n = %d \n “,n);
  ++n;
 } while ( n <= 10 ) ;
getch() ;
}
شرح البرنامج :

يقوم البرنامج بنفس الخطوات السابقة في البرنامج السابق حتى يصل إلى do , وهنا يقوم مباشرة بتنفيذ الجملة التالية لـ do دون التقيد بالشرط , لأن الشرط موجود في نهاية الجملة , وعند وصوله لنهاية الجملة يقوم بالتحقق من الشرط , فإذا وجد أن الشرط محقق , يكرر الجمل مرة أخرى , وإذا بطل الشرط , يخرج من جملة do … while نهايئاً , ويتجه إلى الجملة التالية .

أرجو أن أكون قد أوضحت الفكرة العامة للجملتين السابقتين , وإذا لم تتضح سأوضحها بإذن الله في أمثلة قادمة إن شاء الله .


3 ) جملة ( for statement ) :

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

الشكل العام :
كود:
for ( expression 1; expression 2; expression 3 )
{
 statement 1;
 statement 2;
 :
 :
 statement n;
 }

والآن نشرح هذه الجملة البسيطة المهمة :

يقوم المعالج عند معالجة جملة for بالتعرف على التعبير الأول expression 1 , ثم يقوم بمقارنته بالشرط في التعبير الثاني expression 2 , ثم يقوم عملية حسابية في التعبير الثالث expression 3 , ونلاحظ أنه يمكن الاستغناء عن التعبير الثالث , وكتابته كجملة ملحقة بجملة for , أي تحت جملة for , وسنشرح هذا في المثال التالي :

نقوم ببرمجة برنامج لطباعة الأعداد من 1 إلى 10 ( نفس البرنامج السابق ) ولكن بجملة for :

[l]The Program :[/l]
كود:
#include <stdio.h>
#include <conio.h>
void main()
{
clrscr();
int n;
for (n=1;n<=10;n++)
 {
  printf(“n = %d \n “,n);
  }
getch() ;
}
والآن نشرح البرنامج السابق :
يقوم هذا البرنامج بنفس وظيفة البرامج السابقة في هذا الدرس , أي طباعة الأعداد من 1 إلى 10 .

ولكن كيف يقوم المعالج بمعالجة جملة for ؟

يقوم المعالج بذلك كالتالي : عندما يصل جملة for , يقوم في بادئ الأمر بالتأكد من expression 1 , والتأكد من وجود تعريف للمتغير ووجود قيمة له , وبعد ذلك يقوم باختباره بالشرط في expression 2 , وإذا ما كان الشرط صحيح ينفذ باقي الجمل , وعند نهاية الحلقة يقوم بتنفيذ expression 3 , ثم يعيد التكرار مرة أخرى .

سؤال هل يمكن تجاهل كتابة قيمة المتغير expression 1 في جملة for ؟

نعم يمكن تجاهل ذلك في البرنامج , ولكن بشرط أن يكون المتغير معرف بقيمة معطاة في أول البرنامج , ونستطيع التأكد من ذلك بتكرار البرنامج السابق ولكن بعد إجراء التعديل السابق .

[l]The Program :[/l]
كود:
#include <stdio.h>
#include <conio.h>
void main()
{
clrscr();
int n=1;
for (;n<=10;n++)
 {
  printf(“n = %d \n “,n);
  }
getch() ;
}
نلاحظ في البرنامج السابق عدم كتابتنا للتعبير expression 1 , والذي كان فيما قبل n=1 , وقد استعضنا عن ذلك بوضع قيمة n في بداية البرنامج عند تعريفها int n=1 , ولكن نلاحظ أننا قد وضعنا الرمز ; الذي يدل على نهاية التعبير expression 1 , حتى وان لم يوجد هذا التعبير .

الدرس الخامس 
إقرأ المزيد

الدرس الثالث لتعليم لغة السى بلس بلس c++

الدرس الثالث لتعليم لغة السى بلس بلس C++

درس اليوم يتحدث عن مؤثرات الزيادة والنقصان , وأولويات تنفيذ هذه المؤثرات , بالإضافة إلى بعض الأمثلة التوضيحية .


مؤثرات الزيادة والنقصان :

هذه المؤثرات هيا من أهم مميزات لغة الـ C , إذ أنها غير موجودة في أي لغة برمجة أخرى وهيا بسيطة الفكرة , سهلة الاستعمال , تحتاج إلى تركيز .

وتعرف بمؤثرات الزيادة والنقصان لأنها تزيد أو تنقص من قيمة المتغير , وهيا إما على صورة :

++ , --

وتكون مصحوبة قبل أو بعد المتغير , وقيمة المتغير تتوقف على مكان هذه المؤشرات ( أي إذا ما كانت قبله أو بعده ) .

مثال توضيحي على استعمال مؤثرات الزيادة والنقصان :

[l]The Program : [/l]
كود:
#include <stdio.h>
#include <conio.h>
main ()
{
 int I,j,k;
clrscr();
i=2; j=2;
k= ++i;
printf(“I = %d \t K = %d \n”,i,k);
k= j++;
printf(“J = %d \t K = %d”,j,k);
getch();
return 0;
}
في المثال السابق قمنا بتعريف ثلاث متغيرات صحيحة وهيا حسب الترتيب i,j,k

ثم ثمنا بتحديد قيمتي كل من i,j=2

وبعد ذلك قمنا بتحديد قيمة k=++i

والآن ندرس طريقة قيام المعالج بهذه العملية :
يقوم المعالج بتخصيص قيمة المتغير i للمتغير k ولكن سيصتدم بمؤثر زيادة للمتغير i لذا سيعمل على زيادة هذه القيمة قبل تخصيصها للمتغير k .

وتتم معالجة القيمة i , بما أنه جاء مسبوقاً بمؤثر زيادة ++ , فهذا يعني زيادة قيمة المتغير بمقدار واحد , ويصبح i=3

وبعد تحديد قيمة المتغير i , يقوم المعالج بتخصيص هذه القيمة للمتغير k , فيصبح قيمة هذا المتغير k=3

وهذه طريقة التعامل مع مؤثر الزيادة , ونفس الشيء بالنسبة لمؤثر النقصان ( غير أن مؤثر النقصان طرح وليس جمع ) .

وبعد ذلك تقوم دالة الطباعة بطباعة النتائج على الشاشة .

والآن ندرس الخطوة الثانية وهيا k=j++

في هذه الحالة , يقوم المعالج بتخصيص قيمة j للمتغير k , وقيمة j=2 , إذاً k=2 أيضاً

ولكن المعالج يصدم بعد ذلك بمؤثر زيادة بعد j , لذا يعمل على زيادة قيمة j بمقدار واحد فتصبح j=3

وعند قيام البرنامج بالتنفيذ والعرض على الشاشة سنتأكد بأنفسنا من النتائج السابقة .
ملاحظة :

الأولوية دائماً لمؤثرات الزيادة والنقصان .


مثال آخر لتوضيح عمل المؤثرات في معادلة رياضية :
كود:
#include <stdio.h>
#include <conio.h>
main ()
{
int s1,s2,a=5,b=3;
clrscr();
s1= a + ++a ;
s2= b + b++ ;
printf(“S1 = %d \t S2 = %d”,S1,S2);
getch();
return 0;
}
في المثال السابق قمنا بتعريف أربع متغيرات , مع تحديد قيمتي متغيرين كما في المثال .

وبعد ذلك قمنا بعملية رياضية لـ S1 , والتي سنشرح معناها الآن :

يقوم المعالج في المثال بقراءة المعادلة , فيجد أمامه مؤثر الزيادة مصحوباً بقيمة a , فيعمل على تغير قيمة a , وزيادتها 1 لتصبح a=6

وبالتالي تصبح المعادلة
[l]S1= 6 + 6 [/l]

بينما في الحالة الثانية نقوم بحساب قيمة S2 :

حيث يقوم المعالج جمع b , مع b , وتخصيص القيمة الجديدة لـ S2 , وبعد ذلك يقوم بحساب قيمة b الجديدة من مؤثر الزيادة , وهيا b = 4 , ولكنها غير مطلوبة في البرنامج .

وبالتالي تصبح المعادلة
[l]S2 = 3 + 3[/l]

وسنجد أن نتائج البرنامج مساوية لكل من القيم السابقة .


بعض المؤثرات الجديدة :
كود:
x+=9;
العملية السابقة مساوية تماماً لعملية :
كود:
x=x+9;
وتعطي نفس النتائج بالضبط , ويمكن تجربة ذلك بنفسك .

وهيا ليست العملية الوحيدة , إذ يوجد بعض العمليات الأخرى مثل :
كود:
x-=10 ;
y*=5 ;
z/=11 ;
x%= 3;
والعمليات السابقة مساوية للعمليات :
كود:
x=x-10 ;
y=y*5 ;
z=z/11 ;
x=x %3;
ولكنها مختصرة , وهذه إحدى مميزات لغة الـ C .

مثال توضيحي على أحد العمليات السابقة :
كود:
#include <stdio.h>
#include <conio.h>
void main ()
{
int a,b;
clrscr();
a= 10 ;
b= 5 ;
a-=b ;
printf(“a = %d “,a);
getch();
}
في المثال السابق قمنا بتعريف متغيرين a,b , ثم بتحديد قيمتين للمتغيريت كما في المثال .

ثم قمنا بعملية رياضية كالتالي :
كود:
a-=b;
وهيا مساوية للمعادلة :
كود:
a=a-b;
وتعطي نفس النتائج دون أي فرق , ويمكنك تجريب المعادلتين والتأكد من نتائجك بنفسك .

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



الدرس الرابع 
من هنا

إقرأ المزيد

الدرس الثانى لتعليم لغة السى بلس بلس C++

الدرس الثانى لتعليم لغة السى بلس بلس C++

اليوم وفي الدرس الثاني نقوم بعرض برنامج جديد لإيضاح ما سبق دراسته في الدرس الأول من دوال ومكتبات .

كما نقوم بدراسة الجمل والتعبيرات التي سنتعامل مع بعضها في البرمجة بلغة الـ C .

أولا برنامج للمراجعة , يقوم هذا البرنامج البسيط بقراءة أربع قيم حقيقية , مع إيجاد متوسطها .

[L]The Program : [/L]
كود:
#include
#include

main()
{
float n1,n2,n3,n4,avg,sum=0;
printf(“ Enter four numbers : “);
scanf(“%f%f%f%f”,&n1, &n2, &n3, &n4) ;
sum=n1+n2+n3+n4 ;
avg=sum/4 ;
printf(\n Sum = %.3f \n Avg = %.2f”,sum,avg);
getch();
return 0;
}
حيث يقوم البرنامج بقراءة أربع قيم حسب الترتيب وهيا n1 , n2 , n3 , n4 , وبعد ذلك يقوم بجمع هذه القيم وتخصيصها للمتغير sum , وبعد ذلك يقوم بايجاد متوسط هذه القيم وتخصيص هذه القيمة للمتغير avg , ثم يقوم بطباعة ناتج البرنامج , وذلك بطباعة قيمتي كل من المجموع والمتوسط .

نلاحظ في البرنامج أننا استعملنا طريقة جديدة في الناتج , وهيا :
كود:

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

ونلاحظ أيضاً وجود الرقم 2. , وله نفس المعنى السابق .

ومن هنا نلاحظ أنه يمكننا التحكم في عدد الأرقام بعد الفاصلة في نتائج الأعداد الحقيقة , وذلك كما في المثال السابق .



الجمل والمؤثرات والتعبيرات في لغة الـ C :

1 ) التعبيرات Expressions :

2.5 >>>===> ثابت >>>===> Constent
X >>>===> متغير >>>===> Variable
x+y >>>===> تعبير حسابي >>>===> Arithmetic Expression
grade>=50 >>>===> تعبير منطقي >>>===> Logical Expression

2 ) الجمل Statements :

جملة التخصيص :
[L]
Variable = Expression ;
[/L]

وستتضح أكثر في الأمثلة التالية .



أ ) المؤثرات الحسابية Arithmetic Operators :

+ جمع
- طرح
* ضرب
/ قسمة
باقي القسمة

ب) المؤثرات العلائقية ( ذات العلاقات ) :

== يساوي
=! لا يساوي
> أقل من
=> أقل من أو يساوي
< أكير من =< أكير من أو يساوي جـ ) المؤثرات المنطقية Logical operators : && and || or ! not [c]***********[/c] عذراً لذكري لما سبق دون إيضاح , ولكن سأعمل على الإيضاح في الأمثلة القادمة إن شاء الله . مثال توضيحي : اكتب برنامج لقراءة أطوال أضلاع مستطيل n,m مع حساب : 1 ) محيط المستطيل V . 2 ) مساحة المستطيل A . [L] The Program : [/L] كود: #include
printf(\n Sum = %.3f \n Avg = %.2f”,sum,avg); 3 ) المؤثرات Operator :
#include


void main()
clrscr();
int n,m,v,a ;
printf(“Enter the value of N = “);
scanf(“%d”,&n);
printf(“Enter the value of M “);
scanf(“%d”,&m);
v=(n*2)+(m*2) ;
a=n*m ;
printf(“V = %d \t A = %d”,v,a) ;
getch() ;
}
يقوم البرنامج السابق بقراءة طولي ضلع المستطيل , وتخصيص القيمتين لكل من المتغيرين n,m .

وبعد ذلك يقوم بعملية حسابية , يحسب فيها محيط المستطيل , ومساحته .

ثم يقوم بطباعة ناتج هذه العملية كما في المثال .

ولكن توجد طريقة أخرى لاختصار البرنامج , دون التأثير في نتائجه , وهيا كالتالي :

[L]
The Program :
[/L]
كود:
#include

#include


void main()
clrscr();
int n,m ;
printf(“Enter the value of N = “);
scanf(“%d”,&n);
printf(“Enter the value of M “);
scanf(“%d”,&m);
printf(“\n V = %d \n A = %d”,n*2+m*n,n*m);
getch() ;
}
وقمنا في المثال السابق بنفس الخطوات السابقة , ولكن باستثناء أننا قد ألغينا العمليات الحسابية لكل من المحيط والمساحة في البرنامج الرئيسي , وقمنا بهذه العمليات في دالة الطباعة printf في نهاية البرنامج , وذلك اختصاراً لطول البرنامج في مثل هذه النوعية من البرامج البسيطة .

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

الدرس الثالث
إقرأ المزيد