مفهوم الـ Factorial
في مادة الرياضيات عندما نضع علامة تعجب بعد الرقم فهذا يعني أننا نقصد الـ Factorial لهذا الرقم.
مثال: 5!
  =======>   هنا نقصد الـ Factorial للعدد 5 , و هو يساوي 120.
طريقة حساب قيمة الـ Factorial للعدد
الـ Factorial للعدد هو بكل بساطة ضرب جميع الأرقام من 1 إلى هذا العدد. أمثلة:
طريقة حساب قيمة الـ Factorial للعدد في أي لغة برمجة
بكل بساطة نستخدم الحلقات لنحصل على الـ Factorial. لاحظ الجدول التالي.
تمارين شاملة حول الـ Factorial
تذكر
النوع int
لا يقبل تخزين أرقام بعد الفاصلة. لذلك لا تستخدم متغير نوعه int
لتخزين ناتج عملية قسمة حتى لا تخسر الأرقام الموجودة بعد الفاصلة.
إذاً, إستخدم متغير نوعه double
عند تخزين ناتج أي عملية قسمة لضمان عدم خسارة الأرقام بعد الفاصلة.
معلومة تقنية
إذا قسمت العدد 1 على أي عدد صحيح ( أي نوعه int
) فإن الجواب سيكون 0 فقط, أي لن يظهر أي رقم بعد الفاصلة لأن الكمبيوتر سيجد أنك تتعامل مع أنواع لا تقبل الفاصلة (int
على int
).
لذلك, إذا أردت أن تقسم أي عدد على أي عدد و ترى جميع الأرقام الموجودة بعد الفاصلة, عليك على الأقل أن تضع نوع إحدى العددين ( المقسوم أو المقسوم عليه ) يقبل الأرقام الموجودة بعد الفاصلة ( أي double
).
التمرين الأول
المطلوب
أكتب برنامج يطلب من المستخدم إعطائه عدد صحيح و يخزنه في المتغير N
.
ثم يقوم بحساب ناتج جمع جميع الأرقام من 1 إلى N
كما في الصورة التالية.
إرشادات
المتغير
S
هو المتغير الذي سيحتوي على مجموع كل الأرقام الموجودة من 1 إلىN
.الـ
i
هو المتغير ( العداد ) الذي يزيد واحد في كل دورة.الـ
F
هو المتغير الذي نخزن فيه الـ Factorial لقيم العدادi
.الـ
N
هو المتغير الذي يخزن العدد الذي سيدخله المستخدم و الذي تتوقف عنده الحلقة.الحلقة تبدأ من 1 و تتوقف عند
N
, أي عند العدد الذي أدخله المستخدم.ركز جيداً, نحن لا نجمع قيم الـ
i
نحن نجمع الـ Factorial لكل قيمة من قيم العدادi
.
كود الجافا
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
كما في الصورة التالية.
إرشادات
المتغير
S
هو المتغير الذي سيحتوي على مجموع كل الأرقام الموجودة من 1 إلىN
.الـ
i
هو المتغير ( العداد ) الذي يزيد واحد في كل دورة.الـ
F
هو المتغير الذي نخزن فيه الـ Factorial لقيم العدادi
.الـ
N
هو المتغير الذي يخزن العدد الذي سيدخله المستخدم و الذي تتوقف عنده الحلقة.الحلقة تبدأ من 1 و تتوقف عند
N
, أي عند العدد الذي أدخله المستخدم.ركز جيداً, نحن لا نجمع قيم الـ
i
نحن نجمع الـ Factorial لكل قيمة من قيم العدادi
.
كود الجافا
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
كما في الصورة التالية.
إرشادات
المتغير
S
هو المتغير الذي سيحتوي على مجموع كل الأرقام الموجودة من 1 إلىN
.الـ
i
هو المتغير ( العداد ) الذي يزيد واحد في كل دورة.الـ
F
هو المتغير الذي نخزن فيه الـ Factorial لقيم العدادi
.الـ
N
هو المتغير الذي يخزن العدد الذي سيدخله المستخدم و الذي تتوقف عنده الحلقة.الحلقة تبدأ من 1 و تتوقف عند
N
, أي عند العدد الذي أدخله المستخدم.
كود الجافا
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
كما في الصورة التالية.
إرشادات
المتغير
S
هو المتغير الذي سيحتوي على مجموع كل الأرقام الموجودة من 1 إلىN
.الـ
i
هو المتغير ( العداد ) الذي يزيد واحد في كل دورة.الـ
F
هو المتغير الذي نخزن فيه الـ Factorial لقيم العدادi
.الـ
N
هو المتغير الذي يخزن العدد الذي سيدخله المستخدم و الذي تتوقف عنده الحلقة.الحلقة تبدأ من 1 و تتوقف عند
N
, أي عند العدد الذي أدخله المستخدم.ركز جيداً, نحن لا نجمع قيم الـ
i
نحن نجمع الـ Factorial لكل قيمة من قيم العدادi
.إذا كانت قيمة الـ
i
عدد مفرد, نضيف Factorial الـi
على قيمة المتغيرS
.و إذا كانت قيمة الـ
i
عدد مزدوج, ننقص Factorial الـi
من قيمة المتغيرS
.
كود الجافا
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
كما في الصورة التالية.
إرشادات
المتغير
S
هو المتغير الذي سيحتوي على مجموع كل الأرقام المفردة الموجودة من 1 إلىN
.الـ
T
هو المتغير الذي سيحتوي على مجموع كل الأرقام المزدوجة الموجودة من 1 إلىN
.الـ
i
هو المتغير ( العداد ) , هنا يزيد واحد في كل دورة.الـ
F
هو المتغير الذي نخزن فيه الـ Factorial لقيم العدادi
.الـ
N
هو المتغير الذي يخزن العدد الذي سيدخله المستخدم و الذي تتوقف عنده الحلقة.الحلقة تبدأ من 1 و تتوقف عند
N
, أي عند العدد الذي أدخله المستخدم.
كود الجافا
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
كما في الصورة التالية.
إرشادات
المتغير
S
هو المتغير الذي سيحتوي على مجموع كل الأرقام الموجودة من 1 إلىN
.الـ
i
هو المتغير ( العداد ) , هنا يزيد واحد في كل دورة.الـ
F
هو المتغير الذي نخزن فيه الـ Factorial لقيم العدادi
.الـ
N
هو المتغير الذي يخزن العدد الذي سيدخله المستخدم و الذي تتوقف عنده الحلقة.الحلقة تبدأ من 1 و تتوقف عند
N
, أي عند العدد الذي أدخله المستخدم.
إنتبه: يجب تعريف المتغيرين S
و F
كـ double
حتى لا نخسر أي رقم موجود بعد الفاصلة أثناء إجراء عمليات القسمة.
كود الجافا
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
كما في الصورة التالية.
إرشادات
المتغير
S
هو المتغير الذي سيحتوي على مجموع كل الأرقام الموجودة من 1 إلىN
.الـ
i
هو المتغير ( العداد ) الذي يزيد واحد في كل دورة.الـ
F
هو المتغير الذي نخزن فيه الـ Factorial لقيم العدادi
.الـ
N
هو المتغير الذي يخزن العدد الذي سيدخله المستخدم و الذي تتوقف عنده الحلقة.الحلقة تبدأ من 1 و تتوقف عند
N
, أي عند العدد الذي أدخله المستخدم.إذا أدخل المستخدم عدد مفرد, ستتوقف الحلقة عند
و إذا أدخل عدد مزدوج, ستتوقف الحلقة عند
إنتبه: يجب تعريف المتغيرين S
و F
كـ double
حتى لا نخسر أي رقم موجود بعد الفاصلة أثناء إجراء عمليات القسمة.
كود الجافا
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
كما في الصورة التالية.
إرشادات
المتغير
S
هو المتغير الذي سيحتوي على مجموع كل الأرقام الموجودة من 1 إلىN
.الـ
i
هو المتغير ( العداد ) الذي يزيد واحد في كل دورة.الـ
F
هو المتغير الذي نخزن فيه الـ Factorial لقيم العدادi
.الـ
N
هو المتغير الذي يخزن العدد الذي سيدخله المستخدم و الذي تتوقف عنده الحلقة.الحلقة تبدأ من 1 و تتوقف عند
N
, أي عند العدد الذي أدخله المستخدم.
إنتبه: يجب تعريف المتغيرين S
و F
كـ double
حتى لا نخسر أي رقم موجود بعد الفاصلة أثناء إجراء عمليات القسمة.
كود الجافا
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
كما في الصورة التالية.
إرشادات
المتغير
S
هو المتغير الذي سيحتوي على مجموع كل الأرقام الموجودة من 1 إلىN
.الـ
i
هو المتغير ( العداد ) الذي يزيد واحد في كل دورة.الـ
F
هو المتغير الذي نخزن فيه الـ Factorial لقيم العدادi
.الـ
N
هو المتغير الذي يخزن العدد الذي سيدخله المستخدم و الذي تتوقف عنده الحلقة.الحلقة تبدأ من 1 و تتوقف عند
N
, أي عند العدد الذي أدخله المستخدم.
كود الجافا
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
.