ผลต่างระหว่างรุ่นของ "418342 ภาคปลาย 2552/ปฏิบัติการที่ 2"
Ckw (คุย | มีส่วนร่วม) |
|||
(ไม่แสดง 11 รุ่นระหว่างกลางโดยผู้ใช้ 3 คน) | |||
แถว 15: | แถว 15: | ||
class B < A # เป็นการกำหนดให้ B เป็น subclass ของ A | class B < A # เป็นการกำหนดให้ B เป็น subclass ของ A | ||
end | end | ||
+ | |||
== แบบฝึกหัด 2 == | == แบบฝึกหัด 2 == | ||
<blockquote> | <blockquote> | ||
− | จงแก้ไข method | + | จงแก้ไข method nap ในแบบฝึกหัดที่ 1 เพื่อให้รับค่าพารามิเตอร์ที่จะถูกส่งผ่านเข้ามา ซึ่งใช้เป็นค่าที่บอกถึงจำนวนเวลาหน่วยวินาทีที่ให้มีการแสดงข้อความ "I'm taking a nap" อย่างต่อเนื่อง โดยให้ข้อความที่แสดงแต่ละครั้งจะมีเวลาห่างกันประมาณ 1 วินาที |
</blockquote> | </blockquote> | ||
+ | <blockquote> | ||
=== แนะนำ === | === แนะนำ === | ||
− | * เราสามารถใช้ method sleep แล้วตามด้วยตัวเลขจำนวนเต็ม เพื่อบอกถึงจำนวนวินาทีที่ sleep จะพักการทำงานจนกว่าเวลาที่กำหนดนั้นจะหมดลง | + | * เราสามารถใช้ method sleep แล้วตามด้วยตัวเลขจำนวนเต็ม เพื่อบอกถึงจำนวนวินาทีที่ sleep จะพักการทำงานจนกว่าเวลาที่กำหนดนั้นจะหมดลง |
+ | * เราสามารถใช้ method now ซึ่งเป็น method ของ class Time เพื่อใช้บอกเวลาของระบบในปัจจุบัน | ||
+ | * หากเรานำค่าที่ได้จาก now มาบวกกับเลขจำนวนเต็มจำนวนหนึ่ง ผลที่ได้กลับมาจะเป็นเวลาที่ถูกบวกเพิ่มเข้าไปด้วยตัวเลขจำนวนนั้นที่มีหน่วยเป็นวินาที | ||
</blockquote> | </blockquote> | ||
แถว 28: | แถว 32: | ||
หากเรามีข้อมูลตัวเลขจำนวนเต็มบวกที่ถูกเก็บอยู่ในอะเรย์ 2 ชุดซึ่งมีขนาดเท่ากัน ให้ลองเขียนโค้ด ruby ที่ทำการบวกข้อมูลตัวเลขที่อยู่ในอะเรย์ทั้ง 2 ดังลักษณะที่ปรากฏข้างล่างนี้ โดยให้ผลลัพธ์ของการบวกนี้ไปเก็บในอะเรย์อีกชุดนึง | หากเรามีข้อมูลตัวเลขจำนวนเต็มบวกที่ถูกเก็บอยู่ในอะเรย์ 2 ชุดซึ่งมีขนาดเท่ากัน ให้ลองเขียนโค้ด ruby ที่ทำการบวกข้อมูลตัวเลขที่อยู่ในอะเรย์ทั้ง 2 ดังลักษณะที่ปรากฏข้างล่างนี้ โดยให้ผลลัพธ์ของการบวกนี้ไปเก็บในอะเรย์อีกชุดนึง | ||
</blockquote> | </blockquote> | ||
− | + | [ 20, 40, 10, 61, .............. ] <- อะเรย์ชุดที่ 1 | |
− | + [ 15 | + | + [ 15, 35, 0, 31, .............. ] <- อะเรย์ชุดที่ 2 |
---------------------------------------- | ---------------------------------------- | ||
− | + | [ 35, 75, 10, 92, .............. ] <- อะเรย์ผลลัพธ์ | |
<blockquote> | <blockquote> | ||
แถว 39: | แถว 43: | ||
arr = [] | arr = [] | ||
20.times { arr << rand(100) } | 20.times { arr << rand(100) } | ||
+ | |||
+ | == แบบฝึกหัด 4 == | ||
+ | <blockquote> | ||
+ | จงสร้างฟังก์ชัน combine ที่รับพารามิเตอร์ 2 ตัวที่เป็นอะเรย์ของข้อมูลชนิดใดก็ได้และอะเรย์ทั้ง 2 ตัวนี้อาจมีขนาดไม่เท่ากันก็ได้ ให้ฟังก์ชันนี้ส่งกลับอะเรย์ที่มีสมาชิกเป็นอะเรย์ของข้อมูลที่มาจากอะเรย์ทั้ง 2 ณ ตำแหน่งที่เดียวกันในอะเรย์ ดังตัวอย่างที่ปรากฏข้างล่างนี้ | ||
+ | </blockquote> | ||
+ | [ 'a', 10, 2.5, 61 ] <- อะเรย์ชุดที่ 1 | ||
+ | combine [ 1, 2.3, "Hello"] <- อะเรย์ชุดที่ 2 | ||
+ | ---------------------------------------- | ||
+ | [ ['a',1], [10,2.3], [2.5,"Hello"], [61] ] <- อะเรย์ที่ส่งกลับ | ||
+ | |||
+ | == แบบฝึกหัด 5 == | ||
+ | <blockquote> | ||
+ | จงแก้ไขโปรแกรม client.rb และ server.rb เพื่อให้ server จัดเก็บข้อมูล string ที่ส่งเข้ามาจาก client ให้อยู่ในรูปของอะเรย์ที่เก็บอยู่ภายใน server และทุกครั้งที่ server ได้รับข้อมูลจาก client ที่ส่งเข้ามา ให้แสดงข้อมูลที่อยู่ในอะเรย์ออกมาบนหน้าจอของ server ด้วย | ||
+ | </blockquote> | ||
+ | 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 |
รุ่นแก้ไขปัจจุบันเมื่อ 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