Make your own free website on Tripod.com

หน่วยที่ 3
เรื่อง คำสั่ง FOR


     คำสั่ง FOR เป็นคำสั่งกำหนดเงื่อนไขเป็นจำนวนครั้งที่จะทำตามชุดคำสั่งต่าง ๆ ภายใน loop เหมาะที่จะใช้กับงานประเภทที่ไม่มีการเปลี่ยนแปลง

รูปแบบ

FOR ตัวแปร := ค่าเริ่มต้น to (DOWN TO) ค่าสุดท้าย DO
คำสั่ง;

เช่น

FOR J:=1 TO 5 DO
WRITELN(‘I AM A EMPLOYEE’);

หรือ

FOR J:=10 DOWN TO 1 DO
WRITELN(‘I AM A EMPLOYEE’);

ตัวอย่าง

PROGRAM EXAM4;
VAR I:INTEGER;
BEGIN
FOR I:= 1 TO 3 DO
WRITELN(‘I AM A TEACHER’);
END.

ผลลัพธ์

I AM A TEACHER
I AM A TEACHER
I AM A TEACHER

ข้อควรระวัง
1. ในการเขียนโปรแกรมยาว ๆ นั้น อย่ากำหนดค่าตัวแปรภายใน loop ที่เป็นตัวเดียวกันกับตัวแปรที่ใช้เป็นตัวนับจำนวนครั้งของการวนซ้ำ เพราะจะทำให้เป็นการวนซ้ำไม่รู้จบ

เช่น

FOR I:= 1 TO 10 DO
BEGIN
WRITELN(‘I= ‘,I);
I:=3;
END;

โปรแกรมนี้ค่า I จะไม่เกิน 4 ดังนั้น I จะไม่มีโอกาสเพิ่มขึ้นถึง 10 ซึ่งทำให้เกิดการวนซ้ำไม่รู้จบ

2. ไม่ควรเปลี่ยนค่าตัวนับการวนซ้ำเพราะเป็นการเขียนโปรแกรมที่ไม่ดี

ตัวอย่าง

PROGRAM EXAM5;
VAR J:INTEGER;
BEGIN
FOR J:= 1 TO 10 DO
BEGIN
WRITELN(‘J= ‘,J);
READLN(J);
END;
END.

ข้อมูลที่ป้อนคือ 2, 4, 6, 8 และ 10

ผลลัพธ์

J = 1
2
J = 3
4
J = 5
6
J = 7
8
J = 9
10
J = 11
^C
(กด ctrl คู่กับ C)

3. ถ้ามีการกำหนดค่าตัวแปรเป็นค่าคงที่มาก่อน การเปลี่ยนค่าตัวนับในการวนซ้ำจะไม่มีผลต่อการนับการวนซ้ำ

เช่น X:=3;

FOR I:= 1 TO X DO
BEGIN
X:=X+1;
WRITELN(I,X:7);
END;

ผลลัพธ์

1 4
2 5
3 6

4. ไม่ควรกำหนดค่าเริ่มต้นมากกว่าค่าสุดท้าย

เช่น

FOR I:=20 TO 2 DO
WRITELN(‘IS WRITTEN’);

     ในภาษาปาสคาล ค่าเริ่มต้นและค่าสุดท้ายเป็นไปได้ทั้งค่าคงที่, ตัวแปร หรือนิพจน์

ตัวอย่าง

PROGRAM EXAM6;
VAR I, DAYOFWEEK : INTEGER;
BEGIN
WRITE(‘ENTER DAY OF WEEK:’);
READLN(DAYOFWEEK);
FOR I:= 1 TO 3*DAYOFWEEK DO
WRITELN(‘How are you today?’);
END.

ผลลัพธ์

ENTER DAY OF WEEK : 2
How are you today?
How are you today?
How are you today?
How are you today?
How are you today?
How are you today?

สรุป

     คำสั่ง FOR จะต้องมีการกำหนดค่าเริ่มต้นและค่าสุดท้ายก่อน การวนซ้ำเครื่องจะทำการวนซ้ำในช่วงของคำสั่งที่ต้องการไปเรื่อง ๆ จนถึงค่าสุดท้าย การเพิ่มและลดของการวนซ้ำ ปกติจะเป็นขั้น ขั้นละ 1 เสมอ ถ้าต้องการวนซ้ำเป็นช่วง ๆ หลายคำสั่งให้เริ่มช่วงนั้นด้วย BEGIN และจบด้วย END;


แบบฝึกหัด
เรื่อง คำสั่ง FOR


1. จงแสดงผลลัพธ์ของโปรแกรมต่อไปนี้
FOR I:= 1 TO 5 DO
WRITE(‘I AM’);
WRITELN(‘A STUDENT’);
2. จงหาว่า K มีค่าเป็นเท่าใด
2.1 K:=0
FOR I:=10 DOWNTO 1 DO
K:=K+1;
2.2 K:=15
FOR I:=1 TO K DO
K:=K+1;
3. จงเขียนโปรแกรมเพื่อพิมพ์รหัส ชื่อ ตำแหน่ง ของพนักงานในบริษัทแห่งหนึ่งจำนวน 15 คน
4. จงเขียนโปรแกรมอ่านค่ารหัส ชื่อ อัตราค่าจ้างต่อชั่วโมง จำนวนชั่วโมงการทำงานของพนักงานจำนวน 15 คน แล้วคำนวณหาค่าแรงงาน โดยกำหนด output ดังนี้

EMPLOYEE NO.       NAME      HOUR       RATE      TOTALPAY
         311247                MANIT        100              50               5000
             .
             .
             .
             .
             .
             .
             .

5. จงเขียนโปรแกรมเพื่อให้อ่านค่า M แล้วคำนวณหาผลรวมของ 1 ถึง M
5.1 M = 15
5.2 M = 50
6. จงเขียนโปรแกรมเพื่อหาผลรวมและค่าเฉลี่ยของเลขคี่ ตั้งแต่ 1-40