ผลต่างระหว่างรุ่นของ "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"
แล้วจะพิมพ์
-- -- -- -- | | | | | | | | | | | | | | | | -- -- -- -- | | | | | | | | | | | | | | -- -- -- --