ผลต่างระหว่างรุ่นของ "418342 ภาคปลาย 2552/ปฏิบัติการที่ 2"

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
 
(ไม่แสดง 5 รุ่นระหว่างกลางโดยผู้ใช้ 2 คน)
แถว 19: แถว 19:
 
== แบบฝึกหัด 2 ==
 
== แบบฝึกหัด 2 ==
 
<blockquote>
 
<blockquote>
จงแก้ไข method sleep ในแบบฝึกหัดที่ 2 เพื่อให้รับค่าพารามิเตอร์ที่จะถูกส่งผ่านเข้ามา ซึ่งใช้เป็นค่าที่บอกถึงจำนวนเวลาหน่วยวินาทีที่ให้มีการแสดงข้อความ "I'm taking a nap" อย่างต่อเนื่อง โดยให้ข้อความที่แสดงแต่ละครั้งจะมีเวลาห่างกันประมาณ 1 วินาที
+
จงแก้ไข method nap ในแบบฝึกหัดที่ 1 เพื่อให้รับค่าพารามิเตอร์ที่จะถูกส่งผ่านเข้ามา ซึ่งใช้เป็นค่าที่บอกถึงจำนวนเวลาหน่วยวินาทีที่ให้มีการแสดงข้อความ "I'm taking a nap" อย่างต่อเนื่อง โดยให้ข้อความที่แสดงแต่ละครั้งจะมีเวลาห่างกันประมาณ 1 วินาที
 
</blockquote>
 
</blockquote>
 
<blockquote>
 
<blockquote>
แถว 27: แถว 27:
 
* หากเรานำค่าที่ได้จาก now มาบวกกับเลขจำนวนเต็มจำนวนหนึ่ง ผลที่ได้กลับมาจะเป็นเวลาที่ถูกบวกเพิ่มเข้าไปด้วยตัวเลขจำนวนนั้นที่มีหน่วยเป็นวินาที
 
* หากเรานำค่าที่ได้จาก now มาบวกกับเลขจำนวนเต็มจำนวนหนึ่ง ผลที่ได้กลับมาจะเป็นเวลาที่ถูกบวกเพิ่มเข้าไปด้วยตัวเลขจำนวนนั้นที่มีหน่วยเป็นวินาที
 
</blockquote>
 
</blockquote>
 
  
 
== แบบฝึกหัด 3 ==
 
== แบบฝึกหัด 3 ==
แถว 33: แถว 32:
 
หากเรามีข้อมูลตัวเลขจำนวนเต็มบวกที่ถูกเก็บอยู่ในอะเรย์ 2 ชุดซึ่งมีขนาดเท่ากัน  ให้ลองเขียนโค้ด ruby ที่ทำการบวกข้อมูลตัวเลขที่อยู่ในอะเรย์ทั้ง 2 ดังลักษณะที่ปรากฏข้างล่างนี้ โดยให้ผลลัพธ์ของการบวกนี้ไปเก็บในอะเรย์อีกชุดนึง
 
หากเรามีข้อมูลตัวเลขจำนวนเต็มบวกที่ถูกเก็บอยู่ในอะเรย์ 2 ชุดซึ่งมีขนาดเท่ากัน  ให้ลองเขียนโค้ด ruby ที่ทำการบวกข้อมูลตัวเลขที่อยู่ในอะเรย์ทั้ง 2 ดังลักษณะที่ปรากฏข้างล่างนี้ โดยให้ผลลัพธ์ของการบวกนี้ไปเก็บในอะเรย์อีกชุดนึง
 
</blockquote>
 
</blockquote>
    [ 20, 40, 10, 61, .............. ]  <- อะเรย์ชุดที่ 1
+
    [ 20, 40, 10, 61, .............. ]  <- อะเรย์ชุดที่ 1
  + [ 15, 35,  0, 31, .............. ]  <- อะเรย์ชุดที่ 2
+
  + [ 15, 35,  0, 31, .............. ]  <- อะเรย์ชุดที่ 2
 
  ----------------------------------------
 
  ----------------------------------------
  [ 35, 75, 10, 92, .............. ]  <- อะเรย์ผลลัพธ์
+
    [ 35, 75, 10, 92, .............. ]  <- อะเรย์ผลลัพธ์
  
 
<blockquote>
 
<blockquote>
แถว 44: แถว 43:
 
     arr = []
 
     arr = []
 
     20.times { arr << rand(100) }
 
     20.times { arr << rand(100) }
 
  
 
== แบบฝึกหัด 4 ==
 
