418343 ภาคปลาย 2552/ปฏิบัติการที่ 1
แบบฝึกหัดที่ 1
จงเขียนฟังก์ชัน print_ints(x) ที่เมื่อเรียกโดยที่ x เป็นจำนวนเต็มแล้ว จะพิมพ์เลขจำนวนเต็มตั้งแต่ 0 ถึง x-1 ออกมา เช่นตัวอย่างข้างล่างนี้
> print_ints(10) 0 1 2 3 4 5 6 7 8 9
แบบฝึกหัดที่ 2
จงเขียนฟังก์ชัน factorial(n) ซึ่งเมื่อเรียกโดยที่ n เป็นจำนวนเต็มที่ไม่เป็นลบแล้ว จะพิมพ์ค่า ออกมา
>> factorial(0) => 1 >> factorial(1) => 1 >> factorial(2) => 2 >> factorial(3) => 6 >> factorial(4) => 24 >> factorial(10) => 3628800 >> factorial(50) => 30414093201713378043612608166064768844377641568960512000000000000
แบบฝึกหัดที่ 3
(เอามาจาก Ruby Quiz) จงเขียนโปรแกรม (หรือฟังก์ชัน) สำหรับแปลงเลขโรมันไปกลับกับเลขอารบิก
กล่าวคือ ถ้าข้อมูลเข้าเป็นเช่นนี้
III 29 38 CCXCI 1999
ข้อมูลออกก็ควรเป็นเช่นนี้
3 XXIX XXXVIII 291 MCMXCIX
กฎ
เลขโรมันมีสัญลักษณ์ 7 ตัวซึ่งมีค่าดังต่อไปนี้
I = 1 V = 5 X = 10 L = 50 C = 100 D = 500 M = 1000
ดังนั้นเวลาแปลงเลขโรมันเป็นเลขอารบิก ถ้าในเลขโรมันมีการเขียนสัญลักษณ์ข้างบนจากค่าน้อยไปยังค่ามาก เราแค่นำค่าของสัญลักษณ์ต่างๆ มาบวกกันก็พอ
II is 2 VIII is 8 XXXI is 31
อยากไรก็ดี เราสามารถเขียนสัญลักษณ์เดียวกันติดกันได้ไม่เกิน 3 ตัวเท่านั้น ดังนั้นจึงมีกฎพิเศษสำหรับเลขอย่าง 4 หรือ 900 กล่าวคือ ถ้าคุณเขียนสัญลักษณ์ที่มีค่าน้อยกว่าอยู่ก่อนหน้าสัญลักษณ์ที่มีค่ามากกว่า โดยที่สัญลักษณ์ทั้งสองต้องต่างกันไม่เกิน 10 เท่า หมายความว่าให้เอาสัญลักษณ์ที่มีค่าน้อยกว่าไปลบออกจากสัญลักษณที่มีค่ามากกว่า เช่น
IV is 4 CM is 900
อย่างไรก็ดีเราจะไม่ใช้กฎพิเศษข้างบนนี้สำหรับเลขที่เขียนได้ด้วยวิธีการเขียนธรรมดาตั้งแต่แรกกล่าว กล่าวคือ 15 จะต้องเขียนแทนด้วย XV ไม่ใช่ XVX
แบบฝึกหัดที่ 4
(เอามาจาก Ruby Quiz) จงเขียนโปรแกรมเพื่อพิมพ์ตัวเลขให้เหมือนกับหน้าปัตย์นาฬิกาที่ใช้ LCD กล่าวคือ ให้เขียนไฟล์ lcd.rb ที่เมื่อเรียก
> ruby lcd.rb "012345"
แล้วจะพิมพ์
-- -- -- -- | | | | | | | | | | | | | | | | -- -- -- -- | | | | | | | | | | | | | | -- -- -- --