งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

1 1204 102 Problem Solving Control Structure โครงสร้างควบคุม คณาจารย์หลักสูตรวิทยาการคอมพิวเตอร์

งานนำเสนอที่คล้ายกัน


งานนำเสนอเรื่อง: "1 1204 102 Problem Solving Control Structure โครงสร้างควบคุม คณาจารย์หลักสูตรวิทยาการคอมพิวเตอร์"— ใบสำเนางานนำเสนอ:

1 Problem Solving Control Structure โครงสร้างควบคุม คณาจารย์หลักสูตรวิทยาการคอมพิวเตอร์

2 2 Control Structure โครงสร้างควบคุม แบ่งออกเป็น 3 กลุ่มคือ โครงสร้างแบบลำดับ (Sequence) โครงสร้างในการเลือกทำ (Selection)  คำสั่งแบบทางเลือกเดียว (Simple if)  คำสั่งแบบสองทางเลือก (If…else)  คำสั่งแบบมากกว่าสองทางเลือก (Nested if) โครงสร้างในการทำซ้ำ (Iteration)  คำสั่ง while, do…while

3 3 การทำงานแบบลำดับ (Sequence) Example 1 1. #include int main() 4. {float t1, t2, t3, t4, result; t1=10/5; 7. t2=6*3; 8. t3=8+t1; 9. result=t3-t2; 10. printf("result = %f\n", result); return 0; 13. } Stop T3=8+T1 RESULT=T3-T2 Print RESULT คำสั่ง 1. ให้แสดงผลลัพธ์ของ t1, t2, t3 เพิ่มเติม 2. ให้รับค่า t1,t2,t3 ทางคีย์บอร์ด

4 4 Example 2 ( ตัวอย่างหาพื้นที่สี่เหลี่ยมผืนผ้า ) 1. #include int main() 4. { 5. float width, height, area; 6. printf("Input width : "); 7. scanf("%f", &width); 8. printf("Input height : "); 9. scanf("%f", &height); 10. area = width*height; 11. printf("Area of Retangle = %f\n", area); return 0; 14. } Start Stop Read width, length area = width*length Print area

5 5 Example 3 : โปรแกรมแปลงอุณหภูมิ F = 1.8C + 32 Start Stop Read c f = 1.8*c + 32 Print f 1.#include 2. 3.int main() 4.{ 5.float c,f; 6. 7.printf(“Read celsius : “); 8.scanf(“%f”, &c); f = 1.8*c+32; printf(“Fahrenheit = %f“, f); 13.return 0; 14.} สังเกต การใช้ ตัวแปร... f และ %f ห้ามสับสน เพราะนั่นคือคนละตัวกันนะ

6 6 Example 4 : โปรแกรมสลับค่า A & B 1.#include 2. 3.int main() 4.{ 5.int a = 7, b=5, temp; printf( " a (before) = %d\n ", a); 8.printf("b (before) = %d\n ", b); temp = a; 11.a = b; 12.b = temp; printf("a (after) = %d\n“, a); 15.printf("b (after) = %d\n“, b); 16.} START STOP หน้าที่ 1 หน้าที่ 2 Print A,B !! จงปรับปรุงโปรแกรมโดยให้รับค่า A และ B จาก Keyboard !!

7 7 Job1 ( การทำงานแบบลำดับ ) จงแสดง flowchart และเขียนโปรแกรมจาก flowchart ที่ได้ เพื่อ 1. คำนวณการหาพื้นที่วงกลม และเส้นรอบวง เมื่อรับค่ารัศมีเข้ามา 2. คำนวณหาพื้นที่สี่เหลี่ยมด้านคู่ขนาน โดยให้รับค่าข้อมูลที่ใช้ในการ คำนวณ จาก Keyboard 3. หาพื้นที่สามเหลี่ยมเมื่อกำหนดให้รับค่าข้อมูลจาก Keyboard 4. ร้านหอมกรุ่น ต้องสั่งซื้อกล่องขนมมาใช้ในสัปดาห์หน้า โดยจะต้อง ซื้อกล่องมาให้พอใช้ 7 วัน แต่ละวันทำขนมได้ 22.5 กก. และกล่อง ขนมหนึ่งกล่องสามารถบรรจุขนมได้กล่องละ 225 กรัม จงคำนวณหา จำนวนกล่องที่ต้องซื้อ 5. จงคำนวณหาค่าของสมการ y = 3x 2 + x – 15 โดยรับค่า x เข้ามา 6. ต้องการรับจำนวนประชากรของตำบลหนึ่งๆ จากสถิติของสาธารณสุข จังหวัดพบว่าทุกๆ 180 คน จะมี 1 คนที่มีโรคประจำตัวที่ต้องไปพบ แพทย์ทุกเดือน จงหาจำนวนของคนที่มีโรคประจำตัวทั้งหมด

