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

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

    أخبرتك في الفصل السابق: أن جهاز الكمبيوتر الخاص بك هو في الواقع آلة حاسبة ضخمة. سواء كنت تستمع إلى الموسيقى أو تشاهد فيلمًا أو تلعب لعبة فيديو، فإن جهاز الكمبيوتر يقوم بالحساب فقط.
    سيعلمك هذا الفصل كيفية إجراء معظم الحسابات التي يمكن لجهاز الكمبيوتر القيام بها. حتى لو لم تكن من محبي الرياضيات، سيكون هذا الفصل ضروريًا للغاية.

العمليات الأساسية

    ذكرنا سابقا أن الحاسوب هو الة حاسبة ضخمة، لا تقوم الا بالعمليات الاساسية المعروفة. كالجمع والطرح والضرب والقسمة بالاضافة الى مايطلق عليه في C بالموديلو(ساشرح هذا النوع من العمليات لاحقا).

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

عملية الجمع

    لإجراء العملية، نستخدم علامة +. يجب عليك وضع نتيجة العملية في متغير. لذلك سنقوم على سبيل المثال بإنشاء متغير resultat من نوع int وإجراء الحساب:

  int resultat = 0;
  resultat = 5 + 3;
printf("5 + 3 = %d", resultat);
   لا حاجة لأن تكون محترفا في الحساب الذهني لتخمين محتوى المتغير resultat. سيحتوي على القيمة 8 بعد اشتغال البرنامج. سيظهر على الشاشة:

عملية الجمع في c

عملية القسمة

   يقوم جهاز الحاسوب بإجراء عملية القسمة، بشكل عادي، عندما يكون الباقي منعدما. مثلا عندما نقسم 6 على 2 سيعطي الحاسوب 3 كجواب صحيح للعملية. لمثل هده العمليات لن يكون هناك مشكل. ولكن بالنسبة للعملية 7 على 2، فالخارج هو: 3,5. لنكتب برنامج يقوم بحسابها:
  int resultat = 0;
  resultat = 7 / 2;
  printf ("7 / 2 = %d", resultat);


عملية القسمة في c

   من خلال ما أعطاه البرنامج بعد تنفيده، يتضح أن نتيجة الحساب التي قام بها الحاسوب خاطئة. كنا ننتظر أن يظهر لنا قيمة 3,5، وإدا به يظهر 3 فقط.
  هل الحاسوب لا يجيد اجراء عملية القسمة؟ لا، الخطأ حدث لما قمنا بكتابة العملية بواسطة عددين صحيحين طبيعيين 7 و2 كما قمنا بتخزين خارج القسمة في متغير صحيح من نوع int، مما دفعه إلى القيام بعملية القسمة الاقليدية.  لدا يجب علينا الانتباه لطريقة كتابة العملية وإلى نوع المتغير، الدي نخزن فيه خارج العملية. ادا كان الخارج عددا عشريا،فيجب كتابة العملية كالتالي: 7.0/2.0 واستخدام النوع  float أو double، أما ادا كنت متأكدا من كون الخارج صحيح طبيعي، فلا بأس من استخدام النوع int.
   لنصحح كود المصدر ليصبح كالتالي:
  float resultat = 0;
  resultat = 7.0 / 2.0;
  printf ("7 / 2 = %f", resultat);
قسمة اعداد عشرة في c

   هنا الخارج صحيح: كما يعرض الكثير من الأصفار، ولكن النتيجة لا تزال صحيحة
   إذا كنت تريد الحصول على نتيجة عشرية، فيجب أن تكون أرقام العملية عشرية أيضا:
  • 5.0 / 2.0 = 2.5
  •  10.0 / 3.0 = 3.33333
  • 4.0 / 5.0 = 0.8.

الموديلو (الباقي).

   الموديلو هو عملية رياضية تجعل من الممكن الحصول على باقي عملية القسمة. قد تكون عملية أقل شهرة من العمليات الأربعة الأخرى، ولكنها تظل عملية يعتبرها جهاز الكمبيوتر الخاص بك من العمليات الأساسية.
الموديلو، كما قلت لك سابقًا، يتم تمثيله بعلامة٪. فيما يلي بعض الأمثلة عن الموديلو:
  • 5 % 2 = 1
  • 14 % 3 = 2
  • 4 % 2 = 0
   موديلو 2٪5 هو باقي القسمة  5/2، بمعنى أن الحاسوب يحسب كما يلي: 5 = 2 * 2 + 1 (الرقم 1 هو الباقي الدي يرسلة الموديلو).
