حساب قيمة الـ فاكتوري خوارزميات

مفهوم الـ Factorial

في مادة الرياضيات عندما نضع علامة تعجب بعد الرقم فهذا يعني أننا نقصد الـ Factorial لهذا الرقم.

مثال: 5!   =======>   هنا نقصد الـ Factorial للعدد 5 , و هو يساوي 120.



طريقة حساب قيمة الـ Factorial للعدد

الـ Factorial للعدد هو بكل بساطة ضرب جميع الأرقام من 1 إلى هذا العدد. أمثلة:



طريقة حساب قيمة الـ Factorial للعدد في أي لغة برمجة

بكل بساطة نستخدم الحلقات لنحصل على الـ Factorial. لاحظ الجدول التالي.

تمارين شاملة حول الـ Factorial

تذكر

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


معلومة تقنية

إذا قسمت العدد 1 على أي عدد صحيح ( أي نوعه int ) فإن الجواب سيكون 0 فقط, أي لن يظهر أي رقم بعد الفاصلة لأن الكمبيوتر سيجد أنك تتعامل مع أنواع لا تقبل الفاصلة (int على int).

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



التمرين الأول

المطلوب

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


إرشادات

  1. المتغير S هو المتغير الذي سيحتوي على مجموع كل الأرقام الموجودة من 1 إلى N.

  2. الـ i هو المتغير ( العداد ) الذي يزيد واحد في كل دورة.

  3. الـ F هو المتغير الذي نخزن فيه الـ Factorial لقيم العداد i.

  4. الـ N هو المتغير الذي يخزن العدد الذي سيدخله المستخدم و الذي تتوقف عنده الحلقة.

  5. الحلقة تبدأ من 1 و تتوقف عند N , أي عند العدد الذي أدخله المستخدم.

  6. ركز جيداً, نحن لا نجمع قيم الـ i نحن نجمع الـ Factorial لكل قيمة من قيم العداد i.


النتيجة المطلوبة

لنفترض أن المستخدم أدخل العدد " 4 ".

تحليل النتيجة

الخوارزمية

كود الجافا

import java.util.Scanner;
 
public class Factorial {
 
    public static void main (String[] args) {
 
        Scanner input = new Scanner(System.in);
 
        int N;
        int F;
        double S = 0;
 
        System.out.print("Enter a number For N : ");
        N = input.nextInt();
 
        for (int i=1; i <=N; i++)
        {
            F = 1;
            for (int k=1; k <=i; k++)
            {
                F = F * k;
            }
            S = S + F;
        }
 
        System.out.print("S = " +S+ "\n");
 
    }
 
}
		

شرح الكود


    		int N;
    		int F;
    		double S = 0;
    				
  • هنا قمنا بتجهيز المتغير N لتخزين الرقم الذي سيدخله المستخدم.

  • و المتغير F لتخزين الـ Factorial لكل قيمة من قيم العداد i الذي سنستخدمه في الحلقة.

  • و المتغير S لتخزين المجموع النهائي.



  • 		System.out.print("Enter a number for N: ");
    		N = input.nextInt();
    				
  • هنا طلبنا من المستخدم إدخال عدد, ثم وضعناه في المتغير N.



  • 		for (int i=1; i <=N; i++)
    		{
    			F = 1;
    			for (int k=1; k <=i; k++)
    			{
    				F = F * k;
    			}
    			S = S + F;
    		}
    				
  • هنا في كل دورة من دورات الحلقة i سيحدث التالي:

    • سيتم وضع القيمة 1 كقيمة أولية للمتغير F لأننا سنستخدم هذا المتغير لتخزين قيمة الـ Factorial في كل مرة للعداد i.

    • بعدها, سيتم إنشاء حلقة داخلية تبدأ من 1 إلى قيمة العداد i الحالية بهدف حساب قيمة الـ Factorial للعداد i و تخزينها في المتغير F بشكل مؤقت.

    • بعد أن أصبحت قيمة الـ Factorial للعداد i مخزنة في المتغير F, سيتم إضافتها على قيمة المتغير S.



    		System.out.print("S = " +S+ "\n");
    				
  • في الأخير سيتم عرض نتيجة جمع قيم الـ Factorials المخزنة في المتغير S.