8 8 Job1 ( ต่อ ) จงเขียนโปรแกรม 1. ต้องการรับข้อมูลเงินโบนัสที่พ่อได้รับ โดยพ่อจะดำเนินการแบ่งเงินให้ แม่ X% ของเงินที่มีอยู่ และนำส่วนที่เหลือมาแบ่งเป็น 60:40 ให้ลูก สองคน แจงแสดงจำนวนเงินที่แม่และลูกแต่ละคนได้รับ 2. จงคำนวณหาระยะทางของเส้นตรง AC เมื่อกำหนดให้รับระยะทางของเส้นตรง AB และ BC เข้ามา ( ให้ include ใช้คำสั่ง sqrt() ในการหาค่าราก ที่ 2 และ return ค่ากลับเป็น double) double result = sqrt( ค่าหรือตัวแปรที่ต้องการถอดราก ); เช่น double x = 4.0; double result = sqrt(x); จะได้ผลลัพธ์ result = 2.0

9 9 การทำงานแบบทางเลือก (Selection) Simple if Statement - ทางเลือกเดียว คำสั่งในการตรวจสอบเงื่อนไขแบบพื้นฐานที่สุด รูปแบบ if ( เงื่อนไข ) { Statement 1; Statement 2; Statement n; } Statement k; Statement k+1; ถ้าเงื่อนไขเป็นจริงจะทำงาน ใน { } ของ if ถ้าเป็นเท็จจะทำคำสั่งที่ อยู่นอก { } คือคำสั่ง k, k+1 เป็นต้นไป ผลของเงื่อนไข ต้องมี ค่าเป็น boolean เสมอ True false

10 10 Simple if Statement Truefalse int i=15; if (i>=10) { printf("i = %d\n ", i); i = i + 5; } printf("i = %d\n", i); ถ้าเปลี่ยนค่า i จะเป็น อย่างไร i=10 จะได้ผลลัพธ์ i = 15 i=15 จะได้ผลลพัธ์ i = 15 i = 20

11 11 Example 5 – A/B จงหาผลหาร A/B, เมื่อ B ไม่เท่ากับ 0 1. #include 2. int main() 3. { 4. int a, b, result; printf("Read a : "); scanf(“%d”, &a); 7. printf("Read b : "); scanf(“%d”, &b); if (b!=0) 10. { 11. result = a/b; 12. printf("a/b = %d\n“, result); 13. printf(“%d/%d = %d\n”, a, b, result); 14. } 15. } Start Read a, b Print result b != 0 result =a/b False True Stop

12 12 Example 6 : Even Number ถ้าต้องการเปลี่ยนเป็นเลขคี่ (Odd Number) จะต้อง ปรับส่วนใดบ้างใน flowchart และ program 1.#include 2. 3.int main() 4.{ 5.int num, frac; 6.printf("Read Number : "); 7.scanf(“%d”, &num); 8. 9.frac = num % 2; //% mod operation 10.if (frac==0) 11.{ 12.printf(“%d is Even\n“, num); 13.} 14.}

13 13 การทำงานแบบทางเลือก (Selection) if-else Statement- แบบ 2 ทางเลือก คำสั่งในการตรวจสอบเงื่อนไขโดยเลือกอย่างใดอย่างหนึ่ง รูปแบบ if ( เงื่อนไข ) { statement 1; statement 2; … statement n; } else { statement 1; statement 2; … statement n; } ทำถ้าเงื่อนไข เป็นจริง (true) ทำถ้าเงื่อนไข เป็นเท็จ (false) true false ทำไมเรียกว่าสองทางเลือก ?? ต่างจากหนึ่งทางเลือกอย่างไร ??

14 If แบบ หนึ่ง และ สอง ทางเลือก เหมือน ? ต่าง ? If แบบ หนึ่ง ทางเลือก If แบบ สองทางเลือก 14 สองทางเลือก : ไม่ว่าจะจริง หรือเท็จ จะมีกลุ่มคำสั่งที่จะต้องทำงานเสมอ ก่อนที่จะออกไปทำคำสั่งภายนอก IF

