ผลต่างระหว่างรุ่นของ "418343 ภาคปลาย 2552/ปฏิบัติการที่ 1"

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
 
(ไม่แสดง 6 รุ่นระหว่างกลางโดยผู้ใช้ 3 คน)
แถว 12: แถว 12:
 
  8
 
  8
 
  9
 
  9
 +
 +
== แบบฝึกหัดที่ 2 ==
 +
จงเขียนฟังก์ชัน <tt>factorial(n)</tt> ซึ่งเมื่อเรียกโดยที่ n เป็นจำนวนเต็มที่ไม่เป็นลบแล้ว จะพิมพ์ค่า <math>n! = n \times (n-1) \times (n-2) \times \cdots \times 2 \times 1</math> ออกมา
 +
>> 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 กล่าวคือ ให้เขียนไฟล์ <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"

แล้วจะพิมพ์

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