التمرين الثاني

المطلوب

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


إرشادات

  1. المتغير S هو المتغير الذي سيحتوي على مجموع كل الأرقام الموجودة من 1 إلى N.

  2. الـ i هو المتغير ( العداد ) الذي يزيد واحد في كل دورة.

  3. الـ F هو المتغير الذي نخزن فيه الـ Factorial لقيم العداد i.

  4. الـ N هو المتغير الذي يخزن العدد الذي سيدخله المستخدم و الذي تتوقف عنده الحلقة.

  5. الحلقة تبدأ من 1 و تتوقف عند N , أي عند العدد الذي أدخله المستخدم.

  6. ركز جيداً, نحن لا نجمع قيم الـ i نحن نجمع الـ Factorial لكل قيمة من قيم العداد i.


النتيجة المطلوبة

لنفترض أن المستخدم أدخل العدد " 4 ".

تحليل النتيجة

الخوارزمية

كود الجافا

import java.util.Scanner;
 
public class Factorial {
 
    public static void main (String[] args) {
 
        Scanner input = new Scanner(System.in);
 
        int N;
        int F;
        double S = 0;
 
        System.out.print("Enter a number For N : ");
        N = input.nextInt();
 
        for (int i=1; i <=N; i++)
        {
            F = 1;
            for (int k=1; k <=i; k++)
            {
                F = F * k;
            }
            S = S + F;
        }
 
        System.out.print("S = " +S+ "\n");
 
    }
 
}
		

شرح الكود


    		int N;
    		int F;
    		double S = 0;
    				
  • هنا قمنا بتجهيز المتغير N لتخزين الرقم الذي سيدخله المستخدم.

  • و المتغير F لتخزين الـ Factorial لكل قيمة من قيم العداد i الذي سنستخدمه في الحلقة.

  • و المتغير S لتخزين المجموع النهائي.



  • 		System.out.print("Enter a number for N: ");
    		N = input.nextInt();
    				
  • هنا طلبنا من المستخدم إدخال عدد, ثم وضعناه في المتغير N.



  • 		for (int i=1; i <=N; i++)
    		{
    			F = 1;
    			for (int k=1; k <=i; k++)
    			{
    				F = F * k;
    			}
    			S = S + F;
    		}
    				
  • هنا في كل دورة من دورات الحلقة i سيحدث التالي:

    • سيتم وضع القيمة 1 كقيمة أولية للمتغير F لأننا سنستخدم هذا المتغير لتخزين قيمة الـ Factorial في كل مرة للعداد i.

    • بعدها, سيتم إنشاء حلقة داخلية تبدأ من 1 إلى قيمة العداد i الحالية بهدف حساب قيمة الـ Factorial للعداد i و تخزينها في المتغير F بشكل مؤقت.

    • بعد أن أصبحت قيمة الـ Factorial للعداد i مخزنة في المتغير F, سيتم إضافتها على قيمة المتغير S.



    		System.out.print("S = " +S+ "\n");
    				
  • في الأخير سيتم عرض نتيجة جمع قيم الـ Factorials المخزنة في المتغير S.



التمرين الثالث

إنتبه

هذا التمرين مهم جداً لأنك ستتعلم منه طريقة جديدة تجعلك تحصل على الـ Factorial للعدد بكود أقل.


المطلوب

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


إرشادات

  1. المتغير S هو المتغير الذي سيحتوي على مجموع كل الأرقام الموجودة من 1 إلى N.

  2. الـ i هو المتغير ( العداد ) الذي يزيد واحد في كل دورة.

  3. الـ F هو المتغير الذي نخزن فيه الـ Factorial لقيم العداد i.

  4. الـ N هو المتغير الذي يخزن العدد الذي سيدخله المستخدم و الذي تتوقف عنده الحلقة.

  5. الحلقة تبدأ من 1 و تتوقف عند N , أي عند العدد الذي أدخله المستخدم.


