การเขียนคําสัง
ควบคุมแบบวนซํา
เครืองหมายการคํานวณทางคณิตศาสตร์
การดําเนินการพืนฐานทีสุดทังในชีวิตประจําวันและในการเขียนโปรแกรมก็คือ การคํานวณ
ทางคณิตศาสตร์ ซึงถือได้ว่าเป็นการดําเนินการทีต้องกระทําอยู่บ่อยครัง โดยเครืองหมายทีใช้ใน
การคํานวณทางคณิตศาสตร์ในภาษาC แสดงตารางดังต่อไปนี
ตัวอย่างการใช้เครืองหมายการคํานวณทางคณิตศาสตร์ในภาษา C แสดงตัวอย่างดังต่อไปนี$
เมือสังรันโปรแกรมจะปรากฏผลการทํางานดังรูปต่อไปนี$
เครืองหมายการคํานวณทางคณิตศาสตร์ประเภทเพิมหรือลดค่า
เครืองหมายการคํานวณทางคณิตศาสตร์ประเภทของการเพิมหรือลดค่าลงทีละหนึง แสดงดัง
ตารางต่อไปนี
สําหรับเครืองหมายประเภทเพิมหรือลดค่านี ต้องระวังลําดับก่อนหลังของเครืองหมายให้ดี
ถ้าเครืองหมายอยู่ด้านหน้าตัวแปร เช่น z =++x หรือ z =--x นันหมายถึง ให้เพิมหรือลดค่า
ของ x ก่อนทีจะกําหนดค่าให้กับตัวแปร z ส่วนถ้าเครืองหมายอยู่ด้านหลัง เช่น z = x++ หรือ z
=x— คือการกําหนดค่าของ x ให้กับ z ก่อนทีจะเพิมหรือลดค่าของ x เพือความเข้าใจให้ดูผลลัพธ์
ของโปรแกรมต่อไปนี
เมือสังรันโปรแกรมจะปรากฏผลการทํางานดังรูปต่อไปนี$
เครืองหมายการคํานวณทางคณิตศาสตร์ประเภทลดรูป
นอกจากเครืองหมายคํานวณตามปกติ และเครืองหมายคํานวณแบบเพิม/ลดค่า
แล้ว การคํานวณทางคณิตศาสตร์ในภาษา Cยังมีเครืองหมายประเภททีเรียกว่า ลดรูปอีกด้วย
ดังแสดงรายละเอียดในตารางต่อไปนี
เครืองหมายทางตรรกศาสตร์
เครืองหมายตรรกศาสตร์เป็นการหาผลลัพธ์โดยใช้หลักการทางตรรกศาสตร์ ส่วนใหญ่มักใช้ใน
ระบบคอมพิวเตอร์ หรือระบบเกียวกับวงจรไฟฟ้ า โดยเครืองหมายทางตรรกศาสตร์ทีใช้ในการเขียน
โปรแกรมภาษา c มีอยู่ 3 ชนิดคือ && (and) , || (or) และ ! (not)
ผลลัพธ์จาการดําเนินการทางตรรกศาสตร์โดยใช้เครืองหมายทัง 3 ชนิด แสดงดังตารางต่อไปนี
โดยกําหนดให้ T แทนค่าทีเป็นจริง และ F แทนค่าทีเป็นจริง
ทําความรู้จักนิพจน์ (Expression)
นิพจน์คือ การนําข้อมูลซึงอาจจะอยู่ในรูปของค่าคงทีหรือตัวแปรมาดําเนินการโดย
ใช้เครืองหมายต่างๆ เป็นตัวสังงาน สําหรับนิพจน์ทีเราพบเห็นกันทัวไปใน
ชีวิตประจําวัน ยกตัวอย่างดังต่อไปนี
5+3=8
B2-4bax2+bx+c
R2
2xy-4
การเขียนนิพจน์ในภาษา C
นิพจน์ในภาษา C ก็คือการนําข้อมูลและตัวแปรในภาษา c มาดําเนินการต่อ
ด้วยเครืองหมายทางคณิตศาสตร์ ตรรกศาสตร์ หรือเครืองหมายเปรียบเทียบใน
ภาษา c เป็นตัวสังงาน
นิพจน์ทางคณิตศาสตร์
การเขียนนิพจน์ทางคณิตศาสตร์ในภาษา c จะเหมือนกับการเขียนนิพจน์ทางคณิตศาสตร์ตามปกติ
เพียงแต่เปลียนมาใช้เครืองหมายทางคณิตศาสตร์ของภาษา c แทน ซืงต้องระวังเครืองหมายบางตัวทีใช้ไม่
เหมือนกัน อย่างเช่น การคูณจะใช้เครืองหมาย * แทน x หรือหารจะใช้เครืองหมาย/แทน
ตัวอย่างกรเขียนนิพจน์ทางคณิตศาสตร์ในภาษา c แสดงดังต่อไปนี
นิพจน์ทางตรรกศาสตร์
การเขียนนิพจน์ตรรกศาสตร์ในภาษา c ก็คือ การเขียนนิพจน์โดยใช้เครืองหมายการดําเนินการทาง
ตรรกศาสตร์ในภาษา c (&&)||, !) เป็นตัวสังงาน ซึงส่วนใหญ่แล้วนิพจน์ทางตรรกศาสตร์จะ
อยู่ร่วมกับนิพจน์อืนๆ
ตัวอย่างนิพจน์ทางตรรกศาสตร์พร้อมทังผลลัพธ์จากการดําเนินการ แสดงดังตาราง
ต่อไปนี โดยกําหนดให้ตัวแปร a=25, b=-124และc=0
ลําดับของเครืองหมายในการคํานวณ
ส่วนใหญ่นิพจน์ทีเขียนขึนในโปรแกรมมักจะมีความซับซ้อน มีการดําเนินการหลายอย่าง
ปะปนอยู่ภายในนิพจน์เดียวกัน ยกตัวอย่างเช่น a/b+15*c หรือ(a-b)*10/c&& d+5 ซึง
ผลลัพธ์จะออกมาเป็นอย่างไรนัน ต้องพิจารณาลําดับความสําคัญก่อนหลังของเครืองหมายที
ภาษา c กําหนดไว้ให้ ดังแสดงในตารางต่อไปนี
การเปลียนชนิดของตัวแปร
ถ้านําตัวแปรต่างชนิดมาดําเนินการร่วมกัน ยกตัวอย่างเช่น int + float หรือ int – char การทีจะ
ดําเนินการตามเครืองหมายได้นัน จะต้องเปลียนชนิดของตัวแปรให้เป็นชนิดเดียวกันก่อน โดยวีธีการ
เปลียนตัวแปรในภาษา c จะเรียกการ Cadting ซึงมีอยู่ 2 รูปแบบด้วยกันคือ เปลียนโดยอัตโนมัติ
และเปลียนโดยคําสัง
เปลียนชนิดของตัวแปรโดยอัตโนมัติ
วิธีเปลียนโดยอัตโนมัติจะเรียกว่า Implicit casting เราไม่ต้องทําอะไร ตัวแปรภาษา c จะจัดการให้
ทังหมด โดยใช้หลักการเปลียนชนิดของตัวแปรทีขนาดเล็กกว่าไปตามชนิดของตัวแปรทีมีขนาดใหญ่กว่าดัง
ตัวอย่างต่อไปนี
การนําตัวแปรต่างชนิดมาดําเนินการร่วมกัน ซึงมีการเปลียนชนิดของตัวแปรโดย
อัตโนมัติ ดังแสดงตัวอย่างดังต่อไปนี$
เปลียนชนิดของตัวแปรโดยคําสัง
การเปลียนชนิดของตัวแปรโดยคําสังจะเรียกว่า Explicit castint เป็นการใช้คําสังเพือเปลียนชนิด
ของตัวแปร เราสามารถเลือกชนิดของตัวแปรทีการจะเปลียนไปใช้ได้ โดยรูปแบบคําสังแสดงดังนี
ตัวอย่างการเขียนคําสังเพือเปลียนชนิดของตัวแปรและข้อมูล แสดงดังต่อไปนี$
เมือสังรันโปรแกรมจะปรากฏผลการทํางานดังรูปต่อไปนี$
FOR StatementFOR StatementFOR StatementFOR Statement
• FOR เป็นคําสังทีสังให้คอมพิวเตอร์ทํางานวนซํ$าหลาย ๆ ครั$ง
จนกว่าจะครบรอบตามทีเรากําหนด
• รูปแบบที 1
FOR ตัวแปร := ค่าเริมต้น TO ค่าสุดท้าย DO
คําสังทีให้ทํางานซํ$า ;
• รูปแบบที 2
FOR ตัวแปร := ค่าเริมต้น DOWNTO ค่าสุดท้าย DO
คําสังทีให้ทํางานซํ$า ;
FOR StatementFOR StatementFOR StatementFOR Statement
• ตัวอย่าง
FOR i := 1 TO 5 DO
Writeln(i);
• ผลลัพธ์
1
2
3
4
5
พิมพ์ค่าในตัวแปร i ทีละรอบ
START
FOR i =1,5
Writeln(i)
i
STOP
FOR StatementFOR StatementFOR StatementFOR Statement
• ตัวอย่าง การกําหนดค่าเริมต้นและค่าสุดท้าย ในรูปตัวแปร
readln(First , Last);
FOR I := First TO Last DO
writeln(i);
• ตัวอย่าง การกําหนดค่าเริมต้นและค่าสุดท้าย ในรูปนิพจน์ทาง
คณิตศาสตร์
j := 3; k := 10;
FOR i := j+1 TO k-2 DO
writeln(i);
ค่าเริมต้นของ i มีค่า j+1 คือ 4
และค่าสุดท้ายของ i มีค่า k-2 คือ 8
• ในกรณีต้องการให้คอมพิวเตอร์ประมวลผลคําสังใน FOR มากกว่า 1 คําสัง ให้ใช้
คําสัง compound ภายในลูป FOR ดังนี
Final : = 5;
FOR i := 1 TO Final Do
BEGIN
write(‘Hello ’);
write(‘No. ’);
writeln(i);
END; {สินสุดคําสังภายใน FOR}
FOR (compound) StatementFOR (compound) StatementFOR (compound) StatementFOR (compound) Statement
compound
statement
FOR StatementFOR StatementFOR StatementFOR Statement
• ตัวอย่าง การกําหนดค่าเริมต้นและค่าสุดท้าย เป็นชนิดอักขระ
FOR Letter := ‘A’ TO ‘E’ DO
writeln(Letter);
• ผลลัพธ์ คือ
A
B
C
D
E
ต้องประกาศตัวแปร Letter เป็นชนิด char ดังนี
VAR Let : Char;
FOR Statement(Downto)FOR Statement(Downto)FOR Statement(Downto)FOR Statement(Downto)
• DOWNTO เป็นคําสังทีให้ลดรอบการทํางานทีละค่า เช่น
FOR i := 5 DOWNTO 1 DO
writeln(‘Hello ’ , i);
• ผลลัพธ์ คือ
Hello 5
Hello 4
Hello 3
Hello 2
Hello 1
FOR Statement(Downto)FOR Statement(Downto)FOR Statement(Downto)FOR Statement(Downto)
• ตัวอย่าง การใช้ DOWNTO กับข้อมูลชนิดอักขระ
FOR Letter := ‘Z’ DOWNTO ‘N’ DO
write(Letter);
• ผลลัพธ์ คือ
ZYXWVUTSRQPON
การประยุกต์คําสัง FOR
• ตัวอย่าง1 ให้บวกเลขตั$งแต่ 1 ถึง N โดยรับค่า N จากผู้ใช้
• ตัวอย่างผลลัพธ์
Input last number => (รอรับค่า N)
The sum is (แสดงค่าใน sum ซึงเป็นผลรวม)
• ตัวอย่าง Source code
write(‘Input last number =>’); readln(N);
FOR i := 1 TO N DO
sum := sum + i;
writeln(‘The sum is ’ , sum);
การประยุกต์คําสัง FOR
• ตัวอย่าง2 ให้หาค่า N!(Factorial) โดยรับค่า N จากผู้ใช้ หากป้ อน N
เป็น 3 คําตอบคือ 6 เนืองจาก 3*2*1 = 6
• ตัวอย่างผลลัพธ์
Input Factorial number => (รอรับค่า N)
The factorial of (ค่า N) is (แสดงค่าใน fac ซึงเป็นผลคูณ)
• ตัวอย่าง Source code
fac := 1; {กําหนดค่าเริมต้นให้ fac =1 ถ้าไม่กําหนด fac จะมีค่าเริมต้นเป็น 0}
write(‘Input factorial number =>’); readln(N);
FOR i := 1 TO N DO
fac := fac * i;
writeln(‘The factorial of ‘ , N ,’ is ’ , fac);
การประยุกต์คําสัง FOR
• ตัวอย่าง3 ให้พิมพ์แม่สูตรคูณ 12 บรรทัด โดยรับแม่สูตรคูณจากผู้ใช้
• ตัวอย่างผลลัพธ์
Input multiply number => (รอรับค่า N สมมติรับแม่ 10)
10 * 1 = 10
10 * 2 = 20
…
10 * 12 = 120
• ตัวอย่าง Source code
write(‘input multiply number => ’); readln(N);
FOR I := 1 TO 12 DO
BEGIN
Mul := N * i;
writeln(N , ‘ * ‘ , i ,’ = ‘ , Mul);
END;
การประยุกต์คําสัง FOR
• ตัวอย่าง4 ให้หาค่าเฉลียของคะแนนสอบของนักศึกษา โดยให้กําหนด
จํานวนนักศึกษาจากผู้ใช้
• ตัวอย่างผลลัพธ์
Input number of student => (รอรับค่า Num จํานวนนศ.)
*************************************************
******
Input score of student 1 => (รอรับค่า score)
Input score of student 2 => (รอรับค่า score)
…
Input score of student n => (รอรับค่า score)
The average score is (แสดงค่าใน average ซึงเป็นค่าเฉลียของคะแนนทังหมด)
• Source code
write(‘Input number of student =>’);
readln(num);
sum := 0;
FOR i := 1 TO Num DO
BEGIN
write(‘Input score of student ’ , i , ‘=> ’);
readln(score);
sum := sum + score;
END;
Average := sum / Num;
writeln(‘The average score is ’ , Average:6:2);
การประยุกต์คําสัง FOR
• ตัวอย่าง5 จากตัวอย่าง4 ให้หาคะแนนสูงสุดในการสอบครั$งนี$
• ตัวอย่างผลลัพธ์
Input number of student => (รอรับค่า Num จํานวนนศ.)
*************************************************
******
Input score of student 1 => (รอรับค่า score)
Input score of student 2 => (รอรับค่า score)
…
Input score of student n => (รอรับค่า score)
The average score is (แสดงค่าใน average ซึงเป็นค่าเฉลียของคะแนนทังหมด)
The Top score is (แสดงค่าใน Max ซึงเป็นคะแนนสูงสุด)
• Source code
write(‘Input number of student =>’);
readln(num);
sum := 0;
Max := 0;
FOR i := 1 TO Num DO
BEGIN
write(‘Input score of student ’ , i , ‘=> ’);
readln(score);
sum := sum + score;
IF score > Max THEN
Max := score;
END;
Average := sum / Num;
writeln(‘The average score is ’ , Average:6:2);
writeln(‘The top score is ’ , Max:6:2);
คําสัง FOR ซ้อนใน FOR
(Nested FOR Statement)
• ตัวอย่าง การพิมพ์ 1 – 4 จํานวน 3 ชุด
FOR i := 1 TO 3 DO {ลูปนอก outer Loop}
FOR j := 1 TO 4 DO {ลูปใน inner Loop}
writeln(j);
• ผลลัพธ์
1
2
3
4
1
2
3
4
1
2
3
4
คําสัง FOR ซ้อนใน FOR
(Nested FOR Statement)
• ตัวอย่าง การพิมพ์ 1 – 4 จํานวน 3 ชุด
FOR i := 1 TO 3 DO {ลูปนอก outer Loop}
BEGIN
FOR j := 1 TO 4 DO {ลูปใน inner Loop}
write(j);
writeln;
END;
• ผลลัพธ์
1234
1234
1234
START
FOR i =1,3
Write(j)
j
STOP
FOR j =1,4
WriteLn
i
คําสัง FOR ซ้อนใน FOR
(Nested FOR Statement)
• ตัวอย่าง6 การพิมพ์ * เป็นรูปสามเหลียมมุมฉาก 10 แถว
FOR i := 1 TO 10 DO {ลูปนอก outer Loop}
BEGIN
FOR j := 1 TO i DO {ลูปใน inner Loop}
write(‘*’);
writeln;
END;
• ผลลัพธ์
*
**
***
****
*****
******
*******
********
*********
**********
WHILE StatementWHILE StatementWHILE StatementWHILE Statement
• คําสัง while เป็นคําสังทีควบคุมคอมพิวเตอร์ให้ทํางานวนซํา
เช่นเดียวกับ FOR
• โดยเงือนไขในการวนซํา จะถูกควบคุมโดยนิพจน์บูลีน(ให้ผล จริง หรือ
เท็จ)
• จะมีการตรวจสอบเงือนไขก่อน ถ้านิพจน์มีค่าเป็นจริง จะให้ไปทํางานใน
คําสังทําซํา และกลับมาตรวจเงือนอีกครัง
• ถ้านิพจน์เงือนไขเป็นเท็จ จึงจะหยุดการทํางานซํา
WHILE StatementWHILE StatementWHILE StatementWHILE Statement
• รูปแบบ 1
WHILE นิพจน์บูลีน DO
คําสังทําซํา ; {ให้ทํากรณีนิพจน์มีค่า จริง}
• รูปแบบ 2
WHILE นิพจน์บูลีน DO
BEGIN {ให้ทํากรณีนิพจน์มีค่า จริง}
คําสังทําซํา 1 ;
คําสังทําซํา 2 ;
….
คําสังทําซํา n ;
END;
จริง
เท็จ
จริง
เท็จ
WHILE StatementWHILE StatementWHILE StatementWHILE Statement
• ตัวอย่าง ให้พิมพ์คําว่า Hello จํานวน N บรรทัด ค่า N ถูกป้ อนโดย
ผู้ใช้
Readln(N);
i := 1; {กําหนดรอบเริมต้นให้กับตัวแปร i}
WHILE i <= N DO
BEGIN
writeln(‘HELLO’);
i := i + 1; {เพิมรอบการทํางานให้ตัวแปร i}
END;
WHILE StatementWHILE StatementWHILE StatementWHILE Statement
• ตัวอย่าง ให้หาผลบวกของเลขจํานวนเต็มทีเป็นเลขคี ตังแต่ 1 – N รับค่า N จาก
ผู้ใช้
Readln(N);
i := 1; {กําหนดรอบเริมต้นให้กับตัวแปร i}
WHILE i <= N DO
BEGIN
sum := sum + i;
i := i + 2; {เพิมรอบการทํางานให้ตัวแปร i }
END;
Writeln(‘The sum of odd number from 1 to ’,N, ‘ is ’, sum);
ตัวเฝ้ ายาม (Sentinel – Controlled Loops)
• ตัวเฝ้ ายาม(sentinel) หรือ ตัวดัมมี(Dummy) เป็น
ค่าทีใช้หยุดรอบการทํางานวนซํ$า
• เช่น พิมพ์เลข 999 ให้หยุดการทํางานซํ$า
While Num <> 999 DO
• เช่น กดตัวอักษร y หรือ Y ให้หยุดการทํางานซํ$า
While (ans<> ‘y’) OR (ans<> ‘Y’) DO
การประยุกต์ใช้ WHILE…DO
• ตัวอย่าง 1 จงเขียน
โปรแกรมเพือคํานวณ
ผลรวมของจํานวนเต็ม
บวกไม่จํากัดจํานวน ดัง
flowchart ต่อไปนี
START
Read(num)
Num <> -1
sum = sum + num
Read(num)
yes
write(sum)
STOP
no
• Source code
sum := 0;
write(‘Input number =>’); readln(num);
WHILE num <> -1 DO
BEGIN
sum := sum + num;
write(‘Input number =>’);
readln(num);
END; {end of while statement}
writeln(‘The sum is ’ , sum);
การประยุกต์ใช้ WHILE…DO
• ตัวอย่าง3 ให้พิมพ์แม่สูตรคูณ 12 บรรทัด โดยรับแม่สูตรคูณจากผู้ใช้
• ตัวอย่างผลลัพธ์
Input multiply number => (รอรับค่า N สมมติรับแม่ 10)
10 * 1 = 10
10 * 2 = 20
…
10 * 12 = 120
• ตัวอย่าง Source code
write(‘input multiply number => ’); readln(N);
I := 1;
WHILE i <= 12 DO
BEGIN
Mul := N * i;
writeln(N , ‘ * ‘ , i ,’ = ‘ , Mul);
i := i + 1;
END;
การประยุกต์ใช้ WHILE…DO
• ตัวอย่าง3 จงเขียน
โปรแกรมเพือคํานวณ
คะแนนเฉลียของ
นักศึกษาไม่จํากัด
จํานวนคน จนกว่าจะ
ป้ อน คะแนนมีค่า 999
ดัง flowchart
ต่อไปนี
START
Read(score)
Score <> 999
sum = sum + score
Read(score)
yes
write(average)
STOP
no
Average = sum / num
Num = 0
Sum = 0
num = num +1
• Source code
sum :=sum :=sum :=sum := 0000;;;;
num :=num :=num :=num := 0000;;;;
write('input scorewrite('input scorewrite('input scorewrite('input score orororor 999999999999 to stopto stopto stopto stop=> ');=> ');=> ');=> ');
readln(score);readln(score);readln(score);readln(score);
while (score <>while (score <>while (score <>while (score <> 999999999999) DO) DO) DO) DO
beginbeginbeginbegin
sum := sum + score;sum := sum + score;sum := sum + score;sum := sum + score;
num := num +num := num +num := num +num := num + 1111 ;;;;
write('input scorewrite('input scorewrite('input scorewrite('input score orororor 999999999999 to stopto stopto stopto stop => ');=> ');=> ');=> ');
readln(score);readln(score);readln(score);readln(score);
end;end;end;end; {end of while statement}
average := sum / num;average := sum / num;average := sum / num;average := sum / num;
writeln('The average score is ' , average:writeln('The average score is ' , average:writeln('The average score is ' , average:writeln('The average score is ' , average:6666::::2222););););
• ตัวอย่าง4 จากตัวอย่าง
3 ให้หาคะแนนสูงสุด
และตําสุด
START
Read(score)
Score <> 999
sum = sum + score
Read(score)
yes
write(average)
STOP
no
Average = sum / num
Num = 0
Sum = 0
Max = 0
num = num +1
Score > Max
Max = score
yes
no
write(Max)
• Source code
sumsumsumsum :=:=:=:= 0000;;;;
numnumnumnum :=:=:=:= 0000;;;;
max :=max :=max :=max := 0000;;;;
writewritewritewrite(((('input score or'input score or'input score or'input score or 999999999999 to stopto stopto stopto stop ====> '> '> '> ')))); readln; readln; readln; readln((((scorescorescorescore))));;;;
whilewhilewhilewhile ((((score <>score <>score <>score <> 999999999999)))) DODODODO
beginbeginbeginbegin
if score > max Thenif score > max Thenif score > max Thenif score > max Then
max := score ;max := score ;max := score ;max := score ; {end of if statement}
sumsumsumsum :=:=:=:= sumsumsumsum ++++ score;score;score;score;
numnumnumnum :=:=:=:= numnumnumnum ++++ 1111 ;;;;
writewritewritewrite(((('input score or'input score or'input score or'input score or 999999999999 to stopto stopto stopto stop ====> '> '> '> ')))); readln; readln; readln; readln((((scorescorescorescore))));;;;
end;end;end;end; {end of while statement}
averageaverageaverageaverage :=:=:=:= sumsumsumsum //// num;num;num;num;
writelnwritelnwritelnwriteln(((('The average score is ' , average'The average score is ' , average'The average score is ' , average'The average score is ' , average::::6666::::2222))));;;;
writeln(‘The top score is ’ , max:writeln(‘The top score is ’ , max:writeln(‘The top score is ’ , max:writeln(‘The top score is ’ , max:6666::::2222););););
คําสัง WHILE ซ้อนใน WHILE
(Nested while statement)
• ตัวอย่างพิมพ์ ตัวเลข 1 – 4 จํานวน 3 ชุด
i := 1;
WHILE i <= 3 DO
BEGIN
j := 1;
WHILE j <= 4 DO
BEGIN
write(j);
j := j + 1;
END;
i := i + 1;
END;
Inner while
loop
Outer while
loop
การทํางานแบบวนซํ3า
การทํางานแบบวนซํา (Loop)เป็นการนําคําสังมาทํางานซําหลายๆ รอบ จะทํางานกีรอบขึนอยู่
กับเงือนไขทีผู้เขียนโปรแกรมกําหนดไว้ซึงอาจจะเป็นการกําหนดจํานวนรอบทีแน่นอน เช่น ตังใจว่า
จะวิงรอบสนาม 3 รอบ คือรู้แน่นอนว่าจะทํางานกีรอบ หรือแบบจํานวนรอบไม่แน่นอน เช่น ตังใจ
ว่าจะวิงรอบสนามไปเรือยๆ เหนือยเมือไหร่จึงจะหยุดวิง คือไม่แน่ชัดว่าจะทํางานกีรอบ
การทํางานซําๆ ในชีวิตประจําวันมีอยู่มากมาย ครูจะขอยกตัวอย่างง่ายๆ ทีนักเรียนทุกๆ คนคงเคยทํา
มาด้วยตนเองแล้ว เช่น
1.นักเรียนอาบนําโดยใช้ขันนําตักราดบนร่างกายหลายๆ ครัง (ทําซํา) จนร่างกาย
สะอาดดีแล้วจึงหยุดอาบนํา (หยุดทําซํา)
2.นักเรียนจัดสมุดหนังสือใส่กระเป๋ าเพือนําไปโรงเรียนทีละเล่ม (ทําซํา) จนครบทุก
วิชาลงในกระเป๋ า จึงหยุดจัดสมุดหนังสือลงประเป๋ า (หยุดทําซํา)
3.นักเรียนรับประทานอาหารโดยตักอาหารเข้าปากหลายๆ คํา (ทําซํา) จนกระทังอิม
แล้ว จึงหยุดรับประทาน (หยุดทําซํา)
สิงทีสําคัญสําหรับการทํางานแบบวนซําในการเขียนโปรแกรมคือ เงือนไข ซึงเงือนไขในทีนี
จะมีลักษณะคล้ายกันกับเงือนไขแบบทางเลือกนันเอง โดยเงือนไขจะเป็นตัวกําหนดว่าจะมีการเข้าไป
ทํางานหรือไม่ ถ้าเงือนไขเป็นจริงก็จะเข้าไปทํางานเมือทํางานเสร็จแล้วก็จะมาตรวจสอบเงือนไขอีก
ครัง และก็จะทํางานไปเรือยๆ ถ้าเงือนไขเป็นจริงอยู่เสมอ โปรแกรมจะหยุดทํางานก็ต่อเมือผลการ
ตรวจสอบเงือนไขในรอบใดรอบหนึงเป็นเท็จดังแผนภาพ
จากแผนภาพ คําสังทีจะถูกทําซําหลายๆ ครังคือคําสัง A ซึงเป็นคําสังทีอยู่ในลูป (Loop) คือใน
ทุกๆ รอบทีทําการตรวจสอบเงือนไข ถ้าเป็นจริงคําสัง A ก็จะถูกกระทําไปเรือยๆ แต่ถ้ารอบใดที
ตรวจสอบแล้วเงือนไขเป็นเท็จก็จะหลุดออกจากการทําซํามาทําตามคําสัง B ทีอยู่นอกลูปของการวน
ซํา
อย่างทีกล่าวไว้แล้วตังแต่ตอนต้นว่าการทําซํามี 2 ลักษณะคือ การทําซําทีมีจํานวนรอบแน่นอน และ
ทีมีจํานวนรอบไม่แน่นอน เพือให้เห็นภาพทีชัดเจนขึน นักเรียนลองดูแผนภาพ ดังต่อไปนี
การทําซํ3าทีมีจํานวนรอบแน่นอน การทําซํ3าทีมีจํานวนรอบไม่แน่นอน
นอกจากนีแล้ว ยังมีรูปแบบของการทําซําอีก 2 รูปแบบทีนักเรียนควรทราบอีกก็คือ การทําซําแบบ
ตรวจสอบเงือนไขก่อนทํา และการทําซําแบบทําซําก่อน 1 รอบแล้วจึงตรวจสอบเงือนไข ดัง
แผนภาพต่อไปนี
การทําซํ3าทีตรวจสอบเงือนไขก่อนทํา
รูปแบบนีก่อนทีจะเข้าไปทําตามคําทีอยู่ในลูป (Loop) คือคําสัง A และ B (ต้องเข้าใจว่า
คําสังทีอยู่ในลูปจะมีกีคําสังก็ได้) โปรแกรมจะทําการตรวจสอบเงือนไขก่อน ถ้าผลลัพธ์เป็นจริง ก็จะ
เข้าไปทําคําสังในลูป แล้ววนขึนมาตรวจสอบเงือนไขใหม่ เป็นอย่างนีไปเรือยๆ ถ้ารอบใดทีพบว่า
เงือนไขเป็นเท็จก็จะจบการทําซํา มาทําตามคําสัง C
รูปแบบนีโปรแกรมจะเข้าไปทํางานในลูปก่อน 1 ครัง แล้วจึงตรวจสอบเงือนไข ถ้าผลลัพธ์เป็นจริง
ก็จะวนกลับขึนไปทําสังในลูปอีกครัง แล้วจึงตรวจสอบเงือนไขใหม่ เป็นอย่างนีไปเรือยๆ ถ้ารอบใด
ทีพบว่าเงือนไขเป็นเท็จก็จะจบการทําซํา มาทําตามคําสัง C
การทําซําทีทําก่อน 1 รอบแล้วจึงตรวจสอบเงือนไข
จริงๆ แล้วการเขียนโปรแกรมถ้าผู้เขียนโปรแกรมมีความเข้าใจเกียวกับการทําซําแล้วก็
สามารถเลือกใช้รูปแบบใดรูปแบบหนึงไปใช้แก้ปัญหาได้อยู่แล้ว นักเรียนจึงไม่ต้องกังวลว่าจะต้อง
ใช้ครบทุกรูปแบบของการทําซํา
ตัวอย่างผังงานต่อไปนี จะเป็นตัวอย่างเชิงโปรแกรมมากขึน ซึงจะเป็นการทําซําโดยให้
แสดงตัวเลขตังแต่ 1 ถึง 10 ออกทางจอภาพ ดังแผนภาพต่อไปนี

งานPPT