--- title: Basic Math localeTitle: الرياضيات الأساسية --- # الرياضيات في C يوفر C الكثير من الخيارات للقيام بالرياضيات. سنبدأ ببعض العناصر الأكثر شيوعًا أولاً. ## الاشياء الاساسية هذه الأمثلة التالية ليست شفرة كاملة ، بل هي مجرد أمثلة على شكل الشفرة. تذكر أنه في C ، سنحتاج إلى أن يتم الإعلان عن كل شيء قبل استخدامه - `result` ، ستحتاج `a` ، و `b` إلى أن يتم تهيئتها بالفعل وتعيينها إلى قيمة. وسواء أكانوا `int` `double` أو مهما كان مهمًا لمنع الأخطاء وفقدان المعلومات ، فسنصل إلى ذلك لاحقًا. #### إضافة: `+` يتم تنفيذ الإضافة بعلامة `+` ، مثل: `result = a + b; ` في المثال أعلاه ، ستكون `result` المتغيرة مساوية لـ + b. #### الطرح: `-` يتم تنفيذ الإضافة باستخدام `-` مثل: `result = a - b; ` في المثال أعلاه ، ستكون `result` المتغيرة مساوية للقيمة a - b. #### الضرب: `*` يتم تنفيذ الضرب بـ `*` ، مثل: `result = a * b; ` في المثال أعلاه ، ستكون `result` المتغيرة مساوية للقيمة مضروبًا في b. #### الشعبة: `/` يتم تنفيذ القسم بـ `/` ، مثل: `result = a / b; ` في المثال أعلاه ، ستكون `result` المتغيرة مساوية للفقرة ب. هذا ليس دائما جزءا من أكثر من ب ، ولكن. عند التعامل مع الأعداد الصحيحة ، تصبح الأمور مختلفة قليلاً عن ذلك لاحقًا. # الأشياء غير الأساسية ## Modulo: '٪' حسنًا ، تبدأ الأمور الآن في الحصول على القليل من الغرابة. يتيح لك Modulo العثور على الباقي في القسمة. تذكر أنه مع الأعداد الصحيحة ، لا يمكن أن يكون لدينا عشري. الشعبة تدور حول إيجاد عدد المرات التي يتناسب فيها رقم واحد مع آخر ، أما الطريقة فهي عن إيجاد ما تبقى. خذ 27 مقسومًا على 4: 4 تناسب 27 مرة. 6 مرات 4 هي 24 ، مما يعني أن هناك 3 متبقية. نتيجة لذلك ، يكون 27٪ 4 هو 3. 10 مقسومًا على 5 هو 2 ، 2 مرات 5 هو 10 ، لذلك يوجد 0 متبقيًا. وكنتيجة لذلك ، يكون 10٪ 5 0. يعتبر مشغل modulo أكثر أهمية مما قد تفكر به ، خاصة في C حيث يتم فرض الفرق بين النقطة العائمة والأرقام الصحيحة. الأمر يستحق أن تكون مرتاحًا. إليك مثال على ذلك: `result = a % b; ` في المثال أعلاه ، ستكون `result` مساوية ل modulo b. ## الأعداد الصحيحة والرياضيات الأعداد الصحيحة لا يمكن أن تحتوي على الكسور العشرية. وكنتيجة لذلك ، عند إجراء التقسيم مع الأعداد الصحيحة ، سيتم اقتطاع أي نوع من العلامة العشرية. على سبيل المثال ، 17 مقسومة على 10 هي 1.7. ومع ذلك ، إذا كنا نتعامل فقط مع الأعداد الصحيحة ، فإن هذه النتيجة ستكون 1 ، وليس 1.7. 10 يناسب 17 مرة ، لذا فإن الإجابة هي 1. عند التعامل مع أرقام النقاط العائمة ، هذه ليست مشكلة. يمكن لأرقام النقاط العائمة أن تأخذ الأماكن العشرية ، لذلك لا داعي للقلق بشأن الأشياء التي يتم اقتطاعها. ### لماذا يقوم C بذلك؟ ج ، كما نوقش في وقت سابق ، هي لغة منخفضة المستوى. هناك اختلافات كبيرة بين النقاط العائمة والأعداد الصحيحة في أجهزة الكمبيوتر ، وهي تتطلب أن تكون لبعض أنواع البيانات خصائص معينة (مثل عدم قبول الكسور العشرية ، على سبيل المثال). لا تقدم C أي افتراضات حول ما تريد ، وتجبرك على التفكير في الأمر بنفسك. ### لماذا لا نستخدم أرقام النقاط العائمة طوال الوقت؟ هذا يأتي أيضا إلى C كونها لغة منخفضة المستوى. C أكثر بكثير وأسرع بكثير وأخف كثيرًا من العديد من اللغات الأخرى ، وأحد أسباب ذلك هو السبب في كون المبرمج قادرًا على اتخاذ قرارات ذكية حول أنواع البيانات. تذكر أن أرقام النقطة العائمة تستهلك ذاكرة أكثر بكثير من الأعداد الصحيحة. نتيجة لذلك ، من المهم استخدام نوع البيانات المناسب ، والتعامل مع عدد صحيح لتحويلات النقطة العائمة كلما لزم الأمر. ### كيف نتغلب على هذا؟ الصب (الموصوف لاحقا) هو أحد الحلول. والآخر هو استخدام أرقام النقطة العائمة. إذا كان أحد الأرقام أو كلاهما قيد التشغيل رقم نقطة عائمة ، ستكون النتيجة رقمًا عائمًا. يصبح هذا الأمر أكثر تعقيدًا عندما نبدأ في التعامل مع ترتيب العمليات ، ولكن في الوقت الحالي ، كن على علم بأن هذا يعمل: `double result = 23.0 / 2; ` # مثال كامل `#include // This is a comment. It gets ignored by the compiler, so we can write notes after the double slashes. int main(void) { int a = 3; int b = 5; int result = 0; // Doing things with variables: result = a + b; printf("a plus b = %i \n", result); // You can also do the operation inside the printf. // Here's an example of that with subtraction: printf("a minus b = %i \n", ab); // You don't need to do this with variables at all. // Here's an example of that with multiplication: printf("10 times 5 = %i \n", 10*5); // Here's a look at division. // Notice that the decimals are truncated because we're dealing with integers. printf("12 divided by 5 = %i \n", 12/5); // Now let's force floating point numbers by including a decimal. // Notice that even though these are integers, the decimal forces them to be // treated as floating point numbers, so they aren't truncated. // Note that I'm printing a double with %d, not an int with %i. printf("12.0 divided by 5 = %d \n", 12.0/5); return 0; } ` امنح هذه الفرصة لترى ما يحدث ، وتأكد من اللعب مع المشغلين والقيم لمعرفة ما وكيف تتغير الأشياء. # مكتبة الرياضيات يوفر C مكتبة رياضيات ( `math.h` ) التي توفر وظائف حسابية مفيدة متعددة. على سبيل المثال ، يمكن حساب قوة الرقم على النحو التالي: `int result = pow(2,3) // will result in 2*2*2 or 8 ` بعض دالات مكتبة ( `math.h` ) الأخرى التي قد تكون مفيدة هي: `#include double angle = cos(90.00); // Givs us 0.00 int result = sqrt(16); // Gives us 4 double result = log(10.00) // Gives us 2.30 (note this is ln(10), not log base 10)` // كود C لتوضيح // استخدام وظيفة ceil. # تتضمن # تتضمن انت مين () { float val1، val2، val3، val4؛ val1 = 1.6؛ val2 = 1.2؛ val3 = -2.8؛ val4 = -2.3 ؛ printf ("value1 =٪ .1lf \\ n"، ceil (val1))؛ printf ("value2 =٪ .1lf \\ n"، ceil (val2))؛ printf ("value3 =٪ .1lf \\ n"، ceil (val3))؛ printf ("value4 =٪ .1lf \\ n"، ceil (val4))؛ عودة (0)؛ } # قبل أن تذهب ... ## مراجعة * هناك العديد من المشغلين الأساسيين: * `+` للإضافة * `-` للطرح * `*` للضرب * `/` للقسمة * `%` ل modulo * هناك أيضًا مجموعة مشغلين أكثر ، لكننا سنتناول التفاصيل فيما بعد. * الرياضيات العددية هي شيء أن C صارمة جدا حول. * C صارم للغاية حول أنواع البيانات * إذا تم تضمين الأعداد الصحيحة فقط ، فسيتم إرجاع عدد صحيح * إذا كان رقم النقطة العائمة متضمنًا في العملية ، يصبح ذلك الجزء من العملية نقطة عائمة * يوفر C مكتبة `math.h` مع وظائف متعددة مثل `pow` لحساب الطاقة من رقم.