การควบคุมให้เลือกทำงาน
if
- then - else
|
|
การใช้ if/then จะใช้เมื่อมีการเลือกกระทำในทางเดียว (one- way selection) และประเมินเงื่อนไขโดยใช้การคำนวณแบบบูลีน(Boolean expression) ว่า "หากเป็นจริงให้ดำเนินการตามประโยคหลัง then" ซึ่งมีรูปแบบทั่วไปดังนี้
ถ้ามีเพียง 1 คำสั่ง "Single Statement"
รูปแบบ
if (เงื่อนไขบูลีน) then <คำสั่ง>
ตัวอย่างการใช้ if - then
uses crt ; var i : integer ; begin clrscr ; write( 'insert i=' ) ; readln( i ) ; if i>10 then write(' i more than 10 ' ) ; readln ; end. |
insert
i= หากใส่ ตัวเลขที่น้อยกว่า 10 หรือใส่ 10 คำสั่งที่อยู่ด้านหลัง then จะไม่ทำงาน หากใส่ตัวเลขที่มากกว่า 10 โปรแกรมจะทำงานดังนี้ i more than 10 |
ถ้ามีการทำงานมากว่า
1 คำสั่ง เราเรียกว่า "
Compound Statement"
หากเราต้องการให้ทำงานมากกว่า
1 คำสั่ง ต้องกั้นหน้าหลัง
ด้วย begin - end ;
สังเกตที่ end
นะค่ะว่า เป็น ; (semi-colon)
ไม่ใช่ . (dot)
uses crt ; var i : integer ; begin clrscr ; write( 'insert i=' ) ; readln( i ) ; if i>10 then begin writeln('condition is true') ; write(' i more than 10 ' ) ; end; readln ; end. |
insert
i= หากใส่ ตัวเลขที่น้อยกว่า 10 หรือใส่ 10 คำสั่งที่อยู่ด้านหลัง then จะไม่ทำงาน หากใส่ตัวเลขที่มากกว่า 10 โปรแกรมจะทำงานดังนี้ condition is true i more than 10 |
Else
หากต้องการให้ทำคำสั่งหนึ่งเมื่อเงื่อนไขเป็นจริงและให้ทำอีกคำสั่งหนึ่งเมื่อเงื่อนไขเป็นเท็จต้องใช้
else ค่ะ
uses crt ; var i : integer ; begin clrscr ; write( 'insert i=' ) ; readln( i ) ; if i>10 then write(' i more than 10 ' ) else write( 'i less than or equal 10' ) ; readln ; end. |
insert
i= หากใส่ตัวเลขที่มากกว่า 10 โปรแกรมจะทำงานดังนี้ i more than 10 หากใส่ ตัวเลขที่น้อยกว่า 10 หรือใส่ 10 จะเป็นดังนี้ i less than or equal 10 |
ให้สังเกตที่
คำสั่ง writeln() ; ก่อน else
นะค่ะว่า จะเว้นไม่ใส่ ;
(semi-colon)
เป็นรูปแบบที่ใช้สำหรับ
else โดยเฉพาะค่ะ
ในตัวอย่างด้านล่างนี้ก็เป็น
การกำหนดว่าหากเงื่อนไขเป็นจริง
ให้เขียนคำตอบ สีฟ้า
และหากเงื่อนไขเป็นเท็จ
ให้เขียนคำตอบ สีเขียว
ให้สังเกตที่ end
ข้างหน้า else ว่าจะไม่ใส่
semi-colon ค่ะ
uses crt ; var i : integer ; begin clrscr ; write( 'insert i=' ) ; readln( i ) ; if i>10 then begin textcolor(11); write(' i more than 10'); textcolor(7); end else begin textcolor(10); write(' i less than 10 or equal 10'); textcolor(7); end; readln ; end. |
insert
i= หากใส่ตัวเลขที่มากกว่า 10 โปรแกรมจะแสดงผล i more than 10 หากใส่ ตัวเลขที่น้อยกว่า 10 หรือใส่ 10 โปรแกรมจะแสดงผล i less than 10 or equal 10 |
คำสั่ง if/then
แบบใช้ซ้อนกัน
การใช้
if/then ซ้อนกันตั้งแต่ 2
ครั้งขึ้นไปจะเกิดขั้นได้เมื่อเราต้องการ
จะใช้เงื่อนไขที่มีความซับซ้อนยิ่งขึ้น
เช่น
if
(X=Y) then
BEGIN
WRTELN('X
and Y are eaual');
if
(X>20) then WRITELN ('X and Y are between 20 and 30 ')
END;
ตัวอย่างนี้เราสามารถใช้ซีนแท็กซ์อย่างอื่นซึ่งเข้าใจง่ายกว่าได้ดังนี้
if
(X=Y) then
BEGIN
WRTELN('X and Y are eaual');
if
(X>20) AND (X<30) then
WRITELN
('X and Y are between 20 and 30 ')
END;
ดังนั้นการใช้
if/then
ที่ซ้อนกันจึงไม่ค่อยจะกระทำกัน
เพราะว่าไม่มีความจำเป็นอะไรเนื่องจากมีวิธีที่สั้นกว่าดังที่ยกตัวอย่าง
เปรียบเทียบให้เห็นแล้ว
จากตัวอย่างข้างต้นนี้จะเห็นว่าเราสามารถจะใช้
if/then กับ AND, OR และ NOT ได้
หากการ
แก้ปัญหาในโปรแกรมต้องใช้เงื่อนไขการเลือกแบบนั้น
เช่นเราอาจจะต้องเลือกกระทำดังตัวอย่างต่อไปนี้
if(SEX
= 'MALE') then
if
(MARRIED > 0) OR (LWA* > O )
then
COUNTER := COUNTER+1 : หรือใช้ AND, OR
ตามตัวอย่างต่อไปนี้ซึ่งก็ได้ผล
เช่นเดียวกับตัวอย่างข้างต้น
if
(SEX = 'MALE') AND ((MARRIED>O) OR (LWS>O)) then
COUNTER
:= COUNTER+1;
คำสั่ง if/then/else (if/then/else statement)
การใช้
if/the/else
จะมีลักษณะเลือกกระทำ
เป็น 2 ทางเลือก (two - way selection)
แต่จะเลือกทำอย่างใดอย่างหนึ่ง
เท่านั้นหลังจากได้ประเมินเงื่อนไขแบบบูลแล้วว่า
หากเป็นจริงตามเงื่อนไขให้ดำเนินการตามประโยคหลัง
then แต่ถ้าไม่จริงให้
ดำเนินการตามประโยคหลัง
else คำสั่ง if / the /else
มีรูปแบบการใช้ดังนี้
รูปแบบ
if (เงื่อนไขบูลีน) then <
คำสั่ง 1 > (*ไม่ต้องใส่เซมิโคลอน*)
else < คำสั่ง 2 >;
ตัวอย่าง
if (X >O) then
WRITELN
('X is greater than zeri.')
else
WRITELN ('X isless than zero or equal.');
อย่างไรก็ตามจากตัวอย่างข้างบนนี้หากจะใช้คำสั่ง
if / then
ก็สามารถจะทำได้โดยโปรแกรมจะยังให้ผลอย่างเดียวกันคือ
if
(X >O) then WRITELN ( 'X is greater than zero.') ;
if
NOT( X >O) then WRITELN ( X is less than zero or equal.') ;
ข้อสังเกตอย่างหนึ่งก็คือ
if NOT ( X > 0) สามารถใช้ if (X <= 0)
ได้ การจะใช้ซีแท็กซ์ใดที่ให้ผลอย่างเดียวกันเป็นความต้องการของโปรแกรมเมอร์แต่ละคน
คำสั่ง
if/then/else แบบใช้ซ้อนกัน
เช่นเดียวกับการใช้
if/then
ซ้อนกันดังที่กล่าวแล้วในข้างต้น
เราสามารถสร้างเงื่อนไขซ้อนกันหลายเงื่อนไขได้โดยใช้รูปแบบของ
if/then/else ดังนี้
รูปแบบ
if
(เงื่อนไขบูลีน 1) then
<คำสั่ง>
else
if(เงื่อนไขบูลีน
2 ) then <คำสั่ง 2>
else
<คำสั่ง
3>;
รูปแบบนี้จะเห็นว่าใช้
if/then/else ซ้อนไปได้เรื่อยๆ
ไม่มีข้อจำกัดอะไรเลยแต่ในกรณีที่มีการซ้อนกันเกินกว่า
2
ครั้งเราจะมีวิธีอื่นใช้แทนวิธีนี้คือ
ใช้คำสั่ง case/of
ซึ่งจะกล่าวต่อไป
ข้อที่จะต้องระมัดระวังการใช้
if/then/else
ก็คือการใช้เครื่องหมาย
;
เพราะหลังประโยคหรือคำสั่งที่อยู่ก่อนหน้า
else จะใส่เครื่องหมาย ;
ไม่ได้
กล่าวคือภาษาปาสคาลถือว่ายังเป็นประโยคเดียวกันถ้าท่านลืมซีนแท็กซ์นี้ใส่เครื่องหมายดังกล่าวคอมไพเลอร์จะแสดงความ
ผิดพลาดให้รู้
Logical
Operators
|
uses crt ; var i : integer ; begin clrscr ; write( 'insert i=' ) ; readln( i ) ; if ( i > 10 ) and ( i < 50 ) then write( ' i more than 10 AND i less than 50' ) ; readln ; end. |
โปรแกรมจะ
รอรับค่า i insert i = ถ้า i มากกว่า 10 และ i น้อยกว่า 50 โปรแกรมจะ แสดง i more than 10 AND i less than 50 แต่ถ้า ไม่เป็นไปตามเงื่อนไข คือ i ไม่ได้อยู่ระหว่าง 10 ถึง 50 โปรแกรมจะ ไม่แสดงข้อความ |
uses crt ; var i : integer ; k : integer ; begin clrscr ; write( 'insert i=' ) ; readln( i ) ; write( 'insert k=' ) ; readln( k ) ; if ( i > 10 ) and ( i > k ) then i := i - k ; write( 'i=', i ) ; readln ; end. |
โปรแกรมจะ
รอรับค่า i
และค่า k
ตามลำดับ insert i = insert k = ถ้า i มากกว่า 10 และ i มากกว่า k โปรแกรมจะ นำค่า i ไปลบค่า k และเก็บผลลัพธ์ที่ได้ ไว้ที่ตัวแปร i แต่ถ้า ไม่เป็นไปตามเงื่อนไข คือ i ไม่มากกว่า 10 หรือ i ไม่มากกว่า k อย่างใดอย่างหนึ่ง หรือไม่ตรงกับเงื่อนไขทั้งสองกรณี i ก็ยังคงมีค่าเท่ากับตอนที่เราป้อนค่า ทางคีร์บอร์ด หลังจากตรวจสอบเงื่อนไขแล้ว โปรแกรมจะแสดง i = ผลลัพธ์ |
uses crt ; var i : integer ; k : integer ; begin clrscr ; write( 'insert i=' ) ; readln( i ) ; write( 'insert k=' ) ; readln( k ) ; if ( i > 10 ) and ( i > k ) then begin i := i - k ; write( ' i - k = ', i ) ; end else begin i := i + k ; write( ' i + k= ', i ) ; end; readln ; end. |
โปรแกรมจะ
รอรับค่า i
และค่า k
ตามลำดับ insert i = insert k = ถ้า i มากกว่า 10 และ i มากกว่า k โปรแกรมจะ นำค่า i ไปลบค่า k และเก็บผลลัพธ์ที่ได้ ไว้ที่ตัวแปร i และจะแสดง i - k = ผลลัพธ์ แต่ถ้า ไม่เป็นไปตามเงื่อนไข คือ i ไม่มากกว่า 10 หรือ i ไม่มากกว่า k อย่างใดอย่างหนึ่ง หรือไม่ตรงกับเงื่อนไขทั้งสองกรณี โปรแกรมจะทำตาม คำสั่งข้างหลัง ELSE คือ นำ i ไปบวก k แล้วเก็บค่าไว้ในตัวแปร i และจะแสดง i + k = ผลลัพธ์ |
ตัวอย่างการใช้ OR(1)
ตัวอย่างการใช้ OR(2)
ตัวอย่างการใช้ XOR
|
uses crt ; var i : integer ; begin clrscr ; write( 'insert i=' ) ; readln( i ) ; if not ( i=25 ) then write( ' i is not 25' ); readln ; end. |
โปรแกรมจะ
รอรับค่า i insert i = align=absmiddle> หากว่า i ไม่เท่ากับ 25 โปรแกรมจะแสดง i is not 25 |
uses crt ; var i : integer ; begin clrscr ; write( 'insert i=' ) ; readln( i ) ; if ( i > 10 ) and not ( i=25 ) then write( 'i more than 10 AND i is not 25' ); readln ; end. |
โปรแกรมจะ
รอรับค่า i insert i = align=absmiddle> หากว่า i มากกว่า 10 และ i ไม่เท่ากับ 25 โปรแกรมจะแสดง i more than 10 AND i is not 25 |
uses crt ; var i : integer ; begin clrscr ; write( 'insert i=' ) ; readln( i ) ; if ( i > 10 ) and ( i <> 25 ) then write( 'i more than 10 AND i is not 25' ); readln ; end. |
โปรแกรมจะ
รอรับค่า i insert i = align=absmiddle> หากว่า i มากกว่า 10 และ i ไม่เท่ากับ 25 โปรแกรมจะแสดง i more than 10 AND i is not 25 |