مدونة علم البرمجة والحاسوب
من حقك ان تتعلم اكثر

الدرس الخامس عشر : بعض المميزات لل method 2

الدرس الخامس عشر : بعض المميزات لل method 2
وفي هذا الدرس إن شاء الله سنوضح :
1- تعريف المتغير كقيمة(by value) أو كمرجع (by reference) .
2- إمرار المتغير في الmethod كقيمة (pass-by-value) أو كمرجع (pass-by-reference) .

والآن بسم الله نبدأ :

1- تعريف المتغير كقيمة(by value) أو كمرجع (by reference) .
المتغير المعرف كقيمة (by value) يحتوي على بيانات من النوع المعرف به وتملك قيمة واحدة فقط ، مثلا ً :
 
C#
int x = 5 ;

والأنواع التي تعرف بها هذا النوع من المتغيرات هي :
- الأنواع الغير كسرية (صحيحة) : sbyte , byte , char , short , ushort , int , uint , long .
- الأنواع الكسرية : float , double .
- وهناك النوعان : decimal , bool .

أما المتغير المعرف كمرجع (by reference) يحتوي على عنوان الموقع في الذاكرة للمتغير الذي عُـرّف به ، وعادة ً يشير إلى object (سنتوسع به في دروس لاحقة إن شاء الله )

C#
Ref int x ;

لكن ال object بشكل موجز ( لسهولة المقارنة ) :
هو عبارة عن متغير يحتوي على عدد من المتغيرات ، وكل واحدة من هذه المتغيرات تمتلك قيمة .
وأكثر هذه المتغيرات تعرّف بالأنواع التالية : string , object ، إلى أنه يمكن استخدام أي نوع آخر .
ويمكن للمبرمج أيضا ً إنشاء متغير من نوع reference عن طريق بناء ما تسمى class (والتي أيضا ً سنتوسع بها في دروس لاحقة إن شاء الله ) .
والجدول التالي يعرض قائمة من الأنواع المستخدمة في تعريف المتغيرات وقيم كل واحدة وحجمها :



2- إمرار المتغير في الmethod كقيمة (pass-by-value) أو كمرجع (pass-by-reference) .
لإستدعاء المتغير في ال method طريقتين :
1- كقيمة(pass-by-value) :
وفي هذه الحالة يتم أخذ نسخة من قيمة المتغير ، حيث أن التغيرات التي تحدث على هذه القيمة لا تؤثر على قيمة المتغير الأصلية . وهذا يمنع بعض التأثيرات الجانبية التي يمكن أن تؤثر على صحة عمل البرنامج .

2- أو كمرجع (pass-by-reference) .
وفي هذه الحالة أي تأثير على قيمة المتغير داخل ال method تتأثر قيمة المتغيرالأصلية ، وهذا ما يساعد على التقليل من ثقل نسخ البيانات من داخل المتغيرات خاصة إذا كانت من نوع object ، إلا ّ أنه يضعف الأمن على قيمة المتغير الأصلي .

ملاحظة :
هناك كلمة محجوزة وهي out فهي by reference أيضا ً إلا أنه عند تعريف متغير في method المتغير المستــَـلـَـم لا يشترط أن يحمل قيمة ، أي يمكن أن يحمل قيمة إن لم يكن نستطيع أن نضع له قيمة افتراضية داخل ال method ، وسيتضح المعنى أكثر مع البرنامج .

والآن سنقوم بكتابة برنامج لتتوضح لك الصورة .

الهدف الرئيسي في هذا البرنامج ملاحظة أثر ال Square Method أي مربع العدد عند استدعائه by value أو by reference .
والآن :
يحتوي البرنامج على ثلاثة (methods) لحساب مربع عدد صحيح :

الأول :
 

C#
SquareRef(  Ref int  x)

{

       x = x * x ;

}


أي أنه سيتعامل مع القيمة المبعوثة إليه بعنوانها ، فمثلا ً لو بعثنا له 5 فسيقوم يحفظ عنوان القيمة 5 ومن ثم يربع القيمة ويعيدها إلى نفس العنوان . فإذا طبعنا قيمة x سيكون الناتج 25 لأنه قد أخذ مكانه فلو استدعينا ال method مرة أخرى وبعثنا له قيمة x والتي هي 25 فسيكون الناتج 625 .

الثاني :

C#
SquareOut( out int x)

{

     x = 6 ;

     x = x * x ; 

}



وتعمل نفس عمل ال reference إلا أنه إن بعث له قيمة 5 مثلا ً سيحفظ عنوانها ثم يربعها ويعيدها إلى نفس عنوانها 25 . وأما إذا لم يبعث له قيمة فيمكن إعطاؤها قيمة من داخل الmethod ويحفظ عنوانها ويعيدها إليه 36 .

الثالث :

C#
Square( int x) 

{

      x = x * x ;

}




حيث إذا بعثنا له متغير يحمل القيمة 5 = y سيعمل منها نسخة ويربعها ويطبع 25 . لكن لو طبعنا المتغير y نجده مازال 5 .

هكذا نكون قد انتهينا من تعريف المتغير by reference أو by value وفي الدرس التالي سنوضح إن شاء الله كيفية التعامل وإنتاج الأرقام العشوائية .

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

تحميل
Read On

الدرس الرابع عشر : بعض المميزات لل method 1

الدرس الرابع عشر : بعض المميزات لل method 1
في هذا الدرس سنوضح بعض المميزات لل method :
1- ترقية العناصر .
2- مفهوم الnamespace في ال #C .

والآن بسم الله نبدأ :

1- ترقية العناصر .
وهو ان يكون لدينا متغير معرف بنوع معين وتحويله بالإجبار إلى نوع آخر ليستطيع المرور في method معينة . وهناك نوعان من التحويل :

1- التحويل الضمني (implicit conversion) :
ويقوم بتحويل قيمة المتغير من نوع إلى نوع آخر ضمنيا ً ، أي دون كتابة النوع الجديد قبل المتغير المراد تحويله اليه.
مثال : ال method الذي اسمه sqrt() والذي يقوم بإعطاء الجذر التربيعي للرقم ، الموجود في الclass اسمها math (تحدثنا عنها سابقا) ، المتغيرات التي يستقبلها معرفة في الأصل double أي عند كتابة هذا الmethod كتب كالتالي :
 
C#
public  Math( double x)

فإذا بعثنا له رقم 4 مثلا ً والذي هو int :

C#
Console.writeline(Math.sqrt(4));

فسيتحول تلقائيا ً (ضمنيا ً) إلى 4.0 أي من نوع double ويكون الناتج 2 . وذلك لأن int أصغر من double إذا ً فهو يحتويه ، وهنا لا يحدث أي خسارة في المعلومات .

2- التحويل الصريح ( Explicit conversion)
أما إذا اردنا التحويل العكسي فيجب كتابة نوع التحويل :

C#


double y = 4.5 ;

Console.writeline(Math.sqrt ( ( int ) y ) );


ويكون الناتج هنا أيضا ً 2 لأنه تم تحويله إلى int قبل إيجاد الجذر ، ولكن في هذه الحالة يحدث خسارة في المعلومات .
والجدول التالي يوضح حالات التحويل الضمنية :



2- مفهوم الnamespace في ال C# .
C# تحتوي على مجموعة من ال classesمجتمعة داخل ال namespace والكود الرئيسي لهذه ال classes مخزنة بمكتبة مخصصة لل classes بإمتداد .dll وتدعى assemblies أي المرمّـزة .
العبارة using تحدد ال namespace الذي نريد استخدامه في البرنامج . مثلا ً : جميع البرامج عند انشائها يتم استدعاء ال System namespace تلقائيا ً
 

