.:: إعلانات الموقع ::.

قال الله تعالى: { مَا يَلْفِظُ مِن قَوْلٍ إِلَّا لَدَيْهِ رَقِيبٌ عَتِيدٌ } سورة ق الآية 18
آخر 10 مشاركات
الموضوع الكاتـب آخر مشاركة مشاركات المشاهدات
لو فاضي ما عندك شيئ ادخل ,, ღ روح الجنـووبـ ღ ღ روح الجنـووبـ ღ
الوقت: 10:54 PM - التاريخ: 10-15-2008
7 50

الموضوع الكاتـب آخر مشاركة مشاركات المشاهدات
قلب الصداقة ... لأي عضوه أو مشرفة تهدينه ؟؟؟ روز ღ روح الجنـووبـ ღ
الوقت: 10:52 PM - التاريخ: 10-15-2008
736 3411

الموضوع الكاتـب آخر مشاركة مشاركات المشاهدات
اوصل لي الـــ 10 واحذف كرسي على العضو الي تبي jara7ooo ღ روح الجنـووبـ ღ
الوقت: 10:26 PM - التاريخ: 10-15-2008
19 40

الموضوع الكاتـب آخر مشاركة مشاركات المشاهدات
//-المسيــكيـنـة -// شموخ فتاة شموخ فتاة
الوقت: 10:05 PM - التاريخ: 10-15-2008
0 2

الموضوع الكاتـب آخر مشاركة مشاركات المشاهدات
قشرة موز فى الارض.....من ودك يطح فيها أبو شذى ღ روح الجنـووبـ ღ
الوقت: 10:02 PM - التاريخ: 10-15-2008
1207 5213

الموضوع الكاتـب آخر مشاركة مشاركات المشاهدات
من عريس المنتدي او عروسه المنتدي ؟؟؟ روز شموخ فتاة
الوقت: 10:00 PM - التاريخ: 10-15-2008
2595 13660

الموضوع الكاتـب آخر مشاركة مشاركات المشاهدات
...|[عبـ/ـارات خـآصـة للمـواضـ/ـيـع]|.. شموخ فتاة شموخ فتاة
الوقت: 09:57 PM - التاريخ: 10-15-2008
10 56

الموضوع الكاتـب آخر مشاركة مشاركات المشاهدات
زوج اي عضوين تبيهم......... همس البحر شموخ فتاة
الوقت: 09:49 PM - التاريخ: 10-15-2008
597 1975

الموضوع الكاتـب آخر مشاركة مشاركات المشاهدات
للي يوصل رقم خمسه يصك الباب على ايد احد الاعضاء سارق قلوب العذارى شموخ فتاة
الوقت: 09:48 PM - التاريخ: 10-15-2008
347 1048

الموضوع الكاتـب آخر مشاركة مشاركات المشاهدات
اختر سيارتك؟؟؟ ومنهو الي راكب معاك؟؟ وش الشريط الي حاطينه؟ Smo Al7sas شموخ فتاة
الوقت: 09:46 PM - التاريخ: 10-15-2008
451 1518


 
 
