العمليات الحسابية في لغة C.


في هذا الدرس سنتعلم كيفية القيام بمختلف العمليات التي يعرفها حاسوبكم , و سنستعمل ما تعلمناه في الدرس السابق ألا و هو المتغيرات . الفكرة و المحور الرئيسي الذي تدور عليه كلمة "العمليات الحسابية في لغة C" هو جمع المتغيرات ببعضها , ضربها , تخزين الناتج في متغير آخر ...إلخ.

مهما كان مستواك في الرياضيات فهذا الدرس لا يسمح بتجاوزه أبدا.فلنتكلم بصراحة و صدق : إذا لم تكن تعرف الجمع , إذا فأنت غير مؤهل لتعلم أي لغة برمجية  .

عنوان درسنا:


العمليات القاعدية
الإختصارات
المكتبة الرياضية La librairie mathématique




العمليات القاعدية :

الشيئ الذي يجب معرفته هو أن الحاسوب هو عبارة عن آلة حاسبة متمكنة و ممتازة , طالما هو يعرف العمليات البسيطة:

* الجمع
* الضرب
* الطرح
* القسمة
* Modulo (سأقوم بشرحه فيما بعد)

إذا أردتم القيام بعمليات معقدة (الأس , الخوارزميات , الجذور المربعة...) يجب عليكم برمجتهم أي يجب تعريفهم للحاسوب .
من حسن حظنا , وهذا ما سنراه في بقية الدرس , أن هناك مكتبة رياضية تضم مجموعة من الدوال الرياضية الجاهزة. إذا فلن تحتاجوا لإعادة كتابتهم , إلا إذا كنتم أساتذة رياضيين فهذا الحل ممكن أيض ا.

لنبدأ الآن بعملية الجمع.
لكي نقوم بعملية الجمع , سنستعمل الرمز +(إنني لا أمزح )
و يجب عليكم وضع الناتج في متغير آخر . إذا نسقوم مثلا بإستدعاء متغير و لنسمه "Resultat" أي ناتج من نوعLong و يكون الناتج على هذا الشكل:

كود PHP:
long Resultat 0;Resultat 3;  
لا يتطلب منك الأمر أن تكون محترفا لكي تخمن أن المتغير "Resultat" سيأخذ القيمة 8 أثناء التشغيل .

بالطبع لا شيئ يظهر في الشاشة مع هذا الكود .لكن إذا أردتم رؤيت قيمة المتغير , أضيفوا الدالة Printf كما تعلمت أن تفعلوا في الدرس السابق :

كود PHP:
printf("5 + 3 =  %ld"Resultat);  
هذا هو الجمع الذي يعرفه الحاسوب.
بالنسبة للعمليات الأخرى, فمثل سابقتها, فقط الرمز الذي يتغير :

* الجمع: +
* الطرح: -
* الضرب: *
* القسمة: /
* Mdulo:%

إذا كنتم قد إستعملتم الآلة الحاسبة في جهازكم فستعرفون هذه الرموز حق معرفنها .
ليس هناك أية صعوبة فيما يخص العمليات, بإستثناء الإثنين الأخيرين (القسمة و Modulo). لذلك خصصت لهم فقرة لنتحدث عن كل واحدة بدقة .

القسمة

القسمة تتم على الحاسوب جيدا عندما لا يكون عندنا الباقي. مثلا, 3 / 6 تساوي 2, فالحاسوب هنا يعطيكم الخارج الصحيح, إلى هنا ليس هناك مشكل.

لنأخذ الآن مثالا آخر لقسمة لها باقي مثل : 2 / 5.
2 / 5, تعطينا إذا قمنا بحسابها جيدا, تساوي 2.5 

و مع ذلك أنظروا لهذا البرنامج ماذا يفعل:

كود PHP:
long resultat 0;
     
resultat 2printf ("5 / 2 = %ld"resultat);  
هناك مشكل كبير. طلبنا من الحاسوب أن يقوم ب 2 / 5, فكنا ننتظر منه أن يعطينا 2.5 كنتيجة, لكن هذه الآلة الحاسبة المتمكنة و الممتازة أعطتنا 2!!!!

ما هذا؟؟؟ هل أجهزتنا غبية لهذا الحد ؟
في الحقيقة, عندما يرى الأعداد 5 و 2, يقوم الحاسوب بقسمة لأعداد صحيحة. هذا يعني أنه سيخطئ في النتيجة لأنه لا يحتفظ إلا بالطرف الصحيح(2).

آه أستاذ..استاذ أنا أعرف ! هذا لأننا إستعملنا المتغير Resultat من نوع long ! لو كان من النوع double, لإستطعنا أن نخزن قيمة عشرية !!!

و مع ذلك,
جربوا نفس الكود السابق مع تغيير نوع المتغير الذي نخزن فيه النتيجة إلى النوع double, و سترون أن النتيجة لا تتغير.

