2110101 : Lab8 - Class and Object

 

สิ่งที่ต้องการ

ให้เขียนเมท็อด reciprocate, multiply และ mulMatrix ในคลาส Rational ให้สมบูรณ์

คลาส Rational

Rational คือคลาสซึ่งบรรยายการจัดเก็บและจัดการจำนวนตรรกยะ (rational number) เช่น 1/2, 1/3, 6/11, 10001/20283 เป็นต้น ประกอบด้วยสอง fields คือ

  • numerator เป็น int มีไว้เก็บเศษ (จำนวนข้างบน)

  • denominator เป็น int มีไว้เก็บส่วน (จำนวนข้างล่าง)

รายละเอียดของเมท็อดภายใน Rational ซึ่งเขียนให้แล้วมีดังนี้

  • constructor มีให้แล้วสองแบบ

    • public Rational( )
      สร้างออบเจกต์ซึ่งมีค่า 0/1 ให้

    • public Rational( int n, int d )
      สร้างออบเจกต์ซึ่งมีค่าเท่ากับ  n/d ที่ได้รับการตัดทอนเศษส่วนด้วยค่าหารร่วมมากของ n และ d แล้ว  เช่นถ้าเรียกใช้  new Rational( 100, 250 ) จะได้เป็น 2/5 

  • object methods

    • public Rational add( Rational a ) 
      สร้างออบเจกต์ใหม่ซึ่งมีค่าเท่ากับผลบวกของ this กับออบเจกต์ a

    • public String toString( )
      สร้างสตริงซึ่งแทนค่าที่เก็บภายในออบเจกต์ this

  • class method

    • public static int gcd(int a, int b)
      คืนค่าหารร่วมมากของ a และ b

รายละเอียดเมท็อดที่ต้องเขียนเพิ่ม

  • object methods
    • public Rational reciprocate( )
      สร้างออปเจกต์ใหม่ซึ่งมีค่ากลับกับ "this" นั่นคือกลับเศษเป็นส่วน กลับส่วนเป็นเศษ
    • public Rational multiply( Rational a )
      สร้างออปเจกต์ใหม่ซึ่งมีค่าเท่กับผลคูณของ "this" กับ a
  • class method
    • public static Rational [][]
             mulMatrix(Rational [][] a, Rational [][] b )
      สร้างอาเรย์สองมิติใหม่ซึ่งเก็บผลของการคูเมทริกซ์ a  และ b ที่ได้รับ

ข้อแนะนำ

  • ภายในสามเมท็อดที่ต้องเขียนเพิ่มนั้น จะมีบรรทัด return null; เติมให้แล้ว  ถ้าต้องการเขียนเมท็อดใด ให้ลบบรรทัด return null ของเมท็อดนั้นทิ้งไป  ส่วนเมท็อดใดที่ยังไม่ได้เขียน ให้คงบรรทัดนี้ไว้ก่อน จะทำให้เมท็อดนั้นแปลผ่าน (แต่ยังทำงานไม่ถูก)
  • อ่านรายละเอียดการทำงานของเมท็อด add ซึ่งเขียนให้แล้วเป็นตัวอย่างก่อน
  • ทุกเมท็อดที่ให้เขียนจะต้องสร้างออปเจกต์ใหม่ที่เก์บผลลัพธ์
  • ในเมท็อด multiply ควรพยายามลดรูปผลคูณ ก่อนไปสร้างออปเจกต์เพื่อคืนค่า เช่น (2/7) x (39/14) ก็ควรทำให้เป็น (1x39)/(7x2) อย่าส่ง (2x39)/(7x14) ไปให้ constructor ลดรูป เพราะในกรณีที่เศษส่วนของทั้งสองจำนวนมีค่ามาก ถ้าลดรูปได้แต่ไม่ทำ จะทำให้ผลคูณของเศษหรือส่วน เกินค่าที่ int เก็บได้ ก็จะให้ผลที่ผิดไป
  • เมท็อด mulMatrix จะมีขั้นตอนการทำงานคล้ายกับการคูณเมทริกซ์ในเอกสารประกอบการเรียนเรื่อง array (หน้าที่ 49) เพียงแต่ตรงนี้เราต้องเรียกใช้ add และ multiply ของ Rational

คะแนนเต็ม : 8 คะแนน

  • เขียนโปรแกรม  8 คะแนน  
    • reciprocate 2 คะแนน  multiply 4 คะแนน และ mulMatrix 2 ตะแนน
    • ระบบตรวจให้อัตโนมัติ โดยทดสอบกรณีสุ่มๆ 8 กรณี

เวลาปฏิบัติการ : 45 นาที