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

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

Week 10 การเขียนโปรแกรมเบื้องต้น #2

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


งานนำเสนอเรื่อง: "Week 10 การเขียนโปรแกรมเบื้องต้น #2"— ใบสำเนางานนำเสนอ:

1 Week 10 การเขียนโปรแกรมเบื้องต้น #2

2 Outline การคำนวณค่า Standard Deviation (SD) เกมทายตัวเลขแบบซับซ้อน

3 การคำนวณค่า Standard Deviation (SD)
ถ้าเราต้องการคำนวณค่า SD ของกลุ่มประชากร (Population) จำนวน 10 ข้อมูล ตามสมการต่อไปนี้ จะเห็นได้ว่า เราต้องนำข้อมูลแต่ละข้อมูลมาลบโดยค่าเฉลี่ย หรือ เราจะหาค่าเฉลี่ยได้อย่างไร? การคำนวณค่าเฉลี่ยนั้น เราจำเป็นต้องบวกข้อมูลทั้งหมดเข้าด้วยกัน จากนั้นทำการหารด้วยจำนวนข้อมูลทั้งหมด ก่อนที่จะเขียนโปรแกรม เป็นสิ่งจำเป็นที่จะต้องมีความเข้าใจความหมาย กระบวนการ ขั้นตอน ของปัญหาที่ต้องการเขียนโปรแกรมอย่างท่องแท้ ในตัวอย่างนี้ จำเป็นต้อเข้าใจนิยามของค่า Standard Deviation และกระบวนการและขั้นตอนการหาค่า SD นี้ ซึ่งสังเกตว่า ในขั้นตอนการหาค่า SD จะต้องมีการหาค่าเฉลี่ยของกลุ่มข้อมูล (x_bar) ก่อน ซึ่งได้มาจากผลรวมของข้อมูลหารจำนวนข้อมูลนั่นเอง แล้วนำค่าเฉลี่ยมาใช้ในสมการในการหาค่า SD ต่อไป ซึ่งจะสังเกตได้อีกว่า การหาค่า SD จะต้องมีการทำการคำนวณกับค่าข้อมูลแต่ละค่า เช่นถ้ามีข้อมูล 10 ตัว ก็จะต้องทำการคำนวณในส่วนที่อยู่ในเครื่องหมาย Summation จำนวน 10 รอบ แล้วถึงจะนำเอาผลรวมมาหารจำนวนข้อมูลแล้วหา Square Root ต่อไป

4 การคำนวณค่า Standard Deviation (SD)
ดังนั้น เราจะทำการเขียนโปรแกรมเพื่อรับข้อมูลจำนวน 10 ข้อมูลเป็นขั้นตอนแรก กิจกรรม 1 ให้นักศึกษาเขียนโปรแกรมรับค่าข้อมูลจำนวน 10 ข้อมูล กำหนดให้ตัวแปรที่ใช้ในการรับข้อมูลชื่อ a โดยข้อมูลแรกเก็บอยู่ใน a[0], ข้อมูลที่สองเก็บใน a[1], …, ข้อมูลที่สิบเก็บใน a[9] #include <stdio.h> void main() { int a[10],n; for ( n=0 ; n<10 ; n++ ) { printf("Enter your data:"); scanf("%d", &a[n]); } ในส่วนนี้จะเป็นการรับข้อมูลตัวเลขชนิดจำนวนเต็ม 10 จำนวน มาเก็บไว้ใน Array ชื่อ a ด้วยการใช้ scanf ในการรับข้อมูลเข้า

5 การคำนวณค่า Standard Deviation (SD)
กิจกรรมที่ 2 ให้นักศึกษาทำการแก้ไขโปรแกรมจากกิจกรรมที่ 1 ให้คำนวณค่าเฉลี่ย หลังจากที่รับข้อมูลทั้ง 10 เสร็จแล้ว โดยกำหนดให้ตัวแปรสำหรับเก็บค่าเฉลี่ยชื่อ avg #include <stdio.h> void main() { int a[10], n; float csum = 0, avg; for ( n=0 ; n<10 ; n++ ) { printf("Enter your data:"); scanf("%d", &a[n]); csum = csum + a[n]; } avg=csum/10; ในส่วนนี้จะเป็นส่วนเพิ่มจากโปรแกรมก่อนหน้านี้ เพื่อให้สามารถมีการคำนวณค่าผลรวมไปใน Loop หลังจากการรับข้อมูลเข้ามาในแต่ละรอบ และเมื่อสิ้นสุดการวน Loop ก็จะมีการคำนวณค่าเฉลี่ย คำถาม 1. ถ้าไม่มีการกำหนดค่าเริ่มต้นตัวแปร csum ให้เป็น 0 จะเกิดอะไรขึ้น?