إذا أردنا من الحاسوب أن يعطينا النتيجة الصحيحة, يجب علينا تغيير أعداد العملية 5 و 2 إلى أعداد عشرية, أي أن نكتب 5.0 و 2.0 (إنها نفس الأعداد السابقة, لكن بالنسبة للحاسوب فهي أعداد عشرية, لذلك فهو يقوم بقسمة لأعداد عشرية):

كود PHP:
double resultat 0;
     
resultat 5.0 2.0printf ("5 / 2 = %lf"resultat);  
العدد الناتج الآن صحيح.

لكن ستسألونني, كيف يمكننا معرفة الباقي في القسمة؟
هنا يتدخل الخارق: Modulo .

MODULO

الموديلو هي عملية رياضية تمكننا من الحصول على باقي قسمة معينة. قد يكون عملية حسابية غير معروفة مثل الأربعة الآخرين, و لكن بالنسبة للحاسوب فهي عملية قاعدية...

Modulo, كما قلت يمثل بالرمز %.
إليكم بعض الأمثلة :

5 % 2 = 1
14 % 3 = 2
4 % 2 = 0

إنتهى, هذا ما لدي بالنسبة للموديلو ليس هناك أي شيئ آخر. فقط قمت بتعريفه للذين لا يعرفونه.


العمليات بين المتغيرات :


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

كود PHP:
resultat nombre1 nombre2;  
هذا السطر يقوم بجمع قيمتي المتغيرين nombre1 و nombre2, و يخزن الناتج في متغير آخر "resultat".

آآآآه هنا الأشياء بدأت تصبح مهمة و مهمة جداhttp://www.siteduzero.com/Templates/...lies/smile.png

أتت لي فكرة رائعة. لديكم الآن المستوى للقيام بمحسبة صغيرة .نعم نعم , أأكد لكم ذلك !

تخيلوا معي برنامجا يطلب من المستخدم رقمين . هذه الأرقام, نخزنها في متغيرات.
ثم, نقوم بجمع هذه المتغيرات, و نخزن الناتج في متغير آخر و لنسمه "resultat".

و من ثم لا عليكم سوى إظهار الناتج على الشاشة.

حاولوا أن تقوموا بعمل هذا البرنامج بأنفسكم, هذا سهل سيدربكم.
الجواب في الأسفل قليلا:
.
.
.
.
.
.

كود PHP:
int main(int argcchar *argv[])
{
  
long resultat 0nombre1 0nombre2 0;
 
  
// نطلب من المستخدم إدخال رقمين :
 
  
printf("Entrez le nombre 1 : ");
  
scanf("%ld", &nombre1);
  
printf("Entrez le nombre 2 : ");
  
scanf("%ld", &nombre2);
 
  
// نقوم بالعملية:
 
  
resultat nombre1 nombre2;
 
  
// نظهر ناتج الجمع:
 
  
printf ("%ld + %ld = %ld\n"nombre1nombre2resultat);
 
  
system("PAUSE");     
  return 
0;
}  
هنا قمنا بعمل أول برنامج مهم حتى الآن ...أليس كذلك ؟

أنصحكم بأن تقوموا بنفس العملية مع العمليات الأخرى...
يمكنكم أيضا إضافة متغير آخر ليقوم الحاسوب بجمع متغيرات ثلاث و الطريقة تعمل %100:

كود PHP:
resultat nombre1 nombre2 nombre3;  



الإختصارات:


كما سبق و أشرت فقد قمنا بدراسة جل العمليات ... فبهذه العمليات الخمس يمكنكم عمل كل شيئ .أنا أعرف أنه من الصعب تصديق أن لعبة ثلاثية الأبعاد لا تقوم إلا على عمليات بسيطة مثل + و - و ... و لكنها الحقيقة المرة .

يوجد في لغة C تقنيات تمكننا من إختصار كتابة العمليات.
و لماذا نستعمل الإختصارات؟لأننا, غالبا, نستعمل عمليات متكررة. ستفهمون ما أعنيه و ذلك بعد أن تتعرفوا على ما نسميه ب:incrémentation .

incrémentation

في غالب الأحيان ستحتاجون إلى زيادة 1 إلى المتغير. مهما كان نوع البرنامج, ستكون هناك متغيرات تزداد قيمتها واحدا بواحد.
تخيلوا معي متغيرا إسمه "N". هل تستطيعون إضافة 1 على المتغير, دون معرفة القيمة التي يحتويها؟
إليكم الطريقة :

كود PHP:
1;  
ماذا هناك؟ نقوم بحساب N+1 ثم نخزن الناتج في N !!! أجل, إذا كانت قيمة المتغير N 4 فهي الآن 5 و إذا كانت 8 فهي الآن 9 ...

تعتبر هذه العملية تكرارية. المتخصصون في هذا المجال لن يتركونا كالحمقى نكتب إسم المتغير مرتين.
و هكذا قاموا بعمل إختصار لهذه الكتابة التي نسميها incrémentation. الكود الذي في الأسفل يفعل نفس الشيئ كالذي في الأعلى :