وبالمثل، 3٪ 14 ، الحساب هو 14 = 3 * 4 + 2  (موديلو يرجع 2). أخيرًا، بالنسبة لـ 2٪ 4، فعملية القسمة منتهية، ولا يوجد باقي، لذا فإن الموديلو يرجع 0.
   ليس هناك ما يمكن إضافته حول عملية المودولو. أردت فقط أن أشرح ذلك لمن لا يعرفونها.

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

   ما سيثير اهتمامك، الآن بعد أن تعرفت على كيفية القيام بالعمليات الخمس الأساسية، هو التدرب على العمليات بين عدة متغيرات. لا شيء يمنعك من القيام بما يلي:
  int nombre1 = 6, nombre2 = 8;
int resultat = nombre1 + nombre2;
    السطر الأخير، يجمع بين المتغيرين nombre1 وnombre ويخزن النتيجة في المتغير resultat.

   وهنا تبدأ الأمور تصبح مثيرة للاهتمام. لدي فكرة. لديك الآن المستوى المطلوب لإنشاء آلة حاسبة صغيرة جدا. إنها سهلة للغاية!
   تخيل برنامجًا يطلب من المستخدم إدخال عددين. هذان العددين، يمكنك تخزينهما في متغيرين. ثم تقوم بجمع هذين المتغيرين وتخزن النتيجة في متغير يسمى resultat. ثم عليك فقط عرض نتيجة العملية على الشاشة.
 int main()
{
  int resultat = 0, nombre1 = 0, nombre2 = 0;
  // On demande les nombres 1 et 2 à l'utilisateur :
  printf("Entrez le nombre 1 : ");
  scanf("%d", &nombre1);
  printf("Entrez le nombre 2 : ");
  scanf("%d", &nombre2);
  // On fait le calcul :
  resultat = nombre1 + nombre2;
  // Et on affiche l'addition à l'écran :
  printf ("%d + %d = %d\n", nombre1, nombre2, resultat);
  return 0;
} 
الة حاسبة صغيرة في c
    يمكنك المحاولة باستخدام أي عدد (طالما أنك لم تتجاوز حدود نوع int)، سيقوم الكمبيوتر بإجراء الحساب في ومضة. لانه يمكن أن يقوم بمثل هذه العملية مليارات المرات في ثانية واحدة!
   أنصحك أن تقوم بنفس الشيء مع العمليات الأخرى للتدريب (الطرح والضرب ...). لا يجب أن تجد صعوبة كبيرة لأنه عليك تغيير فقط علامة واحدة أو اثنتين.

