Computer Programming การเขียนโปรแกรม คอมพิวเตอร์ สัปดาห์ที่ 6 คำสั่งควบคุมการทำงานแบบ เงื่อนไขและคำสั่งควบคุมการ ทำงานแบบวนซ้ำ
objectives เพื่อให้นิสิตรู้จักและเข้าใจคำสั่งควบคุมการ ทำงานแบบวนซ้ำในภาษาซี สามารถเขียนโปรแกรมภาษาซีโดยใช้คำสั่ง เพื่อให้คอมพิวเตอร์ทำงานแบบวนซ้ำได้ สามารถเขียนโปรแกรมภาษาซีให้มีทำงาน แบบวนซ้ำและกำหนดเงื่อนไขร่วมกันได้ สามารถนำความรู้เรื่องคำสั่งควบคุมการ ทำงานแบบวนซ้ำและกำหนดเงื่อนไขไป ประยุกต์เพื่อแก้ไขโจทย์ปัญหาใน ชีวิตประจำวันได้ได้อย่างถูกต้องเหมาะสม
Outline Switch 1 p p 2 Break & Continue 3 Assignment #6 4 For Loop
... 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;... Switch Condition Control Statement (1)
Condition Statement 2-1; Statement 2-2; …. Statement 2-n; Statement 1-1; Statement 1-2; …. Statement 1-n; Statement m-1; Statement m-2; …. Statement m-n; Statement 3-1; Statement 3-2; …. Statement 3-n; กรณี 1 กรณี 2กรณี 3Default Switch Condition Control Statement (2)
Example of Switch Control Statement(1) #include 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; }
#include 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; } Example of Switch Control Statement(2)
#include int main() { int color = 1; printf("Please choose a color(1: red,2: green,3: blue):\n"); scanf("%d", &color); switch (color) { case 1: printf("you chose red color\n"); break; case 2: printf("you chose green color\n"); break; case 3: printf("you chose blue color\n"); break; default: printf("you did not choose any color\n"); } return 0; } Example of Switch Control Statement(3)
Why need iteration loop? เหตุการณ์ที่เกิดขึ้นหลายรอบ เช่น โปรแกรมแสดง ชื่อ 20 ครั้ง เหตุการณ์ที่เกิดขึ้นหลายรอบ โดยมีการ เปลี่ยนแปลงค่า หรือมีเงื่อนไข เช่น แสดงผลเลข 0, 1, 2, …, 10 แสดงผลรวมของ 1,3,5,7, …, 99 แสดง ชื่อ ไปเรื่อย ๆ จนกว่าค่า X จะมากกว่า 30
Example 1 Example: จงเขียนผังงานและโปรแกรมเพื่อ แสดงตัวเลข ออกทางหน้าจอ Output Analysis แสดงผลเลข 0, 1, 2, …, 10 Input Analysis ไม่มี Process Analysis โปรแกรมแสดงผลเลข 0, 1, 2, …,10 Variable Define ไม่ใช้ ( หรือใช้ count เพื่อเพิ่มค่า )
Example 1 (cont.) #include int main() { printf ("0\t"); printf ("1\t"); printf ("2\t"); printf ("3\t"); printf ("4\t");... printf ("10\t"); return 0; } #include int main() { int count = 0; printf ("%d\t",count++);... printf ("%d\t",count++); return 0; }
Outline Switch 1 p p 2 Break & Continue 3 Assignment #6 4 For Loop
Structure of Iteration Loop Condition การปรับปรุงค่า (Modification) การทำงานภายในวงรอบ (Execution) การทดสอบเงื่อนไข (Condition) การกำหนดค่าเริ่มต้น (Initialization) Initialization Statement Modification True False
Pretest Loop ตรวจสอบเงื่อนไขก่อน
Posttest Loop ตรวจสอบเงื่อนไขทีหลัง
Type of Iteration Loop คำสั่งวนซ้ำแบบ Pretest loop 1. while loop 2. for loop คำสั่งวนซ้ำแบบ Posttest loop 3. do-while loop
For Loop (cont.) for (initial; expression; modification) { statement-1.1; statement-1.2;... statement-1.n; } initial เป็นส่วนที่ใช้กำหนดค่าเริ่มต้น ให้กับตัวแปร expression หรือ condition เป็นเงื่อนไข เพื่อพิจารณา modification เป็นส่วนที่เปลี่ยนแปลง ค่าตัวแปร statement-1, 2,..., n เป็นคำสั่งที่จะ ทำงานเมื่อเงื่อนไขเป็นจริง
Condition Initialization Statement -1-n Modification True False For Loop (cont.)
รูปแบบประโยค ( ; ; ) for(expression1 ; expression2 ; expression3) statement; หรือ {statements;} คำอธิบาย ทำ expression1 เพียง 1 ครั้ง ทำ expression2 แล้วตรวจสอบค่าว่าเป็น จริงหรือเท็จ ถ้าเป็นจริงจะทำ statement ใน loop แล้วทำ expression3 ต่อ วนกลับ ไปทำ expression2 ถ้าเป็นเท็จจะไม่ทำ statement ใน loop For Loop (cont.)
Example 2 Example: จงเขียนผังงานและโปรแกรมเพื่อ ผลรวมของตัวเลข 0 – 100 พร้อมทั้งแสดง ผลลัพธ์ออกทางหน้าจอ Output Analysis แสดงผลเลขรวมของตัวเลขจาก Input Analysis ไม่มี Process Analysis โปรแกรมทำการบวกค่าเก็บไว้ในตัวแปร ผลลัพธ์ แล้วเพิ่มค่าจนถึง 100 Variable Define count เป็นตัวแปรชนิดจำนวนเต็มเพื่อ นับจำนวน sum เป็นจำนวนเต็มเพื่อเก็บค่าผลรวม
START sum=0 count<=100 True False count++ sum END sum=sum+count count=1 Example 2 (cont.)
#include int main() { int sum=0, count; for (count=1; count<=100; count++) { sum = sum + count ; } printf ("Summation of 1 to 100 = %d",sum); return 0; } Example 2 (cont.)
Example: จงเขียนผังงานและโปรแกรมสำหรับ แสดงผลอักษร a – z ออกทางจอภาพ โดยใช้ คำสั่ง for Output Analysis แสดงผล a – z ทางจอภาพ Input Analysis ไม่มี a b c d e f g h i j k l m n o p q r s t u v w x y z Example 3
Process Analysis โปรแกรมทำการวนรอบเพื่อแสดงผลอักษร ตั้งแต่ a – z โดยการเพิ่มค่าตัวแปรขึ้นครั้ง ละ 1 ( ดูตาราง ASCII Code) Variable Define letter เป็นตัวแปรชนิดอักขระ printf ("%c\n",'a'); // printf ("%c\n",97); printf ("%c\n",'a'+1); // printf ("%c\n",98); printf ("%c\n",'a'+2); // printf ("%c\n",98); a b c Example 3 (cont.)
START letter letter<='z' True False letter++ letter END letter='a' Example 3 (cont.)
#include int main() { char letter; for (letter='a'; letter<='z'; letter++) { printf ("%c ",letter); } return 0; } Example 3 (cont.)
Example: จงเขียนผังงานและโปรแกรม แสดงผลรูปสี่เหลี่ยมขนาด n x n โดย โปรแกรมจะรอรับจำนวนเต็มจากผู้ใช้งาน ดัง ตัวอย่าง Please enter number : 4 Output **** Please enter number : 9 Output ********* Example 4
Output Analysis ผลตัวเลข เป็นรูปสี่เหลี่ยมจัตุรัสขนาด เท่ากับจำนวนตัวเลขที่รับเข้ามา Input Analysis เลขจำนวนเต็มที่ผู้ใช้ป้อนเข้ามา Process Analysis โปรแกรมรอรับค่าจำนวนเต็มจากผู้ใช้งาน โปรแกรมวนรอบเพื่อทำการแสดง '*' เป็น รูปสี่เหลี่ยมจัตุรัส Example 4 (cont.)
บรรทัดที่ 1 แสดงผล '\n' แล้วแสดงผล '*' จำนวนเท่ากับค่าที่รับมา บรรทัดที่ 2 แสดงผล '\n' แล้วแสดงผล '*' จำนวนเท่ากับค่าที่รับมา … บรรทัดที่ n แสดงผล '\n' แล้วแสดงผล '*' จำนวนเท่ากับค่าที่รับมา Variable Define num เป็นจำนวนเต็มเพื่อใช้เก็บค่าตัวเลขที่ ผู้ใช้ป้อน i เป็นจำนวนเต็มเพื่อใช้นับจำนวน บรรทัด j เป็นจำนวนเต็มเพื่อใช้นับจำนวน '*'
START num, i, j i<=num True False '\n' END i=1 num i++ j<=num j=1 j++ '*' True False Example 4 (cont.)
int main() { int num,i,j; printf ("Enter number : "); scanf ("%d",&num); for (i=1; i<=num; i++) { printf("\n"); for (j=1; j<=num; j++) { printf("*"); } return 0; } Example 4 (cont.)
Outline Switch 1 p p 2 Break & Continue 3 Assignment #6 4 For Loop
Break & Continue #include int main() { unsigned char letter; for (letter=1; letter<=20; letter++) { if(letter == 14) break; printf ("Inside Loop [%d]\n ",letter); } printf("Out side the Loop \n"); return 0; }
Break & Continue #include int main() { unsigned char letter; for (letter=1; letter<=20; letter++) { if(letter == 14) continue; printf ("Inside Loop [%d]\n ",letter); } printf("Out side the Loop \n"); return 0; }
for(;;) #include int main() { unsigned int letter = 0; for (;;) { scanf("%d",&letter); if(letter == 666) break; printf ("Inside Loop [%d]\n ",letter); } printf("Out side the Loop \n"); return 0; }
Outline Switch 1 p p 2 Break & Continue 3 Assignment #6 4 For Loop
Assignments #6 1. จงเขียนโปรแกรมแสดงสูตรคูณแม่ 2 2. จงเขียนโปรแกรมการจ่ายเงินของตู้ ATM โดยให้ผู้ใช้กรอกจำนวนเงินเข้ามาแล้ว โปรแกรมจะตรวจสอบว่าถูกต้องหรือไม่โดยมี เงื่อนไขว่า ATM จะจ่ายเงินให้ไม่เกิน และต้องมากกว่า 100 ซึ่งโปรแกรมจะต้อง คำนวณว่าต้องจ่ายเป็นธนบัตรมูลค่าต่างๆ อย่างละจำนวนกี่ใบโดยกำหนดให้ในเครื่อง ATM มีธนบัตรมูลค่าต่างๆดังนี้ ธนบัตรใบละ 1000 ธนบัตรใบละ 500 ธนบัตรใบละ 100
3. จงเขียนโปรแกรมแสดงผลรูปสี่เหลี่ยมขนาด n x n โดยโปรแกรมจะรอรับจำนวนเต็มจาก ผู้ใช้งาน ดังตัวอย่าง Please enter number : 4 Output **** * **** Please enter number : 9 Output ********* * ********* Assignments #6 (cont.)
4. จงเขียนโปรแกรม เมนูรับรายการอาหารจาก ลูกค้าเพื่อคำนวณ ราคาอาหารทั้งหมด โดยกำหนดให้โปรแกรมมี รายการดังนี้ 1. Pizza150 ฿ 2. Hamburger50 ฿ 3. Sandwich25 ฿ 4. Water10 ฿ 0. Calculate money โดยทุกครั้งที่เลือกเมนูรายการอาหารจะแสดง จำนวนอาหารที่สั่งไปแล้วด้วย Assignments #6 (cont.)
ตัวอย่างการรันโปรแกรม เลือก 1 เพื่อสั่ง Pizza แสดงจำนวนของ และราคา รอรายการ เลือก 2 เพื่อสั่ง Hamburger เพิ่ม Assignments #6 (cont.)
แสดงจำนวนของ และ ราคา รอรายการ เลือก 4 เพื่อสั่ง Water แสดงจำนวนของ และราคา รอรายการ เลือก 2 เพื่อสั่ง Hamburger เพิ่ม Assignments #6 (cont.)
แสดงจำนวนของ และราคา รอรายการ เลือก 0 เพื่อจบรายรายและสรุปจำนวนเงิน Assignments #6 (cont.)