Category Archives: دروس C# – C Sharp

>الدرس الخامس عشر : بعض المميزات لل 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 وفي الدرس التالي سنوضح إن شاء الله كيفية التعامل وإنتاج الأرقام العشوائية .

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

أضف تعليق

Filed under دروس C# - C Sharp

>الدرس الثالث عشر : 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 لهذا البرنامج .


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

أضف تعليق

Filed under دروس C# - C Sharp

>الدرس الرابع عشر : بعض المميزات لل 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 :

أضف تعليق

Filed under دروس C# - C Sharp

>الدرس الثاني عشر : عبارة 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 . وسيكون الناتج كما يلي :


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

أضف تعليق

Filed under دروس C# - C Sharp

>الدرس الحادي عشر : تركيبة 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 : تحميل
 

أضف تعليق

Filed under دروس C# - C Sharp

>الدرس التاسع : تركيبة 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: تحميل

 

أضف تعليق

Filed under دروس C# - C Sharp

>الدرس العاشر : الشكل الثالث 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


 

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

أضف تعليق

Filed under دروس C# - C Sharp

>الدرس الثامن : تركيبة 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 .
 

أضف تعليق

Filed under دروس C# - C Sharp

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

>

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

في هذا الدرس سنوضح العمليات الحسابية المستخدمة في لغة #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


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

أضف تعليق

Filed under دروس C# - C Sharp

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

>

الدرس السابع : عمليات اتخاذ القرار وتطبيق عليها
سنقوم في هذا الدرس إن شاء الله بشرح ما يلي :
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

أضف تعليق

Filed under دروس C# - C Sharp