15 15 Example :: if 2 ทางเลือก if if-else คล้ายกับ Simple if เพียงแต่มี else เพิ่มเข้ามา เพื่อ ทำงานถ้าเงื่อนไขเป็นเท็จ (false) if-else จะเลือกทำอย่างใดอย่าง หนึ่งเท่านั้น นั่นคือ ถ้าไม่ทำงาน ใน if ก็ต้องทำงาน else int num, frac; printf("Read Number : "); scanf(“%d”, &num); frac = num % 2; if (frac==0) // ถ้าเงื่อนไขเป็นจริง { printf( “%d is Even\n“, num); } Else // แต่ถ้าเงื่อนไขไม่เป็นจริง { printf( “%d is Odd\n“, num); } ปล. mod(%) ต้องใช้กับข้อมูลชนิดจำนวนเต็มเท่านั้น ?? ถ้า num = 17 จะได้ผลลัพธ์อย่างไร

16 16 Example 7 – if 2 ทางเลือก Start Read a, b Print result a > b result =a-bresult=a+b False True Stop 1.#include 2. 3.int main() 4.{ 5.int a, b, result; 6. 7.printf("Read a : "); scanf(“%d”, &a); 8.printf("Read b : "); scanf(“%d”, &b); if (a>b) { 11.result = a-b; 12.} 13.else{ 14.result = a+b; 15.} 16.printf("Result = %d\n“, result); return 0; 19.} สังเกต การทำงาน ถ้าเลือกทำงานฝั่งใดฝั่งหนึ่งแล้ว คำสั่งต่อไปที่จะทำคือ print result

17 17 Exercise 3 - ฝึกในห้องเรียน ให้ผู้ใช้เลือกเมนูเพื่อแปลงหน่วยวัดอุณหภูมิ ดังนี้ [C] Convert Celsius to Fahrenheit [F] Convert Fahrenheit to Celsius โดยใช้สมการในการแปลงอุณหภูมิดังนี้ F = 1.8C + 32 โดยที่ F คือ Fahrenheit และ C คือ Celsius Start Stop Read temp result=1.8*temp+32 Print result choice=‘C’ or ‘c’ Read choice result=(temp-32)/1.8 True False

18 Celsius to Fahrenheit 18 สังเกต เงื่อนไขหลัง if ว่าสามารถเช็คอักขระ c,f ได้ครบหรือไม่ ถ้าไม่ถูกจะแก้ไขอย่างไร ถ้าเป็นอักขระอื่นๆ จะทำงานอย่างไร ถ้าไม่ถูกจะแก้ไขอย่างไร ???

19 อย่าลืม !! รูปแบบการเชื่อมเงื่อนไข &&, || กรณีที่มีหลายเงื่อนไข จะต้องมีการเชื่อม ขึ้นอยู่กับแต่ละ ปัญหา เช่น - ถ้าข้อมูลที่รับเข้ามา (ch) เป็นตัวอักษร ‘C’ หรือ ‘c’ จะเขียน เป็น if (ch == ‘C’ || ch == ‘c’) - ถ้าข้อมูลที่รับเข้ามา (score) มีค่ามากกว่า 70 แต่ไม่เกิน 80 คะแนน จะเขียนเงื่อนไขเป็น if (score > 70 && score >= 80) 19

20 20 Nested if Statement – มากกว่า 2 ทางเลือก คำสั่งในการตรวจสอบเงื่อนไข ให้เลือกอย่างใดอย่างหนึ่ง โดยมีทางเลือก มากกว่า 2 ทางเลือก รูปแบบ if ( เงื่อนไข ) { statement } else if ( เงื่อนไข ) { statement } else if ( เงื่อนไข ) { statement } else... else if ( เงื่อนไข ) { statement } else { statement } ปล. ทุก if จะต้องมีเงื่อนไขตามมาด้วยเสมอ ให้สังเกตสีของ flowchart และคำสั่ง if ที่มีสีสอดคล้องกัน

21 21 Example 8 – Nested If 1.#include 2.int main() 3.{int x; 4. 5.printf("Read x : "); 6.scanf(“%d”, &x); 7. 8.if (x>0) { 9.printf(“Pos\n"); 10.} 11.elseif (x<0) { 12.printf(“Neg\n"); 13.} 14.else { 15.printf(“Zero\n"); 16.} 17. return 0; 18.}