C#
using System ;

لإخبار ال compiler بأننا نريد استخدام ال System namespace ، وعبارة using تسمح لنا باستخدام ال classes الموجودة داخل ال System namespace . فنستدعي ال WriteLine method الموجود في ال Console class والموجود داخل ال System namespace بالطريقة التالية :

C#
Console.WriteLine

بدلا ً من كتابتها :
System.Console.WriteLine
وأي namespace آخر يجب إضافته يدويا ً عن طريق إضافة الملف المرجع له (add reference) كما تعلمنا في الدرس الثالث .

والجدول التالي يوضح مجموعة بسيطة من ال namespaces الشائعة الإستخدام والتي سنستخدمها في البرامج التالية إن شاء الله ، وخاصة في برامج ال windows application :



Read On

الدرس الثالث عشر : Methods

الدرس الثالث عشر : Methods
في الدروس السابقة عند فتح new project كنا نختار Console Application حيث كان ال output يظهر على شاشة Dose .
والآن سننتقل الى بيئة VC# :
1) عند فتح مشروع جديد قم باختيار windows Application بدلاً من Console Application . ثم اكمل الخطوات كما تعلمت واجعل اسمه SquareInt.cs.
2) ستدخل إلى بيئة VC# وهي لا تختلف عن أي بيئة فيجوال :

والآن سنتعرف على ال methods ومن ثم نقوم بكتابة برنامج بسيط على الwendows application .
Methods :

في درس ٍ سابق قلنا أن ّ كل برنامج يجب يحتوي على Class , method , namespace .
الشكل التالي يوضح كيفية عمل ال methods .


حيث ال boss هي method رئيسية تقوم باستدعاء ال methods الفرعية worker1,worker2 ,worker3….. ويمكن لل methods الفرعية استدعاء methods أخرى.
وغلباً ما تكون هذه ال boss method هي ال main method .

* Math Class
وهي Class شائعة الإستخدام تحتوي على methods تستخدم في العمليات الحسابية.
1)الشكل العام لل method .
 

C#


  ClassName.MethodName( argument1, arument2, … )


2)الثوابت
Math.PI = 3.1415926535…
Math.E = 2.7182818285…
3) ال methods شائعة الإستخدام .
 



والان سنبدأ بعمل برنامج :
SquareInt برنامج بسيط ، يحتوي على button و label حيث يعرض مربع الأعداد من 1 - 10 .
1) قم بتنظيم شكل ال form كالتالي :


ثم اجعل اسم ال button : calcolatputton واسم ال label : outputLabel
2) (double click ) على ال button . سيظهر ال code مكتوب مسبقا ً سيتم شرحه في دروس قادمة . لا نقوم بكتابة اي شيئ داخل ال main method فهو فقط للتنفيذ .
 

C#


  static void Main() 

  {

   Application.Run(new Form1());

  }

  int square( int  y)

  { 

   return y * y ;

  }




  private void calcolatputton_Click(object sender, System.EventArgs e)

  {

   outputLabel.Text = "";

   for(int counter =1 ; counter <= 10 ; counter++)

   {

    int result = square(counter);

    outputLabel.Text += "the square of " + counter +

     " is " + result + "\n";

   }

  }

الشكل السابق هو الكود كامل للبرنامج . حيث قمنا أولاً بكتابة ال method لإنتاج مربع الأرقام ثم وداخل ال button قمنا باستدعاء هذا ال method واسندنا اليه قيم counter من 1 - 10 باستخدام جملة for ثم اسندناها الى المتغير result. ثم طباعتها على ال label .
ولتفعيل البرنامج اذهب الى Debug ثم start أو f5 .
والشكل التالي هو ال output لهذا البرنامج .


وها هو البرنامج : تحميل

Read On

الدرس الثاني عشر : عبارة break وعبارة continue

الدرس الثاني عشر : عبارة break وعبارة continue
في الدرس السابق قمنا بشرح تركيبة for وتنفيذ برنامج عليها .

تركيبة foreach عملها مشابه لتركيبة for من حيث التكرار بعدد معين . لكن أهميتها تكمن في المصفوفات وخاصة مصفوفات ثنائية الأبعاد . فبدلاً من وضع for داخل for يمكننا استخدام foreach بجملة واحدة وسنتوسع بها عندما نأخذ المصفوفات بإذن الله .
في هذا الدرس :
سنوضح عبارة break و continue .

والآن نبدأ بعون الله :

1- عبارة break .
وتستخدم بشكل رئيسي للخروج من التراكيب while , for , do/while , switch عند نقطة معينة (شرط معين) . فمثلاً البرنامج التالي ستقوم تركيبة for بطباعة قيمة العداد من 1 إلى 10 إلا إذا تحقق شرط معين وهو أن قيمة العداد = 5 سينفذ break أي سيتوقف :
 
C#


using System;

using System.Windows.Forms;




 class BreakTest

 {

  static void Main(string[] args)

  {

   string output = "";

   int count;




   for( count = 1; count <= 10; count++)

   {

    if(count == 5)

     break;




    output += count + " ";

   }

       output += "\nBroke out of loop at count = " + count;




   MessageBox.Show(output, "Demonstratio;n the break statement" , 

    MessageBoxButtons.OK , MessageBoxIcon.Information );




  }

 }


وسيكون الناتج كما يلي :



لاحظ أن الرقم 5 لم يُطبع وذلك لأن if تختبر قيمة العداد قبل طباعتة وعندما تجد قيمته 5 سينفذ break ويتوقف .

2 - عبارة continue .
وتستخدم في التراكيب while , for , do/while للقفز عن تنفيذ الجملة داخل تركيبة التكرار عند الوصول إلى نقطة معينة . فلو استبدلنا في المثال السابق كلمة continue بدلاً من كلمة break سيكون الناتج كمايلي :
 

C#


for( count = 1; count <= 10; count++)

   {

    if(count == 5)

     continue;




    output += count + " ";

   }

       output += "\nUsed continue to skip printing 5";


وتعني إذا أصبحت قيمة العداد 5 فإنها ستهمل تنفيذ أي جملة تتبعها وسترجع لزيادة العداد 1 . وسيكون الناتج كما يلي :



هكذا نكون تعلمنا هاتين العبارتين فرغم بساطتهما إلا انهم مهمات جداً
Read On

الدرس الحادي عشر : تركيبة For للتكرار

 الدرس الحادي عشر : تركيبة For للتكرار
بسم الله الرحمن الرحيم
في الدرسين السابقين وضحنا تركيبة while للتكرار ووضحنا أشكال استعمالها :
1- استخدام while كعداد
2- عدد while يعتمد على قيمة مدخلة .
3- التراكيب المتداخلة .
ووضحنا تركيبة do/while أيضا ً
وفي هذا الدرس إن شاء الله سنشرح تركيبة جديدة وهي تركيبة for وتركيبة foreach للتكرار:
بسم الله نبدأ :
* تركيبة for للتكرار :
وهي عبارة عن تجميع للجمل المستخدمة في while في جمله واحدة . والشكل التالي يوضح جملة for وأجزاؤها :

سنقوم الآن ببناء برنامج للعد من 1 – 5 لكلى التركيبتين والمقارنة بينهما لتوضيح الفكرة أكثر :
البرنامج على تركيبة while :
 

