ผลต่างระหว่างรุ่นของ "418343 ภาคปลาย 2552/ปฏิบัติการที่ 1"
| (ไม่แสดง 5 รุ่นระหว่างกลางโดยผู้ใช้ 2 คน) | |||
| แถว 29: | แถว 29: | ||
>> factorial(50) | >> factorial(50) | ||
=> 30414093201713378043612608166064768844377641568960512000000000000 | => 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 กล่าวคือ ให้เขียนไฟล์ <tt>lcd.rb</tt> ที่เมื่อเรียก | ||
| + | > ruby lcd.rb "012345" | ||
| + | แล้วจะพิมพ์ | ||
| + | -- -- -- -- | ||
| + | | | | | | | | | | ||
| + | | | | | | | | | | ||
| + | -- -- -- -- | ||
| + | | | | | | | | | ||
| + | | | | | | | | | ||
| + | -- -- -- -- | ||
รุ่นแก้ไขปัจจุบันเมื่อ 11:03, 3 พฤศจิกายน 2553
แบบฝึกหัดที่ 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"
แล้วจะพิมพ์
-- -- -- --
| | | | | | | |
| | | | | | | |
-- -- -- --
| | | | | | |
| | | | | | |
-- -- -- --