التسجيل البحث مشاركات اليوم اجعل جميع المنتديات مقروءة
موقع اموول  العودة   منتديات اموول > ¤©§][§©¤][ منتديات الكمبيوتر والاتصالات ][¤©§][§©¤ > منتدى الانظمة والتشغيل
دليل المواقع مركز التحميل منوعات إعلانات مبوبة
 

رد
 
 
LinkBack أدوات الموضوع طرق مشاهدة الموضوع
قديم 09-16-2004, 05:42 AM   رقم المشاركة : 1
Net - Master
مشرف سابق
 
الصورة الرمزية Net - Master






 

اخر مواضيعي


Net - Master غير متواجد حالياً

Net - Master is on a distinguished road


شرح لغة ++ C للبرمجه لعيون منتدى الامل العربي!!!

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

مقدمة عامة على لغة C

* مميزات لغة C : - تتميز لغة C بمجموعة من المزايا مثل :-
- لغة عامه : أى تصلح لعمل برامج قواعد البيانات والرسومات والحسابات ونظم التشغيل .
- لغة تركيبية Structured ******** : البرنامج المكتوب بلغة C عبارة عن دالة رئيسية تنادى مجموعة من الدوال الأخرى . وكل داله مجموعه من الأوامر .
- تتعامل على مستوى ( البت ) Bit manipulation : - حيث تستطيع أن تقرأ وتكتب وتغير وتقوم بعمليات على مستوى الـ Bit . حيث أن Bit هى اصغر وحدة لقياس المعلومات داخل الكمبيوتر وهى جزء من ثمانية أجزاء تعادل فى مجموعها حرف واحد byte .
- لغة متنقلة Portable : أى يمكن للبرنامج المكتوب بلغة C أن يعمل مع أكثر من جهاز مثل IBM وApple .
- لغة سريعة : - لأن أدوات اللغة تتعامل مع الآلة مما يختصر وقت التنفيذ .
- لغة قياسية : معظم مترجمات اللغة تتوافق مع اللغة القياسية ANSI C

The Basic Structure of c Program
قواعد بناء البرنامج
- البرنامج التالى يمثل أبسط تركيب لبرنامج مكتوب بلغة C
# include < stdio .h >
main ( )
{
printf ( " hello egypt " ) ;
}
ملاحظات هامة
- يبدأ البرنامج بالعبارة < ……h > # include وبين العلامتين اسم ملف التوجيه الخاص بالدوال المستخدمة فى البرنامج – يمكن كتابة أكثر من include .
- يتكون البرنامج من دالة رئيسية main ( ) وتبدأ بالقوس { وتنتهي بالقوس } .
- جميع كلمات ودوال اللغة تكتب بالحروف الصغيرة .
- تنتهي كل عبارة بفاصله منقوطة ( ; )
- يجوز كتابة أى ملاحظات أو تعليقات خاصة بالبرنامج بوصفها بين العلامين /* */ لأى عدد من السطور
\ جسم الدالة يوضع ما بين الأقواس { }


أنواع البيانات Data Type
* البيانات التى تتعامل معها إما أرقام أو حروف أو كلمات :-
- والأرقام يمكن أن تكون صحيحه ( أى ليس بها علامة عشرية ) integer أو حقيقية ( أى بها علامة عشرية) float .
- والحروف يمكن أن تكون حرف واحد أو أكثر من حرف
* الجدول التالى يوضح هذه الأنواع وكذلك عدد البايت byte التى يشغلها :-
المدى المسموح طوله بالبايت نوع المتغير
حرف أو رمز واحد 1 حرف ( char )
-32768 إلى 32768 2 صحيح قصير ( int )
-2014704830648إلى 2014704830648 4 صحيح طويل ( long )
e- 38 إلى e + 38 4 حقيقى ( float )
e -308 إلى e+308 8 حقيقى مضاعف ( double )
وفيما يلى المقصود بكل هذه الأنواع : -
- متغير من نوع حرف : أى متغير يصلح لتخزين حرف فقط .
- متغير من نوع صحيح : أى متغير يصلح لتخزين رقم صحيح ( ليس به علامة عشرية ) .
- متغير من نوع صحيح ولكن طويل( (Long : أى يستطيع أى يخزن رقم صحيح ضعف المتغير الصحيح العادى ويستعمل هذا النوع إذا كانت الأرقام التى تتعامل معها أكبر من المساحة المخصصة وإلا سنحصل على نتائج خاطئة بالرغم من إن البرنامج سليم
- متغير حقيقى : أى متغير يصلح لتخزين رقم حقيقى يقبل ال**ور العشرية مثل 33.5
- متغير حقيقى مضاعف : أى يستطيع أن يخزن رقم حقيقى ضعف المتغير الحقيقى العادى .
* تسميته المتغير : - يخضع اسم المتغير لشروط معينه :-
- يجب أن يبدأ المتغير بحرف ثم يكمل المتغير بعد ذلك حروف أو أرقام .
- يفرق المترجم بين الحروف الصغيرة والكبيرة فالمتغير HP يختلف عن المتغير hp فإذا استعملا فى البرنامج يعتبرهما البرنامج متغيرين
- يجب ألا يكون المتغير بإسم كلمه من الكلمات المحجوزة .
* الأعلان عن المتغيرات : -
- فى لغة الـ C لابد الإعلان عن المتغيرات Variables فى بداية البرنامج إما إذا كنت تستخدم مترجم لغة C ++ يتم الإعلان عن المتغيرات فى إى مكان بالبرنامج
int a ;
float ;

* المؤثرات operators
المؤثرات هى الرموز التى تربط بين المتغيرات والثوابت لإنشاء علامة أو معادلة تختلف أنواع المؤثرات باختلاف وظيفة كل مؤثر .
1- المؤثرات الحسابية arithmetic operators
+ علامات الجمع addition
- علامات الطرح Subtraction
* علامات الضرب multiplication
/ علامات القسمة division
وتستخدم مع المتغيرات والثوابت الرقمية

2- مؤثرات المقارنة Relational operators :- وتستخدم لمقارنة قيمتين :
النتيجة مثال الرمز المؤثر
1 10>8 < أكبر من greater than
0 10<8 > أصفر من less than
0 8==10 == يساوى equal to
1 8=!10 ! = لا يساوى not equal to
0 10 < = 8 => أقل من أو يساوى less than or equal to
0 10 > = 8 =< أكبر من أو يساوى greater than or equal to

3- المؤثرات المنطقية Logical operator
النتيجة مثال الرمز المؤثر
1 10 > 8 && 9 > 7 && و AND
1 1 0 < 8 || 7 < 8 || أو OR
1 ! (10 = = 8 ) ! لا NOT

4- مؤثرات التخصيص Assignment Operators
وهى مؤثرات تخزين قيمة فى متغير فمثلا إذا كانت قيمة 6 = 9
المؤثر النتيجة الطريقة الحديثة التخصيص التقليدى
+ = addition assignment operators 11 A + = 5 A = a +5
Subtraition assignment opertors 1 A - = 5 A = a – 5
Multipication assibnment operators 30 A * = 5 A = a + 5
Division assignment operators 2 A / = 3 A = a / 3



5- مؤثرات الزيادة والنقصان increment & Decrement

مؤثر زيادة واحد 7 A ++ A = a + 1
مؤثر نقصان واحد 5 A -- A = a – 1

6- مؤثر باقى خارج القسمة %
يستخدم لمعرفة باقى القسمه ( لتحديد هل الأرقام الموجودة فى المتغير زوجية أو فردية فمثلا إذا كانت قيمة a = 5 وكتب C = a % 2 يكون باقى الرقم 1 = 5 / 2





التوقيع :

رد مع اقتباس
قديم 09-16-2004, 05:45 AM   رقم المشاركة : 2
Net - Master
مشرف سابق
 
الصورة الرمزية Net - Master






 

اخر مواضيعي


Net - Master غير متواجد حالياً

Net - Master is on a distinguished road


يتبع اغة++C :

دوال الإدخال والإخراج

* دالة الطباعة على الشاشة printf() *
ملاحظات هامه : كل دالة مرتبطة بملف توجيه معين حيث يستدعى هذا الملف فى أول البرنامج بالعبارة # include فمثلا الدالة printf () معرفة بالملف stdio.h وتكتب العبارة # include < stdio.h > فى أول البرنامج حتى يتعرف المترجم على الدالة وهكذا مع باقى الدوال
- تستخدم دالة الطباعة printf ( ) لطباعة البيانات بجميع أنواعها
( String , char , float , int ) على الشاشة فقط .
- ونأخذ دالة الطباعة عدة صور وكذلك معاملات وأكواد تحدد شكل المخرجات
مثال 1
printf ( " welcome with compuscience " )
هنا يتم طباعة ما بين علامتى التنصيص " "
مثال 2

printf ( " \n welcome \n with \n compuscience " ) ;
فى هذا المثال : الكود 100 معناه new line أى سطر جديد وعندما يجد المترجم 100 يترجمها إلى سطر جديد ويكون الناتج
welcome
with
compusciene



وفيما يلى الاكواد المستخدمة مع الدالة printf( )
المثال الاستخدام الكود
printf ( " \n “ ) الانتقال السطر الجديدnew line \n
print f ( " \t “ ) نقل المؤشر بعد 8 مسافات ( Tap ) \t
print f ( " \b " ) إرجاع المؤشر مسافة خلفيةBackspace \b
printf ( “ x41 " ) والنتيجة : a طباعة الحرف المناظر للكود المكتوب بالنظام السادس عشر hexadecimal \xdd
printf ( " \101” ) النتيجة : a طباعة الحرف المناظر للكود المكتوب بالنظام الثمانى octol ( each d represents a digit ) \ddd
printf ( " \"" ) طباعة علامة التنصيص double quate \”
printf ( " \a “ ) إخراج صوت الصافرة ( يبب ) \a
* أوجد ناتج تنفيذ البرنامج التالى :
/ * program **** 1 * /
# include < stdio.h >
main ( )
{
printf ( " \n this **** display in new line “ ) ;
printf ( " \n word1 \t lab1 \t tab2 “ ) ;
printf ( " \n bell \a bell \ b “ ) ;
printf ( " \n this line display quotations \ “ “ ) ;
printf ( " \n “ ) ;
}
* طباعة قيم المتغيرات على الشاشة : لطباعة القيم الموجودة بالمتغيرات تستخدم أكواد معينة لتحدد نوع البيانات المراد طباعتها بالدالة print f ()
مثال
printf ( " % d “ , a ) ;
printf ( " % f “ , b ) ;
- فى هذا المثال عندما يقابل مترجم اللغة العلامة % ينظر إلى الحرف التالى لهذه العلامة . ويعتبر هذا الحرف توصيف لقيمة موجودة بعد العلامة وكل حرف يحدد تنوع معين من البيانات .



والجدول التالى يوضح أكواد طباعة أنواع البيانات :
مثال الاستخدام الكود
printf ( " % d “ , - 10) توصيف لمتغير أو ثابت رقمى صحيح ( Signed decimal integer ) int %d
printf ( “ % p “ , 507 ) توصيف لمتغير أو ثابت رقمى حقيقى ( floating point ) float %f
printf ( “ % c “ , “ a “) توصيف لمتغير أو ثابت ( حرف واحد ) char Single character %c
printf ( “ % s “ , “ is “ ) توصيف لعبارة حرفية حرف أو أكثر String %s
printf ( “ % u “ , “ 10 ) توصيف لمتغير أو ثابت رقمى صحيح بدون إشارة ( (unsigned decimal integer ) %u
printf ( “ % x “ , af ) توصيف لمتغير أو ثابت بالنظام السادس عشر hex %x
printf ( “ % o “ , 67 ) توصيف لمتغير أو ثابت بالنظام الثمانى Qctal %o

* أوجد ناتج تنفيذ البرنامج التالى
/ * program **** 2 * /
# include < stdio.h >
main ( )
{
int a , b , c ;
float f ;
long t ;
char ch = ‘y ‘ ;
char **** [10] = " aly " ;
a = 5 ;
b = 10 ;
c = a + b ;
printf (“ \n c = % d “ , c ) ;
printf ( “\n f = % f “ , f ) ;
printf (“ \n **** = % s “ , **** ) ;
printf ( “ \n ch = % c “ , ch) ;
printf ( “\n t = % ld “ , t ) ;
}



* ملاحظات على الحل *
· يشمل البرنامج السطر رقم 1 للتعليق أو الملاحظة
· فى السطر 2 يشمل على الجملة # include < stdio.h > وتستخدم لتحميل ملف التوجيه stdio.h الذى يحتوى على تعريف الدالة printf ( )
· السطر رقم 3 تبدأ الدالة الرئيسية main ( ) ثم السطر 4 تبدأ الدالة الرئيسية بالقوس {
· فى السطر رقم 7 , 6 , 5 إعلان عن المتغيرات
· فى السطر رقم 8 الإعلان عن المتغير ch من نوع حرف ( char ) وإعطائه القيمة y
· فى السطر رقم 9 الإعلان عن المتغير **** لتخزين عبارة حرفية وإعطائه القيمة الابتدائية كلمة Aly
· فى السطر رقم 10 ، 11 ، 12 لإعطاء قيم للمتغيرات A , B وقيمة C
· ثم طباعة المتغيرات ثم تنتهى الدالة الرئيسية بالقوس { وبالتالى ينتهى البرنامج
ملاحظات : الصورة % 3F : يعنى طباعة ثلاث أرقام بعد العلامة العشرية فمثلا الرقم 534.6735 يظهر بالصورة 534.674



* دالة الإدخال العامة Scanf ( ) *
هى دالة الإدخال الرئيسية التى تسمح بإدخال جميع أنواع البيانات وهى تأخذ نفس المعاملات التى تأخذها الدالة Print f ( )
مثال :
# include < stdio.h >
main ( )
{
int a , b , c ;
float r , s , t ;
char **** [10];
printf ( " \n \n enter your **** : " ) ;
scanf ( " % s " , **** ) ;
printf ( " a = " ) ;
scanf ( " % d " , & a ) ;
printf ( “ b = " ) ;
scanf ( % d " , & b ) ;
printf ( " r = " ) ;
scanf ( " % f " , &r ) ;
printf ( " s= " ) ;
scanf ( " % f " & s ) ;
printf ( " \n welcome % s " , **** ) ;
printf ( " \n \n c = a + b = % d " , a + b ) ;
printf ( " \n \n t = r + s = % d " , r + s ) ;
}
ملاحظات على الحل
· يتم الإعلان عن المتغيرات a , b , c , r , s , t , ****
· تطبع الدالة printf() الرسالة enter your ****
· تستقبل الدالة scan f ( ) العبارة الحرفية التى يدخلها المستخدم ونصفها فى المتغير **** 0000 كذلك المتغيرات الأخرى
· تستقبل الدالة scan f ( ) فى سطر ( “ % d " , &a ) scan f ( ) قيمة صحيحه وتخزنها فى المتغير a

# ماذا يعنى المؤشر # &
&a : تعنى تخزين القيمة الصحيحة فى المكان المخزن عنوانه فى المتغير a بمعنى أن a يشير إلى عنوان المكان الذى تخزن فيه القيمة حيث العلامة & تجعل المتغير يشير إلى عنوان المكان

* الناتج :-
enter your **** : ahmed
a = 5
b = 10
r = 20
s = 30
welcome ahmed
c = a + b = 15
t = r + s = 50

تمرين : برنامج لإيجاد مساحة الدائرة
# include < stdio .h >
/ * program to calculate erea of circle * /
main ( ) / * function heading */
{
float redius, area ; /* variable declarations */
printf ( “ redius = ? “ ) ; /* output statement */
scanf ( “ % f “ , redius ) ; /* input statement */
area = 3.14159 * redius * redius ; /* assignment statement */
printf ( “ area = % f “ , area ) ; /* output statement */
}
* دوال إدخال حرف * هناك دوال أخرى تتعامل مع أنواع خاصة من البيانات كالحروف والعبارات الحرفية وهى :
getchar ( ) , getche ( ) , getch ( )
1 – الدالة getchar ( ) : - ( ملف توجيه stdio .h )
تستخدم لإدخال حرف واحد ويظهر الحرف على الشاشة بعد الكتابة ولا تسمح بالانتقال إلى الأمر التالى إلا إذا ضغط المستخدم مفتاح الإدخال enter
مثال
char a ;
a = getchar ( ) ;
printf ( “ % c “ , a ) ;

2- الدالة getche ( ) : - ( ملف التوجيه ( conio .h
تستخدم لإدخال حرف واحد ويظهــر هذا الحرف على الشاشة ولكنها تختــلف عن الدالــة getchar ( ) فى أنها لا تحتاج إلى الضغط على مفتاح الإدخال enter للانتقال للسطر التالى وتعمل هذه الدالة بطريقة مشابهة .


مثال
char a ;
a = getche ( ) ;
printf ( “ % c “ , a ) ;

3 – الدالة getch ( ) : ( ملف التوجيه conio.h )
تستخدم لإدخال حرف واحد ولكن تختلف عن الدالتين السابقتين فى أن هذا الحرف لا يظهر على الشاشة وكذلك فى أنها لا تحتاج إلى الضغط على مفتاح الإدخال enter للانتقال إلى السطر التالى
مثال
char a ;
a = getch ( ) ;
printf ( “ % c “ , a ) ;

* دالة طباعة حرف واحد putchar ( ) : ( ملف توجيه stdio.h )
- تستخدم لطباعة حرف واحد على الشاشة
- فمثلا putchar ( ' a ') تطبع على الشاشة الحرف a كما هو

* دالة إدخال عبارة حرفية gets ( ) * ملف التوجيه stdio.h
- تستخدم الدالة gets ( ) فى إدخال عبارة حرفية string
مثال
char ****[20];
gets (****) ;
فى هذا المثال تخزن الدالة gets ( ) العبارة الحرفية فى المتغير ****
* دالة طباعة عبارة حرفية puts ( ) * ملف التوجيه stdio.h
- تستخدم لطباعة عبارة حرفية string حيث تطبع بدون توصيف شكل المخرجات
مثال :
char ****[10] = “ ahmed “
puts (****) ;
puts ( “mohammed “ ) ;
عند تنفيذ البرنامج نحصل على النتيجة
ahmed
mohammed
ملاحظة : الإعلان char ****[10] معناه أن المتغير **** من نوع حرفى ويصلح لتخزين كلمة أقصى عدد حروف لها هو 10 حروف

* بعض الدوال المكتبة
ملف include الغرض النوع الدالة
stdlib.h تعيد قيمة i المطلقة صحيح abs ( i )
math.h تعيد لوغاريتم طبيعيا لـ d مزدوج log ( d )
math.h تعيد d1 مرفوعة إلى القوة d1 مزدوج pow ( d1 , d2 )
math.h تعيد قيمة مطلقة لـ l صحيح طويل labs ( e )
math.h تعيد جيب d مزدوج sin ( d )
math.h تعيد الجزر التربيعى لـ d مزدوج sqrt ( d )
string.h تنسخ السلسلة s2 فى السلسلة s1 حرف strcpy ( s1,s2 )





رد مع اقتباس
قديم 09-16-2004, 05:49 AM   رقم المشاركة : 3
Net - Master
مشرف سابق
 
الصورة الرمزية Net - Master






 

اخر مواضيعي


Net - Master غير متواجد حالياً

Net - Master is on a distinguished road


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


التكرار ( الدورات) التفريغ
أولا التكرار Loop
1- الدوارة for : تستخدم لتكرار تنفيذ عملية عدد محدد من المرات
الصورة العامة : For ( initial – value ; condition ; increment ) ; statement ;
حيث :
initial – value : هى القيمة الابتدائية
condition : هو شرط إنهاء التكرار
increment : هى قيمة الزيادة الدورية
مثال : برنامج يطبع الأرقام من صفر إلى 9
# include < stdio.h >
main ( )
{
int i ;
for ( i = 0 ; i < 10 ; i ++ )
printf ( “ \ n i = % d " , i ) ;
}
* تنفيذ أكثر من جملة مع For : لتنفيذ أكثر من جملة لعدد محدد من المرات يجب وضع القوس { فى بداية البلوك المراد تكراره ووضع القوس } فى نهاية البلوك .
مثال : حساب متوسط قائمة من الأعداد
# include < stdio.h >
/ * calculate the average of n numbers * /
main ( )
{
int n , count ;
float x , average , sum = 0 ;
/ * initialize and read in a value for n * /
printf ( " how many numbers ? " ) ;
scanf ( " % d " , & n ) ;
/ * read in the numbers * /
for ( count = 1 ; count < = n ; count ++ )
{
printf ( “ x = “ ) ;
scanf ( “ % f " ; & x ) ;
sum + = x ;
}
/ * calculate the average and write out the answer * /
average = sum / n ;
printf ( " \ n the average is % f \n " , average ) ;
}
* الدوارات المتداخلة باستخدام For
- الدوارات المتداخلة عبارة عن دوارة كبيرة تشتمل بداخلها على دوارة أو أكثر
- بمعنى أن مجموعة التعليمات بالـ loop الداخلى يتم تكرار تنفيذها طالما لم ينته العداد فإذا أنتهى ينتقل التنفيذ إلى الدوارة الخارجية ويتم تكرار التعليمات فى الـ Loop الخارجى حتى ينتهى .
مثال : طباعة جدول الضرب من أول 1 × 1 إلى 12 × 12
# include < stdio.h >
main ( )
{
int i , j ;
for ( i = 1 ; i < = 12 ; i ++ )
{
printf ( “ in ") ;
for ( j = i ; j < = 12 ; j ++ )
{
printf ( " i * j = % d " , i * j ) ;
}
}
}
· الدوارة اللانهائية باستخدام For : معناها تكرار تنفيذ الجملة بدون شرط ولا يتوقف التنفيذ حتى يضغط المستخدم CTRL + C وتأخذ الدوارة اللانهائية الصورة For ( ;; )
2 – الدوارة while: تستخدم الدوارة while لتكرار تنفيذ جملة أو مجموعة جمل عدد من المرات غير معلوم العدد ويتوقف هذا على شرط موجود بالدوارة
الصورة العامة :
While ( condition ) Statement ; While ( condition ) { statement 1 ; statement 2 ; }
· يتم تكرار مجموعة الأوامر بين الأقواس { } عدد من المرات يتوقف على الشرط بين الأقواس ( )
· عندما يصبح الشرط . False يتوقف تنفيذ هذه الأوامر ويستمر أداء باقى البرنامج .
· التكرار يكون صفرا حينما يكون الشرط False من البداية
تمرين : تعديل برنامج حساب متوسط قائمة من الأعداد باستخدام While
# include < stdio.h >
main ( )
{
int n , count = 1 ;
float x , average , sum = 0 ;
printf ( “ how many number ? " ) ;
scanf ( “ % d , & n ) ;
while ( count < = n ) ;
{
printf ( “ x = ") ;
scanf ( “ % f " , & x ) ;
sum + = x ;
count ++;
}
average = sum / n ;
printf ( " \ n the average is % f " ; average ) ;
}


ملاحظات على For و While *
- الـ For دوارة عددية حيث تعتمد على العداد ويتنهى التكرار فيها بانتهاء عدد مرات التكرار
- أما الدوارة while فدوارة شرطية أى تعتمد على الشرط الذى يلى الأمر while حيث تتكرار الجمل التى تليها طالما كان الشرط صحيحا
3- الدوارة Do … while : تستخدم do while لتكرار تنفيذ جملة أو مجموعة جمل أكثر من مرة بناء على شرط معين . أى يتم تنفيذ الجمل التالية لـ Do ثم تختبر الشرط فإذا كان صحيحا تعيد التنفيذ وإلا توقف التكرار
إذن يتم التنفيذ مرة واحد على الأقل ثم يتم اختبار الشرط المنطقى ( ) فإذا كان True ينفذ مرة أخرى وإذا كان False يتوقف التكرار ويستمر تنفيذ البرنامج الأصلى
تمرين : إيجاد مجموع الأرقام من 0 إلى 9
# include < stdio.h >
main ( )
{
int count = 0 ;
int total = 0 ;
do
{
total + = count ;
printf ( “ count = % d , total = % d \ n “ , count ++ , total ) " ) ;
}
while ( count < = 10 ) ;
}

ثانياً : التفريغ : لتنفيذ سطر أو عدة سطور طبقا لشرط معين .أى تفريغ بعنى تغير مسار البرنامج . والتفريغ إما يكون مشروط أو غير مشروط
1) التفريغ المشروط
* جملة الشرط IF : تستخدم كلمة IF لتنفيذ جملة أو أكثر حسب شرط معين ( اختبار منطقى )
الصورة العامة
if ( condition )
statement ;
معناه إذا تحقق الشرط ( condition ) نفذ الجملة التالية أما إذا لم يتحقق الشرط فلا تنفذ هذه الجملة وانتقل إلى التى تليها
ملاحظة إذا كان هناك أكثر من جملة تريد تنفيذها مع if لابد من فتح قوس { قبل مجموعة الجمل والقوس } فى أخر الجمل كما يلى :
if ( condition )
{
statement 1 ;
statement 2 ;
}

* جملة if الشرطية المتداخلة : يمكن أن تتداخل جمل if فتأخذ الشكل التالى :
if ( condition )
if ( condition )
if ( condition )
وهذا معناه إذا تحقق الشرط الأول انظر إلى الشرط الثانى …. وهكذا

* الجملة الشرطية if …else : تستخدم لتنفيذ أحد اختيارين وتأخذ الصورة التالية :
if ( condition )
{
statement 1
}
else
{
statement 2
}
ومعناها إذا كان الشرط ( condition ) صحيح true نفذ الجملة الأولى ( statement 1 ) وإلا نفذ الجملة الثانية ( statement 2 ) أى الجملة الشرطية if ….else تستخدم لتحديد اختبار واحد من اختيارين ولا يمكن تنفيذ الاختيارين معا .

* الجملة الشرطية if …. else if : لتنفيذ خيار من مجموعة خيارات كمقارنة رقمين
الطريقة الأولى : باستخدام ثلاث جمل IF وفى كل جملة نضع أحد الشروط الثلاثة كما يلى : -
i = 5 ;
if ( i < 5 ) ;
printf ( “ i less than 5 " ) ;
if ( i = 5 )
printf ( " i equal to 5 " ) ;
if ( i > 5 )
printf ( “ i greater than 5 “ ) ;
وهذه طريقة تستهلك وقتا فى اختبار جمل الشرط
الطريقة الثانية
if ( condition )
statement 1 ;
else if ( condition )
statement 2 ;
else if ( condition )
statement 3 ;


وتكون صيغة المثال السابق كآلاتى :
I = 5 ;
if ( i < 5 )
printf ( “ i less than 5 " ) ;
else if ( i = 5 )
printf ( “ i equal to 5 " ;
else if ( i > 5 )
printf ( " i greater than 5 " ) ;

برنلمج : اشرح وظيفة البرنامج مع إيجاد الناتج إذا كانت القيم 13و7على التوالى :-
# include < stdio.h >
main ( )
{
float num1 , num2 ;
char op ;
while (1)
{
printf ( “ type number , operator , number \ n " ) ;
scanf ( “ % f % c % f ) , & num 1 , & op , & num 2 ) ;
if ( op = = ' + ' )
printf ( “ = % f " , num1 + num2 ;
else if ( op = = ' – ' )
printf ( “ = % f “ , num1 – num2 ;
else if ( op = = ' * ' )
printf ( " % f " , num1 * num2 ;
else if ( op = = ' / ' )
printf (“ = % f " , num1 / num2 ;
printf ( " \ n \ n " ) ;
}
}





رد مع اقتباس
قديم 09-16-2004, 05:52 AM   رقم المشاركة : 4
Net - Master
مشرف سابق
 
الصورة الرمزية Net - Master






 

اخر مواضيعي


Net - Master غير متواجد حالياً

Net - Master is on a distinguished road


2 - التفريع Switch …. case
تتسبب عبارة Switch فى اختبار مجموعة من عبارات معينة من عديد من المجموعات المتاحة للاستخدام . ويعتمد الاختبار على القيمة الحالية لتعيير موجود داخل عبارة Switch
تمرين : تعديل برنامج الآلة الحاسبة السابعة باستخدام Switch ….. case
#include < stdio.h>
main ( ) /* void main(void) */
{
float num1,num2;
char ch,op;
do
{
printf( “\in type num1 op num2: “ ) ;
scanf( “%f %c %f “, &num1,&op,&num2);
switch (op)
{
case “+”;
printf ( "sum = %f ", num1+num2);
break;
case “-”;
printf ( "sub = %f ", num1-num2);
break;
case “*”;
printf ( "mul = %f ", num1*num2);
break;
case “/”;
printf ( "div = %f ", num1/num2);
break;
default:
printf\n unknowen operator .”);
}
printf(“\n Again (y/n): “);
}
while (( ch=getch())== ‘y’ ):
}

ملاحظة : من التطبيقات المشهودة لاستخدام التفريع switch ….. case هو استخدامه فى قوائم الاختيارات ( menu (
تستخدم عبارة break فى انهاء دورات او الخروج من switch


3) التفريغ غير المشروط goto
معناه الانتقال الى مكان محدد داخل البرنامج بدون شرك
#include <stdio.h>
main( )
{
char ss;
ss:
printf(“\t ALLAH”);
goto ss;
}
ملاحظات : - لا ننصح باستخدام جملة goto ويفضل استخدام الدوال لتغيير مسار تنفيذ البرنامج
- للخروج من البرنامج السابق أضغط CTRL+C

** دوال تحسين المدخلات والمخرجات **
(1) داله مسح الشاشة clrscr( ) : ملف التوجيه conio.h
- تستخدم لمسح الشاشة ووضع المؤشر فى أول عمود من الصف الأول على الشاشة
- الشكل العام clrscr( )

(2) داله تغيير ووضع المؤشر gotoxy( ) : ملف التوجيه conio
- تستخدم لوضع الموشر فى العمود x من الصف y
- الشكل العام gotoxy( )
مثال : الانتقال بالمؤشر الى العمود 30 من الصف العاشر أكتب gotoxy(30,10)

(3) داله تغيير لون الكتابة ****color( ) : ملف التوجيه conio.h
- تستخدم لتغيير لون الكتابة التى ستطبع بعد الداله
- الصورة العامه
****color(color no)
أو
****color(color ****)
حيث يتم تحديد اللون إما برقم اللون أو باسمه . ولا بد من كتابة اسم اللون بالحرف الكبيرة فقط



الجدول التالى لوضع اكواد الألوان وأسماها

اسم اللون رقم اللون اللون
BLACK 0 اسود
BLUE 1 ازرق
GRCEN 2 أخضر
CYAN 3 سماوي
RED 4 أحمر
MAGENTA 5 بنفسجي
BROWN 6 بني
LIGHTGRAY 7 رمادي فاتح
DARKGRAY 8 رمادي غامق
LIGHBLUE 9 ازرق فاتح
LIGHTGREEN 10 أخضر فاتح
LIGHTRED 11 سماني فاتح
LIGHTRED 12 أحمر فاتح
LIGHTMAGENTA 13 بنفسجي فاتح
YELLOW 14 أصفر
WHITG 15 أبيض



مسائل :

1- اكتب برنامج لإيجاد جملة مبلغ ما اودع فى بنك لمدة 20 سنة بفائدة 6% لمبلغ 100 $ والمعادلة كما يلى :
f=p(1+i)n
حيث: n عدد السنوات p المبلغ I معدل الفائدة
** البرنامج **

#include <stdio.h>
#include <math.h>
main()
{
float p,r,n,i,f;
/* read input data */
printf( “please enter a value for the princepal (p) : “ );
scanf(“%f” k &p);
printf(“please enter a value for the interest rate( r) : “ );
scanf(“%f”, &r);
printf(“please enter a value for the number or year ( n) : “ );
scanf(“%f”, &n);
/*calculate i , then f */
i=r/100
f=p*pow((1+i),n);
/* write output */
printf( “\n the final value (f) is : %2f \n”,f);
}




2- اكتب برنامج لإيجاد الجذور الحقيقية لمعادلة من الدرجة الثانية بمعلومية ax2 + bx +c = 0
وباستخدام الصيغة



** البرنامج **
# include <stdio.h>
# include < math.h>
/* real roots of a quadratic equation */
main( )
{
float a,b,c,d,x1,x2;
/* read input data */
printf(“a= “ );
scanf(“%f”,&a);
printf(“b= “ );
scanf(“%f”,&b);
printf(“c= “ );
scanf(“%f”,&c);
/* carry out the calculations */
d=sqrt(b*b – 4*a*c);
x1=(-b+d)/(2*a);
x2=(-b-d)/(2*a);
/* write output */
printf(“x1= “,%e x2=%e “,x1,x2);
}
ملاحظة :
%e : تستخدم للعد الحقيقى بالصور الأسية



3- اكتب برنامج لتقويم كثيرة الحدود


*تمهيد:- لتبسيط البرنامج يتم وضع المتغير


** البرنامج **

# include<stdio.h>
# include<math.h>
main( )
{
float u,x,y;
/* read input data */
printf (“ x = “ );
scanf(“ %f “,&x );
/* carry out the calculations */
u= (x –1)/x;
y=u+pow(u,2.)/2+pow(u,3.)/3+poe(u,4.)/4+pow(u,5.)/5;
printf(“x= “,%f y =”%f “, x,y );
}




4- برنامج لإدخال كلمة سر
# include<stdio.h>
# include<conio.h>
main( )
{
char pass[10];
do
{
printf(“\n enter password: “ );
scanf(“%s”,pass);
}
while(strcmp(pass,”dahe”)!=0);
}
ملاحظات:
· هنا كلمة السر سوف تظهر أثناء الكتابة
· الدالة strcmp( ) : تقوم بمقارنه متغيرين من نوع عبارة حرفية string فإذا كان المتغيرين متطابقين كان الفرق بينهما صفر

تعديل لبرنامج كلمة السر:-
( عدم ظهور كلمة السر التى يكتبها المستخدم على الشاشة )


# include<stdio.h>
# include<conio.h>
main( )
{
chat ch;
char pass[10];
do
{
****color(WHITE);
****background(BLUE);
cprintf(“\n enter password: “ );
****backgrounf(WHITE);
cscanf(“%s”,pass);
}
while(strcmp(pass,”dahe”)!=0);
}


اكتب برنامج:
لطباعة عبارة حرفية تم ادخالها مع بيان عدد حروفها وعدد الكلمات

/* count characters and word in a phrase عبارة typed in */
# include <stdio.h>
main( )
{
int charcnt=0;
int wordcnt=0;
char ch;
printf(“ type in a phrase : \n “);
/* read characters and quit loop on [ return ] */
while((ch=getche())!=’\r’);
{
charcnt ++ /* count character */
if(ch==’ ‘ ); /* space ? */
wordcnt++;
}
printf(“\n character count is %d “,charcnt );
printf(“\n word count is %d “ , wordcnt );
}
تذكـــر
استخدام الدالة عندما تريد
printf( ) طباعة حروف او أرقام
puts( ) طباعة عبارات حرفية فقط
scanf( ) ادخال حروف او أرقام
gets( ) ادخال عبارات حرفية
getch() ادخال حرف دون إظهاره على الشاشة
getche( ) ادخال حرف مه اظهاره على الشاشة
clrscr( ) مسح الشاشة
gotoxy( ) تغيير موضع المؤشر
****color( ) تغيير ألوان الكتابة
****background( ) تغيير ألوان خلفية الكتابة
cprintf( ) , cputs الطباعة بالألوان على الشاشة
cscanf( ), cgets ادخال البيانات بالألوان


الـــــدوال FUNCTION

الدوال فى لغة الــ C نوعين :-
(1) دوال اللغة Built in Function وهى الدوال القياسية مثل دالة printf( ) أو دالة scanf( ) وهى دوال عامة يستطيع اى مبرمج استخدامها
(2) دوال المستخدم المبتكرة User Function :-
- وهى الدوال التى من وضع المبرمج
- والهدف منها : انه عند تكرار مجموعة من سطور الأوامر اكثر من مرة فى مواضع مختلفة فإن أوامر التكرار لن تكون ذات منفعة . ولذلك يتم كتابة هذه السطور منفصلة عن البرنامج الأساسى

مزايا استخدام الدوال
1- عدم تكرار التعليمات داخل البرنامج : حيث يتم إنشاء الدالة مرو واحدة ثم يتم استدعائها أكثر من مرة عند الحاجة إليها
2- باستخدام الدوال يصبح البرنامج أكثر وضوحاً

الصور العامة:
# include < file****>
function declarations;
main( )
{
function1
function2
}

function1
{
------
------
}

function2
{
------
------
}

أذن تتكون الدالة من :-
(1) الإعلان عن الدالة (2) جسم الدالة

مثال : دالة بدون دليل

#include <stdio.h>
#include<conio.h>
void line2(void);
main( )
{
clrscr( )
line2( )
printf(“ ** Allah the god of all world ** \n “);
line2( )
/* end of main( ) function */
}
void line2(void)
{
int j;
for(j=0;j<=40;j++);
printf( “ * “);
printf(“\n “);
}
فى البرنامج السابق أنشأنا دالة بالاسم line2( ) وقد ظهرت كلمة line2( ) فى ثلاث مواضع :-
الموضع الأول : يسمى الأعلان عن الدالة function declaration يكون ذلك قبل الدالة الرئيسية main( ) كما فى السطر رقـــم 3 ونلاحظ الفاصلة المنقوطة فى نهاية الجزء لأنه أعلان.
الموضع الثانى : داخل الدالة الرئيسية main( ) ويظهر فى أى مكان داخل الدالة الرئيسية ويسمى function coling أى استدعاء الدالة ويكون بالشكل line2( ) كما فى السطر 7و9 وفيه يتم كتابة اسم الدالة فقط بدون نوع وإذا كان لها معاملات نكتب المعاملات.
الموضع الثالث : يكتب بعد انتهاء الدالة الرئيسية main( ). وهذا الجزء يسمى تعريف الدالة function definition وفيه يتم كتابة محتويات الدالة . وتبدأ فى البرنامج من السطر رقم 11 باسم الدالة ثم بالقوس { وكانها برنامج ونبدأ كتابة تعليمات الدالة بعد القوس ثم ننتهى بالقوس }





رد مع اقتباس
قديم 09-16-2004, 05:55 AM   رقم المشاركة : 5
Net - Master
مشرف سابق
 
الصورة الرمزية Net - Master






 

اخر مواضيعي


Net - Master غير متواجد حالياً

Net - Master is on a distinguished road


** أنواع الدوال Function Type **

int function دوال تعيد قيمة صحيحة
float function دوال تعيد قيمة حقيقية
string function دوال تعيد عبارة حرفية
void function دوال لا تعيد اى قيمة
struct function دوال تعيد قيمة من نوع structure

تمرين :
# include <stdion.h>
int sum(int a, int b ) الاعلان عن الدالة
main( )
{
int z , x = 10 , y = 40;
z = sum(x,y);
printf(“\n\n z = %d “ , z );
}
/* الدالة */
int sum(int a , int b )
{
int s;
s = a + b ;
return s;
}
** ملاحظات على البرنامج **
- فى السطر رقم 2 تم الاعلان عن دالة بالاسم sum( ) وسبقت بالكلمة int وهى نوع الدوال وتقابل كلمة void مع ملاحظة وجود متغيرين بين الأقواس وهما معاملات الدالة.
- فى السطر رقم 6 يتم استدعاء الدالة وبين أقواسها المتغيرات x ,y ويستخدمان كمعاملات للدالة (لابد من كتابة معاملات الدالة لأننا أعلنا عنها بهذه الصورة )
- تشمل السطور من 9 الى 14 على جمل الدالة نفسها :-
· السطر رقم 9 نعوض عن المتغير a بالقيمة الموجودة فى المتغير x وهى القيمة 10. كذلك نعوض عن المتغير b بالقيمة الموجودة فى المتغير y وهى 40.
· السطر رقم12 نجمع محتويات كلا من المتغير a والمتغير b ونضع النتيجة فى متغير جديد هو s
· السطر رقم 13 نطلب اعادة محتويات المتغير s الى مكان استدعاء الدالة باستخدام كلمة return
· نفهم ان جملة z = sum(x,y) الموجودة بالسطر رقم 6 تعادل الجملة z = s .
ملاحظة هامة: معنى الدالة يتضح من القاعدة التى تقول أن نوع الدالة يتوقف على القيمة المرتجعة من الدالة.
فإذا كانت القيمة المرتجعة int كان نوع الدالة int
وإذا كانت القيمة المرتجعة float كان نوع الدالة float
أما الدالة التى لا تعيد قيمة(الدالة لا تشتمل على جملة return ) فتكون من نوعvoid

** استدعاء الدالة **
- يتم استدعاء الدوال اما بمعاملات او بدون معاملات
- تكون الدالة بدون معاملات مثل الدالة void line2(void) اى عدم كتابة قيم بين أقواس الدالة

* برنامج يوضح كيفية استدعاء الدالة بمعاملات *
# include < stdio.h>
# include <conio.h>
void line3(int no)
main( )
{
clrscr( )
line3(30);
printf(“ ** Allah the god of all world ** \n “);
line3(70);
}
/* الدالة */
void line3(int no)
{
int j , no;
for(j = 0 ; j <= no ; j++ )
printf(“ * “ );
printf(“\n”);
}
** ملاحظة : الدالة هنا لها معامل واحد من نوع صحيح وهو no. وفى كل مرة يتم ارسال قيمة مختلفة للمعامل وذلك عند استدعاء الدالة.



** استدعاء الدالة بمتغيرات **
- ممكن استدعاء الدالة بمعاملات من نوع قيم ثابتة موجودة بالبرنامج نفسه
- وأيضا يمكن ان تكون هذه المعاملات متغيرات تستقبل قيمها من المستخدم او من داخل البرنامج وهذا يفيد فى حالة تغير واختلاف المتغيرات فى كل مرة ( إعطاء مرونة فى التعامل مع البرنامج )

* برنامج لتحديد الكمية الأكبر من ثلاث كميات صحيحة
# include <stdio.h>
/* determine the largest of three integer quantities */
main( )
{
int a, b, c, d;
/* read the integer quantities */
printf(“\n a = “);
scanf( % d “ , &a );
printf(“\n b = “);
scanf( % d “ , &b );
printf(“\n c = “);
scanf( % d “ , &c );
/* calculate and display the maximum value */
d = maximum( a, b );
printf(“\n \n maximum = % d , maximum(c ,d ));
}
/* determine the larger of two integer quatities */
maximum(x ,y )
int x ,y;
{
int z;
z = (x >= y ) ? x | y;
return(z);
}
ملاحظة هامة : من ضمن أوامر التحكم ( علامة الاستفهام الشرطية ?| ) حيث :-
- (x > = y ) عبارةtest اختبار
- ؟ عبارة عن سؤال if
- | عبارة عن Else
بمعنى إذا كان الاختبار (x >= y ) صحيحا يأخذ القيمة x وإذا كانت القيمة غير صحيحة يأخذ القيمة y


** باستخدام الدوال أكتب برنامج
لتحويل الساعات إلى دقائق مع إيجاد الفرق

# include<stdio.h>
/* calculates difference between two times */
main( )
{
int mins1 , mins2;
printf(“ type first time ( from 3:22 ): “ );
mins1=getmins();
printf(“ type second(later) time “ );
mins2=getmins();
printf(“ Difference is %d minutes.” , mins2-mins1);
}
/* getmins function */
/* gets time in hours : minutes formal */
/* return time in minutes */
getmins( )
{
int hours, minuts;
scanf(“ %d : %d “, &hours , &minutes);
return(hours * 60 + minutes);
}

* الآتى برنامج يستعمل دالة من نوع int تتكون من دالتين :-
- دالة لحساب مربع القيمة وإعادة حاصل الضرب الى الدالة الرئيسية
- دالة تحسب نكعب قيمة وتعيدها عند الاستدعاء
# include < stdio.h>
int sqr(int a):
int qup(int q):
main( )
{
int s , qu , no =10;
s = aqr(no);
qu = qup(no);
printf(“\n squer of no = %d “ , s ):
printf(“\n qupic of no = %d “ , qu ):
}
int sqr(int a)
{
int v1;
v1= a*a;
return v1;
}
int qup(int q )
{
int v2;
v2=q*q*q;
return v2;
}
نتيجة التنفيذ :
squar of on = 100
qupic of on = 1000


الآتي برنامج يستعمل دالة من نوع float تقوم بجمع رقمين وإعادة النتيجة الى الدالة الرئيسية عند الاستدعاء . والقيمة المرتجعة قيمة حقيقية float ويالتالى يكون نوع الدالة float

# include <stdio.h>
# include < conio.h>

float add( float x , float y )

main( )
{
float no1, no2;
printf(“\n enter no1 , no2 : );
scanf(“ %f ,%f “ , &no` ,&no2 ):
printf(“\n addition of number is %f”, add(no1,no2) );
}

float add(float x , float y );
{
float yt;
yt= x + y ;
return yt;
}

عند التنفيذ نحصل على :-
Enter no1 ,no2 : 3,2 , 4,3
Addition of squares is 6.5



** الآتي برنامج لإيجاد العدد فردى أم زوجى وكذلك موضحا العدد سالب أم موجب

# include < stdio.h>
/* tests use of external variables */

int keynumb;

main( )
/* external variables */
{
printf(“ type keynumb : “ );
scanf(“%d “ , &keynumb );
addeven( );
negative( );
}

/* checks if keynumb is odd or even */
oddeven( )
{
if (keynumb % 2 )
printf(“ keynumb is odd. \n”);
else
printf( “ keynumb is even. \n”);
}

/* checks if keynumb is nagative */
ngative( )
{
if (keynumb < 0 )
printf(“ keynumb is negative . \n”);
else
printf( “ keynumb is positive . \n”);
}


الماكــــرو MACROS

هو مجموعة من التعليمات تؤدى غرض معين ويشبه إلى حد كبير الدالة function ويتم إنشاء الماكرو مرة واحدة وبعد ذلك يمكن استدعائه كلما احتجت إيه ( أى يتم تعريف الثوابت او عمليات محدده فى بداية البرنامج وتكون لها صفه العمومية للاستخدام داخل الدالة الرئيسية والدوال الفرعية )
إذن : الماكرو من ضمن بناء برنامج لغة الـــ C

كيفية إنشاء الماكرو :-
- يتم ذلك باستعمال الكلمة #define
- وهذه الكلمة تسمى directive او preprocessor ومعناها التوجيه

* الصورة العامة # define macro line
مثلا #define a 5
وهى عبارة عن تعريف طرف بطرف ومعناها عرف المتغير a بالقيمة 5
تمرين يوضح كيفية الإعلان عن الماكرو وكيفية استعماله
# include<stdio.h>
# define sum(a,b) a+b
# define mul(x,y) x*y

main ( )
{
int v1=5 , v2 = 10;
printf(“\n\n sum(v1,v2) = % d”,sum(v1,v2);
printf(“\n\n mul(v1,v2) = % d”,mul(v1,v2);
}
ملاحظات على البرنامج :-
- فى السطر رقم 2 استخدمنا كلمة define لتعريف ماكرو بالاسم sum ووظيفته استبدال المتغيرينa,b بالصور a+b
- كذلك فى السطر رقم 3 يستبدل المتغيرين x,y بنتيجه الضرب x*y
- ومعناها كلما قبل المترجم اللغة الطرف الأول للماكرو يستبدله بالطرف الثانى
ملاحظ هامة : المتغيرين a,b يمكن استبدالهما بأى متغيرين أو قيمتين داخل البرنامج. واسم الماكرو هو الذى يحدد العملية التى يقوم بها الماكرو ( هل هى عملية جمع أم ضرب أم ….. بناء على المعادلة الموجودة فى الطرف الأيمن من الماكرو )

* الفرق بين الماكرو وبين الدالة :- اى برنامج يمر بثلاث مراحل :-
المرحلة الأولى : كتابة وهذا يسمى source code ويخصص لملف المصدر الامتداد .C
المرحلة الثانية : ترجمة البرنامج للغة يفهمها الحاسب وتسمى هذه المرحلة compilation ويخصص للملف الامتداد .obj
المرحلة الثالثة : ربط الملف الـ object بمكتبات اللغة ليصبح قابل للتنفيذ وتسمى هذه العملية linking ويخصص لهذا الملف الإمتداد .exe
ومن خلال هذه المراحل تستطيع ان تستخرج الفرق بين الماكرو وبين الدالة كما يلى :-
1- فى مرحلة الكتابة ايس هناك فرق بين الماكرو وبين الدالة.
2- فى مرحلة الترجمة compilation يتم تحويل تعليمات الدالة الى لغة الآلة object وتنتظر وحدة الربط linking ولا تنفذ الدالة إلا فى مرحلة الربط
3- اما فى حالة الماكرو يتم استبدال الماكرو بنتيجة تنفيذ الماكرو
( فى التمرين السابق يتم استبدال الماكرو الموجود فى السطر رقم 7 بنتيجة التنفيذ مباشرة . اى يتم وضع القيمة 15 وهى نتيجة تنفيذ الماكرو مكان sum(v1,v2) وبالتالى عندما تاتى مرحلة التنفيذ يجد البرنامج نتيجة تنفيذ الماكرو جاهز وهى 15 )
\ مزايا الماكرو :-
1- بسيط فى الإنشاء
2- بسيط فى الاستعمال ويعطى فى النهاية ملف تنفيذى أصغر
3- إذا كانت العملية المطلوبة بسيطة ويمكن كتابتها فى سطر واحد نستعمل الماكرو.

تمرين :
# include<stdio.h>
# define pi 3.14159
main ( )
{
float area(float);
float radius;
printf(“enter radius sphers : “);
scanf(“%f”, &radius):
printf(“area of sphere is 2f”,area(radius));
}
/* returns ares of sphere */
float area(rad)
float rad;
{
return(4*pi*rad*rad);
}





رد مع اقتباس
قديم 09-16-2004, 06:02 AM   رقم المشاركة : 6
Net - Master
مشرف سابق
 
الصورة الرمزية Net - Master






 

اخر مواضيعي


Net - Master غير متواجد حالياً

Net - Master is on a distinguished road


المصفوفات ARRAYS

مقدمة *
تنقسم البيانات الى بيانات حرفية char وبيانات رقمية int وبيانات حقيقة float وتسمى هذه الأنواع ( int , float , char ) بالأنواع الرئيسية للبيانات حيث لا يمكن تجزئتها أقل من ذلك.
وهناك انواع أخرى من البينات تسمى بالأنواع المشتقة ( Type dived data ) من هذه النواع المصفوفات arrays .

** المصفوفة **
المصفوفة array هى مجموعة من البيانات التى تتشابه فى النوع ولها اسم مشترك. تتشابه فى النوع بمعنى أن تكون البينات التى تخزنها فى المصفوفة كلها اعداد صحيحة int او اعداد ذات علامة عشرية float . فيمكن ان نضع المصفوفة من اى نوع من انواع البيانات.

*الإعلان عن المصفوفة * للإعلان عن إحدى المصفوفات هناك ثلاثة أشياء يجب ان تحددها.
(1) اسم المصفوفة : وهو اسم تختاره مثلما تختار اسم أى متغير
(2) عدد العناصر داخلها
(3) نوع البيانات المستخدم فيها
مثلاً : نفرض أنك تريد تخزين مرتبات 120 موظفاً يعملون فى شركتك وكانت مرتبات هؤلاء الموظفين تحتوى على **ور عشرية. فى هذه الحالة شيكون نوع البيانات float ويتم الاعلان عن المصفوفة كما يلى : float salary[120]

تنقسم المصفوفة إلى المصفوفة ذات بعد واحد ومصفوفات ذات البعدين.
** المصفوفة ذات البعد الواحد :-
مثلا : A[ 2 5 9 12 15 ] وتسمى مصفوفة ذات بعد واحد لأنها تتكون من صف واحد أو عمود واحد وفيها حرف A هو اسم المصفوفة والأرقام هى عناصر المصفوفة ويتم الإشارة إلى كل عنصر برقم العنصر اى بترتيبه داخل المصفوفة


** الإشارة إلى عناصر المصفوفة **
- يتم ذلك بان تذكر اسم المصفوفة ثم رقم المصفوفة الذى تريد التعامل معه بين القوسين [ ]
- اى عندما ترغب فى ذكر رقم العنصر داخل المصفوفة يجب أن تبدأ العد داخل المصفوفة من صفر وليس من 1
- مثلاً : إذا كنت تريد وضع الرقم أو القيمة 75 فى العنصر 3 من المصفوفة المسماه student نكتب التالى : student[3] = 75
- وإذا كنت تريد ان تنقل القيمة الموجودة فى العنصر 38 من المصفوفة salary إلى أحد المتغيرات نكتب التالى : a = salary[37]
- كذلك يمكن ان تمرر القيمة الموجودة فى أحد عناصر المصفوفة الى اجراءات مكتبة التشغيل مثل
printf(“ The higest mark is %d “, student[45]);

** البرنامج التالى يعرض مثالاً عن كيفية الإعلان عن إحدى المصفوفات واستخدامها :-
# include <stdio.h>
# define max 10
void main(void)
{
float salary[max];
float average;
int count;
average = 0.0;
for(coint=0; count<max ; count++)
{
printf(“ please enter salary for employee %d”, count+1);
scanf(“%f”, &salary[count]);
}
printf(“\n\n salary average is : %f”, average/max);
}
ملاحظات على البرنامج :-
- هذا البرنامج يطلب من المستخدم إدخال مرتبات 10 موظفين ثم يقوم بحساب وطباعة متوسط هذه الرواتب.
- فى بداية البرنامج نعلن عن المصفوفة float salary[max] هذه المصفوفة تستخدم لتخزين 10 اعداد ذات **ور عشرية وبالتالى فإن الإعلان السابق يساوى float salary[10]
- بعد ذلك نعلن عن المتغير average وهو تستخدم لتخزين مجموع الرواتب حتى نتمكن من استخراج متوسطها.
- لهذا نستخدم جملة التكرار for لادخال 10 موزفين لذلك نستخدم الإجراء scanf() لنطلب من المستخدم إدخال الرواتب scanf("%f ", &salary[count]
- وكلما ادخل المستخدم أحد الرواتب أضفنا قيمته الى المتغير average كما يلى
average += salary[count]

الملاجظة الهامة : هى كيف استخدمنا المتغير count كعداد لتكرار for وفى نفس الوقت استخدمناه للإشارة للعناصر المختلفة داخل المصفوفة. Scanf(“%f”, salary[couny]) ففى بداية التكرار سيكون المتغير count يساوى الصفر

** تهيئة المصفوفة عند الإعلان عنها **
- من الممكن ان تقوم بتهيئة المصفوفة عند الإعلان عنها إذا كنت تعرف مسبقا المحتويات التى ستضعها فيها int marks[5] = { 12 4 7 9 11} هنا نعلن عن مصفوفة مكونه من خمسه عناصر عددية صحيحة int

* المصفوفة الغير محددة العدد **
- إذا كنت ستهيئ مصفوفة عند الاعلان عنها يمكن ان تترك للمترجم مهمة حساب عدد العناصر فيها.
- مثلاً : int marks[ ] = { 5 9 4 10 7 }
- هنا أعلنا عن المصفوفة ولكن لم نحدد عدد العناصر فيها لأن المترجم سيقوم بِعـَـد القيم المذكورة بين القوسين { } ويحدد حجم المصفوفة تلقائيا .




** برنامج **
# include <stdio.h>
/* calculate the average of a numbers , the compute deviation of each number about the average */
main( )
{
int n , count ;
fliat avg, d , sum=0 ;
/* read in a value for n */
printf(“\n how many numbers will be average? “;
scanf(“%d”, &n);
printf(“\n”);
/* read in the numbers and calculate ther sum */
for(count = 0 ; count < n count++ )
{
printf(“i = %d x= “, count+1);
scanf(“%f”, &list[count]);
sum+= list[count];
}
/* calcuate and write out the average */
avg = sum/n;
printf(“\n the average is %5.2f\n\n “, avg);
/* calculate and write out the deviations about the average */
for(count = 0 ; count < n ; count++)
{
d=list[count] – avg ;
printf(“i = %d x%5.2f d=%5.2f \n” , count+1, list[count] , d);
}
}
ناتج هذا البرنامج :-
The average is 4.18
i = 1 x = 03.00 d = -1.18
i = 2 x = -2.00 d = -6.18
i = 3 x = 12.00 d = 7.82
i = 4 x = 4.40 d = 0.22
i = 5 x = 3.50 d = -0.68



** برنامج إعادة ترتيب قائمة من الأعداد **
# include<stdio.h>
# define size 100
/* reorder a one-dimensinal, integer array from smallest to largest */
main( )
{
int i , n , x[size];
void reorder(int n , int x[ ]);
/* read in the a value for n */
printf(“\n how many number will be entered ? “ );
scanf(“%d”, &n );
printf(“\n”);
/* read in the list of number */
for(i = 0 ; i<n ; i++)
{
printf(“i = %d x = “, i+1);
scanf(“%d”, &x[ i ]);
}
/* reprder all array elements */
reorder(n , x )
/* display the reordered list of numbers */
print(“\n\reordered list of number :\n\n “);
for(i=0;i<n; i++)
printf(“i=%d x=%d\n”, i+1 , x[ i ] );
}
int i, item ,temp;
for(item = 0;item<n-1 ; item++ )
if(x[ i ] < x[item])
{
/* interchange twwo elements */
temp = x[item];
x[item] = x[ i ];
x[ i ] = temp ;
}
return;
}



* المصفوفة ذات البعدين :*
- هى المصفوفة التى ترتب عناصرها فى شكل صفوف وأعمدة
- ويتم الإعلان عنها بالشكل التالى int a[5] [10] ومعناه أن المصفوفة ش مصفوفة ذات بعدين 5 صفوف و10 أعمده ويتم الاشارة الى العنصر برقم الصف ورقم العمود
ملاحظة : عند استخدام مصفوفة ذات البعدين لابد من استعمال دوارة for
* إعطاء قيمة ابتدائية للمصفوفة: يمكن إعطاء قيمة ابتدائية للمصفوفة ذات البعدين كمايلى
int a[3][4] =
{
{4,5,7,8 },
{3,2,4,5},
{7,8,9,6}
};
ملاحظة : فى هذا الشكل يأخذ العنصر رقم 0,0 القيمة 4 والعنصر رقم 0,1 القيمة 5
- تتحد القيم الأربع فى أول زوج أقواس { } داخلية لعناصر المنظومة فى الصف الأول وتتحدد القيم الموجودة فى زوج الأقواس { } التالى لعناصر المنظومة فى الصف الثانى000 وهكذا
شكل آخر للمصفوفة ذات البعدين :
int values[3][4] = {1,2,3,4,5,6,7,8,9,,10,11,12};
فى هذا الشكل يأخذ العنصر رقم 0,0 القيمة 1 أى values[0][0] ويـأخذ العنصر 0,1 القيمة 2 أى values[0][1]
مثال: على استخدام المصفوفات متعددة الأعمدة
# include <stdio.h>
# define stud 3
# define marks 10
void main (void)
{
int student[stud][marks];
int c1 ,c1 ;
for(c1 = 0 ; c1 < stud ; c1++)
for ( c2 = 0 ; c2 < marks ; c2++)
{
printf ( “ enter marks: %2d for student %2d : “ , c2+1 , c1+1 );
scanf (“ %d “, &student[c1][c2]);
}
for(c1 = 0 ; c1 < stud ; c1++ )
for(c2= 0 ; c2 < marks ; c2++)
printf(“ student [%2d] , marks[%2d] = %d\n “, c1+1, c2+1 , student[c1][c2]);
}



ملاحظات : فى بداية البرنامج نعلن عن المصفوفة student ذات البعدين
int student[stud][marks];
- وبعد ذلك نستخدم تكرارين for داخل بعضهم . نستخدم هذين التكرارين لطلب الدرجات من المستخدم. التكرار الأول يستمر بعــد الطلاب والتكرار الثانى بعد الدرجات.
- كذلك نستخدم تكرارين لنطبع الدرجات التى أدخلها المستخدم.

* برنامج : جمع جدولين من العداد اى نحسب مجموع العناصر المتناظرة فى الجدولين أى نحسب
c[i][j] = a[i][j] + b[i][j]
ثم نستخرج الجدول الجديد محتوياً على المجموع

# include <stdio.h>
# define mrow 20
# define mcol 30
/* caluculates the sum of the elements in two tables of integers */
void main (void)
{
int mrow , mcol;
/* array definitions */
int a[mrow][mcol] , b[mcol][mcol] , c[mcol][mcol];
/* function protyotypes */
void readinput(int a[ ][mcol],int nrow , int ncol);
void computesum ( int a[ ][mcol], int b[ ][mcol] , int c[ ][mcol], int nrow , int ncol);
void writeoutput ( int c[ ][mcol], int nrow , int ncol );

printf ( “ How many rows ?” );
scanf (“ %d “ , nrow);
printf ( “ How many columns ?” );
scanf (“ %d “ , ncol);

printf ( “ \n\n first table : \n” );
readinput( a, nrow , ncol );

printf ( “ \n\n second table : \n” );
readinput( b, nrow , ncol );

computsum(a, b, c, nrow, ncol);
printf ( “ \n\n sums of the elements : \n \n” );
writeoutput(c , nrow , ncol);
}

void readinput( int a[ ][mcol] , int m , int n )

/* read in a table of integers */
{
int row , col ;
for(row = 0 ; row < m ; row ++ )
{
printf\n enter data for row no. %2d \n “ , row+1 );
for( col = 0 ; col < n ; col++)
scanf(“ %d “, &a[row[col]):
}
return;
}

void computsum(int a[ ][mcol] , int b[ ][mcol] , int c[ ][mcol] , int m ,int n )
/* add the elements of two integer tables */
{
int row, col ;
for(row = 0 ; row < m ; row++)
for(col = 0 ; col < n ; col++)
c[row][col] = a[row][col] + b[row][col];
return;
}

void writeoutput(int a[ ] [mcol] , int m , int n )
/* write out a table of integers */
{
int roe , col ;
for (row = 0 ; row <m ; row ++)
{
for(col = 0 ; col < n ; col ++)
printf(“%4d “, a[row][col]):
printf(“\n”;
}
return;
}
ملاحظات :
- a ,b ,c مصفوفة ثنائية الأبعاد ولكل منها نفس عدد الصفوف ونفس عدد العمدة
- row متغير صحيح يحدد العدد الفعلى للصفوف فى كل جدول.
- ncol متغير صحيح يحدد العدد الفعلى للأعمدة فى كل جدول
- row عداد صحيح يحدد رقم الصف
- col عداد صحيح رقم العمود

* أفرض ان البرنامج استخدم فى جمع الجدولين الاتى :-

الجدول الثانى الجدول الأول
10 11 12 13 1 2 3 4
14 15 16 17 5 6 7 8
18 19 20 21 9 10 11 12

والاتى تنفيذ البرنامج :-
how many rows? 3
how many columns? 4
first table :
enter data for row no. 1
1 2 3 4
enter data for row no. 2
5 6 7 8
enter data for rpw no. 3
9 10 11 12

second tables :
enter data for row no. 1
10 11 12 13
enter data for row no. 2
14 15 16 17
enter data for row no. 3
18 19 20 21

suns if the elements :
11 13 15 17
19 21 23 25
16 19 31 33





رد مع اقتباس
قديم 09-16-2004, 06:04 AM   رقم المشاركة : 7
Net - Master
مشرف سابق
 
الصورة الرمزية Net - Master






 

اخر مواضيعي