C#


1 int counter = 1;

2 

3 while ( counter <= 5)

4 {

5 Console.WriteLine( counter );

6 counter++;

7 }


البرنامج على تركيبة for :

C#


1  for (int counter = 1 ; counter <= 5 ; counter++)

2         Console.WriteLine(counter);


من الواضح أن جملة for مختصره لجملة while ، وقبل المقارنة لاحظ الشكل التالي الموضح لأجزاء تركيبة for الرئيسية :

 




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

C#


int counter ;

for( counter = 1 ; counter <= 5 ; counter++)


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

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

C#


counter = counter + 1

counter +=1

++counter

Counter++


والآن لاحظ جملة تعريف المتغير في سطر 1 في برنامج تركيبة while ستجده هو نفسه في الجزء الأول من تركيبة for.
وجملة الشرط في السطر 3 هي نفسها الجزء الثاني من تركيبة for .
وجملة الزيادة في السطر 6 هي نفسها الجزء الثالث من تركيبة for .

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

 



لاحظ أن البداية واحدة وهي القيمة البدائية لمتغير التحكم (Control variable) counter ثم تبدأ الدارة بالعمل ، تختبر القيمة هل هي أقل أو تساوي 5 ، إذا تحقق الشرط (True) يقوم بتنفيذ الجمل التي يحتويها ثم يرجع إلى جملة الشرط ، حيث يختبر قيمة الcounter مره أخرى وهي الآن أصبحت 2 إذا ً يكمل العمل ، حتى تصبح قيمة counter = 6 عندها يفشل الاختبار (False) فيخرج من الدارة .

* برنامج إيجاد المجموع باستخدام تركيبة for .
حيث يقوم بإيجاد مجموع الأعداد الصحيحة الزوجية من 2 إلى 100 ثم يظهر الناتج على MessageBox .
أولا ً : سنقوم باستدعاء المكتبة System.Windows.Forms لاستخدام الClass : MessageBox كما تعلمنا في الدرس الثالث : الوصله .
ثانيا ً : سنعرف متغير من نوع صحيح (integer) كمخزن لناتج الجمع في كل دوره (sum) ونعطيه قيمة بدائية 0 . ومتغير آخر من نوع integer أيضا ً number وهو العداد ويبدأ من 2 .
والآن إذا أردنا تحليل البرنامج باللغة العربية لفهمه سنقول :
كرر من number = 2 بشرط أن قيمة number أقل أو تساوي 100 حيث في كل دوره أضف 2 على الناتج .
عندما يصبح قيمة sum أكبر من 100 أخرج من الدارة واطبع قيمة sum على MessageBox .

والآن سيكون التطبيق سهل جداً ، فلنبدأ بسم الله :
 

C#


using System;

using System.Windows.Forms;




 class Sum

 { 

  static void Main(string[] args)

  {

   int sum = 0;

   for(int number = 2; number <= 100; number +=2)

    sum+=number;




   MessageBox.Show("The sum is " + sum,

             "Sym Even Integers from 2 to100",

    MessageBoxButtons.OK,

    MessageBoxIcon.Information);

  }

 }


وسيكون الناتج كما يلي :
 



برنامج sum : تحميل
 
Read On

الدرس العاشر : الشكل الثالث 3) التراكيب المتداخله وتركيبة do/while

الدرس العاشر : الشكل الثالث 3) التراكيب المتداخله وتركيبة do/while
وفي هذا الدرس سنكمل إن شاء الله الشكل الثالث ، وبعض الإختصارات للعمليات الحسابية :
3- التراكيب المتداخلة :
وهي عبارة عن استخدام تركيبة داخل تركيبة . والمثال التالي يوضح الفكرة .
هو برنامج يحسب عدد الرسوب وعدد النجاح لعشرة طلاب .
دعنا نفهم ال pseudocode التالي ثم نترجمه إلى لغة C# :
 


Initialize passes to zero

Initialize failures to zero 

Initialize student to one




While   student counter is less than or equal to ten

     Input the next exam result




If  the student passed

      Add one to passes

Else 

      Add one to failures




Add one to student counter




Print the number of passes

Print the number of failures




 If more than eight student passed 

     Print “ Raise tuition “

  

أولا سنعرف مجموعة من المتغيرات وإعطاؤها قيم بدائية لأنها كلها عدادات . passes (عدد النجاح ) ، failures (عدد الرسوب ) ، student (عدد الطلاب) .

C#


int passes = 0,

     failures = 0,

     student = 1,

     result;



ملاحظة :
وضعنا القيمة البدائية لل student = 1 لأن شرط ال while سيكون student <= 10 حيث يبدأ من 1 وينتهي عند 10 كما يلي :

C#


while (student <= 10)



//while ستعد حتى 10 وإذا بدأناها من 0 يجب وضع شرط ال student قيمة  

while (student < 10)


من غير = وأيضا ً ستعد حتى 10 لذا لا فرق بينهم .

والآن جملة while كاملة :

C#


while (student <= 10)

      {

            Console.Write("Enter result (1=pass, 2=fail): ");

  result = Int32.Parse(Console.ReadLine());

            if  (result == 1)

  passes = passes + 1;

            else 

                 failures = failures + 1;

            student = student + 1;

       }





طالما العداد student أقل أو يساوي 10 نفذ ما يلي :

     { 

          اطبع الجملة التالية : إذا كان الطالب ناجح أدخل الرقم 1 وإذا كان 

          راسب أدخل الرقم 2

          حوّل القيمة المدخلة إلى عدد صحيح (integer) وخزنها في المتغير result

          قارن : إذا كانت قيمة المدخل = 1 

                      أضف 1 لعداد الناجحين passes + 1

          غير ذلك

                     أضف 1 لعداد الراسبين failures + 1

          قبل الخروج من دارة while أضف 1 لعداد الطلبة student

      }     

 


C#


// لإضافة سطر فارغ 

Console.WriteLine();

// لطباعة عدد الناجحين 

Console.WriteLine("Passed: " + passes);

// لطباعة عدد الراسبين 

Console.WriteLine("Failed: " + failures);

// لطباعة جملة ثناء على مستوى التدريس 

//.إذا كان عدد الناجحين أكثر من 8 

if (passes > 8)

     Console.WriteLine("Raise Tuition\n");


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

* تركيبة do/while
وهي تابعة لتركيبة while ، غير أن هناك اختلاف بسيط وهو أن تركيبة while تختبر الشرط ثم تقوم بالتنفيذ وشكلها كالتالي :


C#
while( condition ) 

{

      statement 

}


فإذا كان الناتج مخالف للشرط أهملت جملة while بالكامل . أم تركيبة do/while فهي أولا ً تقوم بالتنفيذ ثم ترى إذا ما كان الناتج صحيح أم خاطئ وشكلها كما يلي :


C#
do

{

       statement

} while( Condition ) ;


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



والبرنامج التالي يوضح الفكرة أكثر :

 
C#
int  counter = 1; 




do

{

 Console.WriteLine(counter);

 counter++;

}while(counter <= 5); 


ونتائجه كالتالي :


MS-DOS
1

2

3

4

5

Press any key to continue

 
وهذا هو البرنامج : تحميل
Read On

الدرس التاسع : تركيبة while وأشكال استخدامها