النتيجة المطلوبة

لنفترض أن المستخدم أدخل العدد " 4 ".

طريقة التحليل

سنستخدم الجدول ليكون الشرح أوضح.

الخوارزمية

كود الجافا

import java.util.Scanner;
 
public class Factorial_Sum {
 
    public static void main (String[] args) {
 
        Scanner input = new Scanner(System.in);
 
        int N;
        int F = 1;
        double S = 0;
 
        System.out.print("Enter a number For N : ");
        N = input.nextInt();
 
        for (int i=1; i <=N; i++)
        {
            F = F * i;
            S = S + F;
        }
 
        System.out.print("S = " +S+ "\n");
 
    }
	
}
		

شرح الكود


  • الهدف من هذا السؤال, إعطائك أفضل طريقة للحل بأصغر كود ممكن.



  • 		int N;
    		int F = 1;
    		double S = 0;
    				
  • هنا قمنا بتجهيز المتغير N لتخزين الرقم الذي سيدخله المستخدم.

  • و المتغير F لتخزين الـ Factorial لكل قيمة من قيم العداد i الذي سنستخدمه في الحلقة.

  • و المتغير S لتخزين المجموع النهائي.



  • 		System.out.print("Enter a number for N: ");
    		N = input.nextInt();
    				
  • هنا طلبنا من المستخدم إدخال عدد, ثم وضعناه في المتغير N.



  • 		for (int i=1; i <=N; i++)
    		{
    			F = F * i;
    			S = S + F;
    		}
    				
  • هنا في كل دورة من دورات الحلقة i سيحدث التالي:

    • سيتم ضرب قيمة المتغير F بقيمة العداد i الحالية و تخزين الناتج في المتغير F.
          بهذه الطريقة سيحتوي المتغير F على قيمة الـ Factorial للعداد i في كل دورة.

    • بعد أن أصبحت قيمة الـ Factorial للعداد i مخزنة في المتغير F, سيتم إضافتها على قيمة المتغير S.



    		System.out.print("S = " +S+ "\n");
    				
  • في الأخير سيتم عرض نتيجة جمع قيم الـ Factorials المخزنة في المتغير S.



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

المطلوب

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


إرشادات

  1. المتغير S هو المتغير الذي سيحتوي على مجموع كل الأرقام الموجودة من 1 إلى N.

  2. الـ i هو المتغير ( العداد ) الذي يزيد واحد في كل دورة.

  3. الـ F هو المتغير الذي نخزن فيه الـ Factorial لقيم العداد i.

  4. الـ N هو المتغير الذي يخزن العدد الذي سيدخله المستخدم و الذي تتوقف عنده الحلقة.

  5. الحلقة تبدأ من 1 و تتوقف عند N , أي عند العدد الذي أدخله المستخدم.

  6. ركز جيداً, نحن لا نجمع قيم الـ i نحن نجمع الـ Factorial لكل قيمة من قيم العداد i.

  7. إذا كانت قيمة الـ i عدد مفرد, نضيف Factorial الـ i على قيمة المتغير S.

  8. و إذا كانت قيمة الـ i عدد مزدوج, ننقص Factorial الـ i من قيمة المتغير S.


النتيجة المطلوبة

لنفترض أن المستخدم أدخل العدد " 5 ".

تحليل النتيجة

الخوارزمية

كود الجافا

import java.util.Scanner;
 
public class Factorial {
 
