418343 ภาคปลาย 2552/ปฏิบัติการที่ 1

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา

แบบฝึกหัดที่ 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"

แล้วจะพิมพ์

 --        --   --        --  
|  |    |    |    | |  | |
|  |    |    |    | |  | |
           --   --   --   --
|  |    | |       |    |    |
|  |    | |       |    |    |
 --        --   --        --