النافذة العربية للبرمجة

النافذة العربية للبرمجة
 
الرئيسيةالمشاركاتمكتبة الصورس .و .جبحـثالأعضاءالمجموعاتالتسجيلدخول

شاطر | 
 

 مقدمة عن لغة ++C : الجزء الثالث

اذهب الى الأسفل 
كاتب الموضوعرسالة
عبدالهادي الحداد
مدير الموقع
avatar

عدد الرسائل : 483
العمر : 33
الموقع : اليمن الحبيبة
العمل/الترفيه : طالب برمجة
تاريخ التسجيل : 13/06/2008

بطاقة الشخصية
المدير العام / عبدالهادي الحداد:

مُساهمةموضوع: مقدمة عن لغة ++C : الجزء الثالث   الأحد يونيو 29, 2008 10:42 am

بسم الله الرحمن الرحيم
مقدمة عن لغة ++C : الجزء الثالث

1- الأدوات الحسابية ( Arithmetic Operators ):
تسمح لغة السي باستعمال الأدوات الحسابية من جمع و طرح وضرب وقسمة ، كاللغات الأخرى ، إلا أن عملية الرفع إلي الأس ، ليس لها أدوات مباشرة مثل ما في لغة البيسك ، ولكنها تتم بطريقة أخرى.
وتختلف القسمة في لغة السي عنها في لغة البيسك ، إذ أنه أي جزء كسري ينتج عن القسمة يهمل مهما كان كبيراً ، كما في لغتي باسكال وكوبول ، فمثلاً ناتج القسمة 8/3 هو 2 فقط لأن الكسر 0.666 يهمل ، ويكون ناتج القسمة باستعمال الأداة / صحيح العدد.
ويمكننا أن نلخص الأدوات الحسابية المستعملة في لغة C++ فيما يلي:
الأداة الوظيفة
- للطرح أو كإشارة سالبة
+ للجمع
* للضرب
/ للقسمة
% لباقي القسمة الصحيحة
-- للنقصان
++ للزيادة
-ملاحظة هامة:يختلف اداء بعض العمليات الحسابية حسب نوع المعطيات الصحيحة أو الحقيقة أو الرمزية ، فعند معاملة المعطيات الحقيقية بالأدوات الحسابية ، يمكن القول إن العمليات الأساسية من جمع وطرح وضرب وقسمة ، تجري بالطريقة التي نعلمها، إلا أن هناك محظوراً واحداً يجب أن نذكر به هنا وهو أن تتعدى قيمة النتيجة من أية عملية حسابية الحدود المرسومة لنوع المتغير الناتج، لأن لكل نوع من أنواع المتغيرات حدوداً ، يعتبر تجاوزها خطأ ينتج عن خطأ في النتائج. وعند معاملة المعطيات الصحيحة بالأدوات الحسابية ، تعمل الأدوات بالطريقة التي نتوقعها ، وعند تعدي الحد المسموح بها للقيم الصحيحة فإن هذا يعني خطأ قد وقع ، وفي هذه الحالة لن تتلقى من المترجم أية رسالة خطأ
مثال: إذا كان لدينا البرنامج التالي:
#include<iostream.h>
main()
{
int n= 33000;
n= n*3;
cout<<n;
}
وعند تنفيذ البرنامج تتوقع أنت أن يكون الجواب 99000 أليس كذلك؟؟ إلا أن الجواب في هذه الحالة
لن يتعدى 30464 ، وهو الحد الأعلى المسموح به للقيمة الصحيحة.
وهناك أمر آخر يتعلق بالقسمة فعندما نقسم 8 على 3 قسمة صحيحة أي 8/3 فإن الناتج يكون صحيحاً وهو 2 فقط ، وإذا ما رغبت أن تحافظ على الجزء الكسري الذي أهمل وأسقط ، ويمكنك أن تحول القسمة إلي قسمة حقيقية 8.0/3.0 ، فإن الناتج سيكون 2.667 ، ولهذا السبب أدخلت لغة السي أداة باقي القسمة % والتي تعرف باسم ( Modulus Operator ) والتي تستعمل على النحو التالي:
7%3 ، وسيكون الناتج هو 1 وهو باقي القسمة الصحيحة 7/3 ، ومن الجدير بالذكر أن كلا من لغة الباسكال والكوبول تستعملان مثل هذه العملية ، ففي باسكال تكتب هذه العملية على النحو التالي:
7 MOD 3 ، وكلمة MOD هي اختصار Modulus.

