การเขียนโปรแกรมแบบก าหนด...
TRANSCRIPT
อาจารย์ พิศิษฐ์ นาคใจมหาวิทยาลัยราชภัฎอตุรดิตถ์
การเขียนโปรแกรมแบบก าหนดเงื่อนไข
2
4 การเขียนโปรแกรมแบบก าหนดเงื่อนไข
• ในการเขียนโปรแกรมส าหรับงานส่วนใหญ่ จ าเป็นต้องมีการทดสอบเงื่อนไขบางอย่างก่อน เพื่อตัดสินในเลือกการท างานของโปรแกรมในอันดับถัดไป
• ค าสั่งควบคุมการท างานของโปรแกรมที่นิยมใชม้ีอยู่ 2 ค าสั่ง คือ ค าสั่ง if และ ค าสั่ง if … else ซึ่งจะพิจารณาเลือกกระท าหรือไม่กระท าจากการพิสูจน์นิพจน์ว่าเป็น จริง หรอื เท็จ
• โดยจะใช้ควบคู่กับเครื่องหมายเปรียบเทียบ และเครื่องหมายทางตรรกะศาสตร์
3
4.1 การเปรียบเทียบ
เคร่ืองหมาย การเปรียบเทยีบ ตัวอย่าง== เท่ากบั x == y
!= ไม่เท่ากบั x != y
> มากกว่า x > y
>= มากกว่าหรือเท่ากบั x >= y
< น้อยกว่า x < y
<= น้อยกว่าหรือเท่ากบั x <= y
ผลของการเปรียบเทียบจะได้ค่าจริง (ค่าที่ไม่ใช่ 0) หรือค่าเท็จ (ค่าที่เป็น 0)
4
การใชง้านเคร่ืองหมายการเปรียบเทียบ
การเปรียบเทยีบ ผลทีไ่ด้
7 == 9 False
7 != 9 True
8 > 8 False
8 >= 8 True
(10+9)<7 False
4 <= 3 False
การเปรียบเทียบ ผลทีไ่ด้
22 == 22 True
(3+5)!=8 False
9 > 7 True
7 >= 9 False
7<(10+9) True
3 <= 4 True
ไม่ควรใช้เครื่องหมายเท่ากับ == หรือไม่เท่ากับ != ส าหรับข้อมูลทศนิยม
5
4.2 เครื่องหมายทางตรรกศาสตร์
เคร่ืองหมาย ความหมาย ตัวอย่าง
&& และ (and) x && y
|| หรือ (or) x || y
! ไม่ หรือ ตรงกนัข้าม (not) !x
6
การใชง้านเคร่ืองหมายทางตรรกศาสตร์
การด าเนินการ ผลทีไ่ด้T && T T
T && F F
F && T F
F && F F
การด าเนินการ ผลทีไ่ด้T || T T
T || F T
F || T T
F || F F
การด าเนินการ ผลทีไ่ด้!T F
!F T
7
การใชง้านเคร่ืองหมายทางตรรกศาสตร์
int num1 = 10, num2 = 20, num3 = 30;
num1 == num2
num1 > num2
(num1<num2) && (num2<num3)
(num1>num2) || (num1>num3)
True
False
False
False
(num1>num2) || (num2<num3) True
8
4.2 การใช้ค าสั่ง if
if (expression)statement;
if (expression){
statement-1.1;statement-1.2;...statement-1.n;
}
9
การใช้ค าสั่ง if กับนิพจน์
int a = ;int b = ;if (a>b){
statement 1;statement 2;statement n;
}printf();
a = ;b = ;
a > b
statement 1;statement 2;statement 3;
True
False
10
โปรแกรม 4.1 ตรวจสอบคะแนน
จงเขียนผังงานและโปรแกรมรับช่ือนามสกุล รหัสนักศึกษา คะแนนสอบรวม และคะแนนเต็ม หากนักศึกษาสอบได้มากกว่า 60% ให้แสดงผลชื่อ นามสกุล รหัสนักศึกษา คะแนน และผลสอบว่าผ่าน
• Output Analysis– แสดงผลชื่อ-สกลุ รหัสนักศึกษา คะแนนสอบ ผลสอบ
11
โปรแกรมตรวจสอบคะแนน
• Input Analysis– ชื่อ / นามสกุล / รหัสนักศึกษา / คะแนนสอบ / คะแนนเต็ม
• Process Analysis– โปรแกรมรอรับชื่อ / นามสกุล / รหัสนักศึกษา / คะแนนสอบ / คะแนนเต็ม
– ตรวจสอบว่าคะแนนมากกว่าหรือเท่ากับ 60 % หรือไม่• ถ้าจริง แสดงผลชื่อ-สกุล รหัสนักศึกษา คะแนน และแสดงว่าสอบผ่าน
12
โปรแกรมตรวจสอบคะแนน
• Variable Definefirst : ตัวแปรชนิดข้อความส าหรับเก็บชื่อขนาด 20
last : ตัวแปรชนิดข้อความส าหรับเก็บนามสกุลขนาด 20
id : ตัวแปรชนิดข้อความส าหรับเก็บรหัสนักศึกษาขนาด 9
point : ตัวแปรชนิดจ านวนทศนิยมส าหรับเก็บคะแนนรวม
full : ตัวแปรชนิดจ านวนทศนิยมส าหรับเก็บคะแนนเตม็
13
โปรแกรมตรวจสอบคะแนน
END
"passed"
False
True
point/full>=0.6
point, full
first, last, id
first, last, id,point, full
START
1
1
14
โปรแกรมตรวจสอบคะแนน
#include<stdio.h>int main(){
char first[20], last[20], id[9];float point,full;
printf ("Enter your Name : ");scanf ("%s",first);printf ("Enter your Surname : ");scanf ("%s",last);printf ("Enter your ID : ");scanf ("%s",id);
15
โปรแกรมตรวจสอบคะแนน
printf ("Enter your examination points : ");scanf ("%f",&point);printf ("Enter your total points : ");scanf ("%f",&full);if ((point/full) >= 0.6){
printf ("Name : %s %s\n",first,last);printf ("ID : %s\n",id);printf ("Examination points : %f / %f\n",point,full);printf ("You passed, Congratulation\n");
}return 0;
}
16
4.3 การใช้ค าสั่ง if-else | ภายในเงื่อนไขมีค าสัง่เดียว
if (expression)statement-1;
elsestatement-2;
17
4.4 การใช้ค าสั่ง if-else | ภายในเงื่อนไขมีหลายค าสั่ง
if (expression){
statement-1.1;statement-1.2;...statement-1.n;
}else{
statement-2.1;statement-2.2;...statement-2.n;
}
18
โปรแกรม4.2 หารเลข 2 จ านวน
จงเขียนผังงานและโปรแกรมหารเลข 2 จ านวน โดยโปรแกรมต้องตรวจสอบได้ว่าตัวหารเป็น "0" หรือไม่
• Output Analysis– แสดงผลหารของเลข 2 จ านวน
– แสดงผลว่าไม่สามารถหารได้เพราะตัวหารเป็นศูนย์
• Input Analysis– ตัวตั้ง และตัวหาร
19
โปรแกรมหารเลข | if-else
END
num1/num2
False
True
num2 != 0
num2
num1
num1, num2
START
"Error"
1
1
20
โปรแกรมหารเลข | if-else
#include<stdio.h>int main(){
float num1,num2;printf ("Enter number 1 : ");scanf ("%f",&num1);printf ("Enter number 2 : ");scanf ("%f",&num2);if (num2 != 0)
printf ("%.2f / %.2f = %.2f",num1,num2,num1/num2);else
printf ("Error divided by zero\n");return 0;
}
21
4.4 การใช้ค าสั่ง if-else if | ภายในเงื่อนไขมีค าสั่งเดียว ลักษณะผูกกัน
if (expression-1)statement-1;
else if (expression-2)statement-2;......
else if (expression-m)statement-m;
elsestatement-m+1;
22
การใช้ค าสั่ง if-else if | ภายในเงื่อนไขมีหลายค าสัง่
if (expression-1){
statement-1.1;...
statement-1.n;}else if (expression-2){
statement-2.1;...statement-2.n;
}......
...else if (expression-m){
statement-m.1;...
statement-m.n;}else{
statement-m+1.1;...statement-m+1.n;
}
23
โปรแกรม 4.3 ตรวจสอบเกรด A ถึง F
จงเขียนผังงานและโปรแกรมส าหรับรับชื่อ นามสกุล รหัสนักศึกษา และคะแนนวิชา Computers and Programming เพื่อตรวจสอบว่านักศึกษาได้เกรดระดับใด โดยใช้เกณฑ์ดังนี้
คะแนน 90 – 100 ได้เกรด A คะแนน 80 – 89.99 ได้เกรด B
คะแนน 70 – 79.99 ได้เกรด C คะแนน 60 – 69.99 ได้เกรด D
คะแนน 0 – 59.99 ได้เกรด F
แล้วแสดงผลลัพธ์ ชื่อ สกุล รหัสนักศึกษา คะแนน และเกรด
24
โปรแกรมตรวจสอบเกรด | if-else if
• Output Analysis– แสดงชื่อ นามสกุล รหัสนักศึกษา คะแนน และเกรดที่ได้
• Input Analysis– ชื่อ / นามสกุล / รหัสนักศึกษา / คะแนน
• Process Analysis– โปรแกรมรอรับชื่อ / นามสกุล / รหัสนักศึกษา / คะแนนสอบ
– แสดงผลชื่อ-สกลุ รหัสนักศึกษา และคะแนน
25
โปรแกรมตรวจสอบเกรด | if-else if
• Process Analysis (ต่อ)– ตรวจสอบคะแนนสอบ
• ถ้ามากกว่าหรือเท่ากับ 90 แสดงผลว่าได้เกรด A
• ถ้ามากกว่าหรือเท่ากับ 80 แสดงผลว่าได้เกรด B
• ถ้ามากกว่าหรือเท่ากับ 70 แสดงผลว่าได้เกรด C
• ถ้ามากกว่าหรือเท่ากับ 60 แสดงผลว่าได้เกรด D
• ถ้าไม่ตรงเงื่อนไขที่ผ่านมาทั้งหมด แสดงผลว่าได้เกรด F
26
โปรแกรมตรวจสอบเกรด | if-else if
• Variable Definefirst : ตัวแปรชนิดข้อความส าหรับเก็บชื่อขนาด 20
last : ตัวแปรชนิดข้อความส าหรับเก็บนามสกุลขนาด 20
id : ตัวแปรชนิดข้อความส าหรับเก็บรหัสนักศึกษาขนาด 9
point : ตัวแปรชนิดจ านวนเต็มส าหรับเก็บคะแนน
27
โปรแกรมตรวจสอบเกรด | if-else if
first, last, id, point
first, last, id, point
"Grade A"
START
first, last, id, point
a b
True
False
point>=90
28โปรแกรมตรวจสอบเกรด | if-else if
"Grade C"
True "Grade D"
False
END
"Grade F"
point>=60
True
False
point>=70
True
False
point>=80 "Grade B"
ab
29
4.4 การใช้ค าสั่ง switch
...case constant-expr-m:
statement-m.1;statement-m.2;...statement-m.n;break;
default:statement-d.1;statement-d.2;...statement-d.n;
}
switch (expression-1){case constant-expr-1:
statement-1.1;statement-1.2;...statement-1.n;break;
case constant-expr-2:statement-2.1;statement-2.2;...statement-2.n;break;
...
...
30
การใช้ค าสั่ง switch | Flowchart
31
ตัวอย่างการใช้ค าสั่ง switch
#include<stdio.h> int main() { int d;
printf("Enter a number from 1 to 9: "); scanf("%d", &d); switch (d)
{case 1: puts("A stitch in time saves nine.");
break; case 2:case 6:case 9: puts("Handsome is as handsome does.");
break; default: puts("Very clever. Try again.");
}return 0;
}
32
ตัวอย่างการใช้ค าสั่ง switch
#include<stdio.h> int main() { int d; printf("Enter a number from 1 to 9: "); scanf("%d", &d); switch (d) { case 1: puts("A stitch in time saves nine."); break; case 2: break; case 6: break; case 9: puts("Handsome is as handsome does."); break;
default: puts("Very clever. Try again."); }
return 0;}
33
โจทย์ : โปรแกรมตรวจสอบสถานะการเรียน
จงเขียนผังงาน และโปรแกรมรับค่า GPA ของภาคการศึกษาทีผ่่านมาแล้วแสดงผลสถานะการเรียน โดยมีเงื่อนไขดังนี้– GPA < 1.00 แสดงสถานะ Retried (พ้นสภาพ) จบโปรแกรม– GPA < 2.00 แสดงสถานะ Probation (ภาคทัณฑ์)– GPA >= 2.00 แสดงสถานะ Normal (ปกติ)
หลังจากแสดงสถานะแล้วใหโ้ปรแกรมรับค่า GPA ของภาคการศึกษาปัจจุบัน ท าการหาค่าเฉลี่ยของ GPA แล้วแสดงผลสถานะ การเรียนตามเงื่อนไข
GPA(เฉลี่ย) < 1.00 แสดงสถานะ Retried (พ้นสภาพ) GPA(เฉลี่ย) < 2.00 แสดงสถานะ Probation (ภาคทณัฑ์)GPA(เฉลี่ย) >= 2.00 แสดงสถานะ Normal (ปกต)ิ
34
โจทย์ : โปรแกรมตรวจสอบสถานะการเรียน
– ตัวอย่างการรันโปรแกรมEnter GPA (past) : 0.74
Your Status : RetiredSorry, Try again.
Enter GPA (past) : 1.50Your Status : Probation
Enter GPA (present) : 3.00Your Status : Normal
Enter GPA (past) : 2.25Your Status : Normal
Enter GPA (present) : 1.75Your Status : Probation
Enter GPA (past) : 1.25Your Status : Probation
Enter GPA (present) : 0.50Your Status : Retired
Enter GPA (past) : 1.50Your Status : Probation
Enter GPA (present) : 2.25Your Status : Probation
การบ้าน
1. โปรแกรมเครื่องคิดเลขที่มีตัวอย่างผลการรันดังต่อไปนี้
35
Enter Num1 : 3Enter Num2 : 6Calculator Menu :
1. +2. –3. *4. /5. %
Choose menu : 1Ans: Num1 + Num2 = 9
Enter Num1 : 4Enter Num2 : 6Calculator Menu :
1. +2. –3. *4. /5. %
Choose menu : 5Ans: Num1 % Num2 = 0
Enter Num1 : 7Enter Num2 : 5Calculator Menu :
1. +2. –3. *4. /5. %
Choose menu : 2Ans: Num1 % Num2 = 2
เขียน Source code ด้วยลายมือลงใน กระดาษ A4
การบ้าน
2. ให้เขียนโปรแกรม ตรวจสอบเลขที่รับเข้ามาว่าเป็นเลขเต็มบวก เลขเต็มลบ หรือ ศูนย์
ตัวอย่างการรันโปรแกรม
36
Enter Num : 0Ans: Zero
Enter Num : -1Ans: Negative
Enter Num : 1Ans: Positive
Enter Num : 7Ans: Positive
Enter Num : -0Ans: Zero
เขียน Source code ด้วยลายมือลงใน กระดาษ A4
การบ้าน
3. ต้องการเขียนโปรแกรมโดยใช้ค าสั่ง Switch เพื่อก าหนดจ านวนวันที่ ที่จะต้องมีในแต่ละเดือน โดยก าหนดให้ตัวแปร month เก็บค่าล าดับที่ของเดือน ตัวแปร day คือจ านวนวันที่ต้องมีในแต่ละเดือน และตัวแปร name คือชื่อเดือนเป็นภาษาอังกฤษ(เดือนที่ 2 ก าหนดให้มี 28 วัน)
Enter Month : 1Ans: January 31 Day
Enter Month : 5Ans: May 31 Day
Enter Month : 12Ans: December 31 Day
Enter Month : 4Ans: April 30 Day
Enter Month : 6Ans: June 30 Day
เขียน Source code ด้วยลายมือลงใน กระดาษ A4
การบ้าน
4. ต้องการเขียนโปรแกรม ให้รับค่าจากแป้นพิพพ์ เป็นตัวเลข จากนั้นให้ค านวณตัวเลขว่าตัวเลขตรงกับวันใดในสัปดาห์ เช่น เลข 1 ตรงกับวัน Sundayเลข 2 ตรงกับวัน Mondayเลข 3 ตรงกับวัน Tuesdayเลข 4 ตรงกับวัน Wednesdayเลข 5 ตรงกับวัน Thursdayเลข 6 ตรงกับวัน Fridayเลข 7 ตรงกับวัน Saturday
Enter Day : 1Ans: Sunday
Enter Day : 5Ans: Thursday
Enter Day : 7Ans: Saturday
การบ้าน
5. ต้องการเขียนโปรแกรม ตรวจสอบอายุ ให้รับค่าอายุจากแป้นพิพพ์ โดยมีเงื่อนไขดังนี้
ถ้าอายุน้อยกว่า 18 ปี ให้พิมพ์ “Your age less than 18 years old ” ออกทางจอภาพ ถ้ามากกว่า หรือเท่ากับ 18 ให้พมิพ ์“Your age more than 18 years old”
How old are you : 18Your age more than 18 years old
How old are you : 15Your age less than 18 years old
How old are you : 20Your age more than 18 years old