    public static void main (String[] args) {
 
        Scanner input = new Scanner(System.in);
 
        int N;
        int F;
        double S = 0;
 
        System.out.print("Enter a number For N : ");
        N = input.nextInt();
 
        for (int i=1; i <=N; i++)
        {
            F = 1;
            for (int k=1; k <=i; k++)
            {
                F = F * k;
            }
 
            if (i%2 == 1)
            {
                S = S + F;
            }
            else
            {
                S = S - F;
            }
        }
 
        System.out.print("S = " +S+ "\n");
 
    }
 
}
		

شرح الكود


    		int N;
    		int F;
    		double S = 0;
    				
  • هنا قمنا بتجهيز المتغير N لتخزين الرقم الذي سيدخله المستخدم.

  • و المتغير F لتخزين الـ Factorial لكل قيمة من قيم العداد i الذي سنستخدمه في الحلقة.

  • و المتغير S لتخزين المجموع النهائي.



  • 		System.out.print("Enter a number for N: ");
    		N = input.nextInt();
    				
  • هنا طلبنا من المستخدم إدخال عدد, ثم وضعناه في المتغير N.



  • 		for (int i=1; i <=N; i++)
    		{
    			F = 1;
    			for (int k=1; k <=i; k++)
    			{
    				F = F * k;
    			}
    		
    			if (i%2 == 1)
    			{
    				S = S + F;
    			}
    			else
    			{
    				S = S - F;
    			}
    		}
    				
  • هنا في كل دورة من دورات الحلقة i سيحدث التالي:

    • سيتم وضع القيمة 1 كقيمة أولية للمتغير F لأننا سنستخدم هذا المتغير لتخزين قيمة الـ Factorial في كل مرة للعداد i.

    • بعدها, سيتم إنشاء حلقة داخلية تبدأ من 1 إلى قيمة العداد i الحالية بهدف حساب قيمة الـ Factorial للعداد i و تخزينها في المتغير F بشكل مؤقت.

    • بعد أن أصبحت قيمة الـ Factorial للعداد i مخزنة في المتغير F سيحدث التالي:

      • إذا كانت قيمة العداد i عبارة عن عدد مفرد, سيتم إضافة قيمة المتغير F على قيمة المتغير S.

      • إذا كانت قيمة العداد i عبارة عن عدد مزدوج, سيتم طرح قيمة المتغير F من قيمة المتغير S.



    		System.out.print("S = " +S+ "\n");
    				
  • في الأخير سيتم عرض النتيجة النهائية المخزنة في المتغير S.


نصيحة

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



التمرين الخامس

المطلوب

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


إرشادات

  1. المتغير S هو المتغير الذي سيحتوي على مجموع كل الأرقام المفردة الموجودة من 1 إلى N.

  2. الـ T هو المتغير الذي سيحتوي على مجموع كل الأرقام المزدوجة الموجودة من 1 إلى N.

  3. الـ i هو المتغير ( العداد ) , هنا يزيد واحد في كل دورة.

  4. الـ F هو المتغير الذي نخزن فيه الـ Factorial لقيم العداد i.

  5. الـ N هو المتغير الذي يخزن العدد الذي سيدخله المستخدم و الذي تتوقف عنده الحلقة.

  6. الحلقة تبدأ من 1 و تتوقف عند N , أي عند العدد الذي أدخله المستخدم.


النتيجة المطلوبة

لنفترض أن المستخدم أدخل العدد " 8 ".

طريقة التحليل

الخوارزمية

كود الجافا

import java.util.Scanner;
 
public class Factorial {
 
    public static void main (String[] args) {
 
        Scanner input = new Scanner(System.in);
 
        int N;
        int F;
        double S = 0;
        double T = 0;
 
        System.out.print("Enter a number For N : ");
        N = input.nextInt();
 
        for (int i=1; i <=N; i++)
        {
            F = 1;
            for (int k=1; k <=i; k++)
            {
                F = F * k;
            }
 
            if (i%2 == 1)
            {
                S = S + F;
            }
            else
            {
                T = T + F;
            }
        }
 
        System.out.print("S = " +S+ "\n");
        System.out.print("T = " +T+ "\n");
 
    }
 
}
		