22 22 Exercise 4 : ฝึกในห้องเรียน 1. เขียนโปรแกรมรับน้ำหนัก (kk.) และส่วนสูง (cm.) ของนักเรียน แล้วคำนวณหาว่านักเรียนคนนั้นเป็นคนอ้วน (Fat) หรือไม่อ้วน โดย ถ้าส่วนสูงมากกว่าน้ำหนักไม่เกิน 100 แสดงว่าอ้วน 2. โปรแกรมตัดเกรด

23 23 Job 2: ฝึกเขียนผังงานและโปรแกรม 1. รับข้อมูลข้าวสารที่มีอยู่ในโกดัง ( หน่วย กก.) ถ้าข้อมูลที่รับเข้ามามี ค่าเป็นบวกให้คำนวณหาจำนวนกระสอบที่ใช้ในการบรรจุข้าวสาร โดยกระสอบที่ใช้บรรจุมีขนาด 10 กิโลกรัม และหาว่ามีข้าวสารเหลือ อีกกี่กิโลกรัมที่ไม่สามารถบรรจุในกระสอบได้ และแสดงผลลัพธ์ที่ได้ ออกทางหน้าจอ 2. เขียนโปรแกรมแปลงหน่วยวัดพื้นที่จากไร่ เป็นตารางวา โดยให้ โปรแกรมอ่านค่าขนาดพื้นที่ซึ่งมีหน่วยเป็นไร่ แล้วแปลงเป็นตารางวา (1 ไร่ = 400 ตารางวา ) แต่โปรแกรมจะคำนวณเมื่อค่าขนาดพื้นที่ที่ ได้รับมาไม่เป็นค่าลบ 3. จงเขียนอัลกอริทึมเพื่อรับข้อมูลชื่อ และปีที่เกิด ( เป็น พ. ศ.) เพื่อ คำนวณหาอายุ และแสดงผลว่าคนดังกล่าวจัดอยู่ในกลุ่มบุคคลวัยใด ดังต่อไปนี้ 1. ถ้าอายุไม่เกิน 19 ปี ให้แสดงคำว่า “Child” 2. ถ้าอายุระหว่าง ให้แสดงคำว่า “Adult” 3. ถ้าอายุตั้งแต่ 55 ขึ้นไป ให้แสดงคำว่า “Old” 4. หอพักแห่งหนึ่งต้องการคำนวณราคาค่าไฟฟ้าของห้องพักต่างๆ ใน หอพัก คิดเป็น 50 หน่วยแรก 50 บาท ส่วนที่เกินจากนี้คิดเป็นหน่วย ละ 1.50 บาท โดยให้รับหมายเลขห้อง และแสดงราคาค่าไฟฟ้าของ ห้องพักดังกล่าว

24 24 Job 2 : เขียนโปรแกรม ( ต่อ ) 1. จงเขียนโปรแกรมเพื่อรับเกรดของนักเรียน และให้แสดงข้อความ ดังต่อไปนี้ ถ้าเกรด ‘A’ ให้แสดงข้อความ “Excellence” ถ้าเกรด ‘B’ ให้แสดงข้อความ “Good” ถ้าเกรด ‘C’ ให้แสดงข้อความ “Fair” ถ้าเกรด ‘D’ ให้แสดงข้อความ “Pass” ถ้าเกรด ‘F’ ให้แสดงข้อความ “Fail” ถ้าเป็นตัวอักษรอื่นๆ ให้แสดงข้อความ “Unknown Grade” 2. จงเขียนโปรแกรมเพื่อรับข้อมูลความสูง ( ซม.) และน้ำหนักจริง ( กก.) เพื่อคำนวณหาค่าน้ำหนักที่เหมาะสมโดย น้ำหนักที่เหมาะสม = ความสูง -100 และคำนวณหาผลต่างของน้ำหนักโดยหักน้ำหนักที่เหมาะสมออกจาก น้ำหนักจริง เพื่อเปรียบเทียบว่าบุคคลดังกล่าวจัดอยู่กลุ่มใด ดังนี้ ถ้าผลต่างของน้ำหนักน้อยกว่า -5 กิโลกรัม ให้แสดงคำว่า “Thin” ถ้าผลต่างของน้ำหนักตั้งแต่ -5 ถึง 5 กิโลกรัมให้แสดงคำว่า “Slender” ถ้าผลต่างของน้ำหนักมากกว่า 5 กิโลกรัมขึ้นไปให้แสดงคำว่า “Fat”