6 การคำนวณค่า Standard Deviation (SD)
จากสูตร เราจะต้องนำข้อมูลทีละหนึ่งข้อมูลมาลบโดยค่าเฉลี่ยจากนั้นยกกำลังสอง ถ้าต้องการนำข้อมูลแรกมาลบโดยค่าเฉลี่ยและยกกำลังสอง จะเขียนเป็นโปรแกรมอย่างไร? ในสูตรการหา SD จะมีส่วนการยกกำลังสอง ซึ่งสามารถใช้ฟังก์ชัน pow() ได้ pow((a[0]-avg),2)

7 การคำนวณค่า Standard Deviation (SD)
ถ้าต้องการหาค่าผลบวกรวมของค่าดังกล่าว จำนวน 10 ค่า วิธีการหนึ่งคือการใช้ for loop จำนวน 10 ครั้ง กิจกรรมที่ 3 ให้นักศึกษาทำการแก้ไขโปรแกรมจากกิจกรรมที่ 2 เพื่อหาค่าผลบวกรวมโดยกำหนดให้ตัวแปรสำหรับเก็บค่าผลบวกรวมชื่อ sq_sum ... #include <math.h> float sq_sum=0; for ( n=0 ; n<10 ; n++ ) { sq_sum = sq_sum + pow((a[n]-avg),2); } ในส่วนของโปรแกรมนี้จะเป็นส่วนการคำนวณผลรวมของส่วนที่เกิดจากการยกกำลังสองของผลต่างของข้อมูลของรอบนั้นกับค่าเฉลี่ยของข้อมูล

8 การคำนวณค่า Standard Deviation (SD)
จากนั้นนำค่า sq_sum มาหารด้วย 10 และถอดรากที่ 2 โดยใช้ตัวแปรชื่อ sd ... #include <math.h> float sq_sum = 0, sd; for ( n=0 ; n<10 ; n++ ) { sq_sum = sq_sum + pow((a[n]-avg),2); } sd=sqrt(sq_sum/10); ในส่วนนี้ก็จะนำค่าผลรวม sq_sum มาหารจำนวนข้อมูล ซึ่งในที่นี้คือ 10 แล้วนำมาเป็บไว้ในตัวแปรขื่อ sd

9 การคำนวณค่า Standard Deviation (SD)
#include <stdio.h> #include <math.h> void main() { float csum=0, avg, sq_sum=0, sd; int a[10], n; //get data and compute avg for ( n=0 ; n<10 ; n++ ) { printf("Enter your data:"); scanf("%d", &a[n]); csum = csum + a[n]; } avg=csum/10; //compute SD sq_sum = sq_sum + pow((a[n]-avg),2); sd=sqrt(sq_sum/10); printf(“SD = %.2f\n”, sd); ซึ่งจะสามารถรวมส่วนต่างๆ ที่ได้กล่าวถึงทั้งหมด เป็นโปรแกรมที่สมบูรณ์สำหรับการหาค่า SD

