Make your own free website on Tripod.com

บทที่ 5
คำสั่ง WHILE…DO และ REPEAT…UNTIL



     การกำหนดเงื่อนไขการเขียนโปรแกรมเพื่อให้เครื่องปฏิบัติตามลักษณะ loop แบบปกติ แบ่งได้ดังนี้
1. ให้เครื่องคอมพิวเตอร์ทำงานซ้ำ ๆ ตามที่ต้องการโดยระบุจำนวนครั้งอย่างแน่นอน เช่น จำนวนนักเรียนในชั้นเรียน จำนวนวันใน 1 สัปดาห์ เป็นต้น ถ้าต้องการเขียนโปรแกรมที่มีงานซ้ำ ๆ กันเราจะใช้คำสั่ง FOR
2. ให้เครื่องคอมพิวเตอร์ทำการตรวจสอบเงื่อนไขที่วางไว้ก่อน ถ้าเงื่อนไขเป็นจริงจึงให้เครื่องทำงาน ถ้าเงื่อนไขเป็นเท็จไม่ต้องทำงาน สำหรับเงื่อนไขนี้ ให้ใช้คำสั่ง WHILE…DO
3. ให้เครื่องคอมพิวเตอร์ทำงานที่ต้องการก่อน 1 ครั้ง แล้วจึงทำการตรวจสอบเงื่อนไขที่วางไว้ ถ้าเงื่อนไขเป็นเท็จจะกลับไปทำงานเดิมซ้ำ จนกระทั่งเงื่อนไขเป็นจริง จึงจะหลุดออกจาก loop เงื่อนไขเช่นนี้เหมาะที่จะใช้คำสั่ง REPEAT…UNTIL

คำสั่ง WHILE…DO

มีลักษณะการทำงานดังนี้
1. ตรวจสอบเงื่อนไขที่ได้วางไว้เป็นอันดับแรก
2. ถ้าเงื่อนไขเท็จหรือไม่จริง จะไม่ทำคำสั่งใน loop

รูปแบบ

WHILE เงื่อนไขเป็นจริง DO คำสั่ง;

เช่น TOTAL:=0;

WHILE TOTAL<15000 DO
READLN(TOTAL);
WRITELN(‘TOTAL IS ‘,TOTAL);

     จากโปรแกรมให้ TOTAL = 0 พอถึงคำสั่ง WHILE เงื่อนไขจะเป็นจริง ถ้า TOTAL<15000 ดังนั้น เครื่องจะอ่าน TOTAL จนกระทั่ง TOTAL ที่ป้อนเข้าไปเกินหรือเท่ากับ 15000 จะทำให้เงื่อนไขเป็นเท็จ เครื่องจะข้ามไปทำคำสั่ง WRITELN ในบรรทัดต่อมาทันที

ตัวอย่าง

PROGRAM EXAM10;
VAR I,SUM:INTEGER;
BEGIN
SUM:=0;
I:=1;
WHILE I<=10 DO
BEGIN
SUM:=SUM+1;
I:=I+1;
END;
WRITELN(‘SUM OF 1-10 IS ‘,SUM);
END.

คำสั่ง REPEAT…UNTIL
     เป็นคำสั่งที่ต้องมีการกระทำในสิ่งที่เราต้องการใน loop อย่างน้อย 1 ครั้งเสมอ ถ้ามีการวนซ้ำหลาย ๆ ครั้งใน loop โปรแกรมจะออกจาก loop ได้ก็ต่อเมื่อเงื่อนไขที่วางไว้เป็นจริง

รูปแบบ

REPEAT คำสั่ง UNTIL เงื่อนไขเป็นจริง;

เช่น จงหาค่าของ 2+3+4…+16

PROGRAM EXAM11;
VAR SUM,I:INTEGER;
BEGIN
SUM:=0;
I:=2;
REPEAT
SUM:=SUM+I:
I:=I+1;
UNTIL I<=16
WRITELN(SUM);
END.

ตัวอย่าง

PROGRAM EXAM12;
VAR N,I:LONGINT;
BEGIN
REPEAT
WRITE(‘ENTER N :’);
READ(N);
WHILE N>0 DO
BEGIN
I:=N MOD 10;
WRITE(I:2);
N:=N DIV 10;
END;
WRITELN;
UNTIL N<0;
END.

ผลลัพธ์

ENTER N : 1234567890
0 9 8 7 6 5 4 3 2 1
ENTER N : 54321
1 2 3 4 5
ENTER N : -1

     จากโปรแกรม loop ชั้นนอกใช้ Repeat…until ส่วน loop ชั้นในใช้คำสั่ง WHILE…DO โปรแกรมนี้จะทำงานซ้ำ ๆ ไปเรื่อย ๆ จนป้อนค่า N<0 จึงจะจบโปรแกรม
ข้อแตกต่างของ WHILE และ UNTIL คือ
- WHILE ตรวจสอบเงื่อนไขก่อนทำคำสั่งส่วน until ตรวจสอบภายหลัง
- WHILE ออกจาก loop เมื่อเงื่อนไขเป็นเท็จ until ออกจาก loop เมื่อเงื่อนไขเป็นจริง


แบบฝึกหัด
เรื่อง
คำสั่ง WHILE…DO และ REPEAT…UNTIL


1. จงเขียนโปรแกรมหาผลรวมและค่าเฉลี่ยของตัวเลขตั้งแต่ 1-25
2. ถ้าแถวลำดับ (array) เป็น B[1..5] และให้ B[I] มีค่าเท่ากับ I ต้องเพิ่มค่า I อีกเท่าไรจึงจะทำให้โปรแกรมเลิกทำใน loop
I:=2;
WHILE B[I]<30 DO
BEGIN
B[I]:=B[I-1]*3;
I:=I+1;
END;

3. จงกำหนดเงื่อนไขต่อไปนี้ให้ถูกต้อง
3.1 ต้องการบวกเลข 1-50
J:=0;
SUM:=0;
WHILE………………DO
BEGIN
SUM:=SUM+J;
J:=J+1;
END;

3.2 ต้องการบวกเลข 1-100
J:=0;
SUM:=0;
REPEAT
J:=J+1;
SUM:=SUM+J;
UNTIL………………..