2-الأدوات العلاقية والمنطقية ( Relational and Logical Operators ):
ويرجع اسم الأدوات العلاقية إلي العمليات المختصة بالقيم التي بينها علاقات ، ويرجع اسم الأدوات المنطقية إلي طرق التعامل مع هذه العلاقات ، ولهذا نجد أن هذين النوعين من الأدوات مع بعضهما البعض على الدوام ، ويعالجان ما يسمى بالتعبير المنطقي: وهو إحراء عمليات مقارنة بين كميات حسابية أو رمزية ، وتكون نتيجته منطقية وهي إما نعم (True) أو لا (False) ، ويكثر استخدام التعابير المنطقية في الجمل الشرطية ، والأمثلة التالية تبين لك ماهية التعبير المنطقي:
1-التعبير المنطقي: x=y جوابه إما نعم أو لا.
2-التعبير المنطقي: a>b جوابه إما نعم أو لا.
وفي لغة السي تعامل النتيجة لا (False) على أنها صفر (0) وتأخذ النتيجة نعم (True) أية قيمة غير الصفر ولكن المشهور أنها (1).
ويبين لنا الجدول التالي الأدوات العلاقية:
الأداة معناها
> أكبر من
>= أكبر من أو يساوي
< أقل من
<= أقل من أو يساوي
== يساوي*
=! لا يساوي
* تستعمل الأداة == هنا كأداة علاقية منطقية داخل تعبير منطقي ، وتستعمل الاداة الحسابية = لحساب في المعادلات.

ويبن الجدول التالي الأدوات المنطقية:
الأداة معناها
&& AND ( حرف العطف الواو )
|| OR ( حرف العطف أو )
! NOT ( للنفي )


مثال توضيحي:
إذا علمت أن:
int a= b= 3;
فأحسب نتيجة كل من التعابير التالية:
1- a<3
2- a<=3
3- a>b
4- a>=b
5- a= =b
6- a! = b
7- a= =b ||3
8- 3<5

3-الأدوات الدقيقة ( Bitwise Operators ):
تتميز لغة C++ عن سائر اللغات ذات المستوى العالي مثل البيسك والفورتران والباسكال ، أنها تستخدم أدوات دقيقة على مستوى وحدة التخزين الأولية ( البت bit ) واستعمل مثل هذه الأدوات هو أمر منطقي بالنسبة للغة C++ ، والتي صممت أصلاً لتحل محل لغة التجميع Assembly ، والتي تتعامل مع لغة الآلة.
وسميت هذه الأدوات بالدقيقة أو أدوات (البت) لأنها تتعامل مع (البت) ، وتستعمل هذه الأدوات مع المعطيات الصحيحة int والرمزية char فقط ، ولا تستعمل مع غيرها من أنواع المعطيات.
والجدول التالي يبين لنا الأدوات الدقيقة ومعنى كل منها:
الاداة معناها
~ (NOT) وهي أداة أحادية
& (AND) وهو حرف الواو (و)
| (OR) وهو حرف العطف (أو)
^ (XOR) وهي (أو) الاستثنائية
>> إزاحة إلي اليمين
<< إزاحة إلي اليسار
-ملاحظة هامة:
1- أن الأدوات الدقيقة لا تستعمل في الجمل الشرطية بطريقة الأدوات العلاقية والمنطقية ، ويجب التميز بينهما ، وللتوضيح قارن بين المثالين التاليين:
1- X = 7 && 8
النتيجة تساوي 1 وهي ( أداة علاقية ).
2- X = 7 & 8
النتيجة تساوي 0 وهي ( أداة منطقية ).
وذلك لأن الأعداد هنا تحول إلي نظام ثنائي ثم تجمع.
2-أن التعامل مع الأدوات الدقيقة ليس سهلاً للمبتدئين لأنه يتطلب منك معرفة أولاً الأنظمة العددية.

-استعمال الفراغات والأقواس:
من أجل أن تكون قراءة سطور برنامج لغة c++ واضحة ، يمكننا استعمال الفراغات بين الثوابت والمتغيرات أثناء كتابة البرنامج والمثاليين التاليين يوضحان لك المعنى الذي أقصده أكثر:
1-a=6/b-(100/c);
2-a = 6/b - (100/c) ;
لاحظ كيف باعدنا بين القيم في التعبير الثاني ليكون أوضح قراءة من التعبير الأول.
وأيضاً من المعلوم أن جعل كل عملية حسابية أو منطقية بين قوسين ، لا تسبب خطأ في العمليات الحسابية أو المنطقية ، أو أي بطئ في تلك العمليات ، بل تجعل التعبير أوضح قراءة كما في المثال التالي:
a= b/5 - 12*c - 8/d;
ولاحظ عند إعادة كتابة التعبير السابق وجعل كل عملية حسابية بين قوسين وسيصبح على الصورة:
a= (b/5) - (12*c) -(8/d);
ويعتبر التعبير الثاني أوضح من التعبير الأول ، أليس كذلك ؟؟