الدرس التاسع : تركيبة while وأشكال استخدامها
وفي هذا الدرس إن شاء الله سنشرح تركيبة while للتكرار :
3- تركيبة while التكرارية .
تركيبة التكرار تسمح للمبرمج بتحديد الحدث المطلوب تكراره طالما الشرط متحقق (True).
مثال : لاحظ هذا الجزء من برنامج ، يجد أول قوه للرقم 2 حيث يكون ناتجها أكبر من 1000 .
والآن سنفرض متغير product من نوع integer . ثم نطبق ال pseudocode ( الكود الوهمي ) التالي:

 


While product less than or equal 1000

         product equal 2 multiplied by product

 

كما يلي :

C#
int product = 2;




while ( product <= 1000)

        product = 2 * product;

والشكل التالي يوضح أسلوب عمل while في هذا البرنامج :
 



ستظل هذه ال loop (الدارة) تعمل حتى يفشل الشرط أي إذا أصبحت قيمة ال product أكبر أو تساوي 1000 فعندها يتوقف عن العمل . وهذه هي نتائج البرنامج كاملا ً:
 
MS-DOS


4

8

16

32

64

128

256

512

1024

The first power of 2 which it's product grater than 1000 is 10

Press any key to continue


أي أن أول قوه للرقم 2 ناتجها يعطي قيمة أكبر من 1000 هو 10
ملاحظة :
* يجب الانتباه إلى شرط الجملة الشرطية لأن بعض الأخطاء قد تؤدي إلى infinite loop ( دائرة غير منتهية ) بمعنى تكرار غير منتهى .
* أول حرف من أي كلمة محجوزة يجب أن يكون Lowercase (حرف صغير ) while فإذا حدث خطأ وكتبت Uppercase (حرف كبير ) While يحدث syntax error أي خطأ قواعدي .
( بما أن الكلمة المحجوزة تحولت إلى اللون الأزرق فمعناه أن الكلمة صحيحة ).
وهذا هو البرنامج : نحميل
* أشكال استخدام while التكرارية :
1- استخدام التكرار كعداد
2- عدد التكرار يعتمد على قيمة مدخلة .
3- التراكيب المتداخلة .

1- استخدام التكرار كعداد :
سنقوم الآن بإنشاء Class ونسميه Average1 , وهو برنامج يقوم بجمع درجات الطلاب المدخلة وتقسيمها على عددهم وسيكون هنا عدد الطلاب محدد وهو 10 .
وال pseudocode (الكود الوهمي ) التالي يوضح ال Algorithm (الخوارزمية) التي سنتتبعها أثناء البرمجة :
 


set total to zero

set grade counter to one 




While  grade counter is less than or equal to ten

          Input the next grade 

          Add the grade into the total 

          Add one to the grade  counter 




Set class average to the total divided by ten

Print t he class average

  

والآن سنبدأ بكتابة كود #C :
أولاً سنقوم بتعريف مجموعة من المتغيرات ولنفرض أن الدرجات كلها صحيحة(integer) :

C#
int total = 0 ,         //مجموع الدرجات  

    gradeCounter = 1,//عدد الدرجات المدخلة   

    gradeValue,       //قيمة الدرجة 

    average;        //معدل الدرجات  


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

C#


//loop 10 times      تكرار 10 مرات 

while ( gradeCounter <= 10)

    {

          // للتوضيح للمستخدم ما المطلوب

          Console.Write( " Enter integer grade: ");

          // integer قراءة المدخل وتحويله إلى  

          //gradeValue وخزنة في المتغير 

          gradeValue = Int32.Parse(Console.ReadLine());    

          //total إلى gradeValue إضافة قيمة المتغير  

          total = total + gradeValue;

          //gradeCounter إضافة قيمة 1 للعداد 

          gradeCounter = gradeCounter + 1;

     }

في كل دورة سيتم إضافة القيمة المدخلة إلى total وإضافة 1 للعداد ليحسب عدد مرات الإضافة .
والآن سيتم حساب المعدل ومن ثم طباعته :

C#


//قسمة صحيحة لمجموع القيم

average  =  total / 10 ; 

// طباعة معدل مجموع الدرجات 

Console.WriteLine(" \nClass Average is {0} " , average);


وهذا هو البرنامج : تحميل
 
2- عدد التكرار يعتمد على قيمة مدخلة :
سنقوم بكتابة نفس البرنامج السابق لكن بتطور أكثر قليلا ً . لأن عدد الدرجات المدخلة ستكون غير محدده بل تعتمد على المستخدم حيث يقوم بإدخال الدرجات بالعدد الذي يريد وعند الانتهاء يُدخِل قيمة
تدعى sentinel Value (القيمة الحارس أو قيمة التوقف) وهي قيمة زائفة لا تنتمي إلى مجال القيمة المدخلة . فمثلا ً قيم الدرجات محصورة بين 100 – 0 ، لذا يجب اختيار هذه القيمة خارج هذا المجال وسنفرضها في هذا البرنامج 1- لأنه من غير الممكن أن تكون درجة بالسالب.
والآن سنفهم الpseudocode التالي ثم نترجمه إلى #C code :
 


Initialize total to zero

Initialize counter to zero




Input the first grade (possibly the sentinel)




While  the user has not as yet entered the sentinel 

          Add this grade into the running total 

          Add one to the grade counter 

          Input the next grade (possibly the sentinel )




If  the counter is not equal to zero

        Set the average to the total divided by the counter 

        Print the average

Else  

       Print “No grades were entered “

 

أولا ً سنقوم بتعريف متغيرtotal وإعطاؤه قيمة بدائية 0 ، لأنه عند إدخال قيمة درجة سيجمعها مع الصفر حيث لا يؤثر على هذه القيمة ويتم تخزينها .
وأيضا ً سنعرف متغير counter ونعطيه قيمة بدائية 0 أي أن عدد الدرجات المدخلة تساوي 0 حتى الآن .
والآن قراءة أول قيمة مدخلة ويمكن أن تكون sentinel value (قيمة التوقف) 1- .



تستقبل دارة while  (while loop) القيمة المدخلة إليها وتقوم باختبارها :

         إذا كانت تساوي 1- ستـُهمل جملة while وينتقل التنفيذ إلى جملة if .    

         تختبر قيمة  العداد .

               إذا كان counter != 0 

                      سيحسب المعدل بقسمة ال total على counter وتخزينها

                      بالمتغير Average ثم طباعتها 

               إذا كان counter == 0 

                      هذا يعني أنه لم يتم إدخال أي قيمة فينتقل التنفيذ إلى

                      else ويطبع

                          “No grades were entered “

         إذا كانت لا تساوي 1-  فسينفذ التعاليم التي يحتويها 

                      حيث يقوم بإضافة هذه القيمة إلى total ،

                      ثم إضافة 1  لقيمة counter

                      ثم الاستعداد لقراءة قيمة أخرى .


ملاحظة :
في هذا البرنامج عرفنا المتغير Average من نوع double لأننا سنسند إليه قيمة حقيقية وليس صحيحة أي بكسور. ولكن القيمة الناتجة صحيحة لأن total معرفة int و counter أيضا ً معرفة int لذا عند عمليه القسمة حولنا total إلى double حتى تكون القيمة الناتجة بكسور .

والآن سنقوم بكتابة هذا البرنامج بلغة #C .

C#


int total = 0,    //مجموع الدرجات 

     gradeCounter = 0, // عدد الدرجات المدخلة

     gradeValue;        // قيمة الدرجة  




double average;   // معدل الدرجات  

//integer جملة البداية وجملة التحويل إلى  