25 25 Job 2 : เขียนโปรแกรม ( ต่อ ) 1. จงเขียนโปรแกรมหาค่าที่มากที่สุดและน้อยที่สุดจากตัวเลข 3 จำนวน 2. จงคำนวณหาราคาสินค้าสุทธิ โดยรับข้อมูลราคารวมของสินค้าที่ซื้อ ทั้งหมด และทางร้านได้กำหนดส่วนลดให้ดังต่อไปนี้ ถ้าราคาสินค้ารวมน้อยกว่า 5,000 บาท ได้รับส่วนลด 5% ถ้าราคาสินค้ารวมตั้งแต่ 5,000 ถึง 9,999 บาท ได้รับส่วนลด 7% ถ้าราคาสินค้ารวมตั้งแต่ 10,000 บาทขึ้นไป ได้รับส่วนลด 10% โดยให้แสดงราคาสินค้ารวม ส่วนลด และราคาสุทธิที่ต้องจ่าย 3. บริษัทแห่งหนึ่งต้องการคำนวณหาเงินเดือนสุทธิที่เพิ่มขึ้นของ พนักงานเมื่อสิ้นปี โดยให้รับชื่อ และเงินเดือนของพนักงานแต่ละคน โดยมีเกณฑ์การเพิ่มเงินเดือนของบุคลากรดังนี้ ถ้าเงินเดือนต่ำกว่า 10,000 บ. จะได้รับเงินเพิ่ม 10% ถ้าเงินเดือนตั้งแต่ 10,000-19,999 บ. จะได้รับเงินเพิ่ม 7% ถ้าเงินเดือนตั้งแต่ 20,000-39,999 บ. จะได้รับเงินเพิ่ม 5% ถ้าเงินเดือนตั้งแต่ 40,000-70,000 บ. จะได้รับเงินเพิ่ม 3% ถ้าเงินเดือนมากกว่า 70,000 บ. จะได้รับเงินเพิ่ม 1% โดยให้แสดงชื่อพนักงาน เงินเดือนเดิม จำนวนเงินเพิ่ม และเงินเดือน ใหม่ที่จะได้รับ

26 26 เขียนโปรแกรมให้ง่าย และสั้นกว่านี้ได้ ไหม ? int x = 0; printf(“%d\n”, x=x+1); ลองเขียนโปรแกรมแสดงข้อความตาม แบบด้านซ้ายมือ แล้วดูผลลัพธ์ ผลลัพธ์ได้ 10 บรรทัด แต่เอ๊ะ ! เขียนโปรแกรม ให้สั้นๆ กว่านี้ แต่ได้ผลลัพธ์ เช่นเดิม ทำอย่างไร ??? ปล. อย่าลืมเติมส่วนอื่นๆ ของโปรแกรมให้ครบนะ ไม่งั้น Error เพี้ยบ !! ไปดูกันทำไงดี !!!

27 27 โครงสร้างการทำซ้ำ (Iteration) คำสั่งควบคุมใช้ในการทำซ้ำคำสั่งต่างๆ ตามเงื่อนไข หรือ ตามจำนวนรอบที่กำหนด เมื่อตรวจสอบเงื่อนไขแล้ว พบว่าเงื่อนไขเป็นจริง จึงจะ ทำงานภายในลูป (while) หรือ ทำงานอย่างน้อย 1 รอบ และถ้าเงื่อนไขยังคงเป็นจริงให้ทำงานต่อ (do-while) while do-while คำตอบคือ ??? การวนรอบ หรือการทำซ้ำ

28 28 คำสั่ง while() รูปแบบ ตัวนับเริ่มต้น ; while( เงื่อนไข ) { Statements; ปรับปรุงตัวนับ ; } คำสั่ง while โปรแกรม จะทำงานในลูปเมื่อ เงื่อนไขเป็นจริงเท่านั้น เมื่อโปรแกรมทำงานไป จนหมดขอบเขตจะวน กลับมาตรวจสอบเงื่อนไข หาก เงื่อนไขเป็นเท็จจะออก จากลูป