الإختصارات

   هناك تقنيات في C لتقصير كتابة العمليات. لماذا تستخدم الاختصارات؟ لأننا كثيرا ما نقوم بعمليات متكررة. سترى ما أعنيه بذلك على الفور، مع ما يسمى الزيادة (L'incrémentation).

الزيادة (L'incrémentation)

   سترى أنه سيكون عليك غالبًا إضافة 1 إلى متغير. مع تقدمك في البرنامجة، سيكون لديك متغيرات تزيد فقط بـ 1.
   تخيل أن المتغير الخاص بك يسمى nombre، هل تعرف كيف تضيف 1 إلى هذا المتغير دون معرفة القيمة التي يحتويها؟
   إليك كيفية القيام بذلك:
 nombre = nombre + 1; 
   عندما ينتهي البرنامج من حساب nombre + 1، يقوم بتخزين النتيجة في المتغير nombre. اذا كان يضم العدد 5 ستصبح قيمته 6، واذا كانت قيمته 9 ستصبح 10. وهكذا.
   هذه العملية تتكرر كثيرا. وكون علماء الكمبيوتر كسالى بشكل كبير، فإنهم لم يريدوا كتابة نفس اسم المتغير مرتين. لذلك اخترعوا اختصارًا لهذه العملية يسمى الزيادة. تعطي هذه التعليمة نفس النتيجة التي رأيناها :
 nombre++; 
   هذا السطر، أقصر بكثير من السطر السابق، والذي يعني "إضافة 1 إلى المتغير nombre". فقط اكتب اسم المتغير من أجل الزيادة ، ثم ضع علامتي +، وبطبيعة الحال، لا تنسى الفاصلة المنقوطة.

التناقص (La décrémentation)

    إنه عكس الزيادة تمامًا: ننقص أو نزيل 1 من المتغير. حتى لو كنا نستخدم الزيادات أكثر من التناقص، ستظل هذه العملية تستخدم من وقت لآخر.
التناقص، إذا كتبته في شكله "الطويل":
 nombre = nombre - 1; 
   والآن في شكله "المختصر"
 nombre--; 

الاختصارات الأخرى

    هناك اختصارات أخرى تعمل على نفس المبدأ. هذه المرة، تعمل هذه الاختصارات مع جميع العمليات الأساسية + - / * %.
  نتجنب هذه المرة تكرار اسم المتغير على نفس السطر. إذا كنت تريد ضرب متغير في عدد ما:
 
 nombre = nombre * 2; 
  يمكنك كتابتها بطريقة مختصرة مثل هذه:
 nombre =* 2; 
   إذا كانت قيمة المتغير هي 5 في البداية، فستصبح 10 بعد هذا التعليمة. للعمليات الأساسية الأخرى، نقوم بنفس الطريقة. هنا برنامج صغير على سبيل مثال:
 int nombre = 2;
 nombre += 4; // النتيجة 6
 nombre -= 3; // ... النتيجة 3
 nombre *= 5; // ... النتيجة 15
 nombre /= 3; // ... النتيجة 5
 nombre %= 3; // ... النتيجة 2 (لان 5 = 1 * 3 + 2) 
   الميزة هنا هي أنه يمكنك استخدام جميع العمليات الأساسية، وأنه يمكنك الجمع والطرح والضرب في أي رقم. هذه اختصارات تستخدمها في أي وقت. إدا كانت هناك اي تعليمات متكررة في برنامج ما.
   ضع في اعتبارك أن الزيادة تظل حتى الآن الاختصار الأكثر استخدامًا.

مكتبة الرياضيات

   في لغة C، هناك ما يسمى بالمكتبات العامة "standard"، أي مكتبات قابلة للاستخدام دائمًا من طرف جميع المبرمجين. فهي تدعى بالمكتبات "الأساسية" والتي نستخدمها كثيرًا.
   أُذكِّر أن المكتبات عبارة عن مجموعات جاهزة من الدوال؛. تمت كتابتها من قِبل المبرمجين قَبلك، فهي بطريقة ما تجنبك إعادة كتابة نفس الدالة مع كل برنامج جديد.
   لقد سبق لك استخدام الدوال التالية: printf وscanf، من المكتبة stdio.h . ليكن في علمك أن هناك مكتبات اخرى مبرمجة مسبقا، من بينها المكتبة التي سنتعرف عليها الان، وهي:  math.h. التي تحتوي على العديد من الدوال الرياضية الجاهزة.
  والواقع أن العمليات الأساسية الخمس التي رأيناها ليست كافية! حسنًا، قد لا تحتاج أبدًا إلى بعض العمليات المعقدة مثل الأس. ومع ذلك، تحتوي مكتبة الرياضيات على العديد من الدوال الأخرى التي ستحتاجها على الأرجح.
   خد على سبيل المثال، لا يمكننا حساب القوى في C! كيف تحسب مربع عدد ما؟ يمكنك دائمًا محاولة كتابة 2^5 في برنامجك، لكن جهاز الكمبيوتر الخاص بك لن يفهمه أبدًا لأنه لا يعرف ما هو ... ما لم تشرح له ذلك عن طريق إخباره بمكتبة الرياضيات!
  لتتمكن من استخدام دوال مكتبة الرياضيات، من الضروري وضع توجيه المعالج المسبق التالي في أعلى البرنامج:
#include <math.h>
   بمجرد الانتهاء، يمكنك استخدام جميع دوال هذه المكتبة.

قد لا تمتلك كل مهارات الرياضيات لفهم ما تقوم به هذه الدوال. إذا كان هذا هو حالك، فلا تقلق. اقرأ وركز مع ماتبقى وسيكون مفيدًا.

الدالة fabs

   تُرجع هذه الدالة القيمة المطلقة لأي عدد ، أي | x | (هذه كتاية رياضية). القيمة المطلقة لعدد هي قيمته الإيجابية:

  • إذا أعطيت 54- للدالة ، فإنها ترجع 54؛
  • إذا أعطيت 54 للدالة ، فإنها ترجع 54.
   باختصار، فإنها تعرض دائمًا المقابل الإيجابي للعدد الذي تعطيه له.
double absolu = 0, nombre = -27;
absolu = fabs(nombre); // المتغير absolu سيأخد القيمة 27
   تُرجع هذه الدالة قيمة من نوع double، لذا يجب أن يكون المتغير absolu من النوع double.

هناك أيضًا دالة مشابهة تسمى abs، وهذه المرة موجودة في stdlib.h. تعمل الدالة abs بنفس الطريقة، باستثناء أنها تستخدم أعدادًا صحيحة (int). لذلك فإنها تُرجع عددًا صحيحًا من النوع int وليس double مثل fabs.

الدالة ceil

   تُرجع هذه الدالة العدد الصحيح الأول بعد الرقم العشري المعطى لها. إنه نوع من التقريب. نحن في الواقع نقوم بتقريب إلى العدد الصحيح التالي مباشرة.
   على سبيل المثال، إذا أعطيناها 26.512 ، فإن الدالة ترجع 27.
   يتم استخدام هذه الدالة بنفس الطريقة وترجع قيمة من نوع double
  double resultat=0, nombre=14.45;
  resultat = ceil(nombre); // سيأخد القيمة 15

الدالة floor

   تقوم هذه الدالة عكس ما تقوم به الدالة السابقة: هذه المرة، تقوم بإرجاع العدد الصحيح الأصغر مباشرة.
   إذا أعطيتها 16.56، فسترجع  الدالة floor العدد 16 .

الدالة pow

   تحسب هذه الدالة قوة العدد. يجب أن تشير إلى قيمتين: العدد والقوة التي تريد رفعه إليها. هنا كيفية  استعمال للدالة:
double resultat = 0, nombre = 2;
resultat = pow(nombre, 3); // 2^3 = 8
   كذلك يمكنك استخدام هذه الدالة لحساب مربع عدد ما. يكفي الإشارة إلى القوة 2.

الدالة sqrt

   تحسب هذه الدالة الجذر التربيعي للعدد. تقوم بإرجاع قيمة من نوع double.
double racine = 0, nombre = 16;
racine = sqrt(nombre); // racine = 4

الدوال sin, cos, tan

   هذه هي الدوال الثلاث الشهيرة المستخدمة في علم المثلثات. العملية تبقى نفسها، هذه الدوال ترجع قيمة من نوع double. تستقبل هذه الدالات قيمة بوحدة الراديان.

الدوال asin, acos, atan

   هذه هي وظائف قوس الجيب، قوس جيب التمام وقوس الظل، وظائف اخرى  لعلم المثلثات. يتم استخدامها بنفس الطريقة وترجع قيمة من نوع double.

الدالة exp

   تحسب هذه الدالة الأسي للعدد. تقوم بإرجاع قيمة double (نعم ، نعم أيضًا).

الدالة log

   تحسب هذه الدالة اللوغاريتم الطبيعي للعدد (الذي نشير إليه أيضًا "ln").

الدالة log10

تحسب هذه الوظيفة اللوغاريتم العشري للعدد.

خلاصة

  • الكمبيوتر هو في الواقع مجرد آلة حاسبة عملاقة: كل ما يمكنه القيام به هو العمليات.
  • العمليات التي يعروفها جهاز الكمبيوتر تبقى أساسية جدًا: الجمع والطرح والضرب والقسمة والمودولو (هذا هو باقي عملية القسمة).
  • من الممكن إجراء عمليات بين المتغيرات. هذا من بين أفضل ما يمكن أن يفعله الكمبيوتر.
  • الزيادة هي عملية إضافة 1 إلى متغير. نكتب ++nombre.
  • التناقص هو العملية المعاكسة: نزيل 1 من متغير. لذا نكتب --nombre.
  • لزيادة عدد العمليات المعروفة لجهاز الكمبيوتر الخاص بك، يجب عليك تحميل مكتبة الرياضيات (<include<math.h#).
  • تحتوي هذه المكتبة على دوال رياضية أكثر تقدمًا، مثل الأس والجذر التربيعي والقيم التقريبية  واللوغاريتم وما إلى ذلك.

< الدرس الموالي
الجزء 1: أساسيات البرمجة في C.
  1. تهيئة الحاسوب من أجل البرمجة 
  2. أول برنامج بـ : C
  3. المتغيرات (Les variables)
  4. العمليات الحسابية.
  5. الشروط (Les conditions). عما قريب
  6. الحلقات المتكررة (Les boucle). عما قريب
  7. الدوال (Les fonctions). عما قريب
  8. تمارين تطبيقية. عما قريب

الجزء 2: تقنيات متقدمة في C.
  1. البرمجة المعيارية عما قريب
  2. المؤشرات (Les pointeurs) عما قريب
  3. الجداول (Les tableaux). عما قريب
  4. الحروف والنصوص عما قريب
  5. المعالج القبلي (Le préprocesseur). عما قريب
  6. إنشاء أنواع المتغيرات الخاصة بك عما قريب
  7. القراءة والكتابة في الملفات. عما قريب
  8. التخصيص الديناميكي عما قريب
  9. دخال نص بشكل آمن عما قريب
  10. تعلم شرح المؤشرات (Les pointeurs) عما قريب
  11. تمارين تطبيقية. عما قريب

الجزء 3: هيكلة البيانات في C.
  1. القوائم المتسلسلة عما قريب
  2. الأكوام والصفوف (Les piles et les files) عما قريب
  3. جداول التجزئة (Les tables de hachage). عما قريب

إرسال تعليق

0 تعليقات