วันพฤหัสบดีที่ 2 ตุลาคม พ.ศ. 2557

Casio fx-5800P - ปัญหาการแสดงผลองศา

การแสดงผลลัพธ์ให้เป็นเลขฐานหกสิบ(องศา-ลิปดา-ฟิลิปดา)


คำสั่ง ▶DMS สำหรับแสดงผลลัพธ์เป็นเลขฐานหกสิบ

การเรียกใช้ :



"FUNCTION" → "5:ANGLE" → "4:▶DMS"

รูปแบบการใช้ :
เลขทศนิยม▶DMS 
ตัวอย่าง : 

500→R↵
5729.577951÷R→D↵
D▶DMS◢                       // แสดงผลลัพธ์เป็น 11⁰ 27' 32.96"



ในคู่มือ Casio fx-5800P ที่หน้า E-28 มีกฎในการแสดงผลลัพธ์องศาซึ่งสร้างปัญหาในการแสดงผลลัพธ์อยู่พอสมควร กฎนี้มีอยู่ว่า


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(ศูนย์) มาบวกกับเลขฐานหกสิบเพื่อให้ผลลัพธ์ที่ได้ออกมาเป็นเลขทศนิยม ดังนั้นเราจะแก้ไขโค้ดโปรแกรมใหม่ดังนี้



โปรแกรมที่ 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↵        // เพิ่มบรรทัดนี้
        Cls↵
        "R =":R◢
        "D =":D▶DMS◢
        "L = ":L◢ 


ทดลองรันโปรแกรมจาก ตัวอย่างที่ 1

ผลการรันโปรแกรม :

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

ผลการรันโปรแกรม :

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↵
        Cls↵
        "R =":R◢
        "D =":D▶DMS◢
        "L = ":L◢ 


ทดลองรันโปรแกรมจาก ตัวอย่างที่ 2

ผลการรันโปรแกรม :

R = 350.0000106
D = 16⁰ 22' 12.8"
L = 100.2258505

สุดท้ายเราก็แก้ปัญหาทั้งสองกรณี(โจทย์ตัวอย่าง)นี้ไปได้ แต่ถ้าเราต้องการเขียนโปรแกรมคำนวณรายการวางโค้ง(Layout) ต่อไป หรือโปรแกรมอื่นๆ ที่มีความซับซ้อน เราก็จะตามแก้ปัญหาอย่างนี้อีกไม่รู้จบสิ้น


มีอีกวิธีหนึ่งที่ผู้เขียนอยากจะแนะนำคือ "ให้บวกศูนย์เข้าไปหลังจากการรับข้อมูลเลขฐานหกสิบทุกครั้ง" เช่น

        "DELTA :"?→K↵
        K+0→K↵

หลังจากรับข้อมูลเลขฐานหกสิบแล้ว ก่อนที่จะนำไปคำนวณค่าใดๆ ให้แปลงเป็นเลขทศนิยมเสียก่อนเพื่อป้องกันการเข้าสู่กฎการแปลงเลขฐานหกสิบทั้งสองข้อ

ทีนี้เราลองนำโปรแกรมที่ 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◢


เมื่อทดสอบโปรแกรมกับทั้งสองตัวอย่างแล้วให้ผลลัพธ์ที่ถูกต้อง วิธีนี้จะทำให้การเขียนโปรแกรมที่มีเลขฐานหกสิบเข้ามาเกี่ยวข้องง่ายขึ้น เพราะไม่ต้องกังวลว่าการคำนวณจะไปเข้ากฎทั้งสองข้อที่ตรงจุดไหนอีก



ไม่มีความคิดเห็น:

แสดงความคิดเห็น