== แบบฝึกหัด 4 ==
แถว 50: แถว 48:
 
จงสร้างฟังก์ชัน combine ที่รับพารามิเตอร์ 2 ตัวที่เป็นอะเรย์ของข้อมูลชนิดใดก็ได้และอะเรย์ทั้ง 2 ตัวนี้อาจมีขนาดไม่เท่ากันก็ได้ ให้ฟังก์ชันนี้ส่งกลับอะเรย์ที่มีสมาชิกเป็นอะเรย์ของข้อมูลที่มาจากอะเรย์ทั้ง 2 ณ ตำแหน่งที่เดียวกันในอะเรย์ ดังตัวอย่างที่ปรากฏข้างล่างนี้
 
จงสร้างฟังก์ชัน combine ที่รับพารามิเตอร์ 2 ตัวที่เป็นอะเรย์ของข้อมูลชนิดใดก็ได้และอะเรย์ทั้ง 2 ตัวนี้อาจมีขนาดไม่เท่ากันก็ได้ ให้ฟังก์ชันนี้ส่งกลับอะเรย์ที่มีสมาชิกเป็นอะเรย์ของข้อมูลที่มาจากอะเรย์ทั้ง 2 ณ ตำแหน่งที่เดียวกันในอะเรย์ ดังตัวอย่างที่ปรากฏข้างล่างนี้
 
</blockquote>
 
</blockquote>
    [ 'a',  10,  2.5,  61 ]    <- อะเรย์ชุดที่ 1
+
        [ 'a',  10,  2.5,  61 ]    <- อะเรย์ชุดที่ 1
  + [  1,  2.3,  "Hello"]      <- อะเรย์ชุดที่ 2
+
  combine [  1,  2.3,  "Hello"]      <- อะเรย์ชุดที่ 2
 
  ----------------------------------------
 
  ----------------------------------------
  [ ['a',1], [10,2.3], [2.5,"Hello"], [61] ]  <- อะเรย์ที่ส่งกลับ
+
        [ ['a',1], [10,2.3], [2.5,"Hello"], [61] ]  <- อะเรย์ที่ส่งกลับ
 
 
  
 
== แบบฝึกหัด 5 ==
 
== แบบฝึกหัด 5 ==
 
<blockquote>
 
<blockquote>
จงแก้ไขโปรแกรม client.rb และ server.rb เพื่อให้ server จัดเก็บข้อมูล string ที่ส่งเข้ามาจาก client ให้อยู่ในรูปของอะเรย์ที่เก็บอยู่ภายใน server
+
จงแก้ไขโปรแกรม client.rb และ server.rb เพื่อให้ server จัดเก็บข้อมูล string ที่ส่งเข้ามาจาก client ให้อยู่ในรูปของอะเรย์ที่เก็บอยู่ภายใน server และทุกครั้งที่ server ได้รับข้อมูลจาก client ที่ส่งเข้ามา ให้แสดงข้อมูลที่อยู่ในอะเรย์ออกมาบนหน้าจอของ server ด้วย
 
</blockquote>
 
</blockquote>
 
   client.rb
 
   client.rb
แถว 65: แถว 62:
 
   host = '158.108.21.10'
 
   host = '158.108.21.10'
 
   port = 6667
 
   port = 6667
 
 
   s = TCPSocket.open(host,port)   
 
   s = TCPSocket.open(host,port)   
 
   str = s.recv(100)   
 
   str = s.recv(100)   
แถว 74: แถว 70:
 
   ---------
 
   ---------
 
   require 'socket'   
 
   require 'socket'   
 
 
   port = 6667
 
   port = 6667
 
   server = TCPServer.open(port)   
 
   server = TCPServer.open(port)   

รุ่นแก้ไขปัจจุบันเมื่อ 13:43, 26 พฤศจิกายน 2552

แบบฝึกหัด 1

จงสร้าง class Cat ที่สืบทอดมาจาก class Animal โดยให้เพิ่ม method ที่มีชื่อว่า nap เข้าไปใน class Cat นี้ และให้ใส่คำสั่ง puts ไว้ใน nap เพื่อแสดงข้อความว่า "I'm taking a nap"

   class Animal
      def eat thing
         puts "I'm eating #{thing}"
      end
   end

แนะนำ

Ruby กำหนดการสืบทอดโดยใช้เครื่องหมาย < ดังลักษณะการใช้ข้างล่างนี้

   class B < A  # เป็นการกำหนดให้ B เป็น subclass ของ A
   end


