พื้นฐานปาสคาลพื้นฐาน rapidqเว็บภาษาไทยเว็บภาษาอังกฤษ

เทคนิคการทำให้ ลูปหยุดได้แน่นอน
ในการวางเงื่อนไขให้โปรแกรมวนซ้ำบางครั้ง
ก็อาจผิดพลาด จนทำให้โปรแกรมทำงานไม่หยุดก็เป็นได้
โดยปกติเราจะใช้วิธีการกด ปุ่ม Ctrl+Break ในการหยุดโปรแกรม

แต่การทำให้ ลูปหยุด ด้วยการกด Ctrl+Break บางครั้ง
ก็ไม่สามารถทำให้โปรแกรมหยุดทำงานได้
จนทำให้เราจำใจต้องปิดโปรแกรม โดยกด Alt+F4
ทำให้ source code ที่ยังไม่ได้ทำการ save สูญหายไป

แต่ก็มีแนวทางในการวางเงื่อนไขในลูปให้สามารถหยุด
ได้อย่างแน่นอน เพื่อกันโปรแกรมหยุดไม่ได้อยู่บ้าง
ที่ผมเคยใช้ก็มีอยู่สองวิธีด้วยกัน

1. การทำให้ loop มีเงื่อนไข
IF keypressed THEN break;

เช่น

uses crt ; var x : byte; begin clrscr ; x := 20; repeat write( 'abc' ); IF keypressed THEN break; until x=50; readln ; end.
ตามปกติ เงื่อนไขดังกล่าวจะไม่มีวันเป็นจริง ทำให้โปรแกรมทำงานไม่หยุด แต่ เมื่อเอาเงื่อนไข IF keypressed THEN break; มาวางไว้ภายในจะทำให้โปรแกรม หยุดได้โดยง่าย หากต้องการมั่นใจว่าลูปจะหยุดได้ ก็อาจจะนำ เงื่อนไขนี้ไปวางในลูปต่างๆ ที่ไม่แน่ใจว่าเงื่อนไขถูกต้องหรือไม่ เพื่อกันโปรแกรมทำงานไม่หยุด การใช้เพียงเงื่อนไข keypressed อาจจะกว้างเกินไปเพราะ โปรแกรมบางครั้งก็มีการ กด key ดังนั้นอาจ จะใช้วิธีหยุด loop เมื่อกด esc ก็ได้ ดังนี้ เช่น
uses crt ; var x : byte; k : char; begin clrscr ; x := 20; repeat write( 'abc' ); IF keypressed THEN begin k:=readkey; if k=#0 then k:=readkey; if k=#27 then break; end; until x=50; readln ; end.
2. การกำหนดให้ loop วนซ้ำได้ในจำนวนจำกัด เช่น
uses crt ; const limitLoop = 1000; var x : byte; curloop : word; begin clrscr ; x := 20; curloop := 0; repeat write( 'abc' ); inc (curloop); IF curloop>=limitLoop THEN break; until x=50; readln ; end.
ประโยชน์ ของการประกาศค่าคงที่ มีอยู่พักหนึ่งผมก็สงสัยว่าค่าคงที่ก็เหมือนๆ กับตัวแปรนั่นแหละ แต่พอ มาเขียนโปรแกรมยาวๆ ถึงได้รู้ว่า การประกาศค่าคงที่ก็ดีเหมือนกัน... เพราะว่า จะแก้ไขได้ง่าย(ประกาศอยู่ด้านบนทั้งหมด) ไม่ต้องไปเลื่อนหาทีละประโยค ซึ่งเสียนานทีเดียว และจะช่วยประหยัดหน่วยความจำในกรณีที่ใช้ซ้ำๆ กันหลายแห่ง เช่น
uses crt ; begin clrscr ; write (' - - - - - - - -'); write (' - - - - - - - -'); write (' - - - - - - - -'); write (' - - - - - - - -'); readln ; end.
ดูเผินๆ จะรู้สึกว่าโปรแกรมนี้ก็เขียนได้เรียบร้อยดี แต่มีข้อเสียคือ หากต้องการจะเปลี่ยน ต้องเปลี่ยนถึง 4 บรรทัด และมี ค่าคงที่ในรูปไม่มีตัวแปรอยู่ 4 ตัว ซึ่งน่าเสียดายหน่วยความจำอยู่เหมือนกัน ดังนั้นควรปรับปรุงดังนี้ครับ
uses crt ; const line = ' - - - - - - - -'; begin clrscr ; write( line ); write( line ); write( line ); write( line ); readln ; end.
โปรแกรมนี้เขียนได้เหมาะสมกว่า เพราะว่า มีค่าคงที่อยู่เพียงตัวเดียว และแก้ไขตัวที่ซ้ำกันทั้งหมด ได้ในบรรทัดเดียว หากเขียนโดยไม่ประกาศเป็นค่าคงที่ และโปรแกรมที่มีความยาวมากกว่า 500 บรรทัด จะทำให้เสียเวลาค้นหาข้อความเพื่อแก้ไขมากทีเดียว การแก้ไขที่ตัวแปรค่าคงที่ จะทำให้มั่นใจได้ว่าทุกส่วน ถูกแก้ไขไปได้ตรงกันทั้งหมด อีกด้วยครับ ( ผมเคยเขียนโปรแกรมยาวมาก และต้องการแก้ไขข้อความที่ซ้ำกัน แทนที่จะใช้เวลาแก้ 2-3 นาที ต้องใช้เวลาค้น ถึง 10-15 นาที เพราะไม่แน่ใจว่า ข้อความถูกแก้ครบทุกอันโดยเหมือนกันแล้วหรือไม่ )

best view with ie 5.0++, screen 600x800