29 29 Example while ตัวนับเริ่มต้น กำหนดเงื่อนไข ปรับปรุงตัวนับ Output-Ex9 ********** Output-Ex10 Ex10 Ex9 ปล. ตัวนับเริ่มต้น และ ขั้นตอนปรับปรุงตัวนับ จะต้องมีเสมอ ตัวแปรที่เป็นตัวนับเริ่มต้น กับ ตัวแปรเงื่อนไขต้องเป็นตัว เดียวกัน

30 30 Example 11 - while 1. #include int main() 4. { 5. int i = 1, sum=0; 6. while (i <= 10) 7. { 8. sum=sum+i; 9. i=i+1; 10. } 11. printf("Sum = %d“, sum); 12. return 0; 13. }

31 ความแตกต่างของ flowchart คำสั่ง IF และ WHILE 31 True false อันไหน ?? If อันไหน ?? while สังเกต : flowchart ของ IF จะมีเส้นลูกศร วิ่งจากบนลงล่าง แต่ flowchart ของ WHILE เส้นลูกศรนอกจากจะวิ่งจากบนลงล่างแล้ว ยังวิ่งย้อนกลับไปที่เงื่อนไข เพื่อทำงานรอบต่อไปได้อีกด้วย   

32 32 flowchart ผิดที่ใด ?? Example 12 : flowchart ผิดที่ใด ?? #include int main() {int num = 1, n; printf(“Input n : “); ?????(“%?”, ?n); while (num<=n) { frac = num%2; if (frac==0) printf(“%d is Even“, num); else printf(“%d is Odd“, num); num=num+1; } // end while } // end function main ปล. ถ้าหลัง if หรือ else มีเพียง 1 คำสั่งไม่ต้อง ใส่ปีกกาครอบก็ได้ เครื่องหมาย ? ที่ใส่ไว้ นิสิตคิดว่าต้องเติมอะไร ? ให้นิสิตสังเกต การเยื้อง ของโค้ด คำสั่งใดอยู่ใน IF, ELSE คำสั่ง num = num + 1 จะทำเมื่อไร

33 33 Exercise 13 - ฝึกในห้อง จงเขียนโปรแกรมหาค่า Max & Min

34 34 Exercise 14 - ฝึกในห้อง จากผังงาน จงเขียนโปรแกรม หาผลรวม (sum) และ ค่าเฉลี่ย (average) ปล. นิสิตอย่าลืมว่า ข้อนี้เป็นการหา ค่าผลรวม, ค่าเฉลี่ย ดังนั้นจะต้องมีตัวแปร sum และต้อง กำหนดค่าเริ่มต้นให้เท่ากับ 0 เสมอ และต้องมีการ สั่งเพิ่มค่า แบบสะสม ให้กับตัวแปร sum ด้วย นั่นคือคำสั่ง sum = sum + score;

35 35 Job3: เขียนโปรแกรม หาผลรวม และเกรดที่นิสิตได้รับ โดยนิสิตห้องนี้มีจำนวน n คน รหัสนักเรียน (id) ชื่อนักเรียน (name) คะแนนกลางภาค (mid) โดยคะแนนเต็ม 50 คะแนน คะแนนปลายภาค (final) โดยคะแนนเต็ม 50 คะแนน คำนวณหา ผลรวมของคะแนนนักเรียนแต่ละคน (total) และเกรดที่ได้รับดังนี้  ถ้าคะแนนไม่เกิน 50 ได้รับเกรด “U”  ถ้าคะแนนมากกว่า 50 ได้รับเกรด “S” คะแนนรวมเฉลี่ย (average) ของนักเรียนทั้งหมด แสดงผล id, name, mid, final, total ของนักเรียนแต่ละคน และเกรดของ นักเรียนที่ได้รับ คะแนนเฉลี่ย (average) ของคะแนนรวมทั้งหมด

36 36 Job 3 ( ต่อ )

37 37 คำสั่ง do…while() คล้ายกับ while แต่จะมีการ ทำงานก่อน 1 รอบก่อนเสมอ แล้วจึงจะตรวจสอบเงื่อนไข รูปแบบ ตัวนับเริ่มต้น ; do{ Statements; ปรับปรุงตัวนับ ; } while( เงื่อนไข ); ต้องปิดท้ายด้วย ; อย่าลืมละ

38 ตัวอย่าง do…while() 38 ทำ printf, x=x+1 ก่อน อย่างละ 1 รอบ แล้วจึงเช็คเงื่อนไข while(x<=10) ถ้าเงื่อนไข เป็นจริง จะวนกลับไปที่ do และทำ printf,x=x+1 ของรอบต่อๆ ไป จนเงื่อนไขเป็นเท็จ (x>10) จึงหยุด

