- สัญญาณนาฬิกา
- คำสั่ง For ~ To ~ Next
สัญญาณนาฬิกา
สำหรับเครื่องคอมพิวเตอร์ที่ใช้กันอยู่จะมีสมองกลที่ใช้สำหรับประมวลผลซึ่งเรียกกันติดปากว่า CPU ความเร็วในการประมวลผลของ CPU นั้นมีหน่วยเป็น Hertz(Hz) หรือเข้าใจง่ายๆ คือทำงานกี่คำสั่งต่อวินาที ตัวอย่างเช่น CPU ที่มีความเร็ว
1 Hz = ทำงาน 1 รอบคำสั่งต่อวินาที
100 Hz = ทำงาน 100 รอบคำสั่งต่อวินาที
1 KHz = ทำงาน 1,000 รอบคำสั่งต่อวินาที
1 MHz = ทำงาน 1,000,000 รอบคำสั่งต่อวินาที
1 GHz = ทำงาน 1,000,000,000 รอบคำสั่งต่อวินาที
2.4 GHz = ทำงาน 2,400,000,000 รอบคำสั่งต่อวินาที
CPU ในปัจจุบันมีการทำงานที่รวดเร็วมากอย่างเช่น CPU ที่มีความเร็ว 2.4 GHz นั้นสามารถทำงานได้สองพันสี่ร้อยล้านคำสั่งต่อวินาที
เช่นเดียวกันกับเครื่องคิดเลขที่ใช้กันอยู่โดยทั่วไปจะมีหน่วยประมวลผลที่เรียกว่า ชิปเซต (Chipset) ทำหน้าที่เป็นสมองกลให้กับเครื่องคิดเลขและมีความเร็วในการทำงานตามสัญญาณนาฬิกาเช่นเดียวกันกับ CPU ที่ใช้ในคอมพิวเตอร์แต่ความเร็วคงจะเทียบกันไม่ได้เนื่องจากขนาดและต้นทุนราคา
คำสั่ง For ~ To ~ Next
เป็นคำสั่งที่ใช้ในการวนทำงานซ้ำแบบทราบจำนวนครั้งที่แน่นอน(เว้นเสียแต่มีคำสั่งข้ามการทำงาน) รูปแบบคำสั่งเป็นดังนี้
For <กำหนดตัวแปรเริ่มต้น> To <ตัวแปรตัวสุดท้าย>
<คำสั่งภายในลูป>
<...>
<...>
Next
ตัวอย่าง :
For 1→J To 4↵
Locate J,J,J↵
Next↵
โปรแกรมเริ่มจากการทำงานในคำสั่ง For โดยกำหนดให้ตัวแปร J มีค่าตั้งแต่ 1 ถึง 4 และกำหนดค่าเริ่มต้นรอบแรกให้ J มีค่าเท่ากับ 1 บรรทัดต่อมาเป็นคำสั่ง Locate ซึ่งเป็นคำสั่งที่ถูกกำหนดให้ทำซ้ำภายในลูป ซึ่งในรอบแรกจะแสดงผลใน คอลัมน์ที่ 1 บรรทัดที่ 1 ออกมาเป็นเลข 1 (ค่า J) บรรทัดสุดท้ายคือคำสั่ง Next ที่ใช้สำหรับกำหนดค่าตัวแปรที่กำหนดในบรรทัด For ให้เพิ่มขึ้นอีก 1 หรือ J+1→J นั่นเอง เสร็จแล้วกลับไปทำงานในบรรทัดที่อยู่ภายในลูปอีกครั้งด้วยค่าตัวแปรใหม่นี้ (J=2) และทำอย่างนี้ไปเรื่อยๆ จนครบ 4 รอบ จะได้ผลลัพธ์ดังนี้
รอบที่ 1 : คอลัมน์ที่ 1 บรรทัดที่ 1 ออกมาเป็นเลข "1"
รอบที่ 2 : คอลัมน์ที่ 2 บรรทัดที่ 2 ออกมาเป็นเลข "2"
รอบที่ 3 : คอลัมน์ที่ 3 บรรทัดที่ 3 ออกมาเป็นเลข "3"
รอบที่ 4 : คอลัมน์ที่ 4 บรรทัดที่ 4 ออกมาเป็นเลข "4"
หรือ
ไหนๆ ก็รู้คำสั่ง For ~ To ~ Next แล้วเรามาดูออปชั่นอีกตัวนึงที่ใช้คู่กันคือ Step
คำสั่ง For ~ To ~ Step ~ Next
ในคำสั่ง For ~ To ~ Next นั้นตัวแปรที่ระบุในคำสั่ง For จะเพิ่มขึ้นทีละ 1 ในรอบถัดๆ ไปแต่ถ้าเราต้องการให้เพิ่มขึ้นมากหรือน้อยกว่า 1 นั้นเราต้องใช้คำสั่ง Step ช่วย คำสั่ง Step เป็นออปชั่นเสริมที่ใส่เพิ่มเติมเข้าไปหลัง To เพื่อกำหนดว่าค่าตัวแปรในรอบต่อไปจะเพิ่มขึ้นหรือน้อยลงเท่าไร มีรูปแบบคำสั่งดังนี้
For <กำหนดตัวแปรเริ่มต้น> To <ตัวแปรตัวสุดท้าย> Step <ค่าที่เพิ่มขึ้นหรือลดลง>
<คำสั่งภายในลูป>
<...>
<...>
Next
ตัวอย่าง : ต้องการแสดงเลขคู่ตั้งแต่ 2 ถึง 10 ในบรรทัดที่สอง
For 2→J To 10 Step 2↵
Locate J-1,2,J↵
Next↵
รอบที่ 1 : คอลัมน์ที่ 1 บรรทัดที่ 2 ออกมาเป็นเลข "2"
รอบที่ 2 : คอลัมน์ที่ 3 บรรทัดที่ 2 ออกมาเป็นเลข "4"
รอบที่ 3 : คอลัมน์ที่ 5 บรรทัดที่ 2 ออกมาเป็นเลข "6"
รอบที่ 4 : คอลัมน์ที่ 7 บรรทัดที่ 2 ออกมาเป็นเลข "8"
รอบที่ 5 : คอลัมน์ที่ 9 บรรทัดที่ 2 ออกมาเป็นเลข "10"
หรือ
หลังจากที่เข้าใจเรื่องสัญญาณนาฬิกาและการใช้คำสั่ง For แล้วทีนี้เราจะมาเข้าเรื่องนาฬิกาจับเวลาอย่างง่ายกัน
อันดับแรกเราต้องรู้เสียก่อนว่าเครื่องคิดเลขของเรามีความเร็วของสัญญาณนาฬิกาเท่าไหร่(ประมาณ) โดยเขียนโปรแกรมสั่งให้วนลูปเปล่า(ไม่มีคำสั่งภายใน) ซัก 5000 รอบ(กะเอา ยิ่งมากรอบยิ่งใกล้เคียง) แล้วจับเวลาว่าใช้เวลาเท่าไร เขียนโปรแกรมดังนี้
For 1→J To 5000↵
Next↵
"END"↵
ทดลองสั่งรันโปรแกรมพร้อมกับจับเวลา ซึ่งตอนที่ทดสอบผมนับจากนาฬิกาแขวนผนังแบบเข็มโดยนับตั้งแต่โปรแกรมเริ่มทำงานจนขึ้นข้อความ END ปรากฎว่านับได้ 38 วินาที สรุปว่าเครื่องคิดเลขของผมทำงานได้ประมาณ 5,000 รอบคำสั่ง ต่อ 38 วินาที ซึ่งคำนวณใหม่ให้เป็นวินาทีดังนี้
5,000 ÷ 38 = 131.58 หรือประมาณ 132 รอบต่อวินาที
ตอนนี้เราก็รู้สัญญาณนาฬิกาแบบคร่าวๆ แล้ว เราจะลองมาเขียนโปรแกรมนาฬิกาจับเวลาแบบป้อนวินาทีกัน
"TIMES(S)"?→T↵ // บรรทัด 1
132T→N↵ // บรรทัด 2
For 1→J To N↵
Next↵
"READY"↵
โปรแกรมเริ่มจากถามเวลาที่ต้องการเป็นวินาทีในบรรทัดที่ 1 แล้วคำนวณรอบที่จะต้องวนในบรรทัดที่ 2 ทดลองรันโปรแกรมโดยป้อนค่าเวลาเป็น 60 วินาทีแล้วกดปุ่ม EXE พร้อมกับลองจับเวลาปรากฎว่าคราวนี้จับเวลาได้ 61 วินาที จึงต้องมาปรับแก้ค่าสัญญาณนาฬิกากันใหม่ดังนี้
จำนวนรอบที่คำนวณในบรรทัดที่สอง 132 x 60 = 7,920
7,920 ÷ 61 = 129.84 หรือประมาณ 130 รอบต่อวินาที
ทำการแก้ไขโค้ดใหม่ในบรรทัดที่ 2 เป็น
"TIMES(S)"?→T↵
130T→N↵
For 1→J To N↵
Next↵
"READY"↵
ทดลองรันโปรแกรมใหม่ ซึ่งผลที่ได้ถือว่าใกล้เคียงมากเป็นที่น่าพอใจแต่ถ้าใครที่ทดลองรันแล้วผลยังไม่ใกล้เคียงก็ให้ย้อนกลับไปคำนวณความเร็วสัญญาณนาฬิกาใหม่จนกว่าจะได้ค่าที่พอใจ
ทีนี้เรามาลองสร้างนาฬิกาจับเวลาแบบถอยหลังที่มีตัวเลขแสดงกันบ้าง โดยเขียนโปรแกรมดังนี้
"TIMES(S)"?→T↵
For T→K To 1 Step -1↵
Cls↵
Locate 1,1,K↵
For 1→J To 130:Next↵ // หน่วงเวลา 1 วินาที
Next↵
"READY"↵
ทดลองรันโปรแกรมดูโดยป้อนเวลาเป็น 60 วินาที ปรากฎว่าจับเวลาจริงได้ 63 วินาที ที่เป็นแบบนี้เนื่องจากในลูป K นั้นไม่ได้เป็นการรันลูปเปล่าแบบที่เคย เวลาในแต่ละรอบจะเท่ากับ
เวลาที่ใช้ในคำสั่ง Cls + เวลาที่ใช้ในคำสั่ง Locate + หน่วงเวลา 1 วินาที
เวลารวมในแต่ละรอบจึงเกิน 1 วินาที ดังนั้นจึงใช้ค่าหน่วงเวลาเป็น 130 ไม่ได้ คำนวณค่าหน่วงเวลาใหม่ดังนี้
จำนวนรอบใน 60 วินาที 130 x 60 = 7,800
7,800 ÷ 63 = 123.81 หรือประมาณ 124 รอบต่อวินาที
ทำการแก้ไขโค้ดใหม่เป็น
"TIMES(S)"?→T↵
For T→K To 1 Step -1↵
Cls↵
Locate 1,1,K↵
For 1→J To 124:Next↵
Next↵
"READY"↵
For T→K To 1 Step -1↵
Cls↵
Locate 1,1,K↵
For 1→J To 124:Next↵
Next↵
"READY"↵
ทดสอบโปรแกรมอีกครั้งโดยใช้เวลา 60 วินาทีเท่าเดิม ปรากฎว่าจับเวลาได้ใกล้เคียงมาก หน้าจอเมื่อรันโปรแกรมเป็นดังนี้
หลังจากกดปุ่ม EXE แล้วตัวเลขบนหน้าจอจะเริ่มนับถอยหลังตั้งแต่ 60 ไปเรื่อยๆ
จนเมื่อครบถึง 0 จะขึ้นข้อความ READY
แต่ถ้าหากต้องการให้เวลาใกล้เคียงกว่านี้ก็ให้เพิ่มเวลาในการทดสอบและคำนวณค่าหน่วงเวลาใหม่ไปเรื่อยๆ จนได้ค่าที่พอใจที่สุด
เสียดายที่เครื่อง 5800 นี้ไม่มีคำสั่ง BEEP(เสียงบี๊ป) ไม่อย่างนั้นโปรแกรมนาฬิกาจับเวลานี้คงจะสมบูรณ์ยิ่งขึ้นถ้ามีเสียงเตือนเมื่อเวลาครบ สำหรับเครื่องคิดเลขรุ่นอื่นๆ ก็สามารถนำไปประยุกต์ใช้ได้ หากจะต่างกันบ้างก็เพียงแต่เรื่องไวยกรณ์และความเร็วของสัญญาณนาฬิกา หรือใครมีไอเดียใหม่ๆ ก็สามารถนำไปประยุกต์ใช้ได้ตามต้องการของแต่ละบุคคล
จบบท
นอกเรื่อง (ไม่ต้องอ่านก็ได้)
บทนี้อาจจะนอกคอนเซ็ปท์ "การเขียนโปรแกรมในงานสำรวจ" ไปซักหน่อย เพราะอยากนำเสนออะไรที่แตกต่างจากแนวคิดเดิมๆ บ้าง ความจริงแล้วเครื่องคิดเลขทุกรุ่นไม่ได้มีความสามารถแค่เขียนสมการคำนวณงานได้เพียงอย่างเดียวแต่ยังสามารถดัดแปลงประยุกต์ใช้ได้หลากหลายตามแต่จินตนาการและความสามารถของเครื่องแต่ละเครื่อง
หลังจากนี้ตั้งใจว่าจะออกนอกคอนเซ็ปท์อย่างนี้ไปอีกซัก 2-3 บท ^ ^
ไม่มีความคิดเห็น:
แสดงความคิดเห็น