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

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

Problem Solving Control Structure โครงสร้างควบคุม

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


งานนำเสนอเรื่อง: "Problem Solving Control Structure โครงสร้างควบคุม"— ใบสำเนางานนำเสนอ:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

15 Example :: if 2 ทางเลือก if 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); if-else คล้ายกับ Simple if เพียงแต่มี else เพิ่มเข้ามา เพื่อทำงานถ้าเงื่อนไขเป็นเท็จ (false) if-else จะเลือกทำอย่างใดอย่างหนึ่งเท่านั้น นั่นคือ ถ้าไม่ทำงานใน if ก็ต้องทำงาน else ?? ถ้า num = 17 จะได้ผลลัพธ์อย่างไร ปล. mod(%) ต้องใช้กับข้อมูลชนิดจำนวนเต็มเท่านั้น

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

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

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

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

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

21 Example 8 – Nested If #include <stdio.h> int main() { int x;
printf("Read x : "); scanf(“%d”, &x); if (x>0) { printf(“Pos\n"); } else if (x<0) { printf(“Neg\n"); else { printf(“Zero\n"); return 0;

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

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

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

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

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

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

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

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

30 Example 11 - while #include <stdio.h> int main() {
int i = 1, sum=0; while (i <= 10) sum=sum+i; i=i+1; } printf("Sum = %d“, sum); return 0;

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

32 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 Exercise 13 - ฝึกในห้อง จงเขียนโปรแกรมหาค่า Max & Min

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

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

36 Job 3 (ต่อ)

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

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

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

40 while(), do…while()

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

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

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

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

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

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

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

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

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

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

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

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

53 !! Good luck !! See you next semester


ดาวน์โหลด ppt Problem Solving Control Structure โครงสร้างควบคุม

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


Ads by Google