Console.Write("Enter Integer Grade, -1 to Quit: ");

gradeValue = Int32.Parse( Console.ReadLine());

// -1 مستمر حتى إدخال رقم loop 

while ( gradeValue != -1)

     {

           //total إضافة القيمة إلى  

           total = total + gradeValue;

           //gradeCounter إضافة 1 للعداد  

            gradeCounter = gradeCounter + 1;

            // جملة التذكير للمستخدم وجملة التحويل 

            Console.Write("Enter Integer Grade, -1 to Quit: ");

            gradeValue = Int32.Parse( Console.ReadLine());

       }    // end while 

if ( gradeCounter != 0)

       {

             // حساب المعدل ثم طباعته  

              average = (double ) total / gradeCounter;

              Console.WriteLine("\nClass average is {0} :", average);

        }

else 

        Console.WriteLine("\nNo grades were entered .");



وهذا هو برنامج Average2: تحميل

 
Read On

الدرس الثامن : تركيبة if وتركيبة if/else

الدرس الثامن : تركيبة if وتركيبة if/else
في الدرس السابق تحدثنا عن عمليات اتخاذ القرار وأنها عادة ً ما تستخدم في تركيبة if أو تركيبة if/esle والتي هي محور حديثنا في هذا الدرس .
تحتوي لغة C# على ثلاث أنواع من تراكيب الاختيار :
if : تقوم باختيار الحدث وتنفيذه إذا كان الشرط صحيح (True) ، وتقفز عنه إذا كان الشرط خاطئ(false) ، وتدعى (single-selection structure) أي تركيبة الاختيار المنفرد .
if/else : تقوم باختيار الحدث وتنفيذه إذا كان الشرط صحيح (True) ، وتنفذ حدث آخر إذا كان الشرط خاطئ(false) ، وتدعى (double-selection structure) أي تركيبة الاختيار الثنائية .
switch : تقوم باختيار حدث وتنفيذه من بين مجموعة من الأحداث ، وتدعى
( multiple-selection structure ) .
وثلاث أنواع من تراكيب التكرار :
While , do/while , for , foreach وسنتعرف عليهم لاحقاً . أما في هذا الدرس فسنتعرف على تركيبة if وتركيبة if/else .

ملاحظة :
if , else , switch , While , do/while , for , foreach كلها كلمات محجوزة keywords
والجدول التالي يذكر قائمة الكلمات المحجوزة في C# :

 


وسنتعلم معظمها إن شاء الله خلال الدروس .
والآن بسم الله نبدأ :

1- تركيبة if للاختيار:
وهي عبارة عن احتمالين إما تنفيذ ما تحتوي في حالة true أو عدم التنفيذ false .
فلنفرض أن درجة للنجاح في امتحان هي 50 (الدرجة من 100) إذا ًَ خوارزمية التعبير أو الكود الوهمي (pseudocode) سيكون كما يلي :
 



 if student’s grade is grater than or equal to 50

Print “Passed”

 

إذا كانت درجة الطالب أكبر أو تساوي 50 سيطبع ناجح ، وإذا كانت درجة الطالب أقل من 50 تهمل جملة if وتنفذ الجملة التالية لها .
والآن سنقوم بترجمة ال pseudocode إلى لغة C# حيث يفهمها ال Compiler :

C#
 if   ( studentGrade >= 50)

        Console.WriteLine( “ Passed “) ;


والشكل التالي يوضح عمل تركيبة if :



2- تركيبة if/else للاختيار :
وهي أيضا ً احتمالين لكن في كلا الحالتين يتم تنفيذ حدث ، وهذا يساعد المبرمج على تحديد حدثين مختلفين بالاعتماد على نتائج الشرط True أم False .
فمثلا ً الكود الوهمي pseudocode التالي :

 



If   student’s grade is greater than or equal to 50

Print “ Passed “

Else 

Print “Failed “

  

سيطبع ناجح (Passed) إذا تحقق الشرط True وهو أن الدرجة أكبر أو يساوي 50 .
وسيطبع راسب (Failed) إذا لم يتحقق الشرط False وهو أن الدرجة أصغر من 50 .
أي أنه لا يهمل جملة if أبدا ً ولا يخرج منها حتى يطبع شيء .
والآن سنترجم هذا ال pseudocode إلى كود C# :

C#
if   (StudentGrade >= 50)

         Console.WriteLine( “ Passed “) ;

else  

         Console.WriteLine( “ Failed “) ;

والشكل التالي يوضع طريقة عمل تركيبة if/else الاختيارية :
 



* وهناك طريقة أخرى لاستخدام تركيبة if/else وهي (? : ) ، وتحتوي على ثلاث جمل تنفيذية :
جملة الشرط ، جملة التنفيذ الأولى في حالة تحقق الشرط True ، جملة التنفيذ الثانية في حالة عدم تحقق الشرط False ، فإذا أعدنا صياغة جملة if السابقة تصبح كالتالي :
 

C#
Console.WriteLine( StudentGrade >=  50  ? “ Passed “   :    “ Failed “); 


* يمكن أيضا ً استخدام تركيبة if/else تركيبة if/else لتنفيذ جملة من عدد من الجمل ، فمثلا ً إذا فهمنا الكود الوهمي pseudocode التالي :




If student’s grade is greater than or equal to 90

     Print “ A “

Else 

      If student’s grade is greater than or equal to 80

           Print “ B “  

     Else 

           If student’s grade is greater than or equal to 70

               Print “ C “

           Else

               If student’s grade is greater than or equal to 60

                     Print “ D “

               Else

                      If student’s grade is greater than or equal to 50

                             Print “ E “

                      Else

                             Print “ F “

  

وحولناه إلى كود C# :

C#


if (studentGrade >= 90) 

      Console.WriteLine(" A "); 

else  

      if (studentGrade >= 80) 

            Console.WriteLine(" B "); 

      else  

            if (studentGrade >= 70) 

                  Console.WriteLine(" C "); 

            else  

                  if (studentGrade >= 60) 

                         Console.WriteLine(" D "); 

                  else  

                         if (studentGrade >= 50) 

                                 Console.WriteLine(" E "); 

                         else  

                                 Console.WriteLine(" F ");

سيقوم بتنفيذ جملة واحدة فقط لا محالة .
ويمكن كتابة الكود بشكل أبسط :

C#


if (studentGrade >= 90) 

      Console.WriteLine(" A "); 

else  if (studentGrade >= 80) 

Console.WriteLine(" B "); 

else  if (studentGrade >= 70) 

Console.WriteLine(" C "); 

else  if (studentGrade >= 60) 

Console.WriteLine(" D "); 

else  if (studentGrade >= 50) 

Console.WriteLine(" E "); 

else  

Console.WriteLine(" F ");

وكلاهما يعطي نفس النتائج .
ملاحظة :
* كل جملة else مرتبطة بجملة if سابقة لها .
* إذا احتوت أي تركيبة على أكثر من جملة بداخلها يجب استخدام أقواس المجموعة ( { } ) ، أما إذا احتوت على تركيبة أخرى فقط فليس من الضروري استخدام أقواس المجموعة .

C#


if  ( x > 5 )

      if  ( y > 5 )

              Console.WriteLine( “ x and y are > 5 “ ) ; 

      else  

              Console.WriteLine( “ x is <= 5 “ ) ;