شرح الكود


    		int N;
    		int F;
    		double S = 0;
    		double T = 0;
    				
  • هنا قمنا بتجهيز المتغير N لتخزين الرقم الذي سيدخله المستخدم.

  • و المتغير F لتخزين الـ Factorial لكل قيمة من قيم العداد i الذي سنستخدمه في الحلقة.

  • و المتغير S لتخزين جمع الـ Factorial لقيم العداد i المفردة.

  • و المتغير T لتخزين جمع الـ Factorial لقيم العداد i المزدوجة.



  • 		System.out.print("Enter a number for N: ");
    		N = input.nextInt();
    				
  • هنا طلبنا من المستخدم إدخال عدد, ثم وضعناه في المتغير N.



  • 		for (int i=1; i <=N; i++)
    		{
    			F = 1;
    			for (int k=1; k <=i; k++)
    			{
    				F = F * k;
    			}
    		
    			if (i%2 == 1)
    			{
    				S = S + F;
    			}
    			else
    			{
    				T = T + F;
    			}
    		}
    				
  • هنا في كل دورة من دورات الحلقة i سيحدث التالي:

    • سيتم وضع القيمة 1 كقيمة أولية للمتغير F لأننا سنستخدم هذا المتغير لتخزين قيمة الـ Factorial في كل مرة للعداد i.

    • بعدها, سيتم إنشاء حلقة داخلية تبدأ من 1 إلى قيمة العداد i الحالية بهدف حساب قيمة الـ Factorial للعداد i و تخزينها في المتغير F بشكل مؤقت.

    • بعد أن أصبحت قيمة الـ Factorial للعداد i مخزنة في المتغير F سيحدث التالي:

      • إذا كانت قيمة العداد i عبارة عن عدد مفرد, سيتم إضافة قيمة المتغير F على قيمة المتغير S.

      • إذا كانت قيمة العداد i عبارة عن عدد مزدوج, سيتم إضافة قيمة المتغير F على قيمة المتغير T.



    		System.out.print("S = " +S+ "\n");
    		System.out.print("T = " +T+ "\n");
    				
  • في الأخير سيتم عرض نتيجة جمع الـ Factorials المخزنة في المتغيرات S و T.


نصيحة

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



المطلوب

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


إرشادات

  1. المتغير S هو المتغير الذي سيحتوي على مجموع كل الأرقام الموجودة من 1 إلى N.

  2. الـ i هو المتغير ( العداد ) , هنا يزيد واحد في كل دورة.

  3. الـ F هو المتغير الذي نخزن فيه الـ Factorial لقيم العداد i.

  4. الـ N هو المتغير الذي يخزن العدد الذي سيدخله المستخدم و الذي تتوقف عنده الحلقة.

  5. الحلقة تبدأ من 1 و تتوقف عند N , أي عند العدد الذي أدخله المستخدم.

إنتبه: يجب تعريف المتغيرين S و F كـ double حتى لا نخسر أي رقم موجود بعد الفاصلة أثناء إجراء عمليات القسمة.


النتيجة المطلوبة

لنفترض أن المستخدم أدخل العدد " 4 ".

طريقة التحليل

الخوارزمية

كود الجافا

import java.util.Scanner;
 
public class Factorial {
 
    public static void main (String[] args) {
 
        Scanner input = new Scanner(System.in);
 
        int N;
        double F;
        double S = 0;
 
        System.out.print("Enter a number For N : ");
        N = input.nextInt();
 
        for (int i=1; i <=N; i++)
        {
            F = 1;
            for (int k=1; k <=i; k++)
            {
                F = F * k;
            }
            S = S + ( 1/(i+F) );
        }
 
        System.out.print("S = " +S+ "\n");
 
    }
 
}
		

