FOR StatementFOR StatementFORStatementFOR Statement
• FOR เป็นคําสังทีสังให้คอมพิวเตอร์ทํางานวนซํ$าหลาย ๆ ครั$ง
จนกว่าจะครบรอบตามทีเรากําหนด
• รูปแบบที 1
FOR ตัวแปร := ค่าเริมต้น TO ค่าสุดท้าย DO
คําสังทีให้ทํางานซํ$า ;
• รูปแบบที 2
FOR ตัวแปร := ค่าเริมต้น DOWNTO ค่าสุดท้าย DO
คําสังทีให้ทํางานซํ$า ;
19.
FOR StatementFOR StatementFORStatementFOR Statement
• ตัวอย่าง
FOR i := 1 TO 5 DO
Writeln(i);
• ผลลัพธ์
1
2
3
4
5
พิมพ์ค่าในตัวแปร i ทีละรอบ
START
FOR i =1,5
Writeln(i)
i
STOP
20.
FOR StatementFOR StatementFORStatementFOR 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
21.
• ในกรณีต้องการให้คอมพิวเตอร์ประมวลผลคําสังใน 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
22.
FOR StatementFOR StatementFORStatementFOR Statement
• ตัวอย่าง การกําหนดค่าเริมต้นและค่าสุดท้าย เป็นชนิดอักขระ
FOR Letter := ‘A’ TO ‘E’ DO
writeln(Letter);
• ผลลัพธ์ คือ
A
B
C
D
E
ต้องประกาศตัวแปร Letter เป็นชนิด char ดังนี
VAR Let : Char;
23.
FOR Statement(Downto)FOR Statement(Downto)FORStatement(Downto)FOR Statement(Downto)
• DOWNTO เป็นคําสังทีให้ลดรอบการทํางานทีละค่า เช่น
FOR i := 5 DOWNTO 1 DO
writeln(‘Hello ’ , i);
• ผลลัพธ์ คือ
Hello 5
Hello 4
Hello 3
Hello 2
Hello 1
24.
FOR Statement(Downto)FOR Statement(Downto)FORStatement(Downto)FOR Statement(Downto)
• ตัวอย่าง การใช้ DOWNTO กับข้อมูลชนิดอักขระ
FOR Letter := ‘Z’ DOWNTO ‘N’ DO
write(Letter);
• ผลลัพธ์ คือ
ZYXWVUTSRQPON
25.
การประยุกต์คําสัง 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);
26.
การประยุกต์คําสัง 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);
27.
การประยุกต์คําสัง 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;
28.
การประยุกต์คําสัง 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 ซึงเป็นค่าเฉลียของคะแนนทังหมด)
29.
• Source code
write(‘Inputnumber 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);
30.
การประยุกต์คําสัง 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 ซึงเป็นคะแนนสูงสุด)
31.
• Source code
write(‘Inputnumber 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);
32.
คําสัง 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
33.
คําสัง 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
34.
คําสัง 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;
• ผลลัพธ์
*
**
***
****
*****
******
*******
********
*********
**********
35.
WHILE StatementWHILE StatementWHILEStatementWHILE Statement
• คําสัง while เป็นคําสังทีควบคุมคอมพิวเตอร์ให้ทํางานวนซํา
เช่นเดียวกับ FOR
• โดยเงือนไขในการวนซํา จะถูกควบคุมโดยนิพจน์บูลีน(ให้ผล จริง หรือ
เท็จ)
• จะมีการตรวจสอบเงือนไขก่อน ถ้านิพจน์มีค่าเป็นจริง จะให้ไปทํางานใน
คําสังทําซํา และกลับมาตรวจเงือนอีกครัง
• ถ้านิพจน์เงือนไขเป็นเท็จ จึงจะหยุดการทํางานซํา
36.
WHILE StatementWHILE StatementWHILEStatementWHILE Statement
• รูปแบบ 1
WHILE นิพจน์บูลีน DO
คําสังทําซํา ; {ให้ทํากรณีนิพจน์มีค่า จริง}
• รูปแบบ 2
WHILE นิพจน์บูลีน DO
BEGIN {ให้ทํากรณีนิพจน์มีค่า จริง}
คําสังทําซํา 1 ;
คําสังทําซํา 2 ;
….
คําสังทําซํา n ;
END;
จริง
เท็จ
จริง
เท็จ
37.
WHILE StatementWHILE StatementWHILEStatementWHILE Statement
• ตัวอย่าง ให้พิมพ์คําว่า Hello จํานวน N บรรทัด ค่า N ถูกป้ อนโดย
ผู้ใช้
Readln(N);
i := 1; {กําหนดรอบเริมต้นให้กับตัวแปร i}
WHILE i <= N DO
BEGIN
writeln(‘HELLO’);
i := i + 1; {เพิมรอบการทํางานให้ตัวแปร i}
END;
38.
WHILE StatementWHILE StatementWHILEStatementWHILE 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);
39.
ตัวเฝ้ ายาม (Sentinel– Controlled Loops)
• ตัวเฝ้ ายาม(sentinel) หรือ ตัวดัมมี(Dummy) เป็น
ค่าทีใช้หยุดรอบการทํางานวนซํ$า
• เช่น พิมพ์เลข 999 ให้หยุดการทํางานซํ$า
While Num <> 999 DO
• เช่น กดตัวอักษร y หรือ Y ให้หยุดการทํางานซํ$า
While (ans<> ‘y’) OR (ans<> ‘Y’) DO
40.
การประยุกต์ใช้ WHILE…DO
• ตัวอย่าง1 จงเขียน
โปรแกรมเพือคํานวณ
ผลรวมของจํานวนเต็ม
บวกไม่จํากัดจํานวน ดัง
flowchart ต่อไปนี
START
Read(num)
Num <> -1
sum = sum + num
Read(num)
yes
write(sum)
STOP
no
41.
• 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);
42.
การประยุกต์ใช้ 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;
43.
การประยุกต์ใช้ 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
44.
• 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););););
45.
• ตัวอย่าง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)
46.
• 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););););
47.
คําสัง 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