في هذه الحالة else تعتبر تابعة لل if الثانية أي سيتم تنفيذ الجملة الثانية x is <= 5 في حال y <= 5 وقيمة x > 5 ، أم إذا كانت x <= 5 فستهمل هذه الجملة كلها .
إذا أردنا جعل else تابعة لل if الأولى يجب وضع ما داخل ال if في أقواس كما يلي :

C#


if  ( x > 5 )

   {

      if  ( y > 5 )

              Console.WriteLine( “ x and y are > 5 “ ) ; 

    }

else  

      Console.WriteLine( “ x is <= 5 “ ) ;


والآن تنفذ مجموع الجمل الأولى في حال x > 5 وجملة else في حال x <= 5 .
 
Read On

الدرس السابع : عمليات اتخاذ القرار وتطبيق عليها

الدرس السابع : عمليات اتخاذ القرار وتطبيق عليها
سنقوم في هذا الدرس إن شاء الله بشرح ما يلي :
1- عمليات اتخاذ القرار .
- عمليات المساواة .
- العمليات النسبية .
2- برنامج مقارنة بين رقمين صحيحين .

بسم الله نبدأ :

1) عمليات اتخاذ القرار :
عادة ً تستخدم هذه العمليات في تركيبة if ، حيث تسمح للبرنامج أن يقرر هل ناتج الشرط True أم False .
إذا كان ناتج الشرط True فإن الجمل في جسم تركيبة if سوف ينفذ ، وإذا كان ناتج الشرط false فلن ينفذ شيء .
 
C#


If ( x > 1)

{

       Console.Write( x );

}


أي إذا كانت قيمة المتغير x أكبر من 1 (True) قم بطباعته وإلا فلا تطبع شيء ، والجدول التالي يوضح عمليات المساواة والعمليات النسبية .

 



العمليات النسبية لها نفس مستوى الأولوية في التنفيذ لذا فعند تعددها يتم التنفيذ من اليسار إلى اليمين ، وعمليات المساواة أيضا ً لها نفس مستوى الأولوية إلا ً أنها أقل من العمليات النسبية كما هو موضح في الشكل التالي :

ملاحظة :
1- العمليات == ، != ، <= ، >= يجب ألا ّ يكون بين الإشارتين فراغ (= =) ، وإشارة = يجب أن تكون على يمين الإشارة الأخرى ( <=) .
2- يجب ألا ّ تخلط بين مساواة المقارنة (==) ومساواة الإسناد (=) .
مساواة المقارنة (==) تعني قارن بين القيمتين على طرفا المساواة هل هما نفس القيمة أم لا .
ومساواة الإسناد (=) تعني أعطي القيمة في الطرف الأيمن للمساواة للمتغير في الطرف الأيسر .

2) برنامج مقارنة بين رقمين صحيحين .
وظيفة هذا البرنامج المقارنة بين قيمتين تم إدخالهم من قبل المستخدم وإعطاء نتائج المقارنة .
والآن نبدأ :
بم أنه مقارنة بين رقمين صحيحين إذا ً سنعرف متغيرين من نوع integer .
ولن نحتاج لمتغيرين من نوع string لأننا سنضع جملة القراءة داخل method التحويل مباشرة .
 
C#


int number1 , number2 ;




Console.Write(" Pleas Enter First number ");

number1 = Int32.Parse( Console.ReadLine( ));




Console.Write(" Pleas Enter Second number ");

number2 = Int32.Parse( Console.ReadLine( ));


والآن أصبحت المتغيرات number1 , number2 تحتوي على قيمة ، سنقوم بمقارنتها . يوجد ستة من حالات المقارنة وهي :
1- number1 يساوي number2 .
2- number1 لا يساوي number2 .
3- number1 أكبر من number2 .
4- number1 أصغر من number2 .
5- number1 أكبر أو يساوي number2 .
6- number1 أصغر أو يساوي number2 .
سنقوم بترجمتها وسنحتاج إلى تركيبة if لتقوم بالمقارنة .
وهذا هو الكود كامل :

C#


using System;




 class Comparison

 {

  

  static void Main(string[] args)

  {

   int number1 , number2;




   Console.Write(" /n Pleas Enter First number ");

      number1 = Int32.Parse( Console.ReadLine( ));

   

   Console.Write("/n Pleas Enter Second number ");

   number2 = Int32.Parse( Console.ReadLine( ));




   if(number1 == number2)

    Console.WriteLine(number1 + " == " + number2);

   

   if(number1 != number2)

    Console.WriteLine(number1 + " != " + number2);




   if(number1 > number2)

    Console.WriteLine(number1 + " > " + number2);




   if(number1 < number2)

    Console.WriteLine(number1 + " < " + number2);




   if(number1 >= number2)

    Console.WriteLine(number1 + " >= " + number2);




   if(number1 <= number2)

    Console.WriteLine(number1 + " <= " + number2);

  }

 }


وبعد أن أصبح البرنامج كاملا ً هذه نتيجة حالة واحدة فقط حيث number1 أكبر من number2 :
Number1 = 200 ، number2 = 100 .

MS-DOS


Pleas Enter First number 200




 Pleas Enter Second number 100

200 != 100

200 > 100

200 >= 100

Press any key to continue


Read On

الدرس السادس: العمليات الحسابية ومختصراتها

الدرس السادس: العمليات الحسابية ومختصراتها
في هذا الدرس سنوضح العمليات الحسابية المستخدمة في لغة #C ومقارنتها بالجبر ، وبعض المختصرات لهذه العمليات :
والآن بسم الله نبدأ :

* العمليات الحسابية :
بعض العمليات الحسابية في البرمجة تختلف برمزها عن الجبر وهذا الجدول يوضح الفرق بين الرموز :