شرح الكود


    		int N;
    		double F;
    		double S = 0;
    				
  • هنا قمنا بتجهيز المتغير N لتخزين الرقم الذي سيدخله المستخدم.

  • و المتغير F لتخزين الـ Factorial لكل قيمة من قيم العداد i الذي سنستخدمه في الحلقة.

  • و المتغير S لتخزين المجموع النهائي.



  • 		System.out.print("Enter a number for N: ");
    		N = input.nextInt();
    				
  • هنا طلبنا من المستخدم إدخال عدد, ثم وضعناه في المتغير N.



  • 		for (int i=1; i <=N; i++)
    		{
    			F = 1;
    			for (int k=1; k <=i; k++)
    			{
    				F = F * k;
    			}
    			S = S + ( 1/(i+F) );
    		}
    				
  • هنا في كل دورة من دورات الحلقة i سيحدث التالي:

    • سيتم وضع القيمة 1 كقيمة أولية للمتغير F لأننا سنستخدم هذا المتغير لتخزين قيمة الـ Factorial في كل مرة للعداد i.

    • بعدها, سيتم إنشاء حلقة داخلية تبدأ من 1 إلى قيمة العداد i الحالية بهدف حساب قيمة الـ Factorial للعداد i و تخزينها في المتغير F بشكل مؤقت.

    • بعد أن أصبحت قيمة الـ Factorial للعداد i مخزنة في المتغير F, سيتم قسم 1 على قيمة العداد i + قيمة المتغير F.
          الناتج من عملية القسمة سيتم إضافته على قيمة المتغير S.



    		System.out.print("S = " +S+ "\n");
    				
  • في الأخير سيتم عرض نتيجة جمع قيم الـ Factorials المخزنة في المتغير S.


نصيحة

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



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

المطلوب

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


إرشادات

  1. المتغير S هو المتغير الذي سيحتوي على مجموع كل الأرقام الموجودة من 1 إلى N.

  2. الـ i هو المتغير ( العداد ) الذي يزيد واحد في كل دورة.

  3. الـ F هو المتغير الذي نخزن فيه الـ Factorial لقيم العداد i.

  4. الـ N هو المتغير الذي يخزن العدد الذي سيدخله المستخدم و الذي تتوقف عنده الحلقة.

  5. الحلقة تبدأ من 1 و تتوقف عند N , أي عند العدد الذي أدخله المستخدم.

  6. إذا أدخل المستخدم عدد مفرد, ستتوقف الحلقة عند

  7. و إذا أدخل عدد مزدوج, ستتوقف الحلقة عند

إنتبه: يجب تعريف المتغيرين S و F كـ double حتى لا نخسر أي رقم موجود بعد الفاصلة أثناء إجراء عمليات القسمة.


النتيجة المطلوبة

لنفترض أن المستخدم أدخل العدد " 7 ".

طريقة التحليل

الخوارزمية

كود الجافا

import java.util.Scanner;
 
public class Factorial {
 
    public static void main (String[] args) {
 
        Scanner input = new Scanner(System.in);
 
        int N;
        double F;
        double S = 0;
 
        System.out.print("Enter a number For N : ");
        N = input.nextInt();
 
        for (int i=1; i <=N; i++)
        {
            if (i%2 == 1)
            {
                S = S + i;
            }
            else
            {
                F = 1;
                for (int k=1; k <=i; k++)
                {
                    F = F * k;
                }
                S = S + (1/F);
            }
        }
 
        System.out.print("S = " +S+ "\n");
 
    }
 
}
		

