أخر المشاركات | أفضل الاعضاء هذا الشهر | أفضل 10 اعضاء |
|
|
|
---|
2 مشترك
دروس تعليم لغة السى بلس بلس C++
المشاركة رقم: ( 1 )
- GeNeRaL_Dzتقني نشيط
- المشاركات : 193
نقاط : 264
التقييم : 3
تاريخ التسجيل : 27/03/2013
19.01.14 10:41
الدرس الاول
لتعليم لغة السى بلس بلس C++
أولا وقبل البدء في تعلم البرمجة , علينا أن نوضح بعض الأشياء , مثل خصائص البرنامج الجيد :
1) البساطة والوضوح .
2 ) الدقة ( صحة الخطوات ) .
3 ) التوفيق .
والآن وبعد تعريف البرنامج الجيد نقوم بتعريف أنواع البيانات , والتي تنقسم إلى بيانات بسيطة , وبيانات مركبة .
البيانات البسيطة : مثل الأعداد , والرموز ( الحروف ) والبيانات المنطقية , وغير ذلك من البيانات البسيطة المشابهة .
البيانات المركبة : مثل المصفوفات , السلاسل الرمزية , وغير ذلك من البيانات المركبة المشابهة .
نقوم الآن بشرح وصف البيانات العددية , وهيا كالتالي :
المتغيرات Variables :
1 ) متغيرات صحيحة Integer variables :
ويتم تعريفها في البرنامج كالتالي <===<< ; int x,y,z
حيث ترمز كلمة int للمتغير الصحيح , وباقي الرموز هيا تعريف المتغير في البرنامج الرئيسي .
مثل :
;x=3
;y=-4
;z=0
2 ) متغيرات حقيقية Float variables :
ويتم تعريفها في البرنامج كالتالي <===<< ; float a,b,c
حيث ترمز كلمة float للمتغير الحقيقي , وباقي الرموز هيا تعريف المتغير في البرنامج الرئيسي .
مثل :
; a=5.5
; b=1.3
; c=-1.1
ملاحظة : هذا الرمز ; نقوم بوضعه كنهاية عند أي جملة رياضية أو منطقية أو علاقة مكتملة , كما سبق ولاحظنا في السابق , حتى يتعرف معالج البرنامج على نهاية هذه الجملة .
والآن نستعرض بعض الرموز التي تستخدم في تعريف المتغيرات :
c% ===== للحرف
s% ===== للسلسة الرمزية
f% ===== للعدد الحقيقي
d% =====للعدد الصحيح
x% =====للعدد الصحيح بالنظام السادس عشر
o% =====للعدد الصحيح بالنظام الثماني
n\ ===== القفز إلى سطر جديد
r\ ===== البدء من أول السطر
t\ =====التقدم سبع ( 7 ) مسافات
وسأتقدم بشرح طريقة استعمال كل رمز لاحقاً إن شاء الله .
والآن , نقوم بتعريف بعض الدوال والأكواد المستعملة في هذه اللغة , ونبدأ بدالة القراءة scanf .
الشكل العام للدالة في البرنامج :
;(Scanf(“Format”,&Varibale
Format : تعني تعريف نوع المتغير ( أحد الرموز السابق ذكرها , مثل f% ,أو d% أو غير ذلك من الرموز السابقة ) .
Variable : رمز المتغير الذي تم تعريفه ( وهو الرمز الذي تم تعريف المتغير به في بداية البرنامج ) .
وستتضح الرؤية بإذن الله عند شرح أول برنامج بسيط للتوضيح .
دالة الطباعة أو دالة الإخراج printf .
الشكل العام للدالة في البرنامج :
هناك شكلان لهذه الدالة , الأول شكل يقوم بطباعة جملة معينة فقط أو تعليق معين مثل :
;("printf("Comments
حيث Comments : أي جملة أو تعليق يرغب المبرمج في إضافته .
والشكل الآخر لدالة printf لا يختلف كثيراً عن الشكل الأول , إلا أنه مصحوب بقيم للمتغيرات أو نتائج معينة , مثل :
;(Printf(“Comments and Formats”,variable
حيث Comments : جملة أو تعليق مناسب لرسالة الطباعة .
Formats : نوع المتغير المطلوب طباعته .
Variable: رمز المتغير حسب تعريفه في البرنامج .
والآن نقوم بكتابة برنامج يقوم باستقبال قيمة عددية x,y مع إيجاد مجموعهما .
The Program :
كود:
#include <stdio.h>
#include <conio.h>
void main()
{
int x,y,sum=0;
clrscr();
printf(“Enter Value Of X = “);
scanf(“%d”,&x);
printf(“Enter Value Of Y = “);
ScanF(“%d”,&y);
Sum=x+y;
Printf(“ Sum = X + y = %d + %d = %d ”,x,y,sum) ;
getch();
}
[C]************[/C]
في المثال السابق قمنا بتعريف مكتبين هما :
مكتبة : <stdio.h> وهذه المكتبة مهمة حتى تقوم كل من دالتي scanf , و printf بالعمل .
وكتبة : <conio.h> وهذه المكتبة مهمة حتى تقوم كل من دالتي clrscr , و getch بالعمل , والأولى تقول بتنظيف الشاشة , والتانية تقوم بإيقاف الشاشة عند نهاية البرنامج حتى يتمكن المبرمج من رؤية نتائج برامجه .
طبعا كل مكتبة تحتوي على عدد من الدوال , ولا تعمل هذه الدوال من دون مكتابتها الخاصة , ويمكن للمبرمج معرف هذه المكتبات والدوال من المساعدة الخاصة بالبرنامج ( Help ) .
بعد تعريف المكتبتين قمنا بتعريف المتغيرات , وهيا :
x : المتغير الأول .
y : المتغير الثاني .
sum : حاصل جمع المتغيرين , وقمنا بتصفيره حتى لا يتم الأخذ بأي قيمة أخرى له قد تكون عالقة في ذاكرة الجهاز .
بعد تعريف المتغيرين قمنا بطباعة جملة توضيحية وظيفتها طباعة جملة على الشاشة توضح للمبرمج ضرورة إدخال قيمة للمتغير X , وهيا توضيحية .
وبعد ذلك قمنا بكتابة دالة scanf وظيفتها استقبال قيمة X وتخزينها في ذاكرة الجهاز .
ونفس الشيء بالنسبة للمتغير Y .
وبعد ذلك قمنا بإيجاد حاصل جمع كل من x,y , وتخصيص قيمة الجمع للمتغير sum في جملة رياضية منطقية .
وبعد ذالك قمنا بكتابة جملة طباعة printf , وظيفتها طباعة رسالة معينة عن جمع العددين , وحاصل هذا الجمع .
وبعد ذلك قمنا بكتابة جملة getch ووظيفتها كما سبق وذكرها إيقاف الشاشة حتى يتمكن المبرمج من رؤية نتائج برنامجه .
1) البساطة والوضوح .
2 ) الدقة ( صحة الخطوات ) .
3 ) التوفيق .
والآن وبعد تعريف البرنامج الجيد نقوم بتعريف أنواع البيانات , والتي تنقسم إلى بيانات بسيطة , وبيانات مركبة .
البيانات البسيطة : مثل الأعداد , والرموز ( الحروف ) والبيانات المنطقية , وغير ذلك من البيانات البسيطة المشابهة .
البيانات المركبة : مثل المصفوفات , السلاسل الرمزية , وغير ذلك من البيانات المركبة المشابهة .
نقوم الآن بشرح وصف البيانات العددية , وهيا كالتالي :
المتغيرات Variables :
1 ) متغيرات صحيحة Integer variables :
ويتم تعريفها في البرنامج كالتالي <===<< ; int x,y,z
حيث ترمز كلمة int للمتغير الصحيح , وباقي الرموز هيا تعريف المتغير في البرنامج الرئيسي .
مثل :
;x=3
;y=-4
;z=0
2 ) متغيرات حقيقية Float variables :
ويتم تعريفها في البرنامج كالتالي <===<< ; float a,b,c
حيث ترمز كلمة float للمتغير الحقيقي , وباقي الرموز هيا تعريف المتغير في البرنامج الرئيسي .
مثل :
; a=5.5
; b=1.3
; c=-1.1
ملاحظة : هذا الرمز ; نقوم بوضعه كنهاية عند أي جملة رياضية أو منطقية أو علاقة مكتملة , كما سبق ولاحظنا في السابق , حتى يتعرف معالج البرنامج على نهاية هذه الجملة .
والآن نستعرض بعض الرموز التي تستخدم في تعريف المتغيرات :
c% ===== للحرف
s% ===== للسلسة الرمزية
f% ===== للعدد الحقيقي
d% =====للعدد الصحيح
x% =====للعدد الصحيح بالنظام السادس عشر
o% =====للعدد الصحيح بالنظام الثماني
n\ ===== القفز إلى سطر جديد
r\ ===== البدء من أول السطر
t\ =====التقدم سبع ( 7 ) مسافات
وسأتقدم بشرح طريقة استعمال كل رمز لاحقاً إن شاء الله .
والآن , نقوم بتعريف بعض الدوال والأكواد المستعملة في هذه اللغة , ونبدأ بدالة القراءة scanf .
الشكل العام للدالة في البرنامج :
;(Scanf(“Format”,&Varibale
Format : تعني تعريف نوع المتغير ( أحد الرموز السابق ذكرها , مثل f% ,أو d% أو غير ذلك من الرموز السابقة ) .
Variable : رمز المتغير الذي تم تعريفه ( وهو الرمز الذي تم تعريف المتغير به في بداية البرنامج ) .
وستتضح الرؤية بإذن الله عند شرح أول برنامج بسيط للتوضيح .
دالة الطباعة أو دالة الإخراج printf .
الشكل العام للدالة في البرنامج :
هناك شكلان لهذه الدالة , الأول شكل يقوم بطباعة جملة معينة فقط أو تعليق معين مثل :
;("printf("Comments
حيث Comments : أي جملة أو تعليق يرغب المبرمج في إضافته .
والشكل الآخر لدالة printf لا يختلف كثيراً عن الشكل الأول , إلا أنه مصحوب بقيم للمتغيرات أو نتائج معينة , مثل :
;(Printf(“Comments and Formats”,variable
حيث Comments : جملة أو تعليق مناسب لرسالة الطباعة .
Formats : نوع المتغير المطلوب طباعته .
Variable: رمز المتغير حسب تعريفه في البرنامج .
والآن نقوم بكتابة برنامج يقوم باستقبال قيمة عددية x,y مع إيجاد مجموعهما .
The Program :
كود:
#include <stdio.h>
#include <conio.h>
void main()
{
int x,y,sum=0;
clrscr();
printf(“Enter Value Of X = “);
scanf(“%d”,&x);
printf(“Enter Value Of Y = “);
ScanF(“%d”,&y);
Sum=x+y;
Printf(“ Sum = X + y = %d + %d = %d ”,x,y,sum) ;
getch();
}
[C]************[/C]
في المثال السابق قمنا بتعريف مكتبين هما :
مكتبة : <stdio.h> وهذه المكتبة مهمة حتى تقوم كل من دالتي scanf , و printf بالعمل .
وكتبة : <conio.h> وهذه المكتبة مهمة حتى تقوم كل من دالتي clrscr , و getch بالعمل , والأولى تقول بتنظيف الشاشة , والتانية تقوم بإيقاف الشاشة عند نهاية البرنامج حتى يتمكن المبرمج من رؤية نتائج برامجه .
طبعا كل مكتبة تحتوي على عدد من الدوال , ولا تعمل هذه الدوال من دون مكتابتها الخاصة , ويمكن للمبرمج معرف هذه المكتبات والدوال من المساعدة الخاصة بالبرنامج ( Help ) .
بعد تعريف المكتبتين قمنا بتعريف المتغيرات , وهيا :
x : المتغير الأول .
y : المتغير الثاني .
sum : حاصل جمع المتغيرين , وقمنا بتصفيره حتى لا يتم الأخذ بأي قيمة أخرى له قد تكون عالقة في ذاكرة الجهاز .
بعد تعريف المتغيرين قمنا بطباعة جملة توضيحية وظيفتها طباعة جملة على الشاشة توضح للمبرمج ضرورة إدخال قيمة للمتغير X , وهيا توضيحية .
وبعد ذلك قمنا بكتابة دالة scanf وظيفتها استقبال قيمة X وتخزينها في ذاكرة الجهاز .
ونفس الشيء بالنسبة للمتغير Y .
وبعد ذلك قمنا بإيجاد حاصل جمع كل من x,y , وتخصيص قيمة الجمع للمتغير sum في جملة رياضية منطقية .
وبعد ذالك قمنا بكتابة جملة طباعة printf , وظيفتها طباعة رسالة معينة عن جمع العددين , وحاصل هذا الجمع .
وبعد ذلك قمنا بكتابة جملة getch ووظيفتها كما سبق وذكرها إيقاف الشاشة حتى يتمكن المبرمج من رؤية نتائج برنامجه .
يتبع ,,
المشاركة رقم: ( 2 )
- GeNeRaL_Dzتقني نشيط
- المشاركات : 193
نقاط : 264
التقييم : 3
تاريخ التسجيل : 27/03/2013
19.01.14 10:43
الدرس الثانى لتعليم لغة السى بلس بلس C++
اليوم وفي الدرس الثاني نقوم بعرض برنامج جديد لإيضاح ما سبق دراسته في الدرس الأول من دوال ومكتبات .
كما نقوم بدراسة الجمل والتعبيرات التي سنتعامل مع بعضها في البرمجة بلغة الـ C .
أولا برنامج للمراجعة , يقوم هذا البرنامج البسيط بقراءة أربع قيم حقيقية , مع إيجاد متوسطها .
[L]The Program : [/L]
كود:
#include
#include
main()
{
float n1,n2,n3,n4,avg,sum=0;
printf(“ Enter four numbers : “);
scanf(“%f%f%f%f”,&n1, &n2, &n3, &n4) ;
sum=n1+n2+n3+n4 ;
avg=sum/4 ;
printf(\n Sum = %.3f \n Avg = %.2f”,sum,avg);
getch();
return 0;
}
حيث يقوم البرنامج بقراءة أربع قيم حسب الترتيب وهيا n1 , n2 , n3 , n4 , وبعد ذلك يقوم بجمع هذه القيم وتخصيصها للمتغير sum , وبعد ذلك يقوم بايجاد متوسط هذه القيم وتخصيص هذه القيمة للمتغير avg , ثم يقوم بطباعة ناتج البرنامج , وذلك بطباعة قيمتي كل من المجموع والمتوسط .
نلاحظ في البرنامج أننا استعملنا طريقة جديدة في الناتج , وهيا :
كود:
نلاحظ وجود الرقم .3 , ومعنى هذا الرقم هوا طبع النتيجة بوجود ثلاث أرقام فقط بعد الفاصلة , لأن النتيجة ستكون عدد حقيقي .
ونلاحظ أيضاً وجود الرقم 2. , وله نفس المعنى السابق .
ومن هنا نلاحظ أنه يمكننا التحكم في عدد الأرقام بعد الفاصلة في نتائج الأعداد الحقيقة , وذلك كما في المثال السابق .
الجمل والمؤثرات والتعبيرات في لغة الـ C :
1 ) التعبيرات Expressions :
2.5 >>>===> ثابت >>>===> Constent
X >>>===> متغير >>>===> Variable
x+y >>>===> تعبير حسابي >>>===> Arithmetic Expression
grade>=50 >>>===> تعبير منطقي >>>===> Logical Expression
2 ) الجمل Statements :
جملة التخصيص :
[L]
Variable = Expression ;
[/L]
وستتضح أكثر في الأمثلة التالية .
أ ) المؤثرات الحسابية Arithmetic Operators :
+ جمع
- طرح
* ضرب
/ قسمة
باقي القسمة
ب) المؤثرات العلائقية ( ذات العلاقات ) :
== يساوي
=! لا يساوي
> أقل من
=> أقل من أو يساوي
< أكير من =< أكير من أو يساوي جـ ) المؤثرات المنطقية Logical operators : && and || or ! not [c]***********[/c] عذراً لذكري لما سبق دون إيضاح , ولكن سأعمل على الإيضاح في الأمثلة القادمة إن شاء الله . مثال توضيحي : اكتب برنامج لقراءة أطوال أضلاع مستطيل n,m مع حساب : 1 ) محيط المستطيل V . 2 ) مساحة المستطيل A . [L] The Program : [/L] كود: #include printf(\n Sum = %.3f \n Avg = %.2f”,sum,avg); 3 ) المؤثرات Operator :
#include
void main()
clrscr();
int n,m,v,a ;
printf(“Enter the value of N = “);
scanf(“%d”,&n);
printf(“Enter the value of M “);
scanf(“%d”,&m);
v=(n*2)+(m*2) ;
a=n*m ;
printf(“V = %d \t A = %d”,v,a) ;
getch() ;
}
يقوم البرنامج السابق بقراءة طولي ضلع المستطيل , وتخصيص القيمتين لكل من المتغيرين n,m .
وبعد ذلك يقوم بعملية حسابية , يحسب فيها محيط المستطيل , ومساحته .
ثم يقوم بطباعة ناتج هذه العملية كما في المثال .
ولكن توجد طريقة أخرى لاختصار البرنامج , دون التأثير في نتائجه , وهيا كالتالي :
[L]
The Program :
[/L]
كود:
#include
#include
void main()
clrscr();
int n,m ;
printf(“Enter the value of N = “);
scanf(“%d”,&n);
printf(“Enter the value of M “);
scanf(“%d”,&m);
printf(“\n V = %d \n A = %d”,n*2+m*n,n*m);
getch() ;
}
وقمنا في المثال السابق بنفس الخطوات السابقة , ولكن باستثناء أننا قد ألغينا العمليات الحسابية لكل من المحيط والمساحة في البرنامج الرئيسي , وقمنا بهذه العمليات في دالة الطباعة printf في نهاية البرنامج , وذلك اختصاراً لطول البرنامج في مثل هذه النوعية من البرامج البسيطة .
ملاحظة : يجب كتابة البرنامج بحروف صغيرة ( عدا التعليقات والرسائل الإخراج لدالة printf ) وذلك حتى يتمكن معالج البرنامج من قراءة البرنامج وتنفيذه .
#include
main()
{
float n1,n2,n3,n4,avg,sum=0;
printf(“ Enter four numbers : “);
scanf(“%f%f%f%f”,&n1, &n2, &n3, &n4) ;
sum=n1+n2+n3+n4 ;
avg=sum/4 ;
printf(\n Sum = %.3f \n Avg = %.2f”,sum,avg);
getch();
return 0;
}
حيث يقوم البرنامج بقراءة أربع قيم حسب الترتيب وهيا n1 , n2 , n3 , n4 , وبعد ذلك يقوم بجمع هذه القيم وتخصيصها للمتغير sum , وبعد ذلك يقوم بايجاد متوسط هذه القيم وتخصيص هذه القيمة للمتغير avg , ثم يقوم بطباعة ناتج البرنامج , وذلك بطباعة قيمتي كل من المجموع والمتوسط .
نلاحظ في البرنامج أننا استعملنا طريقة جديدة في الناتج , وهيا :
كود:
نلاحظ وجود الرقم .3 , ومعنى هذا الرقم هوا طبع النتيجة بوجود ثلاث أرقام فقط بعد الفاصلة , لأن النتيجة ستكون عدد حقيقي .
ونلاحظ أيضاً وجود الرقم 2. , وله نفس المعنى السابق .
ومن هنا نلاحظ أنه يمكننا التحكم في عدد الأرقام بعد الفاصلة في نتائج الأعداد الحقيقة , وذلك كما في المثال السابق .
الجمل والمؤثرات والتعبيرات في لغة الـ C :
1 ) التعبيرات Expressions :
2.5 >>>===> ثابت >>>===> Constent
X >>>===> متغير >>>===> Variable
x+y >>>===> تعبير حسابي >>>===> Arithmetic Expression
grade>=50 >>>===> تعبير منطقي >>>===> Logical Expression
2 ) الجمل Statements :
جملة التخصيص :
[L]
Variable = Expression ;
[/L]
وستتضح أكثر في الأمثلة التالية .
أ ) المؤثرات الحسابية Arithmetic Operators :
+ جمع
- طرح
* ضرب
/ قسمة
باقي القسمة
ب) المؤثرات العلائقية ( ذات العلاقات ) :
== يساوي
=! لا يساوي
> أقل من
=> أقل من أو يساوي
< أكير من =< أكير من أو يساوي جـ ) المؤثرات المنطقية Logical operators : && and || or ! not [c]***********[/c] عذراً لذكري لما سبق دون إيضاح , ولكن سأعمل على الإيضاح في الأمثلة القادمة إن شاء الله . مثال توضيحي : اكتب برنامج لقراءة أطوال أضلاع مستطيل n,m مع حساب : 1 ) محيط المستطيل V . 2 ) مساحة المستطيل A . [L] The Program : [/L] كود: #include printf(\n Sum = %.3f \n Avg = %.2f”,sum,avg); 3 ) المؤثرات Operator :
#include
void main()
clrscr();
int n,m,v,a ;
printf(“Enter the value of N = “);
scanf(“%d”,&n);
printf(“Enter the value of M “);
scanf(“%d”,&m);
v=(n*2)+(m*2) ;
a=n*m ;
printf(“V = %d \t A = %d”,v,a) ;
getch() ;
}
يقوم البرنامج السابق بقراءة طولي ضلع المستطيل , وتخصيص القيمتين لكل من المتغيرين n,m .
وبعد ذلك يقوم بعملية حسابية , يحسب فيها محيط المستطيل , ومساحته .
ثم يقوم بطباعة ناتج هذه العملية كما في المثال .
ولكن توجد طريقة أخرى لاختصار البرنامج , دون التأثير في نتائجه , وهيا كالتالي :
[L]
The Program :
[/L]
كود:
#include
#include
void main()
clrscr();
int n,m ;
printf(“Enter the value of N = “);
scanf(“%d”,&n);
printf(“Enter the value of M “);
scanf(“%d”,&m);
printf(“\n V = %d \n A = %d”,n*2+m*n,n*m);
getch() ;
}
وقمنا في المثال السابق بنفس الخطوات السابقة , ولكن باستثناء أننا قد ألغينا العمليات الحسابية لكل من المحيط والمساحة في البرنامج الرئيسي , وقمنا بهذه العمليات في دالة الطباعة printf في نهاية البرنامج , وذلك اختصاراً لطول البرنامج في مثل هذه النوعية من البرامج البسيطة .
ملاحظة : يجب كتابة البرنامج بحروف صغيرة ( عدا التعليقات والرسائل الإخراج لدالة printf ) وذلك حتى يتمكن معالج البرنامج من قراءة البرنامج وتنفيذه .
يتبع للدرس الثالث ,,
المشاركة رقم: ( 3 )
- GeNeRaL_Dzتقني نشيط
- المشاركات : 193
نقاط : 264
التقييم : 3
تاريخ التسجيل : 27/03/2013
19.01.14 10:46
الدرس الثالث لتعليم لغة السى بلس بلس C++
درس اليوم يتحدث عن مؤثرات الزيادة والنقصان , وأولويات تنفيذ هذه المؤثرات , بالإضافة إلى بعض الأمثلة التوضيحية .
مؤثرات الزيادة والنقصان :
هذه المؤثرات هيا من أهم مميزات لغة الـ C , إذ أنها غير موجودة في أي لغة برمجة أخرى وهيا بسيطة الفكرة , سهلة الاستعمال , تحتاج إلى تركيز .
وتعرف بمؤثرات الزيادة والنقصان لأنها تزيد أو تنقص من قيمة المتغير , وهيا إما على صورة :
++ , --
وتكون مصحوبة قبل أو بعد المتغير , وقيمة المتغير تتوقف على مكان هذه المؤشرات ( أي إذا ما كانت قبله أو بعده ) .
مثال توضيحي على استعمال مؤثرات الزيادة والنقصان :
[l]The Program : [/l]
كود:
#include <stdio.h>
#include <conio.h>
main ()
{
int I,j,k;
clrscr();
i=2; j=2;
k= ++i;
printf(“I = %d \t K = %d \n”,i,k);
k= j++;
printf(“J = %d \t K = %d”,j,k);
getch();
return 0;
}
في المثال السابق قمنا بتعريف ثلاث متغيرات صحيحة وهيا حسب الترتيب i,j,k
ثم ثمنا بتحديد قيمتي كل من i,j=2
وبعد ذلك قمنا بتحديد قيمة k=++i
والآن ندرس طريقة قيام المعالج بهذه العملية :
يقوم المعالج بتخصيص قيمة المتغير i للمتغير k ولكن سيصتدم بمؤثر زيادة للمتغير i لذا سيعمل على زيادة هذه القيمة قبل تخصيصها للمتغير k .
وتتم معالجة القيمة i , بما أنه جاء مسبوقاً بمؤثر زيادة ++ , فهذا يعني زيادة قيمة المتغير بمقدار واحد , ويصبح i=3
وبعد تحديد قيمة المتغير i , يقوم المعالج بتخصيص هذه القيمة للمتغير k , فيصبح قيمة هذا المتغير k=3
وهذه طريقة التعامل مع مؤثر الزيادة , ونفس الشيء بالنسبة لمؤثر النقصان ( غير أن مؤثر النقصان طرح وليس جمع ) .
وبعد ذلك تقوم دالة الطباعة بطباعة النتائج على الشاشة .
والآن ندرس الخطوة الثانية وهيا k=j++
في هذه الحالة , يقوم المعالج بتخصيص قيمة j للمتغير k , وقيمة j=2 , إذاً k=2 أيضاً
ولكن المعالج يصدم بعد ذلك بمؤثر زيادة بعد j , لذا يعمل على زيادة قيمة j بمقدار واحد فتصبح j=3
وعند قيام البرنامج بالتنفيذ والعرض على الشاشة سنتأكد بأنفسنا من النتائج السابقة .
ملاحظة :
الأولوية دائماً لمؤثرات الزيادة والنقصان .
مثال آخر لتوضيح عمل المؤثرات في معادلة رياضية :
كود:
#include <stdio.h>
#include <conio.h>
main ()
{
int s1,s2,a=5,b=3;
clrscr();
s1= a + ++a ;
s2= b + b++ ;
printf(“S1 = %d \t S2 = %d”,S1,S2);
getch();
return 0;
}
في المثال السابق قمنا بتعريف أربع متغيرات , مع تحديد قيمتي متغيرين كما في المثال .
وبعد ذلك قمنا بعملية رياضية لـ S1 , والتي سنشرح معناها الآن :
يقوم المعالج في المثال بقراءة المعادلة , فيجد أمامه مؤثر الزيادة مصحوباً بقيمة a , فيعمل على تغير قيمة a , وزيادتها 1 لتصبح a=6
وبالتالي تصبح المعادلة
[l]S1= 6 + 6 [/l]
بينما في الحالة الثانية نقوم بحساب قيمة S2 :
حيث يقوم المعالج جمع b , مع b , وتخصيص القيمة الجديدة لـ S2 , وبعد ذلك يقوم بحساب قيمة b الجديدة من مؤثر الزيادة , وهيا b = 4 , ولكنها غير مطلوبة في البرنامج .
وبالتالي تصبح المعادلة
[l]S2 = 3 + 3[/l]
وسنجد أن نتائج البرنامج مساوية لكل من القيم السابقة .
بعض المؤثرات الجديدة :
كود:
x+=9;
العملية السابقة مساوية تماماً لعملية :
كود:
x=x+9;
وتعطي نفس النتائج بالضبط , ويمكن تجربة ذلك بنفسك .
وهيا ليست العملية الوحيدة , إذ يوجد بعض العمليات الأخرى مثل :
كود:
x-=10 ;
y*=5 ;
z/=11 ;
x%= 3;
والعمليات السابقة مساوية للعمليات :
كود:
x=x-10 ;
y=y*5 ;
z=z/11 ;
x=x %3;
ولكنها مختصرة , وهذه إحدى مميزات لغة الـ C .
مثال توضيحي على أحد العمليات السابقة :
كود:
#include <stdio.h>
#include <conio.h>
void main ()
{
int a,b;
clrscr();
a= 10 ;
b= 5 ;
a-=b ;
printf(“a = %d “,a);
getch();
}
في المثال السابق قمنا بتعريف متغيرين a,b , ثم بتحديد قيمتين للمتغيريت كما في المثال .
ثم قمنا بعملية رياضية كالتالي :
كود:
a-=b;
وهيا مساوية للمعادلة :
كود:
a=a-b;
وتعطي نفس النتائج دون أي فرق , ويمكنك تجريب المعادلتين والتأكد من نتائجك بنفسك .
طبعاً الأمثلة السابقة أمثلة توضيحية فقط , و سأوضح لكم بإذن الله أمثلة تطبيقية تستطيعون بها الاستفادة من جميع المؤثرات السابقة , وذلك بعد أن نأخذ بعض الدوال والجمل الجديدة في لغة الـ C , وسنوضح أكثر وظائف هذه الجمل وطرق عملها في البرامج في الدرس القادم إن شاء الله .
مؤثرات الزيادة والنقصان :
هذه المؤثرات هيا من أهم مميزات لغة الـ C , إذ أنها غير موجودة في أي لغة برمجة أخرى وهيا بسيطة الفكرة , سهلة الاستعمال , تحتاج إلى تركيز .
وتعرف بمؤثرات الزيادة والنقصان لأنها تزيد أو تنقص من قيمة المتغير , وهيا إما على صورة :
++ , --
وتكون مصحوبة قبل أو بعد المتغير , وقيمة المتغير تتوقف على مكان هذه المؤشرات ( أي إذا ما كانت قبله أو بعده ) .
مثال توضيحي على استعمال مؤثرات الزيادة والنقصان :
[l]The Program : [/l]
كود:
#include <stdio.h>
#include <conio.h>
main ()
{
int I,j,k;
clrscr();
i=2; j=2;
k= ++i;
printf(“I = %d \t K = %d \n”,i,k);
k= j++;
printf(“J = %d \t K = %d”,j,k);
getch();
return 0;
}
في المثال السابق قمنا بتعريف ثلاث متغيرات صحيحة وهيا حسب الترتيب i,j,k
ثم ثمنا بتحديد قيمتي كل من i,j=2
وبعد ذلك قمنا بتحديد قيمة k=++i
والآن ندرس طريقة قيام المعالج بهذه العملية :
يقوم المعالج بتخصيص قيمة المتغير i للمتغير k ولكن سيصتدم بمؤثر زيادة للمتغير i لذا سيعمل على زيادة هذه القيمة قبل تخصيصها للمتغير k .
وتتم معالجة القيمة i , بما أنه جاء مسبوقاً بمؤثر زيادة ++ , فهذا يعني زيادة قيمة المتغير بمقدار واحد , ويصبح i=3
وبعد تحديد قيمة المتغير i , يقوم المعالج بتخصيص هذه القيمة للمتغير k , فيصبح قيمة هذا المتغير k=3
وهذه طريقة التعامل مع مؤثر الزيادة , ونفس الشيء بالنسبة لمؤثر النقصان ( غير أن مؤثر النقصان طرح وليس جمع ) .
وبعد ذلك تقوم دالة الطباعة بطباعة النتائج على الشاشة .
والآن ندرس الخطوة الثانية وهيا k=j++
في هذه الحالة , يقوم المعالج بتخصيص قيمة j للمتغير k , وقيمة j=2 , إذاً k=2 أيضاً
ولكن المعالج يصدم بعد ذلك بمؤثر زيادة بعد j , لذا يعمل على زيادة قيمة j بمقدار واحد فتصبح j=3
وعند قيام البرنامج بالتنفيذ والعرض على الشاشة سنتأكد بأنفسنا من النتائج السابقة .
ملاحظة :
الأولوية دائماً لمؤثرات الزيادة والنقصان .
مثال آخر لتوضيح عمل المؤثرات في معادلة رياضية :
كود:
#include <stdio.h>
#include <conio.h>
main ()
{
int s1,s2,a=5,b=3;
clrscr();
s1= a + ++a ;
s2= b + b++ ;
printf(“S1 = %d \t S2 = %d”,S1,S2);
getch();
return 0;
}
في المثال السابق قمنا بتعريف أربع متغيرات , مع تحديد قيمتي متغيرين كما في المثال .
وبعد ذلك قمنا بعملية رياضية لـ S1 , والتي سنشرح معناها الآن :
يقوم المعالج في المثال بقراءة المعادلة , فيجد أمامه مؤثر الزيادة مصحوباً بقيمة a , فيعمل على تغير قيمة a , وزيادتها 1 لتصبح a=6
وبالتالي تصبح المعادلة
[l]S1= 6 + 6 [/l]
بينما في الحالة الثانية نقوم بحساب قيمة S2 :
حيث يقوم المعالج جمع b , مع b , وتخصيص القيمة الجديدة لـ S2 , وبعد ذلك يقوم بحساب قيمة b الجديدة من مؤثر الزيادة , وهيا b = 4 , ولكنها غير مطلوبة في البرنامج .
وبالتالي تصبح المعادلة
[l]S2 = 3 + 3[/l]
وسنجد أن نتائج البرنامج مساوية لكل من القيم السابقة .
بعض المؤثرات الجديدة :
كود:
x+=9;
العملية السابقة مساوية تماماً لعملية :
كود:
x=x+9;
وتعطي نفس النتائج بالضبط , ويمكن تجربة ذلك بنفسك .
وهيا ليست العملية الوحيدة , إذ يوجد بعض العمليات الأخرى مثل :
كود:
x-=10 ;
y*=5 ;
z/=11 ;
x%= 3;
والعمليات السابقة مساوية للعمليات :
كود:
x=x-10 ;
y=y*5 ;
z=z/11 ;
x=x %3;
ولكنها مختصرة , وهذه إحدى مميزات لغة الـ C .
مثال توضيحي على أحد العمليات السابقة :
كود:
#include <stdio.h>
#include <conio.h>
void main ()
{
int a,b;
clrscr();
a= 10 ;
b= 5 ;
a-=b ;
printf(“a = %d “,a);
getch();
}
في المثال السابق قمنا بتعريف متغيرين a,b , ثم بتحديد قيمتين للمتغيريت كما في المثال .
ثم قمنا بعملية رياضية كالتالي :
كود:
a-=b;
وهيا مساوية للمعادلة :
كود:
a=a-b;
وتعطي نفس النتائج دون أي فرق , ويمكنك تجريب المعادلتين والتأكد من نتائجك بنفسك .
طبعاً الأمثلة السابقة أمثلة توضيحية فقط , و سأوضح لكم بإذن الله أمثلة تطبيقية تستطيعون بها الاستفادة من جميع المؤثرات السابقة , وذلك بعد أن نأخذ بعض الدوال والجمل الجديدة في لغة الـ C , وسنوضح أكثر وظائف هذه الجمل وطرق عملها في البرامج في الدرس القادم إن شاء الله .
يتبع للدرس الرابع ,,
المشاركة رقم: ( 4 )
- GeNeRaL_Dzتقني نشيط
- المشاركات : 193
نقاط : 264
التقييم : 3
تاريخ التسجيل : 27/03/2013
19.01.14 10:49
الدرس الرابع يتحدث عن بعض الجمل الهامة جداً في لغة الـ C ونستطيع تسميتها بجمل الاختيار والتبديل , وهيا شائعة الاستخدام في الكثير من البرامج , ومتشابهة من حيث الفكرة في كل لغات البرمجة , لما لها من أهمية في هذه اللغات .
سنقوم في بادئ الأمر بعرض هذه الجمل , ثم نتحدث عن كل جملة مع التوضيح بمثال إن شاء الله .
والآن نقوم بشرح أول جملة .
الشكل العام لهذه الجملة :
كود:
statement;
next statement;
نشرح الآن الشكل العام :
يتكون الشكل العام لهذه الجملة من الصيغة الرئيسية المتمثلة في if , والذي يعني إذا , وبعد ذلك كلمة نقوم بفتح قوس وإغلاق قوس , ومحتوى القوسين يكون شرط التنفيذ Condition , وهذا الشرط هوا الذي تتوقف عليه تنفيذ الجملة Statement إذا ما كان الشرط صحيح , أو ينتقل إلى الجملة Next statement إذا ما كان الشرط غير صحيح .
وحتى تضح لكم الرؤية , نقوم بتنفيذ برنامج بسيط يحتوي على هذه الجملة الجديدة , وظيفة هذا البرنامج هوا قراءة أي عدد تدخله أنت إليه , ثم يقوم باختبار هذه العدد ما إذا كان أكبر من الصفر أو أقل منه عن طريق جملة if , ثم يطبع رسالة في حالة أن العدد موجب تقول أن هذا العدد موجب , وتجاهل طبع هذه الرسالة في حالة كون العدد سالب أو يساوي صفر .
[l]The Program : [/l]
كود:
#include <stdio.h>
#include <conio.h>
main()
{
int number;
clrscr();
printf(“\n Enter the number : “);
scanf(“%d”,&number);
if ( number > 0 )
printf(“The %d is positive number “,number);
getch();
return 0;
والآن نقوم بشرح البرنامج :
بعد أن قمنا بتعريف مكتبتين في السطر الأول والثاني نقوم بتعريف المتغير number في السطر الخامس , ثم نقوم بمسح شاشة الإخراج لمسح أي مخرجات قديمة عن طريق clrscr() في السطر السادس , ثم يقوم البرنامج بطبع رسالة معنى مضمونها هوا أدخل الرقم Enter the number , وبعد ذلك يقوم البرنامج باستقبال الرقم من لوحة المفاتيح وتخزينه في ذاكرة البرنامج , وبعد ذلك يقوم البرنامج باختبار هذا الرقم عن طريق جملة if , وذلك كما رأينا في البرنامج بمقارنة هذا الرقم مع الصفر مقارنة منطقية , فإذا كان الرقم أكبر من صفر يقوم البرنامج بطباعة رسالة إخراج معناها أن الرقم موجب , وإذا كان الرقم صفر أو أقل من الصفر يتجاهل طبع هذه الرسالة وينتقل إلى الجملة التالية والتي هيا جملة إيقاف الشاشة حتى ترى النتائج getch() , وبعد ذلك يصل إلى نهاية البرنامج .
[color=red ملاحظة : [/color] أرجو أن تقوموا بإدخال عدد موجب , وعدد سالب , وصفر حتى تتأكدوا بأنفسكم من صحة البرنامج وطريقة عمله , وتستوعبون فكرته .
قد يقوم البرنامج بتنفيذ أكثر من جملة في حالة صحة الشرط , وتتمل هذه العملية بوضع هذه الجمل بين قوسين { , وقوس } , وهوا ما يعرف في لغات البرمجة بالـ Block , أو الحصر .
الشكل العام في هذه الحالة :
كود:
{
statement 1;
statement 2;
:
:
statement n;
}
ويمكن رؤية ذلك بعد تعديل البرنامج السابق بعض الشيء :
[l]The Program : [/l]
كود:
#include <stdio.h>
#include <conio.h>
main()
{
int number;
clrscr();
printf(“\n Enter the number : “);
scanf(“%d”,&number);
if ( number > 0 )
{
printf(“The number is bigger than zero ( %d > 0 )”,number);
printf(“The %d is positive number”,number);
}
getch();
return 0;
والآن ننتقل إلى جملة جديدة .
الشكل العام :
كود:
statement 1;
else
statement 2;
هذه الجملة لا تختلف كثيرا عن السابقة , لذا لن نكرر ما شرحنا عن الجزء الأول من هذه الجملة عن معنى if .
وسنشرح الجزء المختص بـ else , والذي هوا جديد علينا , ولكنه بسيط .
المقصود بكلمة else في هذه الجملة هوا حالة عكس الشرط , فمثلا يقوم البرنامج باختبار شرط معين , وفي حالة صحة هذا الشرط يقوم بتنفيذ جملة التالية للشرط مباشرة , وفي حالة خطأ الشرط يقوم بتنفيذ الجملة التالية لكلمة else .
برنامج توضيحي لعمل هذه الجملة :
[l]The Program : [/l]
كود:
#include<stdio.h>
#include<conio.h>
main()
{
int n;
clrscr();
printf("Enter the number :");
scanf("%d",&n);
if ( n>0 )
printf("The %d is positive number",n);
else
printf("The %d is negative number",n);
getch();
return 0;
}
البرنامج السابق يقوم بنفس خطوات البرنامج الأول , ولكن عند وصوله في الجملة الشرطية يقوم بالتأكد من صحة الشرط , فإذا ما كان الشرط صحيح يقوم بطبع الرسالة أن العدد موجب Positive number , وإذا كان الشرط خطأ يتجاهل جملة الطباعة ويوجه إلى كلمة else , ويقوم بتنفيذ جملتها , والتي هيا في هذا البرنامج طباعة رسالة negative number .
3 ) جملة إذا المتداخلة Nested if statement :
الشكل العام :
كود:
{
statement 1;
statement 2;
}
else
if ( condition 2 )
{
statement 3;
statement 4;
}
كما رأينا من الشكل العام لهذه الجملة أنه لا فرق بينها وبين جملة if – else statement , ولكنها تحتوي على الكثير من الشروط , ونستعمل هذه الجملة في حالة وجود عدد من الشروط التي تحتاج للكثير من جمل if وتكون مرتبطة ببعض .
وكمثال على ذلك نقوم بتنفيذ نفس البرنامج السابق ولكن بإضافة طباعة رسالة تفيد أن العدد يساوي صفر في حالة كون مساوي للصفر .
[l]The Program : [/l]
كود:
#include <stdio.h>
#include <conio.h>
main()
{
int number;
clrscr();
printf(“\n Enter the number : “);
scanf(“%d”,&number);
if ( number > 0 )
printf(“The %d is positive number “,number);
else
if ( number <0 )
printf("The %d is negative number",n);
else
printf(“The %d is Zero”,n);
getch();
return 0;
وهذا البرنامج لا يختلف في شرحه عن البرامج السابقة إلا في أشياء بسيطة من الناحية الشرطية .
إذ أن البرنامج يقوم بالتحقق واختبار ما إذا كان العدد أكبر من صفر , في حالة صحة هذا الشرط يطبع رسالة تفيد بأن العدد هوا عدد موجب positive number , ويخرج من الجملة الشرطية دون المرور على باقي جمل else , وذلك لكونه صواباً من الأول .
وفي حالة كون الشرط الأول خطأ يتوجه إلى جملة else , ويقوم بالتحقق من الشرط الثاني , فإذا كان العدد أصغر من الصفر يقوم بطبع رسالة negative number , ويخرج من الجملة الشرطية دون المرور على else وذلك لكون الشرط صحيح .
أما إذا كانت كل الشروط السابقة خطأ يمر على الشرط الأخير والذي يفيد بأن العد هوا صفر Zero ويقوم بطاعة رسالة تفيد بأن العديد هوا صفر Zero , وذلك لعدم تحقق الشرطين الأولين .
والآن ننتقل إلى جملة التبديل , والتي هيا آخر مواضيعنا لهذا الدرس إن شاء الله .
الشكل العام :
كود:
{
case constant 1 : statement ;
break ;
case constant 2 : statement ;
break ;
default : statement ;
break;
}
تحل هذه الجملة بدل جملة if في الحالات التي تكثر وتتنوع فيها قيم المتغير , قد نقوم بعملية حسابية لمتغير من نوع صحيح , ويكون ناتج هذه العملية هوا قيمة جديدة للمتغير يتوقف عليها عدد من العمليات , لذا بدل استعمال جملة if في كل قيمة للمتغير , نستعمل جملة switch , وتقوم هذه الجملة بتبديل التعبير المعطى expression بالقيمة لهذا التعبير أو هذا المتغير والمتمثلة في الثوابت الجديدة constant , حيث أنه من الممكن أن يكون هنالك أكثر من ثابت , لذا قمنا بترقيمها , وعند تماثل قيمة المتغير مع قيمة الثابت يقوم بتنفيذ الجملة المقابلة لجملة الثابتة , والتي تتوقف عليها طريقة التعامل مع المتغير .
ووظيفة جملة break; هيا تنبيه المعالج إلى انتهاء معالجة هذا الجزء من المتغير , والانتقال إلى باقي البرنامج .
ووظيفة جملة default هيا أنها في حالة عدم تطابق التعبير ( المتغير ) مع أي من الثوابت المعطية في البرنامج constants , يقوم بالدخول على جملة default , ومعالجة المتغير في هذه الجملة .
والآن حتى تضح طريقة عمل هذه الجملة سنعمل على تطبيقها في برنامج يقوم بقراءة متغير x من النوع الصحيح , وإيجاد قيم المعادلات الآتية عندما تكون قيمة x كالتالي :
[l]
x= -6 >>>-------> y = ( x*x ) – x .
x= 1 or 5 >>>-------> y = ( x*10 ) / 2 .
x=2 >>>-------> y = x + x .
x=4 or -4 >>>-------> y = x*x .
x= أي قيمة أخرى غير السابق >>>-------> y = x + 11 .
[/l]
[l]The Program : [/l]
كود:
#include <stdio.h>
#include <conio.h>
void main()
{
int x,y;
clrscr();
printf("\n Enter Value Of X = ");
scanf("%d",&x);
switch (x)
{
case -6: y=(x*x)-x ;
printf("X=%d and (x*x)-x=%d",x,y);
break;
case 1: case 5:y=(x*10)/2 ;
printf("X=%d and (X*10)/2=%d",x,y);
break;
case 2: y=x+x;
printf("X=%d and X+X=%d",x,y);
break;
case -4:
case 4: y=x*x;
printf("X=%d and X*X=%d",x,y);
break;
default: y=x+11;
printf("X=%d and X+11=%d",x,y);
break;
}
getch();
}
شرح البرنامج :
يقوم البرنامج في بادئ الأمر بقراءة قيمة x التي يتم إدخالها من قبل المبرمج , وبعد ذلك يقوم بتخزينها , ثم معالجتها في جملة switch , حيث يقارن قيمة x المدخلة بالقيمة الثابتة , وفي حالة تساوي قيمة x المدخلة مع أحد الثوابت , يقوم بتنفيذ الجملة المقابلة لهذا الثابت , وحساب العملية الحسابية , وطباعة رسالة بناتج هذه العملية .
في حالة عدم تساوي قيمة x مع أي من هذه الثوابت , يقوم بتنفيذ الجملة المقابلة لـ default , وحساب المعادلة الرياضية وطباعة الرسالة المعطاة .
ولكن قد يسألك أحدكم سؤال مهم , وهوا : ماذا يحدث إذا لم نكتب جملة break; في أحد جمل البرنامج ؟
كما سبق وشرحنا جملة break تحدد نهاية جملة case المخصصة لها , وفي حالة عدم كتابتها سيستمر البرنامج في تنفيذ كل الجملة حتى تقابله جملة break أخرى , أو يتفذ كل جمل البرنامج في حالة عدم وجود break نهايئاً . 3 ) جملة إذا المتداخلة Nested if statement . 1 ) جملة إذا if statement : if ( Condition ) if ( condition ) 2 ) جملة if – else statement ( لا تختلف كثيراً عن الجملة السابقة ) : if ( condition 1 ) switch ( expression ) 1 ) جملة إذا if statement . if ( condition ) 4 ) جملة التبديل Switch statement : 2 ) جملة if – else statement ( لا تختلف كثيراً عن الجملة السابقة ) . 4 ) جملة التبديل Switch statement .
سنقوم في بادئ الأمر بعرض هذه الجمل , ثم نتحدث عن كل جملة مع التوضيح بمثال إن شاء الله .
والآن نقوم بشرح أول جملة .
الشكل العام لهذه الجملة :
كود:
statement;
next statement;
نشرح الآن الشكل العام :
يتكون الشكل العام لهذه الجملة من الصيغة الرئيسية المتمثلة في if , والذي يعني إذا , وبعد ذلك كلمة نقوم بفتح قوس وإغلاق قوس , ومحتوى القوسين يكون شرط التنفيذ Condition , وهذا الشرط هوا الذي تتوقف عليه تنفيذ الجملة Statement إذا ما كان الشرط صحيح , أو ينتقل إلى الجملة Next statement إذا ما كان الشرط غير صحيح .
وحتى تضح لكم الرؤية , نقوم بتنفيذ برنامج بسيط يحتوي على هذه الجملة الجديدة , وظيفة هذا البرنامج هوا قراءة أي عدد تدخله أنت إليه , ثم يقوم باختبار هذه العدد ما إذا كان أكبر من الصفر أو أقل منه عن طريق جملة if , ثم يطبع رسالة في حالة أن العدد موجب تقول أن هذا العدد موجب , وتجاهل طبع هذه الرسالة في حالة كون العدد سالب أو يساوي صفر .
[l]The Program : [/l]
كود:
#include <stdio.h>
#include <conio.h>
main()
{
int number;
clrscr();
printf(“\n Enter the number : “);
scanf(“%d”,&number);
if ( number > 0 )
printf(“The %d is positive number “,number);
getch();
return 0;
والآن نقوم بشرح البرنامج :
بعد أن قمنا بتعريف مكتبتين في السطر الأول والثاني نقوم بتعريف المتغير number في السطر الخامس , ثم نقوم بمسح شاشة الإخراج لمسح أي مخرجات قديمة عن طريق clrscr() في السطر السادس , ثم يقوم البرنامج بطبع رسالة معنى مضمونها هوا أدخل الرقم Enter the number , وبعد ذلك يقوم البرنامج باستقبال الرقم من لوحة المفاتيح وتخزينه في ذاكرة البرنامج , وبعد ذلك يقوم البرنامج باختبار هذا الرقم عن طريق جملة if , وذلك كما رأينا في البرنامج بمقارنة هذا الرقم مع الصفر مقارنة منطقية , فإذا كان الرقم أكبر من صفر يقوم البرنامج بطباعة رسالة إخراج معناها أن الرقم موجب , وإذا كان الرقم صفر أو أقل من الصفر يتجاهل طبع هذه الرسالة وينتقل إلى الجملة التالية والتي هيا جملة إيقاف الشاشة حتى ترى النتائج getch() , وبعد ذلك يصل إلى نهاية البرنامج .
[color=red ملاحظة : [/color] أرجو أن تقوموا بإدخال عدد موجب , وعدد سالب , وصفر حتى تتأكدوا بأنفسكم من صحة البرنامج وطريقة عمله , وتستوعبون فكرته .
قد يقوم البرنامج بتنفيذ أكثر من جملة في حالة صحة الشرط , وتتمل هذه العملية بوضع هذه الجمل بين قوسين { , وقوس } , وهوا ما يعرف في لغات البرمجة بالـ Block , أو الحصر .
الشكل العام في هذه الحالة :
كود:
{
statement 1;
statement 2;
:
:
statement n;
}
ويمكن رؤية ذلك بعد تعديل البرنامج السابق بعض الشيء :
[l]The Program : [/l]
كود:
#include <stdio.h>
#include <conio.h>
main()
{
int number;
clrscr();
printf(“\n Enter the number : “);
scanf(“%d”,&number);
if ( number > 0 )
{
printf(“The number is bigger than zero ( %d > 0 )”,number);
printf(“The %d is positive number”,number);
}
getch();
return 0;
والآن ننتقل إلى جملة جديدة .
الشكل العام :
كود:
statement 1;
else
statement 2;
هذه الجملة لا تختلف كثيرا عن السابقة , لذا لن نكرر ما شرحنا عن الجزء الأول من هذه الجملة عن معنى if .
وسنشرح الجزء المختص بـ else , والذي هوا جديد علينا , ولكنه بسيط .
المقصود بكلمة else في هذه الجملة هوا حالة عكس الشرط , فمثلا يقوم البرنامج باختبار شرط معين , وفي حالة صحة هذا الشرط يقوم بتنفيذ جملة التالية للشرط مباشرة , وفي حالة خطأ الشرط يقوم بتنفيذ الجملة التالية لكلمة else .
برنامج توضيحي لعمل هذه الجملة :
[l]The Program : [/l]
كود:
#include<stdio.h>
#include<conio.h>
main()
{
int n;
clrscr();
printf("Enter the number :");
scanf("%d",&n);
if ( n>0 )
printf("The %d is positive number",n);
else
printf("The %d is negative number",n);
getch();
return 0;
}
البرنامج السابق يقوم بنفس خطوات البرنامج الأول , ولكن عند وصوله في الجملة الشرطية يقوم بالتأكد من صحة الشرط , فإذا ما كان الشرط صحيح يقوم بطبع الرسالة أن العدد موجب Positive number , وإذا كان الشرط خطأ يتجاهل جملة الطباعة ويوجه إلى كلمة else , ويقوم بتنفيذ جملتها , والتي هيا في هذا البرنامج طباعة رسالة negative number .
3 ) جملة إذا المتداخلة Nested if statement :
الشكل العام :
كود:
{
statement 1;
statement 2;
}
else
if ( condition 2 )
{
statement 3;
statement 4;
}
كما رأينا من الشكل العام لهذه الجملة أنه لا فرق بينها وبين جملة if – else statement , ولكنها تحتوي على الكثير من الشروط , ونستعمل هذه الجملة في حالة وجود عدد من الشروط التي تحتاج للكثير من جمل if وتكون مرتبطة ببعض .
وكمثال على ذلك نقوم بتنفيذ نفس البرنامج السابق ولكن بإضافة طباعة رسالة تفيد أن العدد يساوي صفر في حالة كون مساوي للصفر .
[l]The Program : [/l]
كود:
#include <stdio.h>
#include <conio.h>
main()
{
int number;
clrscr();
printf(“\n Enter the number : “);
scanf(“%d”,&number);
if ( number > 0 )
printf(“The %d is positive number “,number);
else
if ( number <0 )
printf("The %d is negative number",n);
else
printf(“The %d is Zero”,n);
getch();
return 0;
وهذا البرنامج لا يختلف في شرحه عن البرامج السابقة إلا في أشياء بسيطة من الناحية الشرطية .
إذ أن البرنامج يقوم بالتحقق واختبار ما إذا كان العدد أكبر من صفر , في حالة صحة هذا الشرط يطبع رسالة تفيد بأن العدد هوا عدد موجب positive number , ويخرج من الجملة الشرطية دون المرور على باقي جمل else , وذلك لكونه صواباً من الأول .
وفي حالة كون الشرط الأول خطأ يتوجه إلى جملة else , ويقوم بالتحقق من الشرط الثاني , فإذا كان العدد أصغر من الصفر يقوم بطبع رسالة negative number , ويخرج من الجملة الشرطية دون المرور على else وذلك لكون الشرط صحيح .
أما إذا كانت كل الشروط السابقة خطأ يمر على الشرط الأخير والذي يفيد بأن العد هوا صفر Zero ويقوم بطاعة رسالة تفيد بأن العديد هوا صفر Zero , وذلك لعدم تحقق الشرطين الأولين .
والآن ننتقل إلى جملة التبديل , والتي هيا آخر مواضيعنا لهذا الدرس إن شاء الله .
الشكل العام :
كود:
{
case constant 1 : statement ;
break ;
case constant 2 : statement ;
break ;
default : statement ;
break;
}
تحل هذه الجملة بدل جملة if في الحالات التي تكثر وتتنوع فيها قيم المتغير , قد نقوم بعملية حسابية لمتغير من نوع صحيح , ويكون ناتج هذه العملية هوا قيمة جديدة للمتغير يتوقف عليها عدد من العمليات , لذا بدل استعمال جملة if في كل قيمة للمتغير , نستعمل جملة switch , وتقوم هذه الجملة بتبديل التعبير المعطى expression بالقيمة لهذا التعبير أو هذا المتغير والمتمثلة في الثوابت الجديدة constant , حيث أنه من الممكن أن يكون هنالك أكثر من ثابت , لذا قمنا بترقيمها , وعند تماثل قيمة المتغير مع قيمة الثابت يقوم بتنفيذ الجملة المقابلة لجملة الثابتة , والتي تتوقف عليها طريقة التعامل مع المتغير .
ووظيفة جملة break; هيا تنبيه المعالج إلى انتهاء معالجة هذا الجزء من المتغير , والانتقال إلى باقي البرنامج .
ووظيفة جملة default هيا أنها في حالة عدم تطابق التعبير ( المتغير ) مع أي من الثوابت المعطية في البرنامج constants , يقوم بالدخول على جملة default , ومعالجة المتغير في هذه الجملة .
والآن حتى تضح طريقة عمل هذه الجملة سنعمل على تطبيقها في برنامج يقوم بقراءة متغير x من النوع الصحيح , وإيجاد قيم المعادلات الآتية عندما تكون قيمة x كالتالي :
[l]
x= -6 >>>-------> y = ( x*x ) – x .
x= 1 or 5 >>>-------> y = ( x*10 ) / 2 .
x=2 >>>-------> y = x + x .
x=4 or -4 >>>-------> y = x*x .
x= أي قيمة أخرى غير السابق >>>-------> y = x + 11 .
[/l]
[l]The Program : [/l]
كود:
#include <stdio.h>
#include <conio.h>
void main()
{
int x,y;
clrscr();
printf("\n Enter Value Of X = ");
scanf("%d",&x);
switch (x)
{
case -6: y=(x*x)-x ;
printf("X=%d and (x*x)-x=%d",x,y);
break;
case 1: case 5:y=(x*10)/2 ;
printf("X=%d and (X*10)/2=%d",x,y);
break;
case 2: y=x+x;
printf("X=%d and X+X=%d",x,y);
break;
case -4:
case 4: y=x*x;
printf("X=%d and X*X=%d",x,y);
break;
default: y=x+11;
printf("X=%d and X+11=%d",x,y);
break;
}
getch();
}
شرح البرنامج :
يقوم البرنامج في بادئ الأمر بقراءة قيمة x التي يتم إدخالها من قبل المبرمج , وبعد ذلك يقوم بتخزينها , ثم معالجتها في جملة switch , حيث يقارن قيمة x المدخلة بالقيمة الثابتة , وفي حالة تساوي قيمة x المدخلة مع أحد الثوابت , يقوم بتنفيذ الجملة المقابلة لهذا الثابت , وحساب العملية الحسابية , وطباعة رسالة بناتج هذه العملية .
في حالة عدم تساوي قيمة x مع أي من هذه الثوابت , يقوم بتنفيذ الجملة المقابلة لـ default , وحساب المعادلة الرياضية وطباعة الرسالة المعطاة .
ولكن قد يسألك أحدكم سؤال مهم , وهوا : ماذا يحدث إذا لم نكتب جملة break; في أحد جمل البرنامج ؟
كما سبق وشرحنا جملة break تحدد نهاية جملة case المخصصة لها , وفي حالة عدم كتابتها سيستمر البرنامج في تنفيذ كل الجملة حتى تقابله جملة break أخرى , أو يتفذ كل جمل البرنامج في حالة عدم وجود break نهايئاً . 3 ) جملة إذا المتداخلة Nested if statement . 1 ) جملة إذا if statement : if ( Condition ) if ( condition ) 2 ) جملة if – else statement ( لا تختلف كثيراً عن الجملة السابقة ) : if ( condition 1 ) switch ( expression ) 1 ) جملة إذا if statement . if ( condition ) 4 ) جملة التبديل Switch statement : 2 ) جملة if – else statement ( لا تختلف كثيراً عن الجملة السابقة ) . 4 ) جملة التبديل Switch statement .
نستعرض ثلاث أنواع من جمل التكرار , وهيا كالتالي .
1 ) جملة ( while statement ) .
2 ) جملة ( do … while statement ) .
3 ) جملة ( for statement ) .
نبدأ باسم الله في عرض أول الجمل وطريقة استعمالها :
جملة ( while statement ) :
الشكل العام للجملة :
كود:
while ( condition )
{
statement 1;
statement 2;
:
:
statement n;
}
والآن نشرح معنى هذا الكلام :
نلاحظ من بداية الشكل العام أن الجملة تبدأ بتنفيذ التعبير while , والذي يعني : عندما .
وتقول بالتحقق من الشرط Condition , فإذا وجد المعالج أن الشرط صحيح يقوم بتنفيذ باقي الجمل statements , وإذا وجد أن الشرط خطأ لا يقوم بتنفيذ باقي الجمل , ولا يمر على الجمل أصلاً في حالة الشرط الخطأ .
وحتى نعرف كيفية استخدام هذا الشرط وطريقة قيام المعالج بتنفيذه نقوم ببرمجة هذا البرنامج البسيط والذي يقوم بطباعة الأعداد من 1 ..... إلى 10 .
[l]The Program : [/l]
كود:
#include <stdio.h>
#include <conio.h>
void main()
{
clrscr();
int n=1;
while ( n<=10 )
{
printf(“n = %d \n “,n);
++n;
}
getch() ;
}
والآن نشرح هذا البرنامج وطريقة قيام معالج اللغة بمعالجته :
يقوم المعالج في بادئ الأمر بتعريف المتغير الصحيح n , ويحجز له مساحة في الذاكرة , ويساوي قيمته بالعدد 1 .
ثم يقوم المعالج بالمرور على الجملة التالية , وهيا جملة while , ويقوم بالتحقق من الشرط , ولكن كيف ؟
يتم ذلك بأن يستعرض قيمة المتغير n , ويتحقق إذا كانت تساوي أو أقل من القيمة المعطاة في الشرط ( 10 ) وعندما يجد أن 1 أقل من عشرة يقوم بتنفيذ جمل الشرط , ويطبع قيمة n على الشاشة , ثم يقوم بتغيير قيمة n في الذاكرة , ويضع بدلها القيمة الجديدة الناتجة من الجملة ++n , والتي تعني زيادة العدد n مقداراً واحداً .
ويكرر البرنامج جملة التكرار while مرة أخرى , ويتحقق من الشرط , ويجد أن العدد 2 أقل من 10 , فيقوم بطباعة القيمة الجديدة لـ n على الشاشة , وزيادة القيمة الأولى عدداً صحيحاً واحداً .
وهكذا حتى يصل للعدد 10 , وهنا سيجد أن العدد n يساوي العدد 10 , ويقوم بطباعته كما سبق وذكرنا , ولكن عندما يزيد العدد n مقداراً واحداً , ستصبح قيمته 11 , وعند مقارنة هذه القيمة بالشرط سيجد أنها أكبر من الشرط ولا تساويه , لذا سيخرج المعالج من جملة التكرار , وسيتجه للجملة التالية لهذه الجملة , والتي هيا جملة getch() , والتي سبق وذكرنا فائدتها , ثم يتوجه إلى نهاية البرنامج .
هذه إخواني الأعزاء , أخواتي العزيزات جملة while باختصار وإيضاح .
2 ) جملة ( do … while statement ) :
الشكل العام :
كود:
do
{
statement 1;
statement 2;
:
:
statement n;
} while ( condition ) ;
من المؤكد أنكم قد لاحظتم تشابه هذه الجملة مع جملة while السابقة , وهيا فعلا تتشابه معها تشابهاً جذرياً من حيث الأداء والشرط , ولكن تختلف عنها بعض الشيء , وهذا الاختلاف هوا كالتالي :
قد لا يمر المعالج على جملة while أبداً , وذلك في حالة عدم صحة الشرط من الأول .
بينما يمر المعالج على جملة do … while على الأقل مرة واحدة , حتى إذا كان الشرط غير صحيح .
كما أن جملة do … while تبدأ بتنفيذ جملة واحدة , أو عدة جمل , ويتم التحقق من هذه الجمل عند نهاية هذه الجملة , عن طريق الشرط .
وحتى تتضح الرؤية سنقوم بحل البرنامج السابق هذه المرة بجملة do while , حتى نستوعب الفرق الذي سيتضح في الشرط :
[l]The Program :[/l]
كود:
#include <stdio.h>
#include <conio.h>
void main()
{
clrscr();
int n=1;
do
{
printf(“n = %d \n “,n);
++n;
} while ( n <= 10 ) ;
getch() ;
}
شرح البرنامج :
يقوم البرنامج بنفس الخطوات السابقة في البرنامج السابق حتى يصل إلى do , وهنا يقوم مباشرة بتنفيذ الجملة التالية لـ do دون التقيد بالشرط , لأن الشرط موجود في نهاية الجملة , وعند وصوله لنهاية الجملة يقوم بالتحقق من الشرط , فإذا وجد أن الشرط محقق , يكرر الجمل مرة أخرى , وإذا بطل الشرط , يخرج من جملة do … while نهايئاً , ويتجه إلى الجملة التالية .
أرجو أن أكون قد أوضحت الفكرة العامة للجملتين السابقتين , وإذا لم تتضح سأوضحها بإذن الله في أمثلة قادمة إن شاء الله .
3 ) جملة ( for statement ) :
وتعتبر من أهم جمل التحكم , وتستعمل لتكرار مجموعة من الجملة , وهذا التكرار يكون معلوم مقداره , بمعنى أن يتم تكرار الجمل مرة واحدة , أو مرتين , أو أكثر على حسب رغبة المبرمج , لذا تعتبر جملة تكرار , وفي نفس الوقت جملة تحكم , لقدرة المبرمج على التحكم في مقدار التكرار .
الشكل العام :
كود:
for ( expression 1; expression 2; expression 3 )
{
statement 1;
statement 2;
:
:
statement n;
}
والآن نشرح هذه الجملة البسيطة المهمة :
يقوم المعالج عند معالجة جملة for بالتعرف على التعبير الأول expression 1 , ثم يقوم بمقارنته بالشرط في التعبير الثاني expression 2 , ثم يقوم عملية حسابية في التعبير الثالث expression 3 , ونلاحظ أنه يمكن الاستغناء عن التعبير الثالث , وكتابته كجملة ملحقة بجملة for , أي تحت جملة for , وسنشرح هذا في المثال التالي :
نقوم ببرمجة برنامج لطباعة الأعداد من 1 إلى 10 ( نفس البرنامج السابق ) ولكن بجملة for :
[l]The Program :[/l]
كود:
#include <stdio.h>
#include <conio.h>
void main()
{
clrscr();
int n;
for (n=1;n<=10;n++)
{
printf(“n = %d \n “,n);
}
getch() ;
}
والآن نشرح البرنامج السابق :
يقوم هذا البرنامج بنفس وظيفة البرامج السابقة في هذا الدرس , أي طباعة الأعداد من 1 إلى 10 .
ولكن كيف يقوم المعالج بمعالجة جملة for ؟
يقوم المعالج بذلك كالتالي : عندما يصل جملة for , يقوم في بادئ الأمر بالتأكد من expression 1 , والتأكد من وجود تعريف للمتغير ووجود قيمة له , وبعد ذلك يقوم باختباره بالشرط في expression 2 , وإذا ما كان الشرط صحيح ينفذ باقي الجمل , وعند نهاية الحلقة يقوم بتنفيذ expression 3 , ثم يعيد التكرار مرة أخرى .
سؤال هل يمكن تجاهل كتابة قيمة المتغير expression 1 في جملة for ؟
نعم يمكن تجاهل ذلك في البرنامج , ولكن بشرط أن يكون المتغير معرف بقيمة معطاة في أول البرنامج , ونستطيع التأكد من ذلك بتكرار البرنامج السابق ولكن بعد إجراء التعديل السابق .
[l]The Program :[/l]
كود:
#include <stdio.h>
#include <conio.h>
void main()
{
clrscr();
int n=1;
for (;n<=10;n++)
{
printf(“n = %d \n “,n);
}
getch() ;
}
نلاحظ في البرنامج السابق عدم كتابتنا للتعبير expression 1 , والذي كان فيما قبل n=1 , وقد استعضنا عن ذلك بوضع قيمة n في بداية البرنامج عند تعريفها int n=1 , ولكن نلاحظ أننا قد وضعنا الرمز ; الذي يدل على نهاية التعبير expression 1 , حتى وان لم يوجد هذا التعبير .
يتبع للدرس الخامس و الأخير ,,
المشاركة رقم: ( 5 )
- GeNeRaL_Dzتقني نشيط
- المشاركات : 193
نقاط : 264
التقييم : 3
تاريخ التسجيل : 27/03/2013
19.01.14 10:54
الدرس الخامس لتعليم لغة السى بلس بلس c++
سندرس طريقة جديدة من طرق حفظ البيانات , وهذه الطريقة والحق يقال من الطرق المهمة للغاية , وهذا قول ناتج عن خبرة شخصية وتجربة عملية في لغات البرمجة .
الدرس وباختصار يتعلق بالمصفوفات , وطرق التعامل معها , والفائدة المرجوة منها في المستقبل .
وسنقوم بطرح فكرة مبسطة عن مصفوفة البعد الواحد , ومصفوفة البعدين , حيث أن هذان النوعان هما من أكثر الأنواع شيوعاً واستعمالاً .
مصفوفة البعد الواحد :
الشكل العام للمصفوفة :
كود:
int array_name[index];
[c]Or[/c]
كود:
type array_name[index];
لا يخفى عليكم أعزائي أنني قد قمت بوضع شكلان عامان للمصفوفة , أحدهما بالصورة التقليدية كما تعودنا في الصورة الأولى , وذلك بتعريف المصفوفة كعنصر صحيح , أو حقيقي , , حيث أن array_name هوا عبارة عن اسم المصفوفة , ونستطيع ترميزه بأي رمز مثل ( x,y,z,xyz,array1 ) , ثم كلمة index , وهيا عناصر المصفوفة .
والطريقة الثانية هيا طريقة عملية ومهمة جداً في تعاملنا مع كل أنواع البيانات وليس المصفوفات فحسب , وهيا تعريف البيانات حسب نوعها , ثم إدراج هذا النوع في البرنامج حسب الطلب , ولكن سنأجل دراسة هذا النوع مؤقتاً , حتى نفهم الطرق العادية ونجيدها تماماً , ثم سأقوم بشرح هذا النوع لاحقاً إن شاء الله .
والآن وكما تعودنا نقوم بوضع مثال يوضح فائدة المصفوفة , وطريقة تعامل معالج لغة الـ C مع المصفوفة .
كمثال بسيط يوضح فائدة كبيرة للمصفوفة , نقوم مثلاً ببرمجة برنامج حسابي بسيط يقوم بقراءة 10 أعداد صحيحة , وجمع هذه الأعداد وطباعة ناتج جمعها على الشاشة .
في السابق كنا نقوم بتعريف 10 متغيرات كأعداد صحيحة , ولكن الآن وبفضل المصفوفة , سنقوم باختصار هذه الـ 10 أعداد إلى تعريف مصفوفة واحدة فقط , وهذه فائدة رائعة للمصفوفات , إذ أنها توفر الوقت والجهد في بناء البرامج والمنظومات الكبيرة , وهذا ما سنطرحه في المستقبل إن شاء الله بعد إنهائنا لدروس لغة الـ C ( إن شاء الله إذا عشنا حتى ذلك الوقت ) .
والآن , طريقة البرنامج كما يلي :
[l]The Program :[/l]
كود:
#include <stdio.h>
#include <conio.h>
void main()
{
clrscr();
int x[10],i,sum=0;
for (i=0;i<10;i++)
{
printf("\n Enter X[%d] = ",i);
scanf("%d",&x[i]);
sum+=x[i];
}
printf("\n Sum = %d ",sum);
getch();
}
والآن نشرح البرنامج بالتفصيل :
في أول البرنامج قمنا بتعريف متغيرات , منها [10]x , وهذا يعني أن اسم المصفوفة هوا x , وأن هذه المصفوفة تحوي داخلها عشرة متغيرات , وكل هذه المتغيرات من النوع الصحيح , وذلك لأننا قمنا بتعريف المصفوفة كمتغير صحيح , ثم قمنا بتعريف عداد للمصفوفة Counter , ورمزنا لهذا العداد بالرمز i , ثم قمنا بتعريف المتغير sum , وهوا اختصار لكلمة summation , والتي تعني مجموع , وهوا الذي سنحفظ فيه مجموع عناصر المجموعة .
والآن إلى الخطوة التالية , أرجو الإهتمام والتركيز في هذه الخطوة , حتى نوضع فائدة العداد :
نقوم بوضع المتغير i في جملة for , وذلك لأننا سنعرف i كعداد للمصفوفة , ونقوم بوضع قيمة ابتدائية لـ i وهيا صفر ( 0 ) , لأنه للحصول على 10 عناصر للمصفوفة أو أي عدد في لغة الـ C , تبدأ المصفوفة من المتغير [10]x , وتنتهي عند المتغير [10]x , وعند حسابنا نجدهم 10 عناصر .
والآن نقوم بتحديد الدورة التي سنقوم بها , في أول حالة سيقوم المعالج بوضع قيمة صفر للمتغير i , ثم يقوم بمقارنتها بالعدد 10 , فيجدها أقل منه , لذا يستمر في الدورة أو الحلقة , فيقوم بطباعة جملة
كود:
printf(“\n Enter x[%d] = “,i);
وهذه الجملة هيا مجرد جملة توضيحية للمبرمج , توضح له أنه عليه أن يقوم بإدخال قيمة المتغير المراد تخزينه في الصف [x[%d , حيث أن %d تتغير بتغير i .
ثم يقوم البرنامج باستقبال قيمة المتغير ويضعه في المصفوفة حسب التريب , يستقبله في الخانة [x[i , ونتيجة لذلك فأنه من المستحيل أن يضع قيمتين في نفس الخانة , لأن i تتغير وتزيد بمقدار واحد كل دورة i++ , وهذه فائدة العداد .
ثم يقوم المعالج بالعملية الحاسبة التالية :
كود:
sum+=x[i];
وهذه العملية هيا نفس العملية :
كود:
sum=sum+x[i];
حيث شرحنا معناها في السابق , ونحيطكم علماً مرة أخرى بأن معناها أن المجموع سيقوم في كل دورة بإضافة قيمة العدد الجديد إلى المجموع , حتى نتحصل على المجموع الكلي .
ويستمر البرنامج بهذه العملية حتى تصل قيمة i للعدد 10 , وفي هذه الحالة يقوم البرنامج بالخروج من الحلقة , ويطبع رسالة النهاية التي توضح قيمة المجموع النهائية على الشاشة .
طبعاً أرجو من الإخوة تجربة البرنامج حتى تتمكنوا من فهمه بطريقة أفضل , فالتجربة خير دليل على صحة البرنامج وأفضل طريقة لفهمه .
المصفوفات ذات البعدين :
الشكل العام :
كود:
int array_name[index1][index2]
نلاحظ زيادة قوسان جديدان , ومعناهما كالتالي :
[l]
array_name = اسم المصفوفة
index1 = عدد الصفوف
index2= عدد الأعمدة
[/l]
لأن المصفوفة الثنائية مكونة من صفوف وأعمدة , وليس صفوف فقط كالأحادية ذات البعد الواحد .
والآن نقوم بكتابة برنامج يقوم بقراءة عدد من القيم وتخزينها في مصفوفة ذات بعدين , ثم يقوم بطباعة هذه القيم على هيئة مصفوفة .
[l]The Program :[/l]
كود:
#include <stdio.h>
#include <conio.h>
#define row 2
#define col 2
void main()
{
int i,j;
int x[row][col];
clrscr();
for (i=0;i<row;i++)
for (j=0;j<col;j++)
{
printf("\n x[%d][%d] = ",i,j);
scanf("%d",&x[i][j]);
}
printf("\n");
for (i=0;i<row;i++)
{
for (j=0;j<col;j++)
printf("%d \t ",x[i][j]);
printf("\n");
}
getch();
}
قد يبدو لكم البرنامج معقداً , ولكنه في الحقيقة بسيط وسهل , يحتاج إلى شرح بسيط وبإذن الله ستفهمونه .
البرنامج يبدأ بداية تقليدية , ويقوم بالتعرف على المتغيرات المعطاة , ونلاحظ هنا وجود اثنان for , وهذا التعقيد الوحيد , ولكن لنفهم هذا التعقيد يجب أن نعرف طريقة تعبئة المصفوفات , فالمصفوفات تقوم بتعبئة العنصر الأول في الصف الأول والعمود الأول , ثم العنص الثاني في الصف الأول والعمود الثاني , وهكذا , حتى تصل للعنصر الأخير في الصف الأول العمود الأخير , بمعنى أنها تقوم بتعبئة جميع الأعمدة في الصف الأول , ثم عند انتهائها تنزل للصف التالي وتقوم بتعبئة جميع الأعمدة , وهكذا حتى تقوم بتخزين جميع عناصر المصفوفة .
الدرس وباختصار يتعلق بالمصفوفات , وطرق التعامل معها , والفائدة المرجوة منها في المستقبل .
وسنقوم بطرح فكرة مبسطة عن مصفوفة البعد الواحد , ومصفوفة البعدين , حيث أن هذان النوعان هما من أكثر الأنواع شيوعاً واستعمالاً .
مصفوفة البعد الواحد :
الشكل العام للمصفوفة :
كود:
int array_name[index];
[c]Or[/c]
كود:
type array_name[index];
لا يخفى عليكم أعزائي أنني قد قمت بوضع شكلان عامان للمصفوفة , أحدهما بالصورة التقليدية كما تعودنا في الصورة الأولى , وذلك بتعريف المصفوفة كعنصر صحيح , أو حقيقي , , حيث أن array_name هوا عبارة عن اسم المصفوفة , ونستطيع ترميزه بأي رمز مثل ( x,y,z,xyz,array1 ) , ثم كلمة index , وهيا عناصر المصفوفة .
والطريقة الثانية هيا طريقة عملية ومهمة جداً في تعاملنا مع كل أنواع البيانات وليس المصفوفات فحسب , وهيا تعريف البيانات حسب نوعها , ثم إدراج هذا النوع في البرنامج حسب الطلب , ولكن سنأجل دراسة هذا النوع مؤقتاً , حتى نفهم الطرق العادية ونجيدها تماماً , ثم سأقوم بشرح هذا النوع لاحقاً إن شاء الله .
والآن وكما تعودنا نقوم بوضع مثال يوضح فائدة المصفوفة , وطريقة تعامل معالج لغة الـ C مع المصفوفة .
كمثال بسيط يوضح فائدة كبيرة للمصفوفة , نقوم مثلاً ببرمجة برنامج حسابي بسيط يقوم بقراءة 10 أعداد صحيحة , وجمع هذه الأعداد وطباعة ناتج جمعها على الشاشة .
في السابق كنا نقوم بتعريف 10 متغيرات كأعداد صحيحة , ولكن الآن وبفضل المصفوفة , سنقوم باختصار هذه الـ 10 أعداد إلى تعريف مصفوفة واحدة فقط , وهذه فائدة رائعة للمصفوفات , إذ أنها توفر الوقت والجهد في بناء البرامج والمنظومات الكبيرة , وهذا ما سنطرحه في المستقبل إن شاء الله بعد إنهائنا لدروس لغة الـ C ( إن شاء الله إذا عشنا حتى ذلك الوقت ) .
والآن , طريقة البرنامج كما يلي :
[l]The Program :[/l]
كود:
#include <stdio.h>
#include <conio.h>
void main()
{
clrscr();
int x[10],i,sum=0;
for (i=0;i<10;i++)
{
printf("\n Enter X[%d] = ",i);
scanf("%d",&x[i]);
sum+=x[i];
}
printf("\n Sum = %d ",sum);
getch();
}
والآن نشرح البرنامج بالتفصيل :
في أول البرنامج قمنا بتعريف متغيرات , منها [10]x , وهذا يعني أن اسم المصفوفة هوا x , وأن هذه المصفوفة تحوي داخلها عشرة متغيرات , وكل هذه المتغيرات من النوع الصحيح , وذلك لأننا قمنا بتعريف المصفوفة كمتغير صحيح , ثم قمنا بتعريف عداد للمصفوفة Counter , ورمزنا لهذا العداد بالرمز i , ثم قمنا بتعريف المتغير sum , وهوا اختصار لكلمة summation , والتي تعني مجموع , وهوا الذي سنحفظ فيه مجموع عناصر المجموعة .
والآن إلى الخطوة التالية , أرجو الإهتمام والتركيز في هذه الخطوة , حتى نوضع فائدة العداد :
نقوم بوضع المتغير i في جملة for , وذلك لأننا سنعرف i كعداد للمصفوفة , ونقوم بوضع قيمة ابتدائية لـ i وهيا صفر ( 0 ) , لأنه للحصول على 10 عناصر للمصفوفة أو أي عدد في لغة الـ C , تبدأ المصفوفة من المتغير [10]x , وتنتهي عند المتغير [10]x , وعند حسابنا نجدهم 10 عناصر .
والآن نقوم بتحديد الدورة التي سنقوم بها , في أول حالة سيقوم المعالج بوضع قيمة صفر للمتغير i , ثم يقوم بمقارنتها بالعدد 10 , فيجدها أقل منه , لذا يستمر في الدورة أو الحلقة , فيقوم بطباعة جملة
كود:
printf(“\n Enter x[%d] = “,i);
وهذه الجملة هيا مجرد جملة توضيحية للمبرمج , توضح له أنه عليه أن يقوم بإدخال قيمة المتغير المراد تخزينه في الصف [x[%d , حيث أن %d تتغير بتغير i .
ثم يقوم البرنامج باستقبال قيمة المتغير ويضعه في المصفوفة حسب التريب , يستقبله في الخانة [x[i , ونتيجة لذلك فأنه من المستحيل أن يضع قيمتين في نفس الخانة , لأن i تتغير وتزيد بمقدار واحد كل دورة i++ , وهذه فائدة العداد .
ثم يقوم المعالج بالعملية الحاسبة التالية :
كود:
sum+=x[i];
وهذه العملية هيا نفس العملية :
كود:
sum=sum+x[i];
حيث شرحنا معناها في السابق , ونحيطكم علماً مرة أخرى بأن معناها أن المجموع سيقوم في كل دورة بإضافة قيمة العدد الجديد إلى المجموع , حتى نتحصل على المجموع الكلي .
ويستمر البرنامج بهذه العملية حتى تصل قيمة i للعدد 10 , وفي هذه الحالة يقوم البرنامج بالخروج من الحلقة , ويطبع رسالة النهاية التي توضح قيمة المجموع النهائية على الشاشة .
طبعاً أرجو من الإخوة تجربة البرنامج حتى تتمكنوا من فهمه بطريقة أفضل , فالتجربة خير دليل على صحة البرنامج وأفضل طريقة لفهمه .
المصفوفات ذات البعدين :
الشكل العام :
كود:
int array_name[index1][index2]
نلاحظ زيادة قوسان جديدان , ومعناهما كالتالي :
[l]
array_name = اسم المصفوفة
index1 = عدد الصفوف
index2= عدد الأعمدة
[/l]
لأن المصفوفة الثنائية مكونة من صفوف وأعمدة , وليس صفوف فقط كالأحادية ذات البعد الواحد .
والآن نقوم بكتابة برنامج يقوم بقراءة عدد من القيم وتخزينها في مصفوفة ذات بعدين , ثم يقوم بطباعة هذه القيم على هيئة مصفوفة .
[l]The Program :[/l]
كود:
#include <stdio.h>
#include <conio.h>
#define row 2
#define col 2
void main()
{
int i,j;
int x[row][col];
clrscr();
for (i=0;i<row;i++)
for (j=0;j<col;j++)
{
printf("\n x[%d][%d] = ",i,j);
scanf("%d",&x[i][j]);
}
printf("\n");
for (i=0;i<row;i++)
{
for (j=0;j<col;j++)
printf("%d \t ",x[i][j]);
printf("\n");
}
getch();
}
قد يبدو لكم البرنامج معقداً , ولكنه في الحقيقة بسيط وسهل , يحتاج إلى شرح بسيط وبإذن الله ستفهمونه .
البرنامج يبدأ بداية تقليدية , ويقوم بالتعرف على المتغيرات المعطاة , ونلاحظ هنا وجود اثنان for , وهذا التعقيد الوحيد , ولكن لنفهم هذا التعقيد يجب أن نعرف طريقة تعبئة المصفوفات , فالمصفوفات تقوم بتعبئة العنصر الأول في الصف الأول والعمود الأول , ثم العنص الثاني في الصف الأول والعمود الثاني , وهكذا , حتى تصل للعنصر الأخير في الصف الأول العمود الأخير , بمعنى أنها تقوم بتعبئة جميع الأعمدة في الصف الأول , ثم عند انتهائها تنزل للصف التالي وتقوم بتعبئة جميع الأعمدة , وهكذا حتى تقوم بتخزين جميع عناصر المصفوفة .
الدروس من تأليف :/GeNeRaL_Dz
المشاركة رقم: ( 6 )
- hassunyتقني مقيم
- المشاركات : 996
نقاط : 1131
التقييم : 19
تاريخ التسجيل : 17/08/2012
المزاج : شكرا للمتميز (توايلايت) على السفرام بدون جيم جارد
19.01.14 12:57
تسلم & لو ممكن شرح للغة السي شارب
المشاركة رقم: ( 7 )
- GeNeRaL_Dzتقني نشيط
- المشاركات : 193
نقاط : 264
التقييم : 3
تاريخ التسجيل : 27/03/2013
19.01.14 17:39
الله يسلمك حبي [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]
سيتم وضع شرح على كيف كيفك استنى شوية بس ..
سيتم وضع شرح على كيف كيفك استنى شوية بس ..
المشاركة رقم: ( 8 )
- GeNeRaL_Dzتقني نشيط
- المشاركات : 193
نقاط : 264
التقييم : 3
تاريخ التسجيل : 27/03/2013
19.01.14 18:31
تم تلبية طلبك اخووي [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]
راجع قسم لغة البرمجة ~ ... تحيااتي ولا تنسا التقييم ^^
راجع قسم لغة البرمجة ~ ... تحيااتي ولا تنسا التقييم ^^
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى