Algorithmsالحلقتين while و do while في الخوارزميات - التمرين الأول
المطلوب
أكتب برنامج يقوم بجمع جميع الأرقام من 1 إلى 100 و يعرض فقط المجموع النهائي بثلاث طرق.
أكتب كل طريقة في برنامج.
إرشادات
المتغير S سنستخدمه لتخزين المجموع النهائي.
المتغير i هو العداد الذي سنستخدمه في كل حلقة و الذي سنجعل قيمته تزيد 1 في كل دورة.
إذاً قيمة المتغير S تساوي مجموع جميع القيم التي ستعطى للعداد i في أي حلقة نستخدمها.
الصورة التالية توضح كيف ستزيد قيمة العداد i و المتغير S في كل حلقة إستخدمناها.
الطريقة الأولى لحل التمرين باستخدام الحلقة for
النتيجة المطلوبة
الخوارزمية
شرح طريقة عمل الخوارزمية بدقة
كود الجافا
public class Sum {
public static void main (String[] args) {
int i;
int S = 0;
for ( i=1; i <=100; i=i+1)
{
S = S + i;
}
System.out.print("The sum is: " + S + "\n");
}
}
شرح الكود
البرنامج Sum يحتوي على أربع أوامر و حلقة.
هذه المرة قمنا بتعريف المتغير int i; الذي سنستخدمه كعداد في الحلقة قبل تعريف الحلقة for و ليس بداخلها, و هذا لا يؤثر أبداً في الكود.
في الحلقة for إستخدمنا العداد i ( لم نقم بتعريفه من جديد ) و جعلناها تبدأ من 1 إلى 100, و جعلنا العداد i يزيد 1 فقط في كل دورة.
قمنا بتعريف المتغير int S = 0; لأننا سنستخدمه لتخزين ناتج جميع عمليات الجمع التي سيتم إجراءها في الحلقة.
وضعنا القيمة 0 كقيمة أولية للمتغير S لأننا مجبرين على إعطائه أي قيمة قبل إستخدامه في عملية الجمع. و القيمة 0 بطبيعة الحال لن تؤثر على عملية الجمع.
الكود S = S + i; الذي وضعناه في الحلقة يعني أنه في كل دورة سيتم إضافة قيمة العداد i الحالية على قيمة المتغير S ثم وضع ناتج الجمع من جديد في المتغير S.
في الأخير قمنا بعرض قيمة المتغير S التي تمثل ناتج جمع جميع القيم التي أعطيت للعداد i في الحلقة, و جعلنا وقت تنفيذ البرنامج يظهر على سطر جديد من خلال الـ \n.
الطريقة الثانية لحل التمرين باستخدام الحلقة while
إرشادات
هنا سيكون عليك تعريف العداد i قبل تعريف الحلقة.
ثم تضع الشرط الذي سيجعل الحلقة تتوقف.
و في نهاية الحلقة عليك زيادة قيمة العداد.
النتيجة المطلوبة
الخوارزمية
شرح طريقة عمل الخوارزمية بدقة
كود الجافا
public class Sum {
public static void main (String[] args) {
int i = 1;
int S = 0;
while ( i <=100 )
{
S = S + i;
i = i + 1;
}
System.out.print("The sum is: " + S + "\n");
}
}
شرح الكود
البرنامج Sum يحتوي على خمس أوامر و حلقة.
هنا أنت مجبر على تعريف العداد الذي ستستخدمه في الحلقة و إعطائه قيمة أولية قبل تعريف الحلقة أيضاً.
لذلك قمنا بتعريف المتغير int i = 1; الذي سنستخدمه كعداد في الحلقة قبل تعريفها.
قمنا بتعريف المتغير int S = 0; لأننا سنستخدمه لتخزين ناتج جميع عمليات الجمع التي سيتم إجراءها في الحلقة.
وضعنا القيمة 0 كقيمة أولية للمتغير S لأننا مجبرين على إعطائه أي قيمة قبل إستخدامه في عملية الجمع. و القيمة 0 بطبيعة الحال لن تؤثر على عملية الجمع.
الحلقة while ستستمر في تنفيذ الكود الموجود فيها طالما أن قيمة العداد i ليست أصغر أو تساوي 100. و هكذا نكون جعلناها تبدأ من 1 إلى 100.
الكود S = S + i; الذي وضعناه في الحلقة يعني أنه في كل دورة سيتم إضافة قيمة العداد i الحالية على قيمة المتغير S ثم وضع ناتج الجمع من جديد في المتغير S.
الكود i = i + 1; الذي وضعناه في الحلقة يعني أنه في نهاية كل دورة سيتم إضافة 1 على قيمة العداد i.
في الأخير قمنا بعرض قيمة المتغير S التي تمثل ناتج جمع جميع القيم التي أعطيت للعداد i في الحلقة, و جعلنا وقت تنفيذ البرنامج يظهر على سطر جديد من خلال الـ \n.
الطريقة الثالثة لحل التمرين باستخدام الحلقة do while
إرشادات
هنا سيكون عليك تعريف العداد i قبل تعريف الحلقة.
ثم تضع الكود كله بداخل حدود الـ do مع زيادة قيمة العداد فيها أيضاً.
في الأخير, عليك وضع الشرط الذي سيجعل الحلقة تتوقف بداخل الـ while و تحت الـ do مباشرةً.
النتيجة المطلوبة
الخوارزمية
شرح طريقة عمل الخوارزمية بدقة
كود الجافا
public class Sum {
public static void main (String[] args) {
int i = 1;
int S = 0;
do
{
S = S + i;
i = i + 1;
}
while ( i <=100 );
System.out.print("The sum is: " + S + "\n");
}
}
شرح الكود
نفس الشرح السابق تماماً, و لكن الفرق الوحيد هنا أنه في الحلقة do while يقوم البرنامج بتنفيذ الكود الموضوع في الحلقة قبل أن ينظر إلى الشرط الذي سيجعل الحلقة تتكرر من جديد أو تتوقف.
إذاً في الحلقة do while الكود يتنفذ مرة واحدة على الأقل حتى لو كان الشرط يقضي بتوقيف الحلقة, لأنه ينظر إلى الشرط قبل بداية الدورة الجديدة و ليس قبل بداية أي دورة كما في الحلقتين while و for , لأن الشرط هنا يوضع في آخر الحلقة و ليس في الأول.
ملاحظة: في حال نسيت وضع فاصلة منقوطة ; بعد الـ while سيظهر لك خطأ.