( أسئلة عامة على الفصل الثالث )

س1:عرف التعبير الحسابي ؟ مع ذكر مجموعة من الأمثلة على التعبير الحسابي ؟

س2:ما هي الأدوات المستعملة في لغة C++ ؟ مع شرح مفصل لكل نوع منها؟

س3:ما هو مفهوم المعادلة I= I+1 في لغة C++ ؟

س4:علل لما يأتي:
1-سبب تسمية الأدوات العلاقية بهذا الاسم.
2-سبب تسمية الأدوات المنطقية بهذا الاسم.
3-سبب تسمية الأدوات الدقيقة بهذا الإسم.

س5: إذا علمت أن:
int a=b=5;
1-a<7
2-a<=4
3-a>b
4-a>=b
5-a= =b
6-a! = b
7-a= =b ||5
8-5<4




-جمل التحكم والشرط والتكرار ( Program Control , Conditional & Loop Statements ):
يقصد بعبارات التحكم العبارات الخاصة بالبرنامج والتي يمكنها تغيير التسلسل الطبيعي لتنفيذ الجمل الخاصة بالبرنامج والذي يكون من أعلى إلي أسفل . وفي الأمثلة السابقة ، يتم تنفيذ
التعليمات بنفس ظهورها في البرنامج أي أن كل التعليمات قد تم تنفيذها الواحدة تلو الأخرى، وهذه النوعية من البرامج عادة ما تكون بسيطة وصممت لأجل أغراض قد لا تكون واقعية
وقد نحتاج إلي أن ننتقل من سطر إلي آخر في لغة C++ ،أو أن نقوم بتنفيذ بعض الجمل عند تحقق بعض الشروط ، أو أن نكرر عملية من عمليات الإدخال والإخراج أو الحساب عدداً من المرات ، لهذا يلزم استخدام عبارات التحكم حتى يتسنى الاستفادة من البرامج في تطبيقات أكثر فاعلية K وتعتبر أساليب الشرط والتحكم والتكرار بمثابة القلب في جسم لغات البرمجة ، وبدونها لا يمكن تنظيم إي برنامج.

-الجمل الشرطية:
تتعامل لغة C++ مع ثلاثة أنواع من جمل الشرط وهي:
1-جملة إذا الشرطية وأخواتها ( if statements ).
2-جملة التوزيع ( switch statement ).
جملة أداة الشرط ?.

1-جملة إذا الشرطية ( if statements ):
ولجملة إذا الشرطية ( if statements ) عدة صيغ وهي كالتالي:
-الصيغة الأولى لجملة إذا الشرطية ( if statements ):
وهي أبسط هذه الصيغ
-ويمكن تمثيل هذه الصيغة في البرامج على النحو التالي:
if ( condition )
Statement;
-الشرح:
تقوم هذه العبارة بالتحقق من الجملة الشرطية ( condition or test ) فإذا تحقق الشرط تم تنفيذ العبارة التابعة لهذا الشرط وإذا لم يتحقق فلن يتم تنفيذها ومن ثم يواصل البرنامج تنفيذ بقية الخطوات التالية لجملة if.
-مثال توضيحي على هذه الصيغة (1):
#include<iostream.h>
main()
{
int x = 5;
if ( x>0)
cout<<"x is positive";
}
سؤال: أكتب برنامج يقوم بإدخال إي رقم ثم يقوم البرنامج إذا كان الرقم موجب وأكبر من الصفر بإظهار الرسالة التالية ( The Number Is Positive ) وإذا كان الرقم سالب إي أصغر من الصفر يقوم بإظهار الرسالة (The Number is Negative) ؟
-إجابة السؤال:
#include<iostream.h>
#include<conio.h>
main()
{
clrscr();
int x;
cout<< "\n Enter any number";
cin>> x;
if ( x>=0)
cout<<"\n The number"<<x<<"is Positive";
cout<<\n The Number "<<x<<"is Negative";
}
-الصيغة الثانية لجملة إذا الشرطية ( if statements ):
ولهذه الصيغة تأثير الصيغة السابقة ، فإنه إذا تحقق الشرط تم تنفيذ العبارة الأولى وإذا لم يتحقق الشرط تم تنفيذ العبارة الثانية المذكورة بعد كلمة else .




-ويمكن تمثيل هذه الصيغة على النحو التالي:
if ( Condition )
statement1;
else
statement2;

