تمرينات

تمرين 4.2
هذا التمرين هو مراجعة لمجرى تنفيذ برنامج ذو عمليات متعددة. اقرأ الشفرة التالية وأجب عن الأسئلة أدناها.
كود:
public class Buzz {
  public static void baffle (String blimp) {
    System.out.println (blimp);
    zippo ("ping", -5);
  }
 
  public static void zippo (String quince, int flag) {
    if (flag < 0) {
      System.out.println (quince + " zoop");
    } else {
      System.out.println ("ik");
      baffle (quince);
      System.out.println ("boo-wa-ha-ha");
    }
  }
 
  public static void main (String[] args) {
    zippo ("rattle", 13);
  }
}
a. اكتب الرقم 1 بجوار أول تعليمة سيتم تنفيذها من هذا البرنامج. كن حذراً ولا تخلط بين التعليمات والأشياء الأخرى.
b. اكتب الرقم 2 بجوار التعليمة الثانية في التنفيذ، وتابع حتى ينتهي البرنامج. إذا تم تنفيذ تعليمة أكثر من مرة، فيمكن وضع أكثر من رقم بجوارها.
c. ما هي قيمة المعامل blimp عندما تم استدعاء baffle؟
d. ما هو خرج هذا البرنامج؟
تمرين 4.3
المقطع الأول من أغنية "99 Bottles of Beer" هو:
99 bottles of beer on the wall, 99 bottles of beer, ya’ take one down, ya’
pass it around, 98 bottles of beer on the wall.
المقاطع التالية مطابقة ما عدا أن عدد الزجاجات يقل بمقدار واحد في كل مقطع، حتى المقطع الأخير:
No bottles of beer on the wall, no bottles of beer, ya’ can’t take one down,
ya’ can’t pass it around, ’cause there are no more bottles of beer on the
wall!
وبعدها تنتهي الأغنية (أخيراً).
اكتب برنامجاً يطبع الكلمات الكاملة لأغنية "99 Bottles of Beer". يجب أن يحتوي برنامجك على عملية تعاودية تنفذ الجزء الصعب، لكنك قد ترغب أيضاً بكتابة عملية إضافية لفصل العمل الكلي للبرنامج.
أثناء تطوير الشفرة، قد ترغب باختبارها مع عدد أقل من المقاطع، مثل "3 Bottles of Beer".
الغرض من هذا التمرين هو أخذ مشكلة وفصلها إلى مشاكل أصغر، وحل المشاكل الصغيرة بكتابة عمليات بسيطة، سهلة التنقيح.
تمرين 4.4
ما هو خرج البرنامج التالي؟
كود:
public class Narf {
  public static void zoop (String fred, int bob) {
    System.out.println (fred);
    if (bob == 5) {
      ping ("not ");
    } else {
      System.out.println ("!");
    }
  }
  public static void main (String[] args) {
    int bizz = 5;
    int buzz = 2;
    zoop ("just for", bizz);
    clink (2*buzz);
  }
  public static void clink (int fork) {
    System.out.print ("It’s ");
    zoop ("breakfast ", fork) ;
  }
  public static void ping (String strangStrung) {
    System.out.println ("any " + strangStrung + "more ");
  }
}
تمرين 4.5
آخر نظرية لفيرما (Fermat's Last Theorem) تقول بأنه لا يوجد أعداد صحيحة a، b، وc بحيث تحقق
an + bn = cn
ما عدا الحالة التي يكون فيها n=2.
اكتب عملية اسمها checkFermat تأخذ أربعة أعداد صحيحة كمعاملات —a, b, c and n— وتتحقق ما إذا كانت نظرية فيرما صحيحة. إذا كان n أكبر من 2 وتبين أن an + bn = cn، يجب أن يطبع البرنامج "Holy smokes, Fermat was wrong!" وبخلاف ذلك يجب أن يطبع البرنامج "No, that doesn't work".
عليك أن تفترض وجود عملية اسمها raiseToPow تأخذ عددين صحيحين كمتحولات وترفع العدد الأول إلى قوة العدد الثاني. مثلاً
int x = raiseToPow (2, 3);
ستسند هذه التعليمة القيمة 8 إلى x، لأن 23 = 8.