برنامج عاملي في C: كيف تحسب مضروب الرقم؟

مضروب العدد الصحيح الموجب هو حاصل ضرب عدد صحيح وجميع الأعداد الصحيحة الموجودة أسفله. تعلم كيفية كتابة برنامج عاملي في C. مثال: 3! = 3 * 2 * 1

عامل عدد صحيح موجب هو نتاج عدد صحيح وجميع الأعداد الصحيحة الموجودة أسفله ، أي عامل العدد n (يمثله n!) سيتم إعطاؤه بواسطة

ن! = 1 * 2 * 3 * 4 *. . . . . *ن





يتم تعريف مضروب 0 على أنه 1 ولا يتم تعريفه للأعداد الصحيحة السالبة. هناك عدة طرق للعثور عليه وهي مدرجة أدناه-

هيا بنا نبدأ.



عاملي باستخدام For Loop

إنها أسهل وأبسط طريقة لإيجاد مضروب الرقم. دعونا أولاً نزور الكود -

ما هو الفرق بين التحميل الزائد والتجاوز
#include int main () {int I، num، fact = 1 // تحديد عاملي كـ 1 نظرًا لأن أقل قيمة هي 1 printf (“أدخل رقمًا لحساب عامليته”) scanf (“٪ d” ، & num) if (num<0) //if the input is a negative integer { printf (“Factorial is not defined for negative numbers.”) } else { for(i=1i0, therefore fact value remains 1 { fact = fact * i // keeps on multiplying and storing in the value of factorial till the input integer is reached } printf(“Factorial of %d = %dn”, num, fact) } return 0 //since we have defined the main() method with a return value of integer type }

انتاج-

العامل 5 = 120



تفسير -

يتم أخذ الرقم الذي يتم إيجاد عامله كمدخلات ويتم تخزينه في متغير ويتم التحقق منه إذا كان سالبًا أم لا. إذا كان الرقم الصحيح الذي تم إدخاله سالبًا ، فسيتم عرض الرسالة المناسبة. تم تحديد قيمة عاملي مسبقًا لتكون 1 حيث أن أقل قيمة لها هي 1. يتم تنفيذ حلقة for للأعداد الصحيحة الموجبة (باستثناء 0 حيث تكون حالة الاختبار خاطئة وبالتالي تظل الحقيقة صفرية). في الحلقة for ، تُضرب قيمة العامل مع كل عدد صحيح ويتم تخزينها على التوالي حتى الوصول إلى رقم الإدخال. على سبيل المثال ، بالنسبة للإدخال = 5 ، ينتقل التدفق إلى حلقة for وتحدث الخطوات التالية-

الحقيقة = 1 ، أنا = 1 -> الحقيقة = 1 * 1 = 1 -> أنا = 2
الحقيقة = 1 ، أنا = 2 -> الحقيقة = 1 * 2 = 2 -> أنا = 3
الحقيقة = 2 ، أنا = 3 -> الحقيقة = 2 * 3 = 6 -> أنا = 4
الحقيقة = 6 ، أنا = 4 -> الحقيقة = 6 * 4 = 24 -> أنا = 5
الحقيقة = 24 ، أنا = 5 -> الحقيقة = 24 * 5 = 120 -> أنا = 6

الآن 6> 5 ، لذلك تصبح حالة الاختبار خاطئة ويتم إنهاء الحلقة. يتم عرض قيمة العامل.

عامل استخدام الدوال

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

#include long factorial (int num) // function لحساب العامل الذي يأخذ قيمة عدد صحيح كمعامل ويعيد قيمة نوع int {int i long fact = 1 for (i = 1 i<= num i++) fact = fact * i return fact //returns to function call } int main() //execution begins from main() method { int num printf('Enter a number to calculate its factorialn') scanf('%d', &num) if(num<0) //if the input is a negative integer { printf('Factorial is not defined for negative numbers.') } printf('Factorial of %d = %dn', num, factorial(num)) //call to factorial function passing the input as parameter return 0 } 

هي علاقة في جافا

انتاج | - العامل 5 = 120

