PowerPoint - ee.eng.cmu.ac.th

Download Report

Transcript PowerPoint - ee.eng.cmu.ac.th

Week 4
If and If-else
(Control Structure 1)
Outline
• Flowchart ผังงานในการเขียนโปรแกรม
• การเขียนโปรแกรมแบบมีทางเลือก และรูปแบบเงือ่ นไข
• การเขียนโปรแกรมโดยใช้ If-Else Statements
• การเขียนโปรแกรมโดยใช้ Switch Statement
2
Flowchart
• Flowchart ถือเป็ นเครือ่ งมือทีช่ ว่ ยในการอธิบายความคิดและ
แสดงตรรกะของผูเ้ ขียนโปรแกรมต่อผูอ้ ่านโปรแกรม
• มีลกั ษณะเป็ นแผนภาพเพือ่ แสดงการทางานของโปรแกรม
• แบบเป็ นลาดับ (Sequence)
• แบบแสดงทางเลือก (Selection)
• แบบทาซ้า (Iteration) โดยอาศัยสัญลักษณ์มาตรฐาน (Symbols)
• Flowchart เปรียบเสมือนการเขียนแบบแปลนของอาคาร ซึง่ ควรจะมี
การออกแบบ่ก่อนทีจ่ ะลงมือก่อสร้าง
• ในการพัฒนาโปรแกรมควรทีจ่ ะมี Flowchart ก่อนลงมือเขียนโปรแกรม
โดยเฉพาะ เมือ่ โปรแกรมขนาดใหญ่ หรือมีผพู้ ฒ
ั นาหลายคน
3
Flowchart : Symbols
สัญลักษณ์มาตรฐานในการเขียน Flowchart
Terminal Symbol - จุดเริม่ ต้น หรือจุดสิน้ สุดของ
โปรแกรม
Process Symbol - แทนคาสังทั
่ วไป
่ เช่น การ
คานวณ หรือการกาหนดค่าต่างๆ
Input and Output Symbol - แทนคาสังที
่ ม่ รี บั ค่าเข้า
สูโ่ ปรแกรม หรือทีม่ กี ารแสดงผลลัพธ์
Decision Symbol - แทนคาสังที
่ ต่ อ้ งมีการตัดสินใจ
โดยจะมีทางเลือกสองทาง ขึน้ อยูก่ บั ผลการตัดสินใจซึง่
อาจเป็ น true หรือ false
4
Flowchart : Symbols (contd.)
Connector Symbol - แสดงจุดเชือ่ มของโปรแกรม
A
A
Link Symbol - แสดงการเชือ่ มต่อระหว่างส่วนของ
โปรแกรม เช่น กรณีใช้หลายหน้ากระดาษเพือ่ แสดง
Flowchart
Function Symbol - แสดงส่วนของ Function ทีเ่ รียกใช้
โดยรายละเอียดของ Function จะถูกแสดงทีอ่ ่นื
Flow line - ทิศทางของลูกศรใช้แสดงลาดับการทางานของ
Flowchart ซึง่ จะเรียงลาดับจากบนลงล่าง
ลูกศรชีจ้ ากล่างขึน้ บนแสดงการทาซ้าหรือวนลูป
5
Example 1 : Flowchart
• การนารถยนต์เข้าศูนย์บริการ
• ตรวจสอบข้อมูลอายุรถยนต์ (Age)
• ตรวจระยะเดินทางทีร่ ถวิง่ (Mileage)
• พิจารณาว่ารถมีอายุมากกว่า 2 ปี หรือ
มีระยะเดินทางมากกว่า 200,000 กม.
หรือไม่
• หากเงือ่ นไขอันใดอันหนึ่งจริง เจ้าของรถ
จะนารถเข้าศูนย์ฯ
• หากไม่จริงทัง้ 2 อย่าง เจ้าของรถจะไม่นา
รถเข้าศูนย์ฯ
• หลังจากนัน้ ไม่วา่ เลือกทางใด ถือเป็ นอัน
สิน้ สุดกระบวนการ
Get car's
Age
START
YES
Perform car service
Get car's
Mileage
IF
Age > 2 OR
Mileage > 200,000
NO
STOP
Not perform car service
6
Selection
• ชุดคาสัง่ (Statement) ในโปรแกรมจะทางานในลักษณะ ลาดับก่อนหลัง
(Sequential) นันคื
่ อ ทาคาสังที
่ ่ 1 ตามด้วย 2, 3 และ 4 ไปเรือ่ ยๆ
• แต่บางครัง้ การเขียนโปรแกรมจาเป็ นต้องมี ทางเลือก (Selection) เช่นใน
ตัวอย่าง 1 โดยอาศัย เงือ่ นไข (Condition) ในการพิจารณาการกระทา
• เงือ่ นไขจะถูกแสดงด้วยรูปแบบ (expression) ซึง่ แบ่งเป็ น 2 ลักษณะ
ได้แก่
• Relational Expression
• Logical Expression
7
Relational Expression
• การประเมิน (Evaluate) ความสัมพันธ์วา่ สอดคล้องตาม Relational
Operator ทีก่ าหนดหรือไม่
• Relational Operators:
Relational
operator
ความหมาย
<
น้อยกว่า
มากกว่า
น้อยกว่าหรื อเท่ากับ
มากกว่าหรื อเท่ากับ
เท่ากับ
ไม่เท่ากับ
>
<=
>=
==
!=
• ตัวอย่าง :
 age < 18
 temperature >= 38.3
 Grade != 0
