ضع اعلانك هنا

ضع اعلانك هنا ضع اعلانك هنا منتديات بوابة الاسلام
التاريخ 2008-8-13 التاريخ 2008-8-15 ضع اعلانك هنا ضع اعلانك هنا
 
 
العودة   عالم المعرفة > قسم تطوير المنتديات والبرمجه > منتدى لغات الحاسب والبرمجة
التسجيل تفعيل العضوية استرجاع كلمة المرور شروط المنتــدى البحث مشاركات اليوم اجعل كافة الأقسام مقروءة
منتدى لغات الحاسب والبرمجة برمجة php , برمجة c++ , البرمجة , لغات برمجة , دروس برمجة
 

دروس في C#.net

منتدى لغات الحاسب والبرمجة


إضافة رد
 
LinkBack أدوات الموضوع
 
قديم 03-15-2008, 02:27 PM   #1 (permalink)
عضو ذهبي
 
الصورة الرمزية JaDe MaRkoL







JaDe MaRkoL غير متصل

JaDe MaRkoL will become famous soon enoughJaDe MaRkoL will become famous soon enough

افتراضي دروس في C#.net

السلام عليكم ورحمة الله وبركاته

كيفكم اخواني انشالله بخير

ھذا الكتاب من موقع كتب الحاسب العربیة


نبدا الدرس الاول


المتغيرات وأنواعھا:

( أفترض ھنا معرفة القارئ بأصول البرمجة في أحدى لغات البرمجة كالسي أو الجافا أو الفيجوال بيسك أو غيرھا .. المھم أن يكون القارئ على علم ولو بشي يسير )

كغيرھا من لغات البرمجة تحتوي لغة C#.NET على أنواع مبنية بداخل ھذه اللغة كمتغيرات من نوع Integer و غيرھا.
لكن مما ينبغي التنويه إليه أن جميع الأنواع الموجود في لغات NET. لھا نفس الأساس.

خذ مثال النوع في Integer والنوع C# في IntegerVisual Basic ھما في الحقيقة مشتقان من أصل واحد الذي ھو System.Int32 وكذا الحال في أكثر الأنواع الموجودة بداخل اللغة.
وجميع ھذه الأنواع وأي نوع آخر إنما ھي في الأصل كائنات مشتقة من الكائن

System.Object

وسأورد ھنا جدولا يبين الأنواع الأساسية للمتغيرات في : C#



وإذا أردنا أن نعرف متغير من string مثلا فكل ما علينا كتابته ھو:

كود:
string myString ;
هنا نقوم بالإسناد//
myString = "Hello" ;
ھكذا الحال مع كل الأنواع الأخرى.
كما ذكر في الجدول كل نوع الأنواع المعرفة في C# له نظير في بيئة فمثلا النوع

Stringفي #C ھو في الحقيقة نوع System.String

ملاحظة ھااامة:
بالنسبة لمبرمجي ++C أو C فلا بد من الانتباه إلى أن المتغيرات المنطقية ( Boolean Variables )

لا تستقبل المتغيرات من نوع Integer أي لا يمكنك فعل شيئا كھذا

المتغيرات المنطقية لا تستقبل قيما غير true or false فقط ! وھذا له حسناته التي

سوف نذكرھا في جمل الشرط.
الثوابت وأنواعھا:
كما قيل عن المتغيرات يقال عن الثوابت سوى انك لا تستطيع التحكم في المتغير بعد
تعريفه
أي عندما تريد تعريف ثابت من نوع Integer تعمل كالآتي:

كود:
const int myConstant = 147 ;
ھكذا تكون قد عرفت الثابت myConstant وتستطيع استخدمه لكن بدون الإسناد إليه .

جمل الشرط:
في أي برنامج مھما صغر حجمه لا بد من استخدام جمل الشرط..
وجمل الشرط في C# تشابه إلى حد كبير جمل الشرط في C or c++ or Java

كود:
if(  هنا جملة الشرط )
إذا تحقق الشرط //
else
الشرط إذا لم يتحقق //

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

كود:
if( جملة شرط ) 

إذا تحقق الشرط //
else if(  الأول جملة شرط أخرى إذا لم يتحقق الشرط )
إذا تحقق الشرط //
ھنا خطأ متكرر.