10 ตัดเกรดนักเรียนโดยใช้ SD
ค่า SD สามารถนำมาใช้ในการตัดเกรดนักเรียนแบบอิงกลุ่มได้ เช่น ให้ค่าคะแนนในช่วงมากกว่า avg+sd ได้เกรด A, ช่วง avg-sd ได้เกรด F นอกนั้นให้เกรด C ซึ่งการตัดเกรดแบบนี้ การคิดค่าเกรดจะต้องเกิดขึ้นหลังจากมีการคำนวณ SD แล้ว ในส่วนนี้ ถ้ามีการนำเอาค่า SD ไปประยุกต์ใช้เพื่อการตัดเกรดผลการเรียน ดังนี้คือ ถ้ากำหนดให้ค่าคะแนนในช่วงมากกว่า avg+sd ได้เกรด A, ช่วง avg-sd ได้เกรด F นอกนั้นให้เกรด C การตัดเกรดแบบนี้จะแตกต่างจากการกำหนดเกณฑ์ไว้ตายตัว การตัดเกรดแบบนี้จะขึ้นอยู่กับกลุ่มข้อมูลคะแนน ซึ่งจะต้องมีการคำนวณค่า SD มาก่อน และ ค่าเฉลี่ย ซึ่งต้องใช้ในการคำนวณ SD อยู่แล้ว เพื่อใช้ค่าทางสถิติทั้งสองนี้ในขั้นตอนการตัดเกรดต่อไป

11 เกมทายตัวเลข (อีกครั้ง)
#include <stdio.h> #include <stdlib.h> #include <time.h> void main() { int n, g, i = 1; srand(time(NULL)); n = rand() % 11; // generate a random number 0-10 do { printf("Guess a number[0,10]:"); scanf("%d", &g); i++; } while ((g!=n)&&(i<=5)); if (g == n) printf(“You got it.\n”); else printf("You failed. Please try again.\n"); } อ้างอิงจากโปรแกรมเกมทายเลขเดิมดังนี้ ในส่วนนี้จะเป็นการพัฒนาต่อจากโปรแกรมการทายตัวเลขก่อนหน้านี้ เพื่อให้มีความซับซ้อนขึ้น โดยจะสังเกตเห็นว่า โปรแกรมนี้จะมีการถามการทายตัวเลขจำนวน 5 รอบ และสามารถบอกผลการทายว่าถูกต้องหรือไม่ถูกต้องเท่านั้น

12 เกมทายตัวเลข (อีกครั้ง)
เราจะทำการปรับปรุงให้โปรแกรมนี้ทำการบอกใบ้ให้กับผู้ใช้ เช่น ถ้าเลขที่สุ่มได้เป็น 8 แต่ผู้ใช้กรอกเลข 3 โปรแกรมก็จะบอกว่าให้ทายตัวเลขที่มากกว่านี้ แต่ถ้าผู้ใช้กรอกเลข 9 โปรแกรมก็จะบอกว่าให้ทายตัวเลขที่น้อยกว่านี้ ดังรูปด้านล่าง แสดงตัวอย่าง ถ้าเลขสุ่มคือ 5 และตัวเลขที่ผู้ใช้ทายแสดงด้วยสีแดง Guess a number[0,10]:2 Greater than this. Guess a number[0,10]:6 Less than this. Guess a number[0,10]:5 You got it. เราจะทำการปรับปรุงให้โปรแกรมนี้ให้ดีขึ้นโดยให้โปรแกรมทำการบอกใบ้ให้กับผู้ใช้ เช่น ถ้าเลขที่สุ่มได้เป็น 8 แต่ผู้ใช้กรอกเลข 3 โปรแกรมก็จะบอกว่าให้ทายตัวเลขที่มากกว่านี้ แต่ถ้าผู้ใช้กรอกเลข 9 โปรแกรมก็จะบอกว่าให้ทายตัวเลขที่น้อยกว่านี้ ดังรูป

13 เกมทายตัวเลข (อีกครั้ง)
จากโปรแกรม เราต้องเปรียบเทียบตัวแปรสุ่มและตัวแปรที่เก็บค่าที่ถูกกรอกโดยผู้ใช้ ถ้าตัวแปรสุ่มมากกว่าตัวแปรตัวแปรที่เก็บค่าที่ถูกกรอกโดยผู้ใช้ จะต้องแสดงคำบอกใบ้ว่า? Greater than this. ถ้าตัวแปรสุ่มน้อยกว่าตัวแปรตัวแปรที่เก็บค่าที่ถูกกรอกโดยผู้ใช้ จะต้องแสดงคำบอกใบ้ว่า? Less than this. ถ้าตัวแปรสุ่มเท่ากับตัวแปรตัวแปรที่เก็บค่าที่ถูกกรอกโดยผู้ใช้ จะต้องแสดงคำบอกใบ้ว่า? ไม่ต้องบอกใบ้ เพราะเดาถูกแล้ว  ตัวแปรสุ่มในโค๊ดคือ ? n ตัวแปรที่เก็บค่าที่ถูกกรอกโดยผู้ใช้คือ? g ในส่วนนี้ เป็นคำถามเพื่อทบทวนความเข้าใจการทำงานของโปรแกรม