แบบฝึกหัด 2

จงแก้ไข method nap ในแบบฝึกหัดที่ 1 เพื่อให้รับค่าพารามิเตอร์ที่จะถูกส่งผ่านเข้ามา ซึ่งใช้เป็นค่าที่บอกถึงจำนวนเวลาหน่วยวินาทีที่ให้มีการแสดงข้อความ "I'm taking a nap" อย่างต่อเนื่อง โดยให้ข้อความที่แสดงแต่ละครั้งจะมีเวลาห่างกันประมาณ 1 วินาที

แนะนำ

  • เราสามารถใช้ method sleep แล้วตามด้วยตัวเลขจำนวนเต็ม เพื่อบอกถึงจำนวนวินาทีที่ sleep จะพักการทำงานจนกว่าเวลาที่กำหนดนั้นจะหมดลง
  • เราสามารถใช้ method now ซึ่งเป็น method ของ class Time เพื่อใช้บอกเวลาของระบบในปัจจุบัน
  • หากเรานำค่าที่ได้จาก now มาบวกกับเลขจำนวนเต็มจำนวนหนึ่ง ผลที่ได้กลับมาจะเป็นเวลาที่ถูกบวกเพิ่มเข้าไปด้วยตัวเลขจำนวนนั้นที่มีหน่วยเป็นวินาที

แบบฝึกหัด 3

หากเรามีข้อมูลตัวเลขจำนวนเต็มบวกที่ถูกเก็บอยู่ในอะเรย์ 2 ชุดซึ่งมีขนาดเท่ากัน ให้ลองเขียนโค้ด ruby ที่ทำการบวกข้อมูลตัวเลขที่อยู่ในอะเรย์ทั้ง 2 ดังลักษณะที่ปรากฏข้างล่างนี้ โดยให้ผลลัพธ์ของการบวกนี้ไปเก็บในอะเรย์อีกชุดนึง

   [ 20, 40, 10, 61, .............. ]  <- อะเรย์ชุดที่ 1
+  [ 15, 35,  0, 31, .............. ]  <- อะเรย์ชุดที่ 2
----------------------------------------
   [ 35, 75, 10, 92, .............. ]  <- อะเรย์ผลลัพธ์

แนะนำ

โค้ดด้านล่างนี้สามารถสร้างเลขจำนวนเต็มที่อยู่ระหว่าง 0-99 จำนวน 20 ตัวไว้ในอะเรย์ arr

   arr = []
   20.times { arr << rand(100) }

แบบฝึกหัด 4

จงสร้างฟังก์ชัน combine ที่รับพารามิเตอร์ 2 ตัวที่เป็นอะเรย์ของข้อมูลชนิดใดก็ได้และอะเรย์ทั้ง 2 ตัวนี้อาจมีขนาดไม่เท่ากันก็ได้ ให้ฟังก์ชันนี้ส่งกลับอะเรย์ที่มีสมาชิกเป็นอะเรย์ของข้อมูลที่มาจากอะเรย์ทั้ง 2 ณ ตำแหน่งที่เดียวกันในอะเรย์ ดังตัวอย่างที่ปรากฏข้างล่างนี้

        [ 'a',  10,   2.5,  61 ]    <- อะเรย์ชุดที่ 1
combine [  1,  2.3,  "Hello"]       <- อะเรย์ชุดที่ 2
----------------------------------------
        [ ['a',1], [10,2.3], [2.5,"Hello"], [61] ]  <- อะเรย์ที่ส่งกลับ

แบบฝึกหัด 5

จงแก้ไขโปรแกรม client.rb และ server.rb เพื่อให้ server จัดเก็บข้อมูล string ที่ส่งเข้ามาจาก client ให้อยู่ในรูปของอะเรย์ที่เก็บอยู่ภายใน server และทุกครั้งที่ server ได้รับข้อมูลจาก client ที่ส่งเข้ามา ให้แสดงข้อมูลที่อยู่ในอะเรย์ออกมาบนหน้าจอของ server ด้วย

  client.rb
  ---------
  require 'socket'  
  host = '158.108.21.10'
  port = 6667
  s = TCPSocket.open(host,port)   
  str = s.recv(100)   
  s.close 
  puts str 
  server.rb
  ---------
  require 'socket'  
  port = 6667
  server = TCPServer.open(port)   
  loop do  
    Thread.start(server.accept) do |s|   
      print(s," is accepted\n")   
      s.write(Time.now)   
      print(s," is gone\n")   
      s.close 
    end  
  end