كود:
if( ( جملة شرط
يكون هنا أكثر من جملة إذا تحقق الشرط //
الحل لا بد من وضع أقواس:

كود:
if( جملة شرط )
{
الشرط يسمح هنا بأكثر من جملة إذا تحقق //
}

وكذا الحال مع جملة else if و else

ما ھي جملة الشرط:
جملة الشرط ھي عبارة عن جزين أو أكثر يتم المقارنة بينھما:
مثلا قد تكون جملة الشرط عبارة عن مقارنة بين عددين
مثلا:

لنفرض لدينا عددين a,b كلاھما له نفس القيمة فإن صيغة جملة الشرط تكون

كود:
int a = 10, b = 10 ;
if (a == b)
Console.WriteLine(" ; ("متساويان

لا حظ أننا ھنا استخدمنا المعامل == ولم نستخدم المعامل = لأن المعامل = يستخدم في
الإسناد والمعامل == يستخدم في المقارنة.

ملاحظة ھااااااامة:
true or false ملاحظة ھامة لمبرمجي السي جمل الشرط لا بد أن تكون نتيجتھا النھائية
ولا يسمع بقيم غير ذلك أي أن الوضع يختلف عما ھو عليه في السي حيث أن الجملة في
السي تكون صحيحة مادامت لا تساوي الصفر فإذا ساوت الصفر كانت خاطئة . فيمكن
فعل شيئا كالتالي:

كود:
if( i = هذه الجملة صحيحة دائما لأ?ا لا تساوي الصفر // (
أما في #C فلا بد أن تكون النتيجة النھائية عبارة عن true or false ولا يصح

كود:
if( i = لا يسمح باستخدام هذه العبارة في سي شارب لأنها عبارة عن // ( 1
عددي متغير
ولكن تستبدل بهذه العبارة //
if( i == هذه العبارة صحيحة // ( 1
ونستطيع وضع أكثر من شرط في المقارنة في جملة الشرط مثلا:

كود:
if( i != 1 && i != 5 || i == 7 )
بعض المعاملات ومعانيھا:

|| ھذه تعني أو Or
&&ھذه تعني وAnd


==ھذه تستخدم في المساواة وليس الإسناد لاختبار إذا كان متغييرن متساويان فترجع

true وإذا كانا غير متساويين فسترجع false

=!لأختبار إذا كان المتغيرين غير متساويين فإذا كان المتغيرين غير متساويين فترجع true



وإذا كان غير ذلك فترجع false

جمل التكرار:
ھناك ثلاثة أنواع من جمل التكرار:

1- جملة التكرار .. while
صيغة الجملة

كود:
while(  هنا جملة التكرار )
{
..
..
}
يستمر التكرار حتى تكون قيمة جملة التكرار خطأ false فإذا كانت خطأ فإن جملة
التكرار تتوقف . ونستطيع الاستغناء عن الأقواس في جملة التكرار إذا كانت الجملة
التي نريد تكرارھا جملة واحدة فقط.
مثال:

كود:
int a = 3 ;
while( a != 0 )
{
Console.WriteLine( a.ToString ) ;
a-- ;
}
ھنا نقوم بطباعة المتغير a ومن ثم انقاص قيمته واحد.

2- جملة : do … while

تختلف جملة do .. while عن جملة while في أن الحلقة سوف يتم تنفيذه مرة واحدة على الأقل.

مثال:

كود:
int a = 0 ;
do
{
Console.ToString( a ) ;
}while ( a != 0 )

ھنا سوف يتم طباعة المتغير a مع ان قيمته تساوي صفر لأننا استخدمنا الجملة while ... do

3- جملة : for

تختلف الجمل السابقة عن جملة for في أننا لا نعلم عدد المرات التي سوف يستمر

فيھا التكرار حتى يتوقف ، أما في جملة for فإننا غالبا ما نكون على علم بعدد المرات.

تركيب جملة : for

كود:
for(  هنا يتم تهيئة العداد ; شرط التكرار ; هنا مقدار الزيادة للعداد )

مثال:
سوف نستخدم المثال السابق:

كود:
int a = 10 ;
for( int i = 1 ; i <= 5 ; i++ )
{
a-- ;
Console.WriteLine( a.ToString ) ;
}
أخر قيمة سوف تكون للمتغير a ھي 5 حيث أننا وضعنا عداد اسمه i ھذا العداد يستمر

في الزيادة حتى يصل إلى الرقم 5 5 ثم يتوقف .

بعض المعاملات ومعانيھا:

++ھذا العامل يستخدم للزيادة بمقدار واحد
--ھذا العامل يستخدم للنقصان بمقدار واحد
>أصغر من
<أكبر من
=>أصغر من أو يساوي
=<أكبر من أو يساوي
=+ھذا المعامل لزيادة المتغير بقيمة معينة
مثلاً:

كود:
a = 10 ;
a += 20 ;
ستصبح القيمة الموجودة في a ھي 30.

=-للنقصان من المتغير كسابقه.
=*للضرب في المتغير نفس عمل السابق.
=/للقسمة.
=%باقي القسمة.
*ضرب
+زائد
/قسمة
-ناقص
%باقي القسم Mod




انتهت الدرس الاول

التوقيع

 
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
رد مع اقتباس
 
 
قديم 03-15-2008, 06:24 PM   #2 (permalink)
عضو ذهبي
 
الصورة الرمزية JaDe MaRkoL







JaDe MaRkoL غير متصل

JaDe MaRkoL will become famous soon enoughJaDe MaRkoL will become famous soon enough

افتراضي رد: دروس في C#.net

نبدا الدرس الثاني

الدوال :

واليوم بإذن الله سوف نتطرق إلى C# بدأنا معكم في الدرس الأول بلمحة سريعة عن المتغيرات وطرق تعريفھا في الدوال وأنواعھا.

ماھي الدوال:
الدوال ھي كتل من الشيفرة نستطيع استخدامھا في أماكن متعددة في البرنامج ولكن بدون إعادة كتابتھا في كل
مرة.
ما الفرق بين الاجراءات والدوال ؟
الدوال تقوم بارجاع قيمة معينة
أما الأجراءات فھي دوال لا ترجع قيمة.
مثال للإجراء:

كود:

void ShowMessage()
{
MessageBox.Show("Hello") ;
}
المثال السابق ھو اجراء لأنه لا يرجع قيمة ونعرفه بكلمة void ھذه الكلمة تشير إلى أن ھذه الدالة لا ترجع قيمة
ولھذا تسمى بالإجراء.

أما المثال على الدالة:

كود:
int ShowNumber()
{
MessageBox.Show("Hello") ;
return 10 ;
}
تلاحظ ھنا أننا قمنا بتعريف الدالة بكلمة int وھذه تعني أن ھذه الدالة تقوم بارجاع قيمة من نوع عدد صحيح وفي آخر
الدالة تجد الكلمة 10 return ھذه الكلمة تعني أن الدلة سوف ترجع القيمة 10

نستطيع استخدام كلمة return . في الاجراء لكن بدون وضع قيمة بعد كلمة. return

كود:
void ShowMessage()
{
MessageBox.Show("Hello World") ;
return ;
}
وكلمة return في كل من الاجراءات والدوال تعني انھاء الإجراء او الدالة..

انواع الدوال:
نستطيع تصنيف الدوال كالمتغيرات .. فكل نوع من انواع المتغيرات نستطيع ان نعرف به دالة.
مثلا: لو أردنا تعريف دالة من نوع عدد صحيح طويل long فإننا نضع الآتي:

كود:
long GetNum()
{
return عدد صحيح طويل//; 1111111111111111
}
فلذلك نقول أن قيمة الإرجاع لا بد أن تكون من نفس النوع الذي عرفت به الدالة ، أي لو عرفنا الدالة من نوع float
. ھي من نوع فتكون القيمة التي بعد كلمة return ھي من نوع .float

مثال:

كود:
float GetFloatNumber()
{
return الذي عرفنا به الدالة هنا نوع قيمة الارجاع هو نفسه النوع // ; 125.23
}
وقد تكون القيمة التي بعد return ھي عملية حسابية . كما في الآتي:


كود:
int GetSum()
{
return 10 + 52 + 98 ;
}
ھنا الدالة سوف تقوم بإرجاع مجموع القيم 10 + 52 + 98 .

طريقة تعريف الدوال:

كود:
[( الدالة] [اسم الدالة] [( متغيرات الدالة نوع]
{
هنا تكتب الدالة//
return [ ; [قيمة من نفس نوع الدالة
}
نوع الدالة:
الأنواع التي توضع في تعريف الدالة ھي نفسھا الأنواع التي توضع لتعريف المتغيرات.
اسم الدالة:
ضع الاسم الذي تريد
متغيرات الدالة:
سوف نناقشھا لاحقا.
تمرير القيم إلى الدوال أو الاجراءات:
تكمن الفائدة الفعلية للدوال ھي أننا نستطيع نستطيع تمرير المتغيرات إليھا .. كيف؟
مثلاً : لو كان لدينا دالة من نوع integer تقوم بحساب عددين وإرجاع القيمة.

كود:
int GetSum()
{
return 10 + 25 ;
}
ھذه الدالة ھي غير مفيدة إطلاقا ! لماذا؟
لأن القيمة التي سوف نحصل عليھا من الدالة ھي قيمة ثابتة دائما وتساوي 35 أي كلما قمنا باستدعاء الدالة فسوف
نحصل على القيمة 35 كقيمة مرجعة لھذه الدالة .

كيف نجعل ھذه الدالة تجمع لنا رقمين متغيرين ؟
نستطيع ذلك عن طريق تمرير القيم للدالة .. كيف يتم ذلك ؟
ھناك ثلاث طرق في #C لتمرير القيم للدالة .

كود:
int GetSum ( int num1, int num صحيح قمنا هنا بوضع متغيرات للدالة من نوع عدد // ( 2
هذه المتغيرات هي عبارة عن الأعداد التي نريد جمعها //
{
return num1+num2 ;
}
ولو أردنا استدعاء الدالة السابقة فاننا نكتب التالي:


كود:
int Sum ;
Sum = GetSum( 10, التي نريد جمعها قمنا هنا باستدعاء الدالة ووضع قيم للمتغيرات // ( 20
Console.WriteLine( Sum.ToString() ) ;
وعندما نقول أن ھذا التمرير ھو تمرير بالقيمة فھذا يعني أن قيمة المتغير الذي نريد تمريره تنسخ إلى المتغير الموجود في الدالة.
مثال:
نريد تمرير متغير من نوع عدد صحيح إلى الدالة السابقة فنعمل كالآتي:

كود:
int Sum , MyNumber1 = 20, MyNumber2 = 10 ;
Sum = GetSum( MyNumber1, MyNumber2 ) ;
Console.WriteLine( Sum.ToString() ) ;

ھنا المتغير MyNumber1 و المتغير MyNumber2 قمنا بتمرير قيمھما إلى الدالة GetSum فقط ! ما معنى ذلك ؟
معنى ذلك ان المتغير المسمى num1 في الدالة السابقة سوف يأخذ نسخة من قيمة المتغير MyNumber1 ، ھكذا المتغير num2 مع المتغير MyNumber2
أي لو قمنا بتعديل في الدالة السابقة بحيث تقوم بتغيير في قيم أحد متغيراتھا.

كود:
int GetSum( int num1, int num2 )
{
int Sum ;
Sum = num1 + num2 ;
num1 = لاحظ هنا قمنا بتغيير قيمة المتغير // ; 50 num1
return Sum ;
}
ھذه الدالة تقوم بتغيير في قيمة المتغير num1 لكن مع ھذا قيمة ھذا المتغير لن تتغير لأننا قد مررناھا بالقيمة . انظر المثال التالي:
في ھذا المثال نقوم باستدعاء الدالة . GetSum

كود:
int Sum, MyNumber1 = 30, MyNumber2 = 50 ;
Console.WriteLine( MyNumber1.ToString() ) ; // هنا نقوم بطباعة المتغير قبل تمريره للدالة
للدالة نقوم بتمرير المتغير //
Sum = GetSum( MyNumber1, MyNumer2 ) ;
Console.WriteLine( MyNumber1.ToString() ) ; // هنا نقوم بطباعة المتغير مرة أخرى بعد
للدالة التمرير
عندما قمنا بطباعة المتغير MyNumber1 في المرة الأولى فستكون القيمة 30 ثم قمنا بتمرير المتغير MyNumber1 إلى الدالة GetSum
وھذه الدالة تقوم بتغيير في قيمة المتغير لكن بما ان التمرير ھو بالقيمة فإن المتغير MyNumber1 سوف لن يتأثر ، لذلك فإنه قيمة المتغير MyNumber1
عندما قمنا بطباعته مرة أخرى ھي نفسھا لم تتغير 30 . (أرجو أن تكون الفكرة قد اتضحت)

الطريقة الثانية التمرير بالإشارة:
معنى ذلك ھو أن تقوم يتمرير عنوان المتغير في الذاكرة إلى الدالة.

أي لو أردنا القيام بتغيير في قيمة المتغير MyNumber1 في المثال السابق فلا بد من كتابة المتغيرات في الدالة GetSum بصورة أخرى .

كود:
int GetSum( ref int num1, int num2 )
{
int Sum ;
Sum = num1 + num2 ;
num1 = 50 ;
return Sum ;
}
قمنا ھنا بزيادة كلمة في تعريف المتغير الأول (ref) من متغيرات الدالة ھذه الكلمة تعني أن نوع التمرير ھو بالاشارة.
ولو أردنا أن نقوم باستدعا الدالة السابقة فسنكتب شيئا كالتالي.

كود:
int Sum, MyNumber1 = 30, MyNumber2 = 20 ;
Console.WriteLine( MyNumber1.ToString() ) ;
Sum = GetSum( ref MyNumber1, MyNumber2 ) ;
Console.WriteLine( MyNumber1.ToString() ) ;
لاحظ ھنا أننا حينما نريد تمرير متغير بالاشارة فلابد من كتابة كلمة ref لكي تخبر المترجم بأن ھذا التمرير ھو بالاشارة .
ھنا الحال يختلف عما ھو عليه في طريقة التمرير بالقيمة فقيمة المتغير MyNumber1 قبل التمرير إلى الدالة تختلف عن قيمته بعد التمرير إلى الدالة..

أي أن قيمة المتغيرMyNumber1 قبل التمرير إلى الدالة ھي 30 لكن بعد التمرير إلى الدالة أصحبت 50. وبھذا يظھر الفرق بين التمرير بالقيمة والتمرير بالإشارة.

الطريقة الثالثة التمرير بالاشارة لكن بدون قيم أولية:
في الطريقتين السابقتين كان لا بد من وضع قيم أولية في المتغير قبل تمرير إلى الدالة .. أي أنه لا يمكن لنا فعل شيئا كالتالي:

كود:
int MyNumber1, MyNumber2 , Sum ;
Sum = GetSum( MyNumber1, MyNumber العملية غير مسموح بها لأننا لم نقم بوضع قيم هذه// ( 2
اولية للمتغيرين
والحل أن نضع كلمة out عندما تعرف متغيرات الدالة وعند تمرير القيمة إليھا.

كود:
int GetSum( out num1, num2 )
{
return num1 + num2 ;
}
وعندما نريد استدعائھا نقوم بالتالي

كود:
int Sum, MyNumber1, MyNumber2 = 10 ;
Sum = GetSum( out MyNumber1, MyNumber ) ;
كما قلنا سابقا فإن التمرير ب out ھو في الحقيقة تمرير بالاشارة لكنه لا يحتاج إلى وضع قيم أولية.
وبھذا نكون قد انتھينا من المبادئ الأساسية بمرور سريع على المتغيرات والدوال وطرق تعريفھا وحلقات التكرار والشرط

التحميل الزائد للدوال : ( Functions Overloading )

مامعنى ذلك ؟

معنى التحميل الزائد للدوال ھو أن يكون ھناك دالتين بنفس الاسم ويختلفان في نوع البارامترات (متغيرات الدالة)

ما الفائدة منه ؟
لو فرضنا أن لدينا دالة تقوم بتحويل عدد صحيح إلى نص .. وھناك دالة تقوم بتحويل عدد حقيقي إلى نص ودالة ...
أي جميع ھذه الدوال لھا العمل نفسه لكن المتغير ھو نوع متغير الدالة ..
مثال:

كود:

void ConvertIntToString( int number ) // نص هذه دالة تحول عدد صحيح إلى
{
...
..
}
void ConvertFloatToString( float number ) // هذه دالة تحول عدد حقيقي إلى نص
{
..
..
}
نلاحظ من السابق أن كلا الدالتين لھما اسم مختلف مع أن عمل الدالتين واحد .. ماذا لو قمنا بتوحد الأسماء وجعل
المترجم يتعرف عليھا لوحده ؟.

نستطيع أن نعمل الآتي:

كود:

void ConvertToString( int number ) // هذه الدالة تقوم بتحويل رقم صحيح إلى نص
{
..
.
}
void ConvertToString( float number ) // بتحويل عدد حقيقي إلى نص هذه الدالة تقوم
{
..
.
}

لاحظ في المثالين السابقين أن اسم الدالتين واحد ولكن الذي يختلف ھو متغير الدالة أو ما يسمى ) البارامتر ) ففي
الدالة الأولى نجده من النوع int والثانية نجده من النوع ..float أي عندما نريد استدعاء الدالة فإن المترجم ينظر إلى نوع البارامتر الذي وضعناه في الدالة ويستدعي الدالة المناسبة ..

كود:

int intNum = 123 ;
float floatNum = 147.25 ;
ConverToString( floatNum ) ; // هنا قمنا باستدعاء الدالة السابقة ووضعنا البارامتر من نوع  float
المترجم سوف يستدعي لنا الدالة التي تقوم بتحويل عدد حقيقي إلى نص فهنا //

أي أن التحميل الزائد للدوال ھو أن يكون في البرنامج دالتين أو أكثر لھما نفس الاسم لكنھما يختلفان في أنواع
البارامترات ( متغيرات الدالة )

كتابة أول برنامج في #C :

أظنكم في شوق إلى كتابة أول برنامج في #C لكنني أخرت ذلك لمناقشة بعض المفاھيم الأساسية في اللغة.
البرنامج التي سوف نقوم بكتابتھا من الآن وختى الانتھاء من الفئات ھي برامج من نوع Console Aplication
وبعد اتقان مفھوم الفئات سوف ننتقل بإذن الله إلى البرمجة في بي ******s .

اتجه إلى Microsoft Visual Studio .NET ثم اعمل الآتي:

كود:

New - > Project - > Visual C# - > ConsoleApplication .
بعد ذلك قم بالضغط على زر موافق وانتظر لحظات حتى تفتح امامك نافذة فيھا بعض الكتابات قم بمسحھا وألصق الكود التالي:


كود:
using System ;
public class HelloWorldProgram
{
static void Main()
{
Console.WriteLine("Hello World") ;
}
}
بعد ذلك قم بتشغيل البرنامج بالضغط على الزر الأزرق الموجود بالأعلى والذي يرمز إلى التشغيل.

انتهت الدرس الثاني

التوقيع

 
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
رد مع اقتباس
 
إضافة رد

دروس في C#.net

منتدى لغات الحاسب والبرمجة





الذين يشاهدون محتوى الموضوع الآن : 1 ( الأعضاء 0 والزوار 1)
 
أدوات الموضوع

تعليمات المشاركة
لا تستطيع إضافة مواضيع جديدة
لا تستطيع الرد على المواضيع
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

BB code is متاحة
كود [IMG] متاحة
كود HTML معطلة
Trackbacks are معطلة
Pingbacks are معطلة
Refbacks are متاحة


الساعة الآن 04:02 AM.


روابط مهمة

أقسام المنتدى


الرسول الإنسان | الدفاع عن أهل السنة | فضائح و جرائم الروافض | السنه | الحوارات الهادفة | الفلاش والسويتش | الفوتوشوب | دورة الفوتوشوب | صور | العاب | البرامج المشروحه | الفرفشه والمرح | الرياضة | الفايروسات | الهاردوير والصيانة | تطوير المنتديات والمواقع | دورة تطوير منتديات vb | الحمايه | اختراق المواقع والسيرفرات | هكرز | اختراق الشات والاميل | ثغرات | البرامج | الفيجوال بيسك | المواضيع العامه | القصص واللغات|  شات


Powered by vBulletin Version 3.7.1
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd
لا تتحمل إدارة منتديات عالم المعرفة أية مسؤولية حول أي موضوع يطرح في المنتدى فإن المكتوب يعبر عن رأى صاحبه أو ناقلة

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57