หน่วยที่ 6
คำสั่งควบคุม (Control Statement)

พื้นฐานการทำงานกับคำสั่งของคอมพิวเตอร์ จะทำงานแบบเรียงคำสั่งจากบนลงล่าง (Top-Down) เริ่มตั้งแต่ต้นจนจบโปรแกรม สามารถแบ่งกลุ่มของคำสั่งควบคุมออกเป็น 3 ประเภท ดังนี้
1. คำสั่งการโดดข้ามให้ไปทำงาน ณ จุดใดๆ แบบไม่มีเงื่อนไข (Unconditional branch statement) ได้แก่ คำสั่ง GOTO
2. คำสั่งในการโดดข้ามให้ไปทำงาน ณ จุดใดๆ แบบมีเงื่อนไข (Conditional branch statement) ได้แก่ คำสั่ง IF , CASE
3. คำสั่งการโดดข้ามให้ไปทำงานแบบวนรอบ (Loop Control statement) ได้แก่ คำสั่ง FOR , REPEAT , WHILE

โดยเงื่อนไขที่จะใช้ในการทดสอบเพื่อการโดดข้ามสามารถใช้คำสั่งหรือเครื่องหมาย เช่น and หมายถึง "และ" , or หมายถึง "หรือ" และ not หมายถึง "นิเสธ" เป็นตัวเชื่อมเงื่อนไข ดังรายละเอียดต่อไปนี้

1. คำสั่งการโดดข้ามให้ไปทำงาน ณ จุดใดๆ แบบไม่มีเงื่อนไข (Unconditional branch statement) ได้แก่ คำสั่ง GOTO มีรูปแบบดังนี้

 

เมื่อ label หมายถึง ชื่อตำแหน่งหรือจุดใดๆ ที่ต้องการให้โดดไปทำงาน โดย label ต้องเป็นเลขจำนวนเต็มยาวไม่เกิน 4 หลัก โดยเขียนไว้หน้าคำสั่งที่ต้องการจะโดดไปและต้องคั่นด้วย : เสมอ และคำสั่ง GOTO จะไม่สามารถใช้โดดเพื่อทำงานข้ามบล็อกได้

การใช้คำสั่ง GOTO ควรใช้เท่าที่จำเป็นเท่านั้น เช่น ใช้ในกรณีที่ต้องการกระโดดออกจากโครงสร้างหรือกลุ่มคำสั่งวนรอบที่ซ้อนกันหลายชั้น (วนรอบสองวงหรือมากกว่า) เพื่อยุติการวนรอบทั้งหมด รวมทั้งการโดดขึ้นส่วนบนของโปรแกรม
ตัวอย่าง
-----
GOTO 150;
-----
-----
150 : STATEMENT

 

 

 

 

2. คำสั่งในการโดดข้ามให้ไปทำงาน ณ จุดใดๆ แบบมีเงื่อนไข (Conditional branch statement) ได้แก่ คำสั่ง IF , CASE
คำสั่ง IF โดยคำสั่ง IF จะใช้ผลของการทดสอบเงื่อนไข (เงื่อนไขจะอยู่ในวงเล็บหลัง IF) ซึ่งมี 2 กรณี คือ
1) เงื่อนไขเป็น "จริง" (หรือ True) จะเกิดการทำงานที่ STATEMENT - 1
2) ถ้าเงื่อนไขเป็นเท็จ ไม่จริง (หรือ False) จะเกิดการทำงานที่ STATEMENT -2 (จะโดดข้ามการทำงานที่ STATEMENT -1 ไปทำที่ STATEMENT -2 เลย)
โดยคำสั่ง IF มีรูปแบบดังนี้

 

 

เมื่อ CONDIT หมายถึง เงื่อนไขที่จะใช้ในการทดสอบเพื่อตัดสินใจจะไปทำงาน STATEMENT -1 หรือ STATEMENT -2

นอกจากนี้ คำสั่ง IF ที่มีใช้ในโปรแกรมภาษาปาสคาลยังสามารถทดสอบซ้อนได้ด้วย เรียกว่า NESTED IF ซึ่งสอดคล้องกับมิติการทำงานหรือการแก้ปัญหาของมนุษย์ โดยมีรูปแบบดังนี้

 

 

 

คำสั่ง CASE ใช้กับกรณีมีทางเลือกเพื่อประมวลผลมากกว่า 2 ทาง รูปแบบคำสั่ง คือ

 

 

 

 

เมื่อ VARI หมายถึงข้อมูลแบบสเกลลาร์ (ยกเว้นแบบเลขจำนวนจริง) ซึ่งจะมีค่าแตกต่างกับ n และจะต้องมีทางเลือกที่สอดคล้องกันกับค่า n โดยค่าของ VARI จะเป็นตัวจำแนกการทำงานว่าจะเกิดการทำงานที่ CASE LABEL ใด
CASE PARA หมายถึง CASE LABEL (เช่น 1,2,...) กับ STATEMENT โดยจะเขียนแยกกันด้วยเครื่องหมาย : โดยที่ CASE LABEL จะเป็นจุดที่เกิดการทำงานที่สอดคล้องกับ VARI เป็นตัวจำแนกการทำงานตาม CASE LABEL ต่างๆ

