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

مفهوم الـ Power

في مادة الرياضيات الكلمات Index - Exponent - Power لهم نفس المعنى.
كلمة Power تعني مضاعفة العدد. و مضاغفة عدد ما, تعني كم مرة نريد أن نضرب العدد بنفسه.

عندما تريد أن تضاعف أي عدد, يجب أن يكون هناك عددين, العدد الأول يسمى Base و الثاني يسمى Power.

  • الـ Base هو العدد الذي نريده أن يتضاعف.

  • الـ Power هو العدد الذي يحدد كما مرة سيتم مضاعفة الـ Base.


مثال

http://alawirisaddam.droppages.com/algorithms/algorithms-calculate-the-power/base number and power number


أمثلة توضح طريقة مضاعفة العدد في مادة الرياضيات



طريقة الحصول على القيمة المضاعفة للعدد في البرمجة

يمكننا أن نضرب العدد بنفسه مباشرةً, أو نستخدم حلقة من خلالها نقوم بضرب العدد بنفسه كما في الجدول التالي.

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



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

المطلوب

أكتب برنامج يطلب من المستخدم إدخال عددين, العدد الأول يعتبر الـ Base و العدد الثاني يعتبر الـ Power.
بعدها يعرض له ناتج القيمة المضاعفة للأعداد التي قام بإدخالها.


إرشادات

  1. العدد الأول الذي سيدخله المستخدم سنخزنه في المتغير a.

  2. العدد الثاني الذي سيدخله المستخدم سنخزنه في المتغير b.

  3. جواب الـ Power سنخزنه في المتغير P.

  4. بما أن المتغير P سيحتوي على ناتج ضرب المتغير a بنفسه في كل دورة, قمنا بإعطائه القيمة 1 كقيمة أولية لأن القيمة 1 لن تؤثر في عملية الضرب.


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

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

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

الخوارزمية

كود الجافا

import java.util.Scanner;
 
public class Power {
 
    public static void main (String[] args) {
 
        Scanner input = new Scanner(System.in);
 
        int a;
        int b;
        int P = 1;
 
        System.out.print("Enter the base number: ");
        a = input.nextInt();
 
        System.out.print("Enter the power number: ");
        b = input.nextInt();
 
        for (int i=1; i <=b; i++)
        {
            P = P * a;
        }
 
        System.out.print(a+ "^" +b+ " = " +P+ "\n");
 
    }
 
}
		

شرح الكود


    		int a;
    		int b;
    		int P = 1;
    				
  • هنا قمنا بتجهيز المتغير a لتخزين أول رقم سيدخله المستخدم و الذي سيمثل العدد الـ Base.

  • و المتغير b لتخزين ثاني رقم سيدخله المستخدم و الذي سيمثل العدد الـ power.

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



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

  • و طلبنا منه إدخال العدد الذي يمثل الـ Power, ثم وضعناه في المتغير b.



  •         for (int i=1; i <=b; i++)
            {
                P = P * a;
            }
    				
  • بعد إدخال العدد الثاني الذي يمثل الـ Power, سيتم إنشاء حلقة من 1 إلى هذا العدد.

  • في كل دورة في هذه الحلقة سيتم ضرب قيمة المتغير a بقيمة المتغير P القديمة. ثم تخزين الناتج في المتغير P من جديد.

  • عند إنتهاء الحلقة سيكون المتغير P قد إحتوى على جميع قيم المتغير a مضروبة ببعضها نسبة لقيمة المتغير b, أي سيحتوي على القيمة المضاعفة للمتغير a.



  • 		System.out.print(a+ "^" +b+ " = " +P+ "\n");
    				
  • في الأخير سيتم عرض ناتج القيمة المضاعفة للمتغير a نسبة للمتغير b المخزنة في المتغير P.



المطلوب

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


إرشادات

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

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

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

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

  5. في كل دورة سيتم إعتبار قيمة العداد i هي الـ Base و لها Power يساوي 2 , أي ستضاعف مرتين.


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

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

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

الخوارزمية

كود الجافا

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

شرح الكود


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

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



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



  • 		for (int i=1; i <=N; i++)
    		{
    			S = S + (i*i);
    		}
    				
  • بعد إدخال العدد, سيقوم البرنامج بإنشاء حلقة من 1 إلى هذا العدد.

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



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



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

المطلوب

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


إرشادات

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

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

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

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

  5. في كل دورة سيتم إعتبار قيمة العداد i هي الـ Base , و سنحصل على Power لها من خلال الحلقة k.

  6. سنحتاج إلى المتغير P لتخزين ناتج ضرب المتغير i بنفسه في كل دورة بداخل الحلقة k قبل إضافته على قيمة المتغير S.


ملاحظة