كود PHP:
N++;  
هذه الطريقة فعالة خصوصا ف;ي المستقبل فكما قلت سنكون مضطرين إلى إضافة 1 إلى المتغير.
كما لاحظتم لدينا الرمز : ++ الذي يوجد أيضا في إسم لغة البرمجة المشهورة : ++C. أظنكم فهمتم من أين أتى هذا الإسم العجيب فهو يعني لغة C معدلة و مطورة (1+).

décrémentation

و هي عكس زيادة 1 أي : ننقص 1 من قيمة المتغير.
النقصان عندما نكتبه بصيغته الكاملة :

كود PHP:
1;  
و بصيغته المختصرة :

كود PHP:
N--;  

إختصارات أخرى


يوجد العديد من الإختصارات و التي تعمل على نفس المبدأ السابق. لكن هذه المرة هذه الإختصارات تعمل على جميع العمليات : + - * / %.
و تمكننا الإختصارات من التخلص من تكرار إسم المتغير المراد إجراء العملية عليه عدة مرات. كذلك إذا أردتم ضرب متغير في 2 :

كود PHP:
2;  
و يمكنكم كتابتها بطريقة مختصرة :

كود PHP:
*= 2;  
إذا كان المتغير يحمل القيمة 12 فسيحمل القيمة 24 عند نهاية الأمر.
بالنسبة لباقي العمليات فهي تقام بنفس الطريقة. إليكم برنامجا مصغرا كمثال :

كود PHP:
long N 2;+= 4// N = 6... -= 3// ... N = 3 *= 5// ... N = 15 /= 3// ... N = 5 %= 3// ... N= 2  
هيا!!!!!! فكروا قليلا, فالتفكير لم يقتل أحدا يوما.
ما يجب تذكره هو أن الزيادة ب1 يبقى الإختصار الأكثر إستعمالا.




المكتبة الرياضية La librairie mathématique



في لغة سي يوجد ما يسما بالمكتبات و المكتبات هي عبارة عن مجموعة من الدوال الجاهزة. هذه الدوال قد كتبت من طرف مبرمجين قبلكم و هي تساعدكم في عدم تكرار العمل الذي قاموا به.
لقد إستعملتم الدالتين printf & scanf من المكتبة stdio.h.
و ما يجب معرفته هو أن هناك مكتبة أخرى تسمى math.h, و التي تحتوي على العديد من الدوال الرياضية الجاهزة.

لإستعمال هذه المكتبة التي تحتوي على الدوال مفيدة من المهم عدم نسيان وضع هذا الأمر في أعلى البرنامج:

كود PHP:
#include <math.h>  
نأتي الآن إلى تقديم أهم الدوال-سأقوم فقط بذكر أهمها و أكثرها إستعمالا-.


fabs

تقوم هذه الدالة بإعادة القيمة المطلقة لعدد, أي |x|.
بإختصار فهي تعيد لنا(تقوم بالإرجاع بعد إنجاز مهمتها) القيمة الموجبة للعدد المدخل:

كود PHP:
double absolu 0N=-27;absolu fabs(N); // absolu = 27  
هذه الدالة تعيد متغيرا من النوع double إذا فالمتغير "absolu" يجب ان يكون من نفس النوع كذلك ...هناك دالة أخري تشبهها تسمى "abs" و الإختلاف في نوع المتغير الذي تعيده كل واحدة على حدة.

pow

هذه الدالة تقوم بحساب أس عدد ما. يجب تعريف قيمتين: العدد و الأس. هكذا:

كود PHP:
pow(العددالأس(القوة));  
sqrt

هذه الدالة تقوم بحساب الجذر المربع لعدد معين. تعيدقيمة من نوع double double.

كود PHP:
double resultat 0100;resultat sqrt(N); // resultat = 10  
sin, cos, tan

يقوم هؤلاء الثلاثة بحساب جيب و جيب تمام و ظل زاوية ما و يجب أن تكون القيمة المعطاة بالراديان.

هناك العديد من الدوال الأخرى لكن لكبر مستواها في الرياضيات لم أرد ذكرها فهي لا تستعمل كثيرا ...
إنتهى درسنا أصدقائي صديقاتي و الآن مع التمرين المخصص لهذا الدرس .

نص التمرين :

قم بعمل برنامج يطلب من المستخدم إدخال أربعة أرقام و يقوم بالتالي :

يظهر جمع و طرح و قسمة و ضرب الأعداد الأربعة .
يظهر الجذر المربع للجمع و الضرب و الطرح و القسمة 
يقوم بجمع الجذور المربعة و يقوم بكتابتها و سط الشاشة .

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

إنتظر الدرس القادم تحت عنوان : الإحتمالات Les conditions

يتم التشغيل بواسطة Blogger.