التعابير الحسابية يجب أن تكتب بخط مستقيم أي على نفس الخط . وهي أيضا ً لا تحتوي على أسس.
مثلا ً العبارة التالية :
في الجبر تكتب هكذا : 5 ÷ (m = (a+b+c+d+e

في C# تكتب هكذا : m = (a+b+c+d+e) / 5

في عملية القسمة يعتمد الناتج على نوع القيمة المدخلة فإذا كانت من نوع integer فإن النتيجة ستتحول تلقائيا ً إلى أقرب عدد صحيح . مثلا ً :
إذا أدخلنا قيمة صحيحة 9 وقسمناها على قيمة صحيحة أخرى 2 في الأصل الناتج يكون 4.5 لكن النتيجة ستكون 4 فقط .

* ترتيب العمليات ( الأسبقية ) :
أثناء التنفيذ لجملة معينة تعددت فيها العمليات الحسابية يجب أن يعرف الCompiler بأيها يبدأ وقد تم ترتيب هذه العمليات حسب الأولوية في الجدول التالي :


مثلا ً لو طلبنا من الحاسوب أن ينفذ الجملة الحسابية التالية :
Z = pr % q + (w– y) ÷ x
حتى يستطيع فهمها يجب أن ندخلها بالشكل التالي :
Z = p * r % q + (w – y) / x
والآن سنتخيل ما سيقوم به المترجم(Compiler) وقد تم تنفيذ البرنامج وقام المستخدم بإعطاء القيم التالية :
P = 5 , r = 6 , q = 3 , w = 7, y = 3 , x = 2
أولا ً سيرتب القيم في الجملة الحسابية كالتالي :
Z = 5 * 6 % 3 + ( 7 – 3) / 2
وهذه الخطة التي سيتبعها في عملية الحساب :


وهذه الخطوات التي يقوم بها تفصيليا ً أثناء عملية الحساب :

* بعض المختصرات للعمليات الحسابية :
بعض التعابير للعمليات الحسابية يمكن اختصارها للسهولة وعادة ً تستخدم للعدادات فمثلا ً :
c = c + 3 ;
وتعني إضافة قيمة 3 لنفس قيمة المتغير c . ويمكن كتابتها بطريقة أخرى :
c += 3 ;
والجدول التالي يبين اختصارات العمليات الحسابية :
 


* عمليات التزايد والتناقص المختصرة :
وتستخدم للعدادات المتزايدة بمقدار1 أو المتناقصة بمقدار واحد فقط . فبدلاً من استخدام التعبير c = c + 1 ، أو c += 1 . استخدام التعبير c++ ، والجدول التالي يوضح هذه العمليات :
 


فلو تتبعنا البرنامج التالي :
 

C#


c = 5;

Console.WriteLine(c);       // يطبع 5

Console.WriteLine(c++);   // يطبع 5 ثم يزيد 1 

Console.WriteLine(c);       // يطبع 6 




c = 5;

Console.WriteLine(c);       // يطبع 5 

Console.WriteLine(++c);  // يزيد 1 ثم يطبع 6 

Console.WriteLine(c);      // يطبع 6 


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

MS-DOS


5

5

6




5

6

6

Press any key to continue


وهذا هو البرنامج : تحميل
 
Read On

الدرس الخامس : مفهوم الذاكرة

الدرس الخامس : مفهوم الذاكرة

في الدرس السابق قمنا بشرح برنامج يجمع بين رقمين صحيحين
ولكن كيف ستتم هذه العمليه في الذاكرة ؟ هذا ما سيكون موضوعنا في هذا الدرس :
بسم الله نبدأ :

* مفهوم الذاكرة :
كل متغير مثل number1,number2,sum هو عبارة عن موقع في الذاكرة ، وكل متغير يملك اسم ونوع وحجم وقيمة . فمثلاً الجملة التالية في برنامج (جمع رقمين صحيحين) الجملة:
 

C#
number1 = Int32.parse(FirstNumber);

عندما عرفنا المتغير number1 تم تحديده بواسطة المترجم(compiler) كموقع في الذاكرة . فلنفرض أن المستخدم قام بإدخال قيمة 45 كحرف string للمتغير FirstNumber سيقوم البرنامج بتحويله الى integer ثم يضعه في الموقع number1 كما يلي :
 



ونفس الشيء يحدث عند ادخال الرقم الثاني :
 

C#


number2 = Int32.parse(SecondNumber);


 



ملاحظة :

إذا كان يوجد قيمة في الموقع وتم إضافة قيمة أخرى فإن القيمة القديمة سوف تلغى ويصبح قيمة الموقع الرقم الجديد .
فمثلاً لو وضعنا أمر في البرنامج بإدخال القيمتين number1 = 45,
number2 = 72 واصبحت تمتلك مواقعهم قيم ووضعنا بعدها أمر آخر لإعادة ادخال القيمتين مره أخرى number1= 7,number2 = 5 فلو قمنا بعملية الجمع الآن فإن الناتج سيكون 12 أي أن قيمها الحالية 7و5 وليس القيم السابقة .

والآن ستتم عملية الجمع ويوضع الناتج في الموقع sum :
 


ان شاء الله تكون قد تم فهم فكرة الذاكرة في عملية الجمع .
 

Read On

الدرس الرابع : برنامج يقوم بجمع رقمين صحيحين

الدرس الرابع : برنامج يقوم بجمع رقمين صحيحين

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

قم بإنشاء مشروع جديد من نوع Console Application وسمهAddition وسمي الClass أيضا ً Addition .والآن يجب أن يكون شكل الكود الحالي كالتالي :
C#


using System;




class Addition

{

 static void Main(string[] args)

 {

  

 }

}


أولا ً بما أن البرنامج سيقوم بجمع رقمين صحيحين وناتج الجمع أيضا ً رقم صحيح ، إذاً عليناأن نعرّف ثلاث متغيرات من نوع صحيح(integer) . (رقم صحيح : أي من غير كسور عشريه 3 ، 8 ، 43 ).
C#


  int numbr1 , number2 , Sum;


والآن ما معنى الجملة السابقة :
int : هي كلمة محجوزة وتستخدم لتعريف متغير حيث يستقبل ويحفظ قيم من نوع integer وتكتب قبل المتغير المطلوب تعريفه .
number1,number2,sum : وهم أسماء لمتغيرات لا تستقبل إلاّ أرقام من نوع integer وتفصل بينهمفاصلة عادية أي كل اسم تابع للتعريف.
; : وهي ضرورية في نهاية أي جملة برمجية .
ويمكن تعريف المتغيرات السابقة كالتالي :

C#


int number1;

int number2;

int sum;


لكن الطريقة الأولى أسهل حيث نعرفهم كلهم بكلمة واحدة وسطر واحد يفصل بينهم فاصلة (,) .والآن ستواجهنا مشكلة لأن جملة القراءة لا تسند إلا قيم من نوع حرف . فكيف سنحل هذه المشكلة . ستفكر وتقول : تعرف متغيرات من نوع أحرف(string) ونسند إليها القيم المدخلةعلى أنها أحرف ثم نحولها إلى أرقام صحيحة ونعطيها للمتغيرات التي عرفناها من نوع (integer) ، وهذا بالظبط ما سنفعله ، إذا الآن سنعرف متغيرين من نوع string
وليس ثلاث لأن المجموع لا يحتاج إلى تحويل لأنه ببساطة غير مدخل بل هو نتيجة .
C#


String FirstNumber , SecondNumber;


string : كلمة محجوزة تستخدم لتعريف متغير حيث يستقبل ويخزن حرف أو مجموعة من الأحرف .
FirstNumber : اسم متغير لا يستقبل إلا حرف وهو الذي سيأخذ قيمة المتغير number1 قبل تحويله إلى integer .
SecondNumber : اسم متغير لا يستقبل إلا حرف وهو الذي سيأخذ قيمة المتغيرnumber2 قبل تحويله إلى integer .

والآن أصبح شكل الكود كما يلي :
C#


using System;




class Addition

{

 static void Main(string[] args)

 {

  //string تعريف متغيرين من نوع

  string FirstNumber , SecondNumber;

  //integer تعريف ثلاث متغيرات من نوع

  int number1 , number2 , sum ;

 }

}


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

C#


Console.Write("Enter First Number :");


وهي جملة طباعة عادية كما تعلمناها لكن بعد الطباعة لا تنتقل إلى سطر جديد . والآن جملة القراءة :

C#
   

FirstNumber = Console.ReadLine();


قمنا باستدعاء        ال ReadLine()       method

                      من ال    Console       Class    

الموجود في المكتبة using       namespace

ووظيفته قراءة ما يدخله المستخدم وإسنادها للمتغير FirstNumber ثم الانتقال إلى سطر جديد .

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

C#


Console.Write("\nEnter Second Number :");


جملة القراءة ثانيا ً :

C#


SecondNumber = Console.ReadLine();

والآن بعد أن حصلنا على القيمتين سنقوم بتحويلهما إلى integer .

C#


number1 = Int32.Parse(FirstNumber);



هنا قمنا باستدعاء   ال parse       method

                        من  ال       Int32       Class     

           الموجود في ال System       namespace     

حيث يقوم الmethod بتحويل القيمة الموجودة في المتغير FirstNumber إلى قيمة من نوع integer

 وإعطاؤها للمتغير number1 . 

والآن تحويل المتغير الثاني وإسناده إلى المتغير number2 بنفس الطريقة :



C#


number2 = Int32.Parse(SecondNumber);


أصبح لدينا الآن قيمتين من نوع integer ما علينا سوى جمعهما وطريقة الجمع سهلة جدا ً .
في الحساب العادي عندما نريد أن نجمع الرقمين 5 و 7 نقول : 7 + 5 = 12 بمعنى قم بجمع الرقمين 7 و 5 وضع الناتج في الطرف الثاني والذي هو 12 وهذا الأسلوب نفسه الذي نستخدمه في الجمع في البرمجة حيث :

C#


sum = number1 + number2 ;

بمعنى اجمع قيمة المتغير number1 مع قيمة المتغير number2 وضع الناتج في المتغير sum.
إذ "=" معناها اسند ناتج الطرف الأيمن للمتغير في الطرف الأيسر .
والآن انتهت عملية الجمع بقي علينا فقط إظهار الناتج :

C#


Console.WriteLine("\nThe Sum is :{0}",sum);


بمعنى أنه سيطبع أولا ً الجملة The sum is ثم في المكان {0}سيطبع قيمة sum وهذه طريقة حتى تطبع أي قيمة خلال النص ورقم 0 يعني أنه الرقم الأول الذي سيُطبع .
فمثلا لو أردنا طباعة أكثر من رقم :

C#
Console.WriteLine(“The Numbers are :{0},{1},{2}”,number1 , number2 , number3);


وهكذا ...

   والآن وقد انتهى البرنامج سيكون الcode كاملاً كما يلي :



C#


using System;




class Addition

{

 static void Main(string[] args)

 {

  //string تعريف متغيرين من نوع

  string FirstNumber , SecondNumber;

  //integer تعريف ثلاث متغيرات من نوع

  int number1 , number2 , sum ;

  // إدخال القيمة الآولى

  Console.Write("Enter First Number :");

  FirstNumber = Console.ReadLine();

  // إدخال القيمة الثانية

  Console.Write("\nEnter Second Number :");

  SecondNumber = Console.ReadLine();

  //integer إلى نوع string تحويل القيم من نوع

  number1 = Int32.Parse(FirstNumber);

  number2 = Int32.Parse(SecondNumber);

  //جمع الرقمين

  sum = number1 + number2 ;

  //إظهار النتيجة

  Console.WriteLine("\nThe Sum is :{0}",sum);




 }

}





ملاحظة:
* لكتابة أي ملاحظة داخل الcode يجب أن تسبقها بـ // .
قم بتنفيذ البرنامج :
ولنفرض ادخل الرقم الأول 45 والرقم الثاني 72 سيصبح الناتج كما يلي :

MS-DOS


Enter First Number :45




Enter Second Number :72




The Sum is :117

Press any key to continue


 
ملاحظة 2:
* إذا حاولت إدخال قيم تحتوي على كسور أو عدم إدخال قيم فسيعطي خطأ لأنه لم يتم معالجتها.

طريقة أخرى :

في جملة الإدخال قمنا بتعريف متغيرين من نوع string ثم أسندنا اليهما القيم المدخلة ثم قمنا بتحويلهما إلى integer .
 

C#


string FirstNumber , SecondNumber;

FirstNumber = Console.ReadLine();

SecondNumber = Console.ReadLine();

number1 = Int32.Parse(FirstNumber);

number2 = Int32.Parse(SecondNumber);


فلماذا لا نضع جملة القراءة داخل أقواس method التحويل حيث يتم إدخال القيمة وتحويله فوراً:

C#


number1 = Int32.Parse(Console.ReadLine());

number2 = Int32.Parse(Console.ReadLine());


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

C#


using System;




class Addition

{

 static void Main(string[] args)

 {

  int number1 , number2 , sum ;




  Console.Write("Enter First Number :");

  number2 = Int32.Parse(Console.ReadLine());




  Console.Write("\nEnter Second Number :");

  number1 = Int32.Parse(Console.ReadLine());




  sum = number1 + number2 ;




  Console.WriteLine("\nThe Sum is :{0}",sum);




 }

}



 
Read On

الدرس الثالث : استخدام ال MessageBox

الدرس الثالث : استخدام ال MessageBox

في الدرس السابق شرحنا برنامج Print Welcome وطبعناه على شاشة DOS وهذه وصلته :
شرح برنامج Print welcome مع بعض المختصرات للطباعة
وفي هذا الدرس سنطبع المخرجت لنفس البرنامج لكن على MessageBox

3)) استخدام ال MessageBox
معظم تطبيقات #C تستخدم نوافذ حوار(dialogs) لإظهار المخرجات (output) ، أو لتذكير المستخدم .
تحتوي بنية المكتبة في #C على Class يدعى MessageBox لإنشاء نافذة حوار . وهذا الClass موجود داخل المكتبة System.Windows.Forms ، ولأن هذا البرنامج Console فلا يتم استدعاء هذه المجموعة عند إنشاء المشروع كما في Windows Application على اعتبار أنها لا تحتاجها لأن مخرجاتها تظهر على شاشة Dose .
لكن سنقوم نحن بإضافتها لاستخدام ما تحتويه . وتكون هذه المكتبة مخزنة بامتداد .dll
والآن :
1) قم بإنشاء مشروع جديد وسمه PrintWelcome2 .
2) والآن اذهب إلى Project ثم Add Reference .
 