الأسلوب الذي اتبعناه في هذا التمرين للحصول على القيمة المضاعفة سنحتاجه في التمارين التالية.


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

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

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

الخوارزمية

كود الجافا

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

شرح الكود


    		int N;
    		int P;
    		int S = 0;
    				
  • هنا قمنا بإنشاء المتغير N لتخزين الرقم الذي سيدخله المستخدم.

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

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



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



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

    • سيتم وضع القيمة 1 كقيمة أولية للمتغير P قبل إستخدامه في الحلقة K لأن القيمة 1 لا تؤثر في عملية الضرب.

    • الحلقة k جعلناها تعيد تنفيذ الكود الموجود فيها مرتين فقط لأنها تبدأ من 1 إلى 2

    • في كل دورة من دورات الحلقة k سيتم ضرب قيمة العداد i بقيمة المتغير P القديمة, ثم تخزين الناتج في المتغير P من جديد.
      &nbsp &nbsp و هكذا في كل مرة تتوقف فيها الحلقة k عن التنفيذ, سيكون المتغير P يحتوي على قيمة العداد i المضاعفة.

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



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



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

المطلوب

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


إرشادات

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

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

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

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

  5. في كل دورة سيتم إعتبار قيمة العداد i هي الـ Base و الـ Power, و سنحصل على Power لها من خلال الحلقة k.

  6. سنحتاج إلى المتغير P لتخزين ناتج ضرب المتغير i بنفسه في كل دورة بداخل الحلقة k قبل إضافته على قيمة المتغير S.

إنتبه: يجب تعريف المتغيرين S و P كـ double لأنه عند إجراء عمليات المضاعفة قد يصل الناتج إلى أعداد كبيرة جداً.


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

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

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

الخوارزمية

كود الجافا

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

شرح الكود

  • الهدف من هذا السؤال جعل قيمة الـ Base تساوي قيمة الـ Power.



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

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

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



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



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

    • سيتم وضع القيمة 1 كقيمة أولية للمتغير P قبل إستخدامه في الحلقة K لأن القيمة 1 لا تؤثر في عملية الضرب.

    • بعدها سيتم إنشاء الحلقة k التي تبدأ من 1 إلى i.
      &nbsp &nbsp إذاً, عدد دورات الحلقة k يساوي قيمة العداد i و هكذا ستصبح قيمة الـ Base تساوي قيمة الـ Power.

    • في كل دورة من دورات الحلقة k سيتم ضرب قيمة العداد i بقيمة المتغير P القديمة, ثم تخزين الناتج في المتغير P من جديد.
      &nbsp &nbsp و هكذا في كل مرة تتوقف فيها الحلقة k عن التنفيذ, سيكون المتغير P يحتوي على قيمة العداد i المضاعفة.

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



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



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

المطلوب

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


إرشادات

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

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

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

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

  5. في كل دورة سيتم إعتبار قيمة العداد i هي الـ Base و الـ Power, و سنحصل على Power لها من خلال الحلقة k.

  6. سنحتاج إلى المتغير P لتخزين ناتج ضرب المتغير i بنفسه في كل دورة بداخل الحلقة k قبل إضافته على قيمة المتغير S.

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


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

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

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

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

الخوارزمية

كود الجافا

import java.util.Scanner;
 
public class Power_And_Factorial {
 
    public static void main (String[] args) {
 
        Scanner input = new Scanner(System.in);
 
        int N;
        double P;
        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 )
            {
                P = 1;
                for (int k=1; k <=i; k++)
                {
                    P = P * i;
                }
                S = S + P;
            }
 
            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 P;
    		double F;
    		double S = 0;
    				
  • هنا قمنا بإنشاء المتغير N لتخزين الرقم الذي سيدخله المستخدم.

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

  • و المتغير 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 )
    			{
    				P = 1;
    				for (int k=1; k <=i; k++)
    				{
    					P = P * i;
    				}
    				S = S + P;
    			}
    		
    			else
    			{
    				F = 1;
    				for (int k=1; k <=i; k++)
    				{
    					F = F * k;
    				}
    				S = S + ( 1/F );
    			}
    		
    		}
    				
  • هنا في كل دورة من دورات الحلقة i سيتم فحص قيمة العداد i لمعرفة إذا كانت قيمته مفردة أم مزدوجة.


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

    • سيتم إنشاء حلقة داخلية لحساب القيمة المضاعفة للعداد i.

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

    • بعدها سيتم إضافة قيمة المتغير P على قيمة المتغير S.


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

    • سيتم إنشاء حلقة داخلية لحساب قيمة الـ Factorial للعداد i.

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

    • بعدها سيتم إضافة 1 مقسوم على قيمة المتغير F على قيمة المتغير S.



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