8
Relational Expression (Contd.)
• ตัวอย่างการใช้ทไ่ี ม่ถกู ต้อง:
•
•
•
•
•
a
a
a
a
a
=< b
< = b
>> b
= b
= = b-1
//
//
//
//
//
out of order
space is not allowed
refers shift expression
assignment statement
space is not allowed
• Note: โดยปกติตวั เลขทีค่ อมพิวเตอร์จดั เก็บนัน้ มีความละเอียดจากัด
• ในการเปรียบเทียบ x < x+y ซึง่ เมือ่ x = 0 จะเทียบเท่ากับ 0 < y ในทางคณิตศาสตร์
• หาก x และ y เป็ นตัวแปรชนิดจานวนเต็ม เช่น int ความสัมพันธ์น้จี ะเป็ น true
• หาก x และ y เป็ นตัวแปรทศนิยม เช่น float ซึง่ รองรับตาแหน่งหลังทศนิยมได้ไม่มาก
• แล้ว x เป็ นตัวแปรชนิด float ทีม่ คี า่ มาก เช่น 7e+33
• และ y เป็ นตัวแปรชนิด float ทีม่ คี า่ น้อย เช่น 0.0001
• x < x+y อาจเป็ น false เนื่องจากอาจมีคา่ สองข้างเท่ากัน
9
Logical Expression
• การประเมิน (Evaluate) ความสัมพันธ์ทาง ตรรกะ (Logic)
• Logical operators:
Logical operator
ความหมาย
!
นิเสธ (NOT, negation)
&&
Logic AND
||
Logic OR
10
Logical Expression (Contd.)
• ตัวอย่างตารางแสดงการประเมินค่าทางตรรกะของ AND และ OR
การประเมินของ expression
exp1
exp2
exp1 && exp2
exp1 || exp2
False
False
False
False
False
True
False
True
True
False
False
True
True
True
True
True
11
Logical Expression (Contd.)
•
การประเมินค่าทางตรรกะ จะหยุดทันทีที่รู้วา่ ผลลัพธ์เป็ นจริ งหรื อเท็จ หรื อ
เรี ยกว่า “short-circuit evaluation” นัน่ คือประเมินค่า expression เช่นใน
กรณี ต่อไปนี้
• EXPR1 && EXPR2 – (Logical AND)
•
ถ้า EXPR1 มีค่าเป็ น False แล้ว การประเมินค่า EXPR2 จะไม่เกิดเนื่องจาก
compiler รู ้ทน
ั ทีวา่ && จะให้ผลลัพธ์เป็ น False
• EXPR1 || EXPR2 – (Logical OR)
•
ถ้า EXPR1 มีค่าเป็ น True แล้ว การประเมินค่า EXPR2 จะไม่เกิดเนื่องจาก compiler
รู ้ทนั ทีวา่ || จะให้ผลลัพธ์เป็ น True
12
if Statement
Entry
if (condition)
statement;
next-statement;
statement อย่างง่ายทีส่ ดุ จะประเมิน
expression ทีเ่ ป็ น condition
• หากเงือ่ นไขเป็ น true จะทางานที่
statement จบแล้วจึงทางานต่อที่
Expr
True
statement
False
• if
next-statement
• หากเป็ น false จะข้ามไปทางานตามคาสังใน
่
next-statement
statement
ซึง่ ถูกวางอยูถ่ ดั จาก
Exit
If-Single Statement
Flowchart
13
Example 2 : if Statement
• โปรแกรมคานวณหาค่าสัมบูรณ์ (Absolute value) ของจานวนเต็ม
• Note: ไม่ใช้คาสัง่ abs() ทีม่ อี ยูใ่ น header ไฟล์ทช่ี ่อื cmath
14
if Compound Statement
if (condition) {
statement1;
statement2;
...
}
next-statement;
Entry
Expr
True
statement1
False
statement2
• ถ้า condition มีคา่ เป็ น true จะทางานใน
ทุกๆ statement ดังทีเ่ ป็ นส่วนหนึ่งของ
compound statement แล้วจึงออกไปทางานที่
next-statement ต่อไป
• หากเป็ น false จะข้ามไปทางานทีค่ าสัง่
next-statement
• อาศัย { … } ในการกาหนดขอบเขตของ
compound statement
Exit
If-multiple statement
Flowchart
15
Example 3 : if Compound Statement
• จากตัวอย่างที่ 2 เราสามารถแก้ไขส่วนของโปรแกรม (if-statement)
เพือ่ คานวณค่าสัมบูรณ์ (Absolute value) ของข้อมูล
• โดยหากข้อมูลมีคา่ น้อยกว่าศูนย์ ให้คานวณค่าสัมบูรณ์ และเพิม่ ค่าดังกล่าวไป
เท่ากับ 10
16
if-else Statement
Entry
if (condition) {
statement1;
statement2;
…
} else {
statement3;
statement4;
…
}
next-statement;
• หาก condition เป็ น true จะทา
statement3
False
Expr
True
statement4
compound statement 1,2,…
• หาก condition เป็ น false จะทา
compound statement 3,4,…
• จากนัน้ จึงทางานใน next-statement
statement1
statement2
Exit
If-Else Statement
Flowchart
17
Example 4 : if-else Statement
• โปรแกรมคานวณการแปลงอุณหภูมใิ นแบบเซลเซียสและแบบฟาเรนไฮท์
18
if-else if Statement
• If-else-if statement มีไว้สาหรับกรณีม ี statement มากกว่า 1
statement ถูกผูกเข้าด้วยกันโดย else ซึง่ เป็ นทางเลือกมากกว่า 2
ทางเลือก
Entry
if (condition1)
statement1;
else if (condition2)
statement2;
else if (condition3)
statement3;
else
default;
next-statement;
False
Expr1
True
statement1
False
Expr2
False
Expr3
True
True
statement2
statement3
Default
Exit
19
Example 5 : if-else if Compound Statement
• โปรแกรมแสดงข้อความตามชัน้ ปี
ของนักศึกษา เช่น
• ชัน้ ปี 1 พิมพ์วา่ “Freshman”
• ชัน้ ปี 2 พิมพ์วา่ “Sophomore”
• ชัน้ ปี 3 พิมพ์วา่ “Junior”
• ชัน้ ปี 4 พิมพ์วา่ “Senior”
• ชัน้ ปี อ่นื ๆ พิมพ์วา่ “Super”
20
Nested if Statement
statement เป็ นการเขียนโปรแกรมในลักษณะทีม่ กี าร
ใช้ if statement ซ้อนกัน เพือ่ แสดงการกระทาแบบเงือ่ นไขซ้อนเป็ น
Entry
ชัน้ ๆ ดังเช่นในตัวอย่างนี้
• Nested if
if (condition1)
statement1;
if (condition 2)
statement2;
else
statement3;
else
statement4;
next-statement;
if ที่ซ้อนอยู่ด้านใน
True
Expr1
False
statement1
Expr2
False
statement4
True
statement2
statement3
Exit
21
Example 6 : Nested if Compound Statement
• โปรแกรมรับค่าเลขจานวนเต็ม 2 จานวน แล้วตรวจสอบว่าเลขตัวแรกว่าอยูใ่ นช่วง 0-9 และ
ตรวจเลขตัวทีส่ องว่าอยูใ่ นช่วง 10-99 หรือไม่ และแสดงผลการตรวจสอบดังกล่าวบนหน้าจอ
22
Switch Statement
• switch statement
มีไว้สาหรับกรณีมที างเลือกมากกว่า 1 ทาง
เหมือนกับกรณีของ if-else-if statement
switch (expression)
{
case const1Expr:
statement11;
statement12;
…
break;
case const2Expr:
statement21;
statement22;
…
break;
…
default:
statement-d1;
statement-d2;
…
}
next-statement;
• สังเกตว่าจะมี break statement
ในทุกๆกรณี เพือ่ ทาการหยุดและ
ออกจาก switch
• ยกเว้นกรณีสดุ ท้ายคือ default
23
Example 7 : switch Statement
• การใช้ switch statement ในกรณีมบี าง case ทีม่ ี statement
เหมือนกัน
24
Summary
• Flowchart คือผังภาพแสดงงานและการทางานของโปรแกรม
• อาจเป็ นแบบลาดับ (Sequence), ทางเลือก (Selection), หรือ ทาซ้า (Iteration)
• มีประโยชน์ในการทาความเข้าใจกับการทางานของโปรแกรมทีม่ ขี นาดใหญ่
• ใช้ตรวจสอบการทางานก่อนทาการลงมือเขียนโปรแกรมจริง
• การเขียนโปรแกรมแบบมีทางเลือก ทาได้โดยการระบุเงือ่ นไขทีต่ อ้ ง
ทดสอบก่อนการทาตามทางเลือก
• ระบุคาสังที
่ ต่ อ้ งการให้ถูกกระทาเมือเงือ่ นไขเป็ นจริงหรือเท็จ
• เงือ่ นไข (Condition) คือรูปแบบ (expression) ทีจ่ ะถูกทดสอบเพือ่ การ
ตัดสินใจ แบ่งเป็ น Relational expression และ Logical expression
25
Summary
• คาสังในการสร้
่
างทางเลือก ได้แก่
• if
ถ้า เงือ่ นเป็ นจริง ทา
• if–else
ถ้า เงือ่ นไขเป็ นจริง แล้ว ทา มิฉะนัน้ ทา
• if–else if
• Switch
ถ้า เงือ่ นไขเป็ นจริง แล้ว ถ้า เงือ่ นไขเป็ นจริง ทา
(ทางานเหมือน if – else – if)
26
Lab 4 – if Clause
• Lab 4.1 :
• จงหาค่าความจริงของนิพจน์ต่อไปนี้
เมือ่ i
= 3, k = 5, j = 0, m = -2, n = ‘c’
นิพจน์
ค่ าของนิพจน์
j
(!i<--i)&&(i<5)
3*i-4%2/k<2+m
(j>k) || (m<i)
!c + m
1 < k < 10
27
Lab 4 – if Clause (Contd.)
• Lab 4.2 : จงเขียนโปรแกรมตัวอย่างที่ 7 ใหม่ โดยการแทนทีค่ าสัง่ switch ด้วย
คาสัง่ if
• Lab 4.3 : จงเขียน Flowchart สาหรับโปรแกรมเกม เปา่ ยิง้ ฉุ บ สาหรับผูเ้ ล่น 2 คน
• โปรแกรมเริม่ ทางานโดยรอให้ผเู้ ล่นคนแรกออกท่า
• จาก 1 ใน 3 ท่า : กรรไกร กระดาษ และ ก้อนหิน
• โปรแกรมจะรอรับการออกท่าจากผูเ้ ล่นคนทีส่ อง
• ทาการตัดสิน และประกาศผลว่าใครเป็ นผูช้ นะ หรือ เสมอ หรือ
• ถ้ามีผใู้ ช้คนหนึ่งคนใดออกท่าผิดไปจากท่ามาตรฐาน ให้โปรแกรมแจ้งผูเ้ ล่นว่า การแข่งขัน
ครัง้ นี้เป็ นโมฆะ และโปรแกรมจบการทางาน
28
Lab 4 – if Clause (Contd.)
• Lab 4.4 : จงเขียนโปรแกรมเพือ่ สร้างเกม เปา่ ยิง้ ฉุ บ ตามรายละเอียดใน Lab 4.3
ให้ศกึ ษาตัวอย่างการแสดงผลต่อไปนี้เพือ่ เขียนโปรแกรมเกมเปา่ ยิง้ ฉุบทีท่ างาน
ตามทีโ่ จทย์กาหนด
Pao-Ying-Chup Game for 2 players
Player #1: Please enter your move (‘p’ for paper, ‘r’
for rock or ‘s’ for scissors) : p
Player #2: Please enter your move (‘p’ for paper, ‘r’
for rock or ‘s’ for scissors) : r
Paper vs. Rock => Player #1 wins.
Game Ends.
Press any key to continue . . .
29
Lab 3 – if Clause (Contd.)
• ตัวอย่างการแสดงผลเกม เปา่ ยิง้ ฉุ บ
Pao-Ying-Chup Game for 2 players
Player #1: Please enter your move (‘p’ for paper, ‘r’
for rock or ‘s’ for scissors) : P
Player #2: Please enter your move (‘p’ for paper, ‘r’
for rock or ‘s’ for scissors) : t
Paper vs. ??? => Invalid Play. No Player wins.
Game Ends.
Press any key to continue . . .
30