تفسير-

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

عاملية باستخدام العودية

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

يوجد أدناه رمز إيجاد عاملي باستخدام العودية: -

#include int fact (int) // function prototype int main () {int num printf ('أدخل الرقم الذي سيتم إيجاد عامله:') scanf ('٪ d'، & num) if (num<0) { printf('ERROR. Factorial is not defined for negative integers') } printf('Factorial of %d is %d', num, fact(num)) //first call is made return 0 } int fact(int num) { if(num==0) //base condition { return 1 } else{ return(num*fact(num-1)) //recursive call } } 

انتاج | - عامل العدد 5 = 120

تفسير -لنفترض أن المستخدم أدخل 5 كمدخل ، ثم في الطريقة الرئيسية () ، تكون قيمة الأسطوانات 5. بينما يذهب التدفق في عبارة printf (السطر 12) ، يتم إجراء استدعاء لوظيفة Fact (5). الآن للحقيقة (5) num هي 5 التي لا تساوي 0 ، لذلك يذهب التدفق إلى عبارة else حيث يتم إجراء استدعاء متكرر في بيان العودة ويتم إجراء الحقيقة (4). تتكرر العملية حتى يتم الوصول إلى الشرط الأساسي ، أي ، عدد = 0 ويتم إرجاع 1. ينتقل التدفق الآن إلى الحقيقة (1) حيث يتم إرجاع 1 (كما في الحقيقة (1) num = 1) * 1 (القيمة التي تم إرجاعها من الحقيقة (0)). تتكرر هذه العملية حتى يتم الحصول على القيمة المطلوبة.

تعقيد الزمان والمكان - تكرار V / S.

للتكرار-

بخصوص تعقيد الوقت ، نعلم أن العامل 0 هو المقارنة الوحيدة. لذلك T (0) = 1. بالنسبة إلى مضروب أي رقم آخر ، تتضمن العملية مقارنة واحدة وضربًا واحدًا وطرحًا واحدًا واستدعاء دالة. وبالتالي

T (ن) = T (ن -1) +3
= T (ن -2) +6
= T (ن -3) +9
= & hellip.
= T (n-k) + 3k

بما أننا نعرف T (0) = 1 و k = n ، (n-k) = 0

لذلك T (n) = T (0) + 3n
= 1+3n

لذلك فإن التعقيد الزمني للشفرة هو O (n).

بخصوص تعقيد الفضاء يتم إنشاء مكدس لكل مكالمة يتم الاحتفاظ بها حتى يتم الاحتفاظ بقيمتهامحسوبة وعاد. على سبيل المثال بالنسبة لـ n = 5 ، يجب الحفاظ على التكديس التالية

و (5) -> و (4) -> و (3) -> و (2) -> و (1) -> و (0)

كما نرى أنه يجب الحفاظ على 5 مكدسات حتى يتم الوصول إلى استدعاء f (0) الذي تكون قيمتهمعروف وعاد. لذلك من أجل n عاملي ، يجب الحفاظ على n مكدسات. وبالتالي تعقيد الفضاءهو O (ن). يتضح أيضًا من الصور أعلاه أنه بالنسبة لـ n = 5 ، يجب أن تكون 5 مكدساتمصانة. لذلك من أجل n عاملي ، يجب الحفاظ على n مكدسات. وبالتالي فإن تعقيد الفضاء هو O (n).

cloudera مسؤول معتمد لأباتشي hadoop

للتكرار-

بخصوص تعقيد الوقت هناك تكرارات n داخل الحلقة ، وبالتالي فإن تعقيد الوقت هو O (n).

بخصوص تعقيد الفضاء بالنسبة للحل التكراري ، هناك مكدس واحد فقط يحتاج إلى صيانة ويتم استخدام متغير عدد صحيح. لذا فإن تعقيد الفضاء هو O (1).

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

إذا صادفت أي أسئلة ، فلا تتردد في طرح جميع أسئلتك في قسم التعليقات في 'برنامج العوامل في C' وسيسعد فريقنا بالإجابة.