ตัวอย่าง

CASE COLOR OF
1 : WRITE ("RED") ;
2 : WRITE ("GREEN") ;
3 : WRITE ("BLUE") ;
4 : WRITE ("BLACK") ;
END ;

จากตัวอย่าง COLOR (ซึ่งก็คือ VARI หากเปรียบเทียบกับรูปแบบทั่วไป) จะจำแนกการทำงานที่สอดคล้องกัน เช่น
ถ้า COLOR มีค่าเป็น 1 จะทำให้คำสั่งที่อยู่หลังค่า CASE บรรทัด
1 : WRITE ("RED") ; จะแสดงคำว่า RED ออกทางจอภาพ
ในทำนองเดียวกัน ถ้า COLOR มีค่าเป็น 2 จะทำให้คำสั่งที่อยู่หลังค่า CASE บรรทัด
2 : WRITE ("GREEN") ; จะแสดงคำว่า GREEN ออกทางจอภาพ
การทำงานของโปรแกรมคือ จะมีการรับค่า COLOR ที่เป็นตัวเลขทางแป้นพิมพ์ โดยตัวเลขที่รับเข้ามาจะต้องมีค่าระหว่าง 1 ถึง 4 เท่านั้น โดยถ้า COLOR ที่รับเข้าเป็นเลข 4 ก็แสดงคำว่า BLACK

3. คำสั่งการโดดข้ามให้ไปทำงานแบบวนรอบ (Loop Control statement) ได้แก่ คำสั่ง FOR , REPEAT , WHILE

คำสั่ง FOR มีรูปแบบดังนี้
ลักษณะคือ for..to..do..

 

หรือ DOWNTO
เมื่อ INIT หมายถึง เงื่อนไขหรือตัวแปรที่ให้ค่า "เริ่มต้น" ของการทำงานแบบวนรอบ (loop)
MAX หมายถึง จำนวนรอบ (loop) ที่จะต้องการให้วน ซึ่งการนับรอบจะเป็นแบบเพิ่มค่า (ใช้ to) ขึ้นทีละ 1 เสมอ หรือเป็นแบบลดค่าก็ได้ (ใช้ downto)
STATEMENT หมายถึง คำสั่งใดๆ ที่จะถูกวนรอบให้ทำงาน ถ้ามีเกิน 1 คำสั่ง จะต้องใช้ BEGIN....END เป็นบล็อกให้กับ "ชุด" คำสั่งนั้นๆ ดังรูป

 

 

 

 

คำสั่ง FOR ที่เป็นแบบ TO จะทำให้ STATEMENT ถูกวนรอบ (loop) เท่ากับจำนวน MAX ครั้ง โดยค่า INIT ต้องน้อยกว่า MAX และถ้าเป็นกรณีที่ใช้ DOWNTO การทำงานจะตรงข้าม คือ INIT จะต้องมีค่ามากกว่า MAX
คำสั่ง REPEAT มีรูปแบบดังนี้
ลักษณะคือREPEAT ...UNTIL

 

เมื่อ STATEMENT หมายถึง คำสั่งใดๆ ที่จะถูกวนรอบให้ทำงาน ถ้ามีเกิน 1 คำสั่ง จะต้องใช้ BEGIN ...END เป็นบล็อกให้กับ "ชุด" คำสั่งนั้นๆ โดย statement ที่อยู่ระหว่าง REPEAT กับ UNTIL จะมีกี่คำสั่งก็ได้ โดยคั่นด้วย ' ; '
CONDIT หมายถึง เงื่อนไขที่จะใช้ในการทดสอบเพื่อให้เกิดการวนรอบ โดยจะเกิดการ วนรอบหาก CONDIT มีเงื่อนไขเป็นจริง และจะประมวลผลก่อนแล้วจึงตรวจสอบเงื่อนไข

คำสั่ง WHILE มีรูปแบบดังนี้

รูปแบบที่ 1 รูปแบบที่ 2

 

 

 

เมื่อ CONDIT หมายถึง เงื่อนไขที่ใช้ในการวนรอบ โดยถ้าเงื่อนไขเป็นจริง จะเกิดการวนรอบ (ทำ STATEMENT1-2) แต่ถ้าเป็นเท็จ จะเลิกจากการวนรอบทันที คือลงทำมาทำคำสั่งที่ NEXT STATEMENT3 ซึ่งหมายถึงสิ้นสุดการทำงานของ WHILE
STATEMENT หมายถึง คำสั่งใดๆ ที่จะถูกวนรอบให้ทำงาน ถ้ามีเกิน 1 คำสั่ง จะต้องใช้ BEGIN..END เป็นบล็อกให้กับ "ชุด" คำสั่งนั้นๆ โดย statement อาจไม่ถูกประมวลผลเลยก็ได้ หากพบว่า condit เป็นเท็จ
NEXT STATEMENT หมายถึง คำสั่งใดๆ ที่เป็นอิสระจากงเอนไขของการวนรอบของ WHILE ซึ่งหมายถึงการทำงานของ while จบแล้ว