3) ستظهر لك نافذة Add Reference قم بإختيار المكتبة System.Windows.forms.dll ثم قم بالكبس عليها مرتين متتاليتين(double Click) ، ستظهر لك في Selected Components قم باختيارها ثم OK .

4) تم إضافة هذه المجموعة إلى محتويات البرنامج وستجدها في ال Solution Explorer .

والآن حتى نستطيع استخدام محتويات هذه المكتبة يجب استدعاؤها كما تم استدعاء المكتبة System لإستخدام
C#
[SIZE=3]Console.WriteLine( );

5) والآن سنقوم باستدعاء method اسمه Show من Class اسمه MessageBox لإظهار المخرجات .
قم بكتابة الجملة التالية داخل ال main method :

C#


MessageBox.Show("Welcome to C# Programming");


سيكون شكل الكود كما يلي :

C#


using System;

using System.Windows.Forms;




 class PrintWelcome2

 {

  static void Main(string[] args)

  {

   MessageBox.Show("Welcome to C# Programming");

  }

 }


6) قم بتنفيذ البرنامج سيظهر لك الناتج كما يلي :



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

C#


MessageBox.Show("Welcome to C# Programming","Welcome Message",

MessageBoxButtons.OK,MessageBoxIcon.Information); 
سيكون الناتج كما يلي :


لل MessageBox عدة أشكال في شكل الأيقونة أو شكل ال Button التي ستظهر ف ال Message منها :
أشكال لشكل الأيقونة :
 

C#


MessageBoxIcon.Exclamation       علامة التعجب    or     

MessageBoxIcon. Information       للمعلومات   or 

MessageBoxIcon.Question         للسؤال     or  

MessageBoxIcon.Error          للخطأ


أشكال ال button في ال messagebox:

C#


MessageBoxButton.OK

MessageBoxButton.OKCancel

MessageBoxButton.YesNo

MessageBoxButton.YesNoCancel

MessageBoxButton.RetryCancel

MessageBoxButton.AbortRetryIgnore 


Read On

أرشيف المدونة الإلكترونية

من انا ؟