39 ความแตกต่างของ while() และ do…while() 39

40 40 while(), do…while()

41 41 Example 15 - ค่าเฉลี่ย หาค่าเฉลี่ยของคะแนน นิสิต n คน โดยใช้คำสั่ง do…while()

42 42 Example 15 – ค่าเฉลี่ย (Program) 1. #include 2. int main() 3. { 4. int i = 1, sum=0, n; 5. printf(“Input n : “); scanf(“%d”, &n); 6. do 7. { 8. sum=sum+i; 9. i=i+1; 10. } while (i<=n); 11. double average = sum/n; 12. printf("Sum = %d\n“, sum); 13. printf(“Average = %.2f\n“, average); 14. } // end main หาค่าเฉลี่ยของคะแนน นิสิต n คน โดยใช้คำสั่ง do…while() จะแก้โค้ดนี้อย่างไร สังเกตซิว่า หาค่าผลรวมและ ค่าเฉลี่ยของคะแนนนักเรียนได้หรือไม่ ? แก้โค้ดอย่างไร ??

43 43 Exercise 16- ฝึกในห้อง ลองปรับโจทย์จาก Example 12 โดยกำหนดให้รับค่า num ถ้าค่า num ที่รับเข้ามาเป็น -999 ให้จบการทำงาน เปรียบเทียบการทำงานกับ Example 12

44 44 สิ่งที่มักผิดพลาด โปรแกรมไม่มีการเปลี่ยนแปลงค่าของ x ดังนั้น x จะมีค่าเท่ากับ 0 ตลอด Loop while ตรวจสอบว่า x <= 10 หรือไม่ ทำให้ Loop ทำงานไม่รู้จบ *** อย่าลืม Loop while และ do..while ต้องมีการ update ค่าที่จะ นำมาเช็คเงื่อนไขตลอด

45 45 Exercise 17 ฝึกในห้อง 1. จงเขียนโปรแกรมหาค่า N! 2. จงเขียนผังงาน และเขียน โปรแกรมเพื่อรับน้ำหนักของ นักเรียน 10 คน แล้วนับจำนวน นักเรียนที่มีน้ำหนักต่ำกว่า 30 กิโลกรัม และจำนวนนักเรียนที่มี น้ำหนักตั้งแต่ 30 กิโลกรัมขึ้นไป 3. จงสร้างตารางสูตรคูณแม่ 3 4. จงหาผลลัพธ์ของ X N เมื่อรับค่า X และ N เข้ามา เช่น 2 4, จงแปลงเลขฐานสิบใดๆให้เป็น เลขฐานสอง 6. จงแปลงเลขทศนิยมฐานสิบให้ เป็นฐานสอง

46 46 Job3 : งานหนัก 1. จงเขียนโปรแกรมให้เลือก Menu ดังต่อไปนี้ [C] Circle [R] Rectangle [T] Triangle [X] Exit Please select choice… – ถ้ากด Menu ตามที่กำหนดให้ ให้แสดงข้อความของ Menu ต่างๆ ออกมา และถ้ากดปุ่ม X ให้ออกจากโปรแกรม – ถ้ากด Menu ผิดให้แสดงผลลัพธ์ “No choice…” และให้ กลับไปรับค่า Menu ใหม่อีกครั้ง 2. จากข้อ 1 จงปรับปรุงโปรแกรมเมื่อกด Menu โดยให้รับค่า ข้อมูลเพื่อดำเนินการหาพื้นที่ และคำนวณหาพื้นที่ที่ได้ และแสดงผลลัพธ์ออกทางหน้าจอ

47 47 Job3 : เบาๆ แต่คิดสักนิดนะ 1. แสดงตัวเลขตั้งแต่ 1 ถึง 50 ยกเว้น จำนวนที่หาร 10 ลงตัว 2. เขียนโปรแกรมให้รับข้อมูลจากหน้าจอได้เรื่อยๆ ยกเว้นตัว ‘q’ ถ้ากด ตัว ‘q’ ในแสดงข้อมูลที่ป้อนเข้ามาทั้งหมด 3. จงเขียนโปรแกรมหาค่าของสมการ y = 3x 2 + x – 15 โดย x มีค่า เริ่มต้นจาก 0 ถึง 10 โดยใช้คำสั่งต่าง ๆ ต่อไปนี้ 1. while 2. do..while Output x=0f(0)=-15 x=1f(1)=-11 x=2f(2)=-1 … x=10f(10)=295

