164 lines
8.9 KiB
Markdown
164 lines
8.9 KiB
Markdown
---
|
|
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 <stdio.h>
|
|
|
|
// 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 <math.h> 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` لحساب الطاقة من رقم. |