การแสดงผลลัพธ์ให้เป็นเลขฐานหกสิบ(องศา-ลิปดา-ฟิลิปดา)
คำสั่ง ▶DMS สำหรับแสดงผลลัพธ์เป็นเลขฐานหกสิบ
การเรียกใช้ :
รูปแบบการใช้ :
เลขทศนิยม▶DMS
ตัวอย่าง :
500→R↵
5729.577951÷R→D↵
D▶DMS◢ // แสดงผลลัพธ์เป็น 11⁰ 27' 32.96"
The following types of sexagesimal calculations will produce sexagesimal results.
- Addition or subtraction of two sexagesimal values
- Multiplication or division of a sexagesimal value and a decimal value
หรือ
การคำนวณเลขฐานหกสิบ(องศา-ลิปดา-ฟิลิปดา)ต่อไปนี้จะให้ผลลัพธ์เป็นเลขฐานหกสิบ
- บวกหรือลบเลขฐานหกสิบกับเลขฐานหกสิบ
- คูณหรือหารเลขฐานหกสิบกับจำนวนทศนิยม
อ่านดูแล้วอาจยังนึกไม่ออกว่าจะมีปัญหาอะไร เพื่อให้เห็นปัญหาเราลองมาเขียนโปรแกรมคำนวณส่วนประกอบของโค้งวงกลม(Circular Curve)ดู โดยตัวอย่างโปรแกรมนี้จะเลือกเขียนคำนวณเฉพาะค่า R, D และ Lc ที่มีปัญหาเท่านั้นเพื่อให้โปรแกรมดูง่ายขึ้น
โปรแกรมที่ 1 :
Cls:"DELTA :"?→K↵
Lbl 0↵
Cls:"DESIGN BY :"↵
"[1] R"↵
"[2] D"?→S↵
If S<1 Or S>2:Then Goto 0:IfEnd↵ // ป้องกันการทำงานผิดพลาด
If S=1:Then "R :"?→R:IfEnd↵
If S=2:Then "D :"?→D:5729.577951÷D→R:IfEnd↵
5729.577951÷R→D↵
100xK÷D→L↵
Cls↵
"R =":R◢
"D =":D▶DMS◢
"L = ":L◢ // ค่า Lc
ทดลองรันโปรแกรมจาก
ตัวอย่างที่ 1 :
โค้งวงกลมโค้งหนึ่งมี ∆ = 16⁰ 24' 25.9", R = 350 จงคำนวณหา D และ Lc
ผลการรันโปรแกรม :
R = 350
D = 16⁰ 22' 12.8"
L = 100⁰ 13' 33.05"
จากผลการรันโปรแกรมจะพบว่าค่า R และ D แสดงผลได้เป็นปกติตามที่ต้องการแต่ค่า Lc ซึ่งเป็นค่าความยาวโค้งให้ผลลัพธ์ออกมาเป็นเลขฐานหกสิบ ที่เป็นเช่นนี้เพราะว่า ค่า D ที่ได้จากการคำนวณโดยสูตร 5729.577951÷R นั้นให้ผลลัพธ์ออกมาเป็นจำนวนทศนิยม ต่อมาคำนวณค่า Lc โดยใช้สูตร 100x∆÷D ซึ่งก็คือ "ทศนิยม x เลขฐานหกสิบ ÷ ทศนิยม" จึงเป็นไปตามกฎในข้อที่สอง(คูณหรือหารเลขฐานหกสิบกับเลขทศนิยม) ผลลัพธ์ที่ได้จึงออกมาเป็นเลขฐานหกสิบ
วิธีแก้ปัญหาที่นิยมใช้กันคือ นำค่า 0(ศูนย์) มาบวกกับเลขฐานหกสิบเพื่อให้ผลลัพธ์ที่ได้ออกมาเป็นเลขทศนิยม ดังนั้นเราจะแก้ไขโค้ดโปรแกรมใหม่ดังนี้
ตัวอย่างที่ 1 :
โค้งวงกลมโค้งหนึ่งมี ∆ = 16⁰ 24' 25.9", R = 350 จงคำนวณหา D และ Lc
ผลการรันโปรแกรม :
R = 350
D = 16⁰ 22' 12.8"
L = 100⁰ 13' 33.05"
จากผลการรันโปรแกรมจะพบว่าค่า R และ D แสดงผลได้เป็นปกติตามที่ต้องการแต่ค่า Lc ซึ่งเป็นค่าความยาวโค้งให้ผลลัพธ์ออกมาเป็นเลขฐานหกสิบ ที่เป็นเช่นนี้เพราะว่า ค่า D ที่ได้จากการคำนวณโดยสูตร 5729.577951÷R นั้นให้ผลลัพธ์ออกมาเป็นจำนวนทศนิยม ต่อมาคำนวณค่า Lc โดยใช้สูตร 100x∆÷D ซึ่งก็คือ "ทศนิยม x เลขฐานหกสิบ ÷ ทศนิยม" จึงเป็นไปตามกฎในข้อที่สอง(คูณหรือหารเลขฐานหกสิบกับเลขทศนิยม) ผลลัพธ์ที่ได้จึงออกมาเป็นเลขฐานหกสิบ
วิธีแก้ปัญหาที่นิยมใช้กันคือ นำค่า 0(ศูนย์) มาบวกกับเลขฐานหกสิบเพื่อให้ผลลัพธ์ที่ได้ออกมาเป็นเลขทศนิยม ดังนั้นเราจะแก้ไขโค้ดโปรแกรมใหม่ดังนี้
โปรแกรมที่ 2 :
Cls:"DELTA :"?→K↵
Lbl 0↵
Cls:"DESIGN BY :"↵
"[1] R"↵
"[2] D"?→S↵
If S<1 Or S>2:Then Goto 0:IfEnd↵
If S=1:Then "R :"?→R:IfEnd↵
If S=2:Then "D :"?→D:5729.577951÷D→R:IfEnd↵
5729.577951÷R→D↵
100xK÷D→L↵
L+0→L↵ // เพิ่มบรรทัดนี้
L+0→L↵ // เพิ่มบรรทัดนี้
Cls↵
"R =":R◢
"D =":D▶DMS◢
"L = ":L◢
ทดลองรันโปรแกรมจาก ตัวอย่างที่ 1
ผลการรันโปรแกรม :
R = 350
D = 16⁰ 22' 12.8"
L = 100.2258474
ผลการรันโปรแกรม :
R = 350
D = 16⁰ 22' 12.8"
L = 100.2258474
จะเห็นว่าโปรแกรมแสดงผลออกมาได้อย่างถูกต้องแล้ว แต่บางครั้งการแบบก่อสร้างจะกำหนดให้ค่า D มาให้ คราวนี้เราลองนำโปรแกรมที่ 2 นี้มาทดสอบคำนวณตัวอย่างที่ 2 ซึ่งก็คือตัวอย่างที่ 1 แต่คราวนี้เราจะป้อนค่า D แทน
ตัวอย่างที่ 2 :
โค้งวงกลมโค้งมี ∆ = 16⁰ 24' 25.9", D = 16⁰ 22' 12.8" จงคำนวณหา R และ Lc
ตัวอย่างที่ 2 :
โค้งวงกลมโค้งมี ∆ = 16⁰ 24' 25.9", D = 16⁰ 22' 12.8" จงคำนวณหา R และ Lc
ผลการรันโปรแกรม :
R = 350⁰ 0' 0.04"
D = 16⁰ 22' 12.8"
L = 100.2258505
ปัญหาคราวนี้คือค่า R แสดงผลออกมาเป็นเลขฐานหกสิบเนื่องจากการคำนวณ 5729.577951÷D ซึ่งก็คือ "ทศนิยม ÷ เลขฐานหกสิบ" ผลลัพธ์ที่ได้จึงออกมาเป็นเลขฐานหกสิบ เราจะแก้ปัญหานี้เหมือนเดิมโดยการนำศูนย์ไปบวกเข้ากับค่า R เพื่อให้ได้ผลลัพธ์ออกมาเป็นเลขทศนิยม ดังโปรแกรมต่อไปนี้
R = 350⁰ 0' 0.04"
D = 16⁰ 22' 12.8"
L = 100.2258505
ปัญหาคราวนี้คือค่า R แสดงผลออกมาเป็นเลขฐานหกสิบเนื่องจากการคำนวณ 5729.577951÷D ซึ่งก็คือ "ทศนิยม ÷ เลขฐานหกสิบ" ผลลัพธ์ที่ได้จึงออกมาเป็นเลขฐานหกสิบ เราจะแก้ปัญหานี้เหมือนเดิมโดยการนำศูนย์ไปบวกเข้ากับค่า R เพื่อให้ได้ผลลัพธ์ออกมาเป็นเลขทศนิยม ดังโปรแกรมต่อไปนี้
โปรแกรมที่ 3 :
Cls:"DELTA :"?→K↵
Lbl 0↵
Cls:"DESIGN BY :"↵
"[1] R"↵
"[2] D"?→S↵
If S<1 Or S>2:Then Goto 0:IfEnd↵
If S=1:Then "R :"?→R:IfEnd↵
If S=2:Then "D :"?→D:5729.577951÷D→R:R+0→R:IfEnd↵ // แก้ไขบรรทัดนี้
5729.577951÷R→D↵
100xK÷D→L↵
L+0→L↵
L+0→L↵
Cls↵
"R =":R◢
"D =":D▶DMS◢
"L = ":L◢
ทดลองรันโปรแกรมจาก ตัวอย่างที่ 2
ผลการรันโปรแกรม :
R = 350.0000106
D = 16⁰ 22' 12.8"
L = 100.2258505
ผลการรันโปรแกรม :
R = 350.0000106
D = 16⁰ 22' 12.8"
L = 100.2258505
สุดท้ายเราก็แก้ปัญหาทั้งสองกรณี(โจทย์ตัวอย่าง)นี้ไปได้ แต่ถ้าเราต้องการเขียนโปรแกรมคำนวณรายการวางโค้ง(Layout) ต่อไป หรือโปรแกรมอื่นๆ ที่มีความซับซ้อน เราก็จะตามแก้ปัญหาอย่างนี้อีกไม่รู้จบสิ้น
มีอีกวิธีหนึ่งที่ผู้เขียนอยากจะแนะนำคือ "ให้บวกศูนย์เข้าไปหลังจากการรับข้อมูลเลขฐานหกสิบทุกครั้ง" เช่น
มีอีกวิธีหนึ่งที่ผู้เขียนอยากจะแนะนำคือ "ให้บวกศูนย์เข้าไปหลังจากการรับข้อมูลเลขฐานหกสิบทุกครั้ง" เช่น
"DELTA :"?→K↵
K+0→K↵
K+0→K↵
หลังจากรับข้อมูลเลขฐานหกสิบแล้ว ก่อนที่จะนำไปคำนวณค่าใดๆ ให้แปลงเป็นเลขทศนิยมเสียก่อนเพื่อป้องกันการเข้าสู่กฎการแปลงเลขฐานหกสิบทั้งสองข้อ
ทีนี้เราลองนำโปรแกรมที่ 1 มาดัดแปลงใหม่ดังนี้
ทีนี้เราลองนำโปรแกรมที่ 1 มาดัดแปลงใหม่ดังนี้
โปรแกรมที่ 4 :
Cls:"DELTA :"?→K:K+0→K↵ // แก้ไขที่บรรทัดนี้
Lbl 0↵
Cls:"DESIGN BY :"↵
"[1] R"↵
"[2] D"?→S↵
If S<1 Or S>2:Then Goto 0:IfEnd↵
If S=1:Then "R :"?→R:IfEnd↵
If S=2:Then "D :"?→D:D+0→D:5729.577951÷D→R:IfEnd↵ // แก้ไขที่บรรทัดนี้
5729.577951÷R→D↵
100xK÷D→L↵
Cls↵
"R =":R◢
"D =":D▶DMS◢
"L = ":L◢
เมื่อทดสอบโปรแกรมกับทั้งสองตัวอย่างแล้วให้ผลลัพธ์ที่ถูกต้อง วิธีนี้จะทำให้การเขียนโปรแกรมที่มีเลขฐานหกสิบเข้ามาเกี่ยวข้องง่ายขึ้น เพราะไม่ต้องกังวลว่าการคำนวณจะไปเข้ากฎทั้งสองข้อที่ตรงจุดไหนอีก
ไม่มีความคิดเห็น:
แสดงความคิดเห็น