48 48 Job3 : อย่างง่าย จงเขียนโปรแกรมแปลงหน่วยวัดอุณหภูมิจากองศา เซลเซียสเป็นองศาฟาเรนไฮต์ โดยใช้สมการ F = 1.8C + 32 while do..while Output CelseiusFahrenhiet …

49 49 Job3 : ของจริง เต็มรูปแบบ จงเขียนโปรแกรมเพื่อรับข้อมูลชื่อ และปีที่เกิด ( เป็น พ. ศ.) เพื่อเก็บสถิติของสาธารณสุขอำเภอจำนวน N คน เพื่อ คำนวณหาอายุ โดยให้แสดงชื่อ และสถานะของบุคคล ดังกล่าว และนับจำนวนของกลุ่มบุคคลดังกล่าวพร้อม แสดงผลจำนวนของกลุ่ม ดังเงื่อนไขต่อไปนี้ ถ้าอายุต่ำกว่า 20 ปี ให้แสดงคำว่า “ เด็ก - วัยรุ่น ” และเก็บ สถานะเป็นกลุ่มที่ 1 ถ้าอายุระหว่าง ให้แสดงคำว่า “ ผู้ใหญ่ ” และเก็บ สถานะเป็นกลุ่มที่ 2 ถ้าอายุตั้งแต่ 55 ขึ้นไป ให้แสดงคำว่า “ ผู้สูงอายุ ” และเก็บ สถานะเป็นกลุ่มที่ 3

50 50 Exercise 18 – โจทย์ชวนคิด Star & Numbered Triangle while(y<=5) { while(x<=5) { … } while(y<=5) { while(x<=??) { … }

51 51 Job4 – เกมส์จารชน - ทายตัวเลข จงเขียนโปรแกรมทายตัวเลข โดยมีเงื่อนไขดังนี้ ตัวเลขคำตอบให้หามาจากการสุ่ม มีค่าระหว่าง 1 ถึง 100 ถ้าตัวเลขที่ใส่เข้ามา มีค่ามากกว่าตัวเลขที่สุ่มได้ ให้กำหนดช่วงของ ตัวเลขสูงสุดที่ต้องใส่เข้ามาไม่เกินค่าที่ใส่เข้ามา เช่น ตัวเลขสุ่มคือ 15 ใส่ตัวเลข 50 ดังนั้นช่วงของตัวเลขที่ต้องทายจะอยู่ระหว่าง 1 ถึง 49 ถ้าตัวเลขที่ใส่เข้ามา มีค่าน้อยกว่าตัวเลขที่สุ่มได้ ให้กำหนดช่วงของ ตัวเลขต่ำสุดที่ต้องใส่เข้ามาไม่ต่ำกว่าค่าที่ใส่เข้ามา เช่น ตัวเลขสุ่มคือ 15 ใส่ตัวเลข 3 ดังนั้นช่วงของตัวเลขที่ต้องทายจะอยู่ระหว่าง 4 ถึง 50 ถ้าตัวเลขที่ใส่เข้ามา มีค่าไม่อยู่ในช่วงตัวเลขที่กำหนด ให้แสดงข้อความ ว่า “Incorrect” และกลับไปรับค่าใหม่ เมื่อทายผลถูกต้อง ให้แสดงตัวเลขที่สุ่มนั้นออกมา ให้จัดทำเอกสารขั้นตอนการวิเคราะห์โปรแกรม เอกสารประกอบการเขียน โปรแกรม และคู่มือการใช้โปรแกรม ต้องกำหนดค่า max, min สำหรับเก็บค่าสูงสุด และต่ำสุด ต้องใช้คำสั่งในการ Random ตัวเลข ดังนี้ #include int ran= random(max); // จะ random ตั้งแต่ 0 ถึง max-1 int ran= random(max+1); // จะ random ตั้งแต่ 1 ถึง max

52 52 ภาพแสดงการเล่นเกมส์ทายตัวเลข

53 53 !! Good luck !! See you next semester


ดาวน์โหลด ppt 1 1204 102 Problem Solving Control Structure โครงสร้างควบคุม คณาจารย์หลักสูตรวิทยาการคอมพิวเตอร์

งานนำเสนอที่คล้ายกัน


Ads by Google