شرح الكود


    		int N;
    		double F;
    		double S = 0;
    				
  • هنا قمنا بتجهيز المتغير N لتخزين الرقم الذي سيدخله المستخدم.

  • و المتغير F لتخزين الـ Factorial لكل قيمة من قيم العداد i الذي سنستخدمه في الحلقة.

  • و المتغير S لتخزين المجموع النهائي.



  • 		System.out.print("Enter a number for N: ");
    		N = input.nextInt();
    				
  • هنا طلبنا من المستخدم إدخال عدد, ثم وضعناه في المتغير N.



  • 		for (int i=1; i <=N; i++)
    		{
    			if (i%2 == 1)
    			{
    				S = S + i;
    			}
    			else
    			{
    				F = 1;
    				for (int k=1; k <=i; k++)
    				{
    					F = F * k;
    				}
    				S = S + (1/F);
    			}
    		}
    				
  • هنا في كل دورة من دورات الحلقة i سيحدث التالي:

    • إذا كانت قيمة العداد i عبارة عن عدد مفرد, سيتم إضافتها مباشرةً على قيمة المتغير S.

    • إذا كانت قيمة العداد i عبارة عن عدد مزدوج, سيحدث التالي:

      • سيتم وضع القيمة 1 كقيمة أولية للمتغير F لأننا سنستخدم هذا المتغير لتخزين قيمة الـ Factorial للعداد i.

      • بعدها, سيتم إنشاء حلقة داخلية تبدأ من 1 إلى قيمة العداد i الحالية بهدف حساب قيمة الـ Factorial للعداد i و تخزينها في المتغير F بشكل مؤقت.

      • بعد أن أصبحت قيمة الـ Factorial للعداد i مخزنة في المتغير F, سيتم قسم 1 على قيمة المتغير F.
            الناتج من عملية القسمة سيتم إضافته على قيمة المتغير S.



    		System.out.print("S = " +S+ "\n");
    				
  • في الأخير سيتم عرض القيمة النهائية المخزنة في المتغير S.


نصيحة

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



التمرين الثامن

المطلوب

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


إرشادات

  1. المتغير S هو المتغير الذي سيحتوي على مجموع كل الأرقام الموجودة من 1 إلى N.

  2. الـ i هو المتغير ( العداد ) الذي يزيد واحد في كل دورة.

  3. الـ F هو المتغير الذي نخزن فيه الـ Factorial لقيم العداد i.

  4. الـ N هو المتغير الذي يخزن العدد الذي سيدخله المستخدم و الذي تتوقف عنده الحلقة.

  5. الحلقة تبدأ من 1 و تتوقف عند N , أي عند العدد الذي أدخله المستخدم.

إنتبه: يجب تعريف المتغيرين S و F كـ double حتى لا نخسر أي رقم موجود بعد الفاصلة أثناء إجراء عمليات القسمة.


النتيجة المطلوبة

لنفترض أن المستخدم أدخل العدد " 9 ".

طريقة التحليل

الخوارزمية

كود الجافا

import java.util.Scanner;
 
public class Factorial {
 
    public static void main (String[] args) {
 
        Scanner input = new Scanner(System.in);
 
        int N;
        double F;
        double S = 0;
 
        System.out.print("Enter a number For N: ");
        N = input.nextInt();
 
        for (int i=1; i <=N; i++)
        {
            F = 1;
            for (int k=1; k <=i; k++)
            {
                F = F * k;
            }
            S = S + ( i/(i+1+F) );
        }
 
        System.out.print("S = " +S+ "\n");
 
    }
 
}
		

شرح الكود


    		int N;
    		int F;
    		double S = 0;
    				
  • هنا قمنا بتجهيز المتغير N لتخزين الرقم الذي سيدخله المستخدم.

  • و المتغير F لتخزين الـ Factorial لكل قيمة من قيم العداد i الذي سنستخدمه في الحلقة.

  • و المتغير S لتخزين المجموع النهائي.



  • 		System.out.print("Enter a number for N: ");
    		N = input.nextInt();
    				
  • هنا طلبنا من المستخدم إدخال عدد, ثم وضعناه في المتغير N.



  • 		for (int i=1; i <=N; i++)
    		{
    			F = 1;
    			for (int k=1; k <=i; k++)
    			{
    				F = F * k;
    			}
    			S = S + ( i/(i+1+F) );
    		}
    				
  • هنا في كل دورة من دورات الحلقة i سيحدث التالي:

    • سيتم وضع القيمة 1 كقيمة أولية للمتغير F لأننا سنستخدم هذا المتغير لتخزين قيمة الـ Factorial للعداد i.

    • بعدها, سيتم إنشاء حلقة داخلية تبدأ من 1 إلى قيمة العداد i الحالية بهدف حساب قيمة الـ Factorial للعداد i و تخزينها في المتغير F بشكل مؤقت.

    • بعد أن أصبحت قيمة الـ Factorial للعداد i مخزنة في المتغير F, سيتم قسم قيمة العداد i على قيمة العداد i + 1 + قيمة المتغير F.
          الناتج من عملية القسمة سيتم إضافته على قيمة المتغير S.



    		System.out.print("S = " +S+ "\n");
    				
  • في الأخير سيتم عرض القيمة النهائية المخزنة في المتغير S.