14 เกมทายตัวเลข (อีกครั้ง)
จากโปรแกรม เราต้องเปรียบเทียบตัวแปรสุ่มและตัวแปรที่เก็บค่าที่ถูกกรอกโดยผู้ใช้ กิจกรรม 4 ให้นักศึกษาทดลองเขียน Flowchart ส่วนของการเปรียบเทียบตัวแปรสุ่มและตัวแปรตัวแปรที่เก็บค่าที่ถูกกรอกโดยผู้ใช้ g==n g>n g<n display ‘Less than this.’ display ‘Greater than this.’ display ‘You got it.’ N N N ซึ่งสามารถแสดงการทำงานด้วย Flowchart ในส่วนของการตัดสินใจ โดยเงื่อนไขเป็นการเปรียบเทียบระหว่างตัวเลขสุ่มที่ต้องการให้ผู้เล่นทาย และค่าตัวเลขที่ผู้เล่นทายเข้ามา Y Y Y

15 เกมทายตัวเลข (อีกครั้ง)
อย่างไรก็ตาม ถ้า g ไม่ได้เท่ากับ n และ g ไม่ได้มากกว่า n หมายความว่า g จะต้องน้อยกว่า n แน่นอน เราจึงสามารถเปลี่ยน Flowchart ได้ดังนี้ g==n g>n display ‘Less than this.’ display ‘Greater than this.’ display ‘You got it.’ N N Y Y สามารถเขียน Flowchart การทำงานให้ถูกต้องเหมาะสมยิ่งขึ้นได้ดังรูป เนื่องจากการทดสอบเงื่อนไข g<n ไม่มีความจำเป็นจึงสามารถตัดออกได้

16 เกมทายตัวเลข (อีกครั้ง)
จาก Flowchart เราสามารถเขียนโปรแกรมส่วนดังกล่าวได้ดังนี้ if (g==n) { printf("You got it.\n"); } else if (g>n) { printf("Less than this.\n"); else { printf("Greater than this.\n"); สามารถเขียนโปรแกรมจาก Flowchart ได้ดังนี้

17 เกมทายตัวเลข เกมทายตัวเลข
#include <stdio.h> #include <stdlib.h> #include <time.h> void main() { int n, g, i = 1; srand(time(NULL)); n = rand() % 11; // generate a random number 0-10 do { printf("Guess a number[0,10]:"); scanf("%d", &g); if (g==n) { printf("You got it.\n"); } else if (g>n) { printf("Less than this.\n"); else { printf("Greater than this.\n"); i++; } while ((g!=n)&&(i<=5)); if (g != n) printf("You failed. Please try again.\n"); เกมทายตัวเลข รวมเป็นโปรแกรมทายเลขแบบที่มีการบอกใบ้ได้ดังรูป

18 สรุป นอกจากเราจะใช้ Flowchart ในการสื่อสารระหว่างผู้พัฒนาโปรแกรมแล้ว Flowchart ยังช่วยให้ผู้พัฒนาโปรแกรมเข้าใจ Flow หรือลำดับของการทำงานได้ดีขึ้น เมื่อนักศึกษาเขียนโปรแกรมที่ค่อนข้างซับซ้อน ควรเริ่มต้นด้วยการคิดวิเคราะห์จากจุดเล็ก ๆ ที่ทำความเข้าใจได้ง่ายก่อน จากนั้นค่อยขยายการคิดไปสู่จุดที่ใหญ่มากขึ้น จนกระทั่งเขียนโปรแกรมได้ทั้งโปรแกรม


ดาวน์โหลด ppt Week 10 การเขียนโปรแกรมเบื้องต้น #2

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


Ads by Google