การใช้งานตัวแปรในเครื่อง 5800 โดยปกติแล้วจะมีอยู่ 26 ตัว คือตัวแปร A ถึง Z แต่หากจำเป็นต้องใช้ตัวแปรเกินกว่า 26 ตัว เราสามารถประกาศตัวแปรพิเศษเพิ่มเติมขึ้นมาใช้งานได้อีก โดยตัวแปรพิเศษนี้เรียกว่า Reserving Variable Memory (ตามคู่มือในหน้า E-35) ลักษณะการใช้งานก็เหมือนกับตัวแปร Array แบบ 1 มิติในภาษาโปรแกรมทั่วไป
ตัวแปร Array หรือตัวแปรแบบแถวลำดับของ 5800 มีรูปแบบเป็นตัวแปรที่ขึ้นต้นด้วยตัวอักษรได้ตัวเดียวคือตัว Z ตามด้วยวงเล็บเหลี่ยมภายในวงเล็บเหลี่ยมมีตัวเลขดัชนี(index) ที่เรียงลำดับตั้งแต่เลข 1 จนถึงตัวเลขตามจำนวนที่เราได้ประกาศไว้ หากยังนึกภาพตัวแปร Array แบบ 1 มิติไม่ออกให้นึกถึงกล่องที่วางเรียงๆ กันแล้วมีหมายเลขกำกับเพื่อระบุตำแหน่งของแต่ละกล่องตามภาพ
ขั้นตอนการใช้งานตัวแปร Array ประกอบด้วย
- ประกาศขนาดตัวแปร
- กำหนดค่าให้ตัวแปร
- การลบตัวแปร
ขนาดตัวแปร→DimZ
เช่น ถ้าต้องการเพิ่มตัวแปรพิเศษจำนวน 5 ตัวก็แค่พิมพ์
5→DimZ
เครื่องก็จะสร้างตัวแปรเพิ่มเติมให้เราพร้อมใช้งาน 5 ตัว คือ Z[1], Z[2], Z[3], Z[4], Z[5]
*** การประกาศตัวแปรเพิ่มทุกหนึ่งตัวจะใช้พื้นที่หน่วยความจำ 12 bytes เสมอไม่ว่าคุณจะกำหนดค่าหรือไม่กำหนดค่าให้กับมันก็ตาม ถึงคุณไม่กำหนดค่าให้ มันก็จะมีค่าเป็น 0 (ศูนย์)อยู่ดี หรือไม่ว่าจะกำหนดค่ามันด้วยค่า 1 หรือ 1,000,000 มันก็ใช้พื้นที่ 12 bytes เท่ากัน ***
เรามาลองทดสอบดูว่าเป็นตามในคู่มือหรือไม่ โดยกด MODE >> 5:PROG เพื่อดูหน่วยความจำที่เหลือ
จะเห็นว่าหน่วยความจำเครื่องที่ผมใช้อยู่ตอนนี้เหลืออยู่ 24226 bytes ทีนี้กลับสู่โหมดคำนวนโดย MODE >> 1:COMP ลองประกาศตัวแปรดูซัก 20 ตัวโดยพิมพ์
20→DimZ
กลับไป MODE >> 5:PROG อีกครั้งเพื่อดูหน่วยความจำที่เหลือ
ตอนนี้หน่วยความจำเหลือ 23960 bytes แสดงว่าหายไปเท่ากับ 24226 - 23960 = 266 bytes หรือลองคำนวณตามวิธีที่คู่มือระบุคือ 26 + (20 x 12) = 266 bytes พอดี
- การกำหนดค่าให้ตัวแปร
การกำหนดค่าให้ตัวแปรแบบ Array ก็สามารถทำได้เหมือนกับตัวแปรทั่วไป เช่น 23→Z[4] ก็เป็นการกำหนดให้ตัวแปร Z[4] มีค่าเท่ากับ 23 เป็นต้น
- การลบตัวแปร
การลบตัวแปรทำได้โดยการพิมพ์
0→DimZ
ตัวแปรทั้งหมดที่ประกาศไว้ก็จะถูกลบทิ้งและไม่สามารถใช้งานได้ หรืออีกนัยหนึ่งความหมายของการลบตัวแปรก็คือการคืนพื้นที่หน่วยความจำให้กับเครื่อง
ตัวแปรพิเศษที่ไม่ได้ใช้งานแล้วควรลบทิ้งบ้าง โดยเฉพาะกรณีที่หน่วยความจำเครื่องเหลือน้อย
การประยุกต์ใช้งานตัวแปร Array
ประโยชน์อย่างหนึ่งของตัวแปร Array คือเราสามารถเข้าถึงข้อมูลที่มีจำนวนมากใน Array ด้วยการเขียนโปรแกรมสั้นๆ โดยใช้ลูป (Loop) เช่นในกรณีงานวงรอบเราสามารถเขียนโปรแกรมป้อนค่า Azimuth ต่อเนื่องกัน 20 ตัวโดยใช้ลูป For
***** สำหรับการเขียนโปรแกรมป้อนค่าตัวแปร Array สามารถใช้เครื่องหมาย "?→" ได้เท่านั้น ถ้าใช้เครื่องหมาย "?" จะ Syntax ERROR *****
โดยปกติถ้าเราไม่ใช้ลูปในการป้อนค่าเราอาจต้องเขียนคำสั่งยาวๆ หลายบรรทัดแบบนี้
20→DimZ↵
"Az 1"?→Z[1]↵
"Az 2"?→Z[2]↵
"Az 3"?→Z[3]↵
..................................................."Az 20"?→Z[20]↵
แต่ถ้าเราใช้คำสั่ง For จะทำให้เขียนสั้นลงแบบนี้
20→DimZ↵
For 1→J To 20↵
Cls↵
"AZ."↵
Locate 4,1,J↵
?→Z[J]↵
Next↵
แต่ข้อด้อยอย่างนึงของ 5800 คือการที่สามารถใช้ตัวแปร Array ได้แค่ตัวแปรเดียวคือตัวแปร Z ทำให้เกิดข้อจำกัดในการใช้ตัวแปร เช่นถ้าเราต้องการเขียนโปรแกรมวงรอบให้เก็บค่า มุม 10 ค่า, ค่าระยะ 10 ค่า เมื่อคำนวนต่อมาให้เก็บค่า Azimuth อีก 10 ค่า, ค่า Lat, Dep อีกอย่างละ 10 ค่า, ฯลฯ ถ้าเป็นเครื่องรุ่นก่อนๆ ของ Casio สมัยที่ยังเป็น Pocket Computer เช่น 795P, 850P, 880P หรือพวกตระกูล PB ภาษาที่ใช้เป็นภาษาเบสิค(Basic) เราสามารถประกาศตัวแปรได้อย่างอิสระหลายๆ ตัวพร้อมกัน เช่น A[10], B[10], LAT[10] เป็นต้น
แต่เราสามารถแก้ไขปัญหานี้ได้โดยการใช้ช่วงของข้อมูลเพื่อแยกการใช้งานค่าตัวแปรที่แตกต่างกัน
ตัวอย่าง เช่น ถ้าเราต้องการเก็บข้อมูล ค่ามุม 10 ค่า, ค่าระยะ 10 ค่า เพื่อมาคำนวณหาค่า Az เพื่อเก็บไว้อีก 10 ค่า เราอาจทำได้โดย
ประกาศ 30→DimZ↵ โดย
Z[1] - Z[10] เก็บค่ามุม
Z[11] - Z[20] เก็บค่าระยะ
Z[21] - Z[30] เก็บค่า Az
ข้อเสนอแนะ กรณีเขียนโปรแกรมวนลูปอย่างเช่นโปรแกรมวงรอบที่ยังไม่ทราบจำนวนหมุดที่แน่ชัด แล้วไม่รู้จะประกาศไว้เท่าไรดี เราสามารถจัดการปัญหานี้โดย
1. ประกาศตัวแปรเผื่อ
เช่น ถ้าเรามันใจว่าวงรอบที่เรารังวัดจะไม่เกิน 30 หมุดอย่างแน่นอน เราก็อาจประกาศไว้เผื่อซัก 35 ก็เพียงพอ วิธีนี้เป็นวิธีที่ง่ายต่อการเขียนโปรแกรมแต่ก็ต้องเสียพื้นที่หน่วยความจำบางส่วนที่ไม่ได้ใช้ด้วย
2. ประกาศตัวแปรเท่าที่ใช้โดยป้อนค่าจำนวนหมุดก่อน
วิธีนี้ดีกว่าวิธีแรก ไม่ต้องเสียพื้นที่ในส่วนที่ไม่ได้ใช้แต่ก็ทำให้การเขียนโปรแกรมยุ่งยากขึ้นเล็กน้อย
จะขอสมมุติตัวอย่างการเขียนโปรแกรมการคำนวณพิกัดอย่างง่ายจากการรังวัดเปิดมุมและวัดระยะต่อเนื่องซัก 5 หมุด โดยต้องการเก็บค่ามุมกับระยะไว้ด้วย (ไม่มีการปรับแก้ค่าใดๆ)
ตัวอย่าง เขียนโปรแกรมคำนวณค่าพิกัดจากข้อมูลตามภาพ
N = จำนวนหมุดA = ค่าพิกัด N หมุดเริ่มต้นB = ค่าพิกัด E หมุดเริ่มต้นC = ค่า Azimuth เริ่มต้นที่ชี้มายังหมุดที่ 1Z[ ] = ตัวแปร Array สำหรับเก็บค่า มุม, ระยะ, Azimuth โดยจากตัวอย่างนี้เราจะใช้
Z[1] ถึง Z[5] ในการเก็บค่ามุม
Z[6] ถึง Z[10] ในการเก็บค่าระยะ
Z[11] ถึง Z[15] ในการเก็บค่า Azimuth
- ป้อนข้อมูลเริ่มต้นและประกาศตัวแปร
- ป้อนค่ามุม
- ป้อนค่าระยะ
- คำนวณ Azimuth
- คำนวณค่าพิกัด
แล้วในตอนท้ายบทจะนำทั้ง 5 ส่วนมารวมกันอีกที
1. ป้อนข้อมูลเริ่มต้นและประกาศตัวแปร
Cls↵
"NO. OF POINT"?N↵
3N→DimZ↵
"N1"?A↵
"E1"?B↵
"START AZ"?C↵
คำอธิบาย
เนื่องจากกำหนดให้ N เท่ากับจำนวนหมุด เราจึงประกาศตัวแปร Z ไว้สามเท่าหรือ 3N ตัว(3xN) เพื่อเก็บค่ามุม N ตัว ค่าระยะ N ตัว และค่า Azimuth อีก N ตัว
เช่นจากตัวอย่างเรามีหมุดรังวัดทั้งหมด 5 หมุด เราก็จะประกาศตัวแปร Z ไว้ 15 ตัว(3x5) เพื่อเก็บค่ามุม 5 ตัว ค่าระยะ 5 ตัว และค่า Azimuth อีก 5 ตัว
2. ป้อนค่ามุม
For 1→J To N↵
Cls↵
"ANG."↵
Locate 5,1,J↵
?→Z[J]↵
Next↵
ลองรันโปรแกรมดูทำการป้อนค่าทั้งในส่วนเริ่มต้นและป้อนมุมเข้าไปจนจบโปรแกรมก็จะยังไม่มีปัญหาอะไร(ถ้าป้อนโปรแกรมไม่ผิด)
ทีนี้กดหยุดโปรแกรมออกไปแล้วลองรันโปรแกรมดูอีกครั้งจะเห็นว่าค่า NO OF POINT, N1, E1, START AZ จะยังคงแสดงค่าเดิมและสามารถกด [EXE] ผ่านไปได้เลย แต่พอโปรแกรมรันถึงส่วนป้อนค่ามุมจะเห็นว่าโปรแกรมจะไม่แสดงค่ามุมเคยป้อนไว้เนื่องมาจากการที่เราต้องใช้เครื่องหมาย "?→" ในการป้อนค่า Array
คงไม่ใช่เรื่องสนุกนักที่เราจะต้องป้อนค่ามุมเยอะๆ ทุกครั้งที่รันโปรแกรมใหม่โดยเฉพาะตอนที่เราเขียนและทดสอบโปรแกรม เราจะแก้ไขปัญหานี้ โดยใช้เครื่องหมาย "?" แล้วป้อนผ่านตัวแปรปกติแทน
ในที่นี้เราจะใช้ตัวแปร X สำหรับเก็บค่ามุม(ชั่วคราว)และเป็นตัวแปรแทนในการป้อนค่า โดยเราจะแก้ไขโปรแกรมในส่วนของบรรทัด
?→Z[J]↵
แก้เป็น
Z[J]→X↵ // พักค่ามุมที่จะป้อนไว้ในตัวแปร X เพื่อให้แสดงค่ามุม
""?X↵ // ป้อนค่ามุมผ่านตัวแปร X เพื่อให้ใช้เครื่องหมาย "?" ได้
X→Z[J]↵ // นำค่าที่ป้อนใส่กลับไปในตัวแปร Array
หรือแก้โปรแกรมในส่วนที่สองเป็นดังนี้
For 1→J To N↵
Cls↵
"ANG."↵
Locate 5,1,J↵
Z[J]→X↵
""?X↵
X→Z[J]↵
Next↵
เท่านี้โปรแกรมก็จะแสดงค่ามุมเก่าที่ป้อนไว้และสามารถกด [EXE] ผ่านไปได้เลย
3. ป้อนค่าระยะ
For N+1→J To 2N↵
Cls↵
"DIST."↵
Locate 6,1,J-N↵
Locate 8,1,"→"↵
Locate 10,1,J-N+1↵
Z[J]→X↵
""?X↵
X→Z[J]↵
Next↵
คำอธิบาย
เนื่องจากเราใช้ตัวแปร Z[1] ถึง Z[N] เพื่อเก็บค่ามุมไปแล้ว ในส่วนป้อนค่าระยะนี้เราจะกำหนดให้เริ่มป้อนจาก Z[N+1] ถึง Z[2N] หรือ Z[6] ถึง Z[10] (ตามโจทย์ตัวอย่าง)
4. คำนวณ Azimuth
// แยกคำนวณค่า Azimuth ตัวแรก(หมุดที่ 1 ชี้ไปหมุดที่ 2)
// เนื่องจากเราไม่สามารถอ้างอิงหมุดเริ่มต้น(Z[0])ในลูปได้
C+180+Z[1]→Z[2N+1]↵
While Z[2N+1]>360↵
Z[2N+1]-360→Z[2N+1]↵
WhileEnd↵
Cls↵
"AZ"↵
Locate 4,1,"1 → 2"↵
Z[2N+1]°◢
// คำนวณ Azimuth ที่เหลือ
For 2N+2→J To 3N↵
Z[J-1]+180+Z[J-2N]→Z[J]↵
While Z[J]>360↵
Z[J]-360→Z[J]↵
WhileEnd↵
Cls↵
"AZ"↵
Locate 4,1,J-2N↵
Locate 6,1,"→"↵
Locate 8,1,J-2N+1↵
Z[J]°◢
Next↵
5. คำนวณค่าพิกัด
Cls↵
"N 1":A◢
"E 1":B◢
A→G:B→H↵
For 1→J To N↵
Cls↵
"N"↵
Locate 3,1,J+1↵
G+Z[N+J]cos(Z[2N+J])→G◢
"E"↵
Locate 3,3,J+1↵
H+Z[N+J]sin(Z[2N+J])→H◢
Next↵
คำอธิบาย
ตัวแปร G และ H ใช้สำหรับคำนวณค่าพิกัดต่อเนื่องในลูป
เมื่อนำทุกส่วนของโปรแกรมมารวมกันทั้งหมดจะได้ดังนี้
Cls↵
"NO. OF POINT"?N↵
3N→DimZ↵
"N1"?A↵
"E1"?B↵
"START AZ"?C↵
For 1→J To N↵
Cls↵
"ANG."↵
Locate 5,1,J↵
Z[J]→X↵
""?X↵
X→Z[J]↵
Next↵
For N+1→J To 2N↵
Cls↵
"DIST."↵
Locate 6,1,J-N↵
Locate 8,1,"→"↵
Locate 10,1,J-N+1↵
Z[J]→X↵
""?X↵
X→Z[J]↵
Next↵
C+180+Z[1]→Z[2N+1]↵
While Z[2N+1]>360↵
Z[2N+1]-360→Z[2N+1]↵
WhileEnd↵
Cls↵
"AZ"↵
Locate 4,1,"1 → 2"↵
Z[2N+1]°◢
For 2N+2→J To 3N↵
Z[J-1]+180+Z[J-2N]→Z[J]↵
While Z[J]>360↵
Z[J]-360→Z[J]↵
WhileEnd↵
Cls↵
"AZ"↵
Locate 4,1,J-2N↵
Locate 6,1,"→"↵
Locate 8,1,J-2N+1↵
Z[J]°◢
Next↵
Cls↵
"N 1":A◢
"E 1":B◢
A→G:B→H↵
For 1→J To N↵
Cls↵
"N"↵
Locate 3,1,J+1↵
G+Z[N+J]cos(Z[2N+J])→G◢
"E"↵
Locate 3,3,J+1↵
H+Z[N+J]sin(Z[2N+J])→H◢
Next↵
ทดสอบรับโปรแกรม
- ป้อนข้อมูลเริ่มต้น
ป้อนค่าระยะ
คำนวณ Azimuth
จะได้ผลลัพธ์ตามตารางนี้
จบบท
เครื่องคิดเลขรุ่นใหม่ๆ ที่เขียนโปรแกรมได้ของ Casio เท่าที่ลองโหลดคู่มือมาลองอ่านดูจะใช้ไวยกรณ์ภาษาเดียวกันทุกรุ่น อาจต่างกันบ้างเรื่องความสามารถที่มีในเครื่องรุ่นนั้นๆ เช่นพวกคำสั่งกราฟฟิกเป็นต้น การเรียนรู้หัดเขียนโปรแกรมเครื่องคิดเลข Casio ให้ได้ซักรุ่นเป็นเรื่องที่ดีและคุ้มค่า จะทำให้เราสามารถเขียนโปรแกรมใช้งานเครื่องอื่นๆ ได้ด้วย
Cls คือตัวแปลอะไรครับ
ตอบลบCls (Clear Screen) เป็นคำสั่งสำหรับล้างหน้าจอครับ
ลบ