نصيحة

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



التمرين التاسع

المطلوب

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


إرشادات

  1. المتغير S هو المتغير الذي سيحتوي على مجموع كل الأرقام الموجودة من 1 إلى N.

  2. الـ i هو المتغير ( العداد ) الذي يزيد واحد في كل دورة.

  3. الـ F هو المتغير الذي نخزن فيه الـ Factorial لقيم العداد i.

  4. الـ N هو المتغير الذي يخزن العدد الذي سيدخله المستخدم و الذي تتوقف عنده الحلقة.

  5. الحلقة تبدأ من 1 و تتوقف عند N , أي عند العدد الذي أدخله المستخدم.


النتيجة المطلوبة

لنفترض أن المستخدم أدخل العدد " 6 ".

تحليل النتيجة

الخوارزمية

كود الجافا

import java.util.Scanner;
 
public class Factorial {
 
    public static void main (String[] args) {
 
        Scanner input = new Scanner(System.in);
 
        int N;
        int F = 1;
        double S = 0;
 
        System.out.print("Enter a number For N: ");
        N = input.nextInt();
 
        for (int i=1; i <=N; i++)
        {
            F = F * (i+1);
 
            if (i%2 == 1)
            {
                S = S - (i+F);
            }
            else
            {
                S = S + (i+F);
            }
        }
 
        System.out.print("S = " +S+ "\n");
 
    }
 
}
		

شرح الكود


    		int N;
    		int F = 1;
    		double S = 0;
    				
  • هنا قمنا بتجهيز المتغير N لتخزين الرقم الذي سيدخله المستخدم.

  • و المتغير F لتخزين الـ Factorial لكل قيمة من قيم العداد i الذي سنستخدمه في الحلقة.

  • و المتغير S لتخزين المجموع النهائي.



  • 		System.out.print("Enter a number for N: ");
    		N = input.nextInt();
    				
  • هنا طلبنا من المستخدم إدخال عدد, ثم وضعناه في المتغير N.



  • 		for (int i=1; i <=N; i++)
    		{
    			F = F * (i+1);
    		
    			if (i%2 == 1)
    			{
    				S = S - (i+F);
    			}
    			else
    			{
    				S = S + (i+F);
    			}
    		}
    				
  • هنا في كل دورة من دورات الحلقة i سيحدث التالي:

    • سيتم ضرب قيمة المتغير F الحالية بقيمة العداد i التالية, أي بـ i+i.
      الناتج سيتم وضعه في المتغير F.

    • بعد أن أصبحت قيمة الـ Factorial للعداد i التالي مخزنة في المتغير F سيحدث التالي:

      • إذا كانت قيمة العداد i عبارة عن عدد مفرد, سيتم طرح ناتج جمع المتغيرات i و F من قيمة المتغير S.

      • إذا كانت قيمة العداد i عبارة عن عدد مزدوج, سيتم إضافة ناتج جمع المتغيرات i و F على قيمة المتغير S.



    		System.out.print("S = " +S+ "\n");
    				
  • في الأخير سيتم عرض القيمة النهائية المخزنة في المتغير S.