-مثال توضيحي على هذه الصيغة:
هذا برنامج يطلب من المستخدم إدخال إي رقم ثم يقوم البرنامج بإظهار رسالة الرسالة التالية للمستخدم ( The Number Is Positive ) إذا كان الرقم موجباً وإلا إظهار الرسالة التالية ( The Number Is Negative)
إذا كان الرقم سالباً .
-حل المثال:
#include<iostream.h>
#include<conio.h>
main()
{
clrscr();
int x;
cout<<"\n Enter any number";
cin>> x;
if ( x>=0)
cout<<"\n The number"<<x<<"is Positive";
else
cout<<\n The Number "<<x<<"is Negative";
}

-ملاحظة:
قارن بين المثال السابق والمثال الذي يليه ماذا تلاحظ ؟
بالتأكيد سوف تلاحظ أنهما تقريباً متشبهان إلي حد كبير ولكن الفرق بينهما هو أنه في المثال الأخير قد استخدمنا كلمة else ولاحظ أنه لم نستخدم كلمة else في المثال الأول ونفذ البرنامج بشكل صحيح
(ماذا تستنتج من ذلك؟) نستنتج أن استعمال كلمة else يعد اختيارياً في لغة C++ إي أنه يمكن حذفها بدون أن تأثر على الجملة الشرطية تركيباً وأداء.

-الصيغة الثالثة لجملة إذا الشرطية ( if statements ):
وتعرف هذه الصيغة بجملة if المتداخلة أو ( Nested if ) ، ففي هذه الحالة إذا تحقق الشرط الأول فإن البرنامج سينفذ العبارة الأولى ومن ثم ينهي جملة if ليكمل بقية جمل البرنامج . أما إذا لم يتحقق الشرط الاول فإنه سينفذ الجزء الخاص ب else if فإذا تحقق الشرط الثاني فسوف ينفذ العبارة الثانية ومن ثم ينهي جملة if لاستكمال بقية البرنامج ، أما إذا لم يتحقق الشرط الثاني فسوف ينفذ الجزء الخاص بـ else الأخيرة وسيقوم بتنفيذ العبارة الثالثة وهكذا….
ملاحظة هامة: من الممكن وجود أكثر من عبارة شرط بالبرنامج ولكن بشرط أن تكون تلك العبارات محصورة بين القوسين التاليين {}.

--ويمكن تمثيل هذه الصيغة على النحو التالي:
if ( Condition1 )
{
statement1;
}
else if ( Condition2 )
{
statement2;
}
else
statement3;
-ملاحظة هامة: لكي لا يقع مبرمج لغة C++ في لبس من صيغة الجملة الشرطية إذا المتدخلة فإن القاعدة المستعملة في لغة C++ مع هذه الصيغة هي:
إن كلمة else ترتبط بأقرب if لم ترتبط بـ else أخرى قبلها.

-مثال توضيحي على هذه الصيغة:
هذا برنامج يطلب من المستخدم إدخال إي رقم ثم يقوم البرنامج بإظهار رسالة الرسالة التالية للمستخدم ( The Number Is Positive ) إذا كان الرقم موجباً وإلا إظهار الرسالة التالية ( The Number Is Negative)
إذا كان الرقم سالباً وإلا إظهار الرسالة التالية "END OF PROGRAM" إذا كان الرقم يساوي الصفر.
#include<iostream.h>
#include<conio.h>
main()
{
clrscr();
int x;
cout<< "\n Enter any number";
cin>> x;
if ( x==0)
cout<<"\n "<<"END OF PROGRAM";
else
if(x>0)
cout<<\n The Number "<<x<<"is Positive";
else
cout<<\n The Number "<<x<<"is Negative";

}

سؤال: أكتب برنامج يقوم بحساب درجة طالب في إحدى المواد حيث يتم حساب التقدير حسب الجدول التالي:
العلامة التقدير
أكبر من أو تساوي 90 E
أكبر من أو تساوي 80 VG
أكبر من أو تساوي 70 G
أكبر من أو تساوي 60 M
أقل من 60 R

-جملة التوزيع الشرطية Switch ( ):
تستخدم الجملة Switch عندما تكون هناك عدة خيارات بحيث إذا تحققت إحداها يتم تنفيذ الأوامر أو العبارات التي تخص هذه الحالة.
وتماثل جملة Switch في لغة C++ جملة التوزيع التالية في لغة البيسك:
10 ON counter GOTO n1,n2……,nm
حيث counter هو عداداً يأخذ الأعداد الصحيحة 1,2,3,……….. ، وفي لغة البيسك يتم الانتقال إلي السطر رقم n1,n2,…..nm لتنفيذه ، حسب قيمة العداد counter ، فإن كانت قيمته 1 ، فهذا يقابل الحالة الأولى ، ويتم الانتقال إلي السطر n1 لتنفيذه ، وهكذا بالنسبة للحالات الأخرى.

-الشكل العام لجملة Switch في لغة C++:
Switch ( expression )
{
case constaant1: statements1;
break;
case constaant2: statements2;
break;
……………………………..
……………………………..
case constant n; statements n;
break;
default: statement;
break;
}


-ملاحظات هامة على الجملة Switch:
1-تستخدم جملة Switch في حالة المساواة في الشرط ، بينما يمكن لجملة إذا الشرطية (if) استخدام جميع علاقات المساواة وغير المساواة.


* تعريف المؤشرات :
وهو عبارة عن عنوان للمتغير في الذاكرة ، إي كأنه يمثل رقم شقة في إسكان ، بصرف النظر عن محتوى الشقة وقيمة ما فيها.

7-مؤشرات الزيادة والنقصان في لغة C++:
من مزايا لغة السي أنها تستعمل الأداتين الحسابيتين ++ و -- لزيادة قيمة 1 أو إنقاصه والمثال التالي يبين طريقة الاستعمال:
++a; أو a++ ومعناه إضافة 1 إلي a ويمكن كتابته بصورة مكافئة على النحو a=a+1 .
وبصورة مشابهة يمكن إنقاص قيمة 1 من a على النحو:
--a; أو a--; وهو يكافئ الصورة:
a=a-1;
ولكن هناك فرقاً في سرعة التنفيذ ، فالتعبير ++a; أسرع من a=a+1; وهذه هي الفائدة من وراء استخدام مثل هذه الأدوات في لغة السي.
1- i=i+1 (i++) تعني
2- i=i-1 (i--) تعني
3- N+ (N=N+2) تعني
4- X-=100 (X=X-100)تعني
















المراجع

(1)
كتاب البرمجة بلغة سي (الجزء الأول)
اسم المؤلف: الدكتور/ عوض منصور
كلية الهندسة بجامعة العلوم والتكنولوجيا
وقسم الحاسب بجامعة اليرموك
(2)
كتاب الحاسوب وإيجاد الحلول باستخدام C++
اسم المؤلف: الدكتور / كمال بن منصور جمبي
رئيس قسم علوم الحاسبات
كلية العلوم بجامعة الملك عبد العزيز
(3)
كناب البرمجة بلغة السي
اسم المؤلف:
(4)
كتاب مقدمة للبرمجة
اسم المؤلف: عدنان ماجد بري
(5)
كتاب ( C++ from the Ground Up )
اسم المؤلف: Herbert Schildt



لاتنسونا من الدعاء فنحن في أمس الحاجة إليه
[/b]
الرجوع الى أعلى الصفحة اذهب الى الأسفل
معاينة صفحة البيانات الشخصي للعضو http://awfm.boardlog.com
ذوق اليمن
عضو فعال


عدد الرسائل : 103
العمر : 33
تاريخ التسجيل : 10/07/2008

بطاقة الشخصية
المدير العام / عبدالهادي الحداد:

مُساهمةموضوع: مشكوووووووووووووووور أخي عبدالهادي الحداد على هذا الموضوع   الجمعة يوليو 11, 2008 5:37 am

مشكوووووووووووووووووووووووووووووور أخي على هذه الموضوع وجزاك الله ألف خير وننتظر المزيد

الرجوع الى أعلى الصفحة اذهب الى الأسفل
معاينة صفحة البيانات الشخصي للعضو
محترف
مبرمج رائع
مبرمج رائع
avatar

عدد الرسائل : 144
العمر : 32
تاريخ التسجيل : 22/07/2008

بطاقة الشخصية
المدير العام / عبدالهادي الحداد:

مُساهمةموضوع: رد: مقدمة عن لغة ++C : الجزء الثالث   الأحد أغسطس 24, 2008 1:25 pm



مشكوووووووووووووووووووووووووور
















الرجوع الى أعلى الصفحة اذهب الى الأسفل
معاينة صفحة البيانات الشخصي للعضو
 
مقدمة عن لغة ++C : الجزء الثالث
الرجوع الى أعلى الصفحة 
صفحة 1 من اصل 1

صلاحيات هذا المنتدى:لاتستطيع الرد على المواضيع في هذا المنتدى
النافذة العربية للبرمجة :: قسم لغات برمجة التطبيقات :: منتدى C و ++C-
انتقل الى: