Group Blog
 
 
ตุลาคม 2554
 
 1
2345678
9101112131415
16171819202122
23242526272829
3031 
 
13 ตุลาคม 2554
 
All Blogs
 
ภาษาซีกับคณิตศาสตร์ ตอนที่ 1 -- ผมรวม (Summation)

ภาษาซีกับคณิตศาสตร์ ตอนที่ 1 -- ผมรวม (Summation)

เนื่องจากตอนนี้เป็นตอนแรกที่ว่าด้วย "ภาษาซีกับคณิตศาสตร์" (จริงๆ จะเป็นภาษาคอมพิวเตอร์ภาษาใดๆ ก็ได้)
จึงของเกริ่นนำเปิดทางซักเล็กน้อย... การเขียนโปรแกรมส่วนมากมีสองอย่างที่เกี่ยวข้องโดยตรง คือ กระบวน
การคิดทางลอจิก และทักษะการเขียนโปรแกรมภาษานั้นๆ แต่เมื่อมองลงไปอีกหน่อยสิ่งที่มีบทบาทมากกว่า และ
เห็นผลต่อโลกมากกว่าคือความคิดสร้างสรรค์ ใครสรรสร้างโปรแกรมขึ้นมาได้สวยกว่า จะได้รับการนิยมกันในหมู่
ของผู้ใช้ทั่วไปได้มากกว่า และแน่นอนสร้างโปรแกรมเพื่อธุรกิจความสวยงาม โดดเด่นจะต้องมาก่อน มองโลกให้
แคบลงมา อาจจะลงมาในวงการวิศกรรม การคำนวณที่ทรงประสิทธิภาพ ถูกต้อง แม่นยำ ตอบโจทย์ในงานตรงจุด
จะถูกให้ความสำคัญมากกว่าความสวยงาม ในงานบางงาน นอกจะ ถูกต้อง แม่นยำ แล้วยังต้องให้ความสำคัญกับ
ความเร็วในการคำนวณด้วย สิ่งต่างๆ เหล่านี้ย่อมได้มาจากนักคณิตศาสตร์ ถ่ายทอดไปยังโปรแกรมเมอร์เพื่อแปล
ความหมายและสั่งงานให้คอมพิวเตอร์ทำงานตามต้องการ บ่อยครั้งการสื่อสารระหว่างนักคณิตศาสตร์ หรือนักวิชา
การ กับโปรแกรมเมอร์ก็เป็นเรื่องที่ยากไม่น้อย เพราะต่างคนต่างความรู้ ต่างแนวทาง พูดกันคนละภาษา บางอย่าง
คิดเป็นสมการมาได้ แต่มันเป็นไปไม่ได้ในโลกคอมพิวเตอร์ บางอย่างคอมพิวเตอร์ทำได้ง่ายดาย แต่นักวิชาการไม่
มีความรู้ด้านนี้ ก็เดินต่อยาก แล้วทำไมไม่สร้างเป็นนักคณิตศาสตร์และโปรแกรมเมอร์ไว้ในคนคนเดียวกัน ?

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

ในบทความชุดนี้ผมจะสอดแทรกสัญญลักษณ์ต่างๆ ที่ใช้ในวิชาณิตศาสตร์ลงไปเป็นระยะๆ พร้อมกับคำอธิบาย ก่อน
จะเปลี่ยนเป็นเป็นโปรแกรมคอมพิวเตอร์

กลับเข้ามาสู่ตอนที่ 1 กันเลยครับ
"ผมรวม" ไม่ต้องพูดอะไรก็เข้าใจ
นายดำ มีเงิน 10 บาท  นายแดง มีเงิน 8 บาท  นายเขียว มีเงิน 2 บาท เมื่อนำเงินทั้งสามคนมารวมกัน จะได้กี่บาท
10+8+2=20 นั่นคือคณิตศาสตร์วัยเยาว์ จบแค่นั้นทุกคนเข้าใจ และใช้สิ่งนี้ได้
แต่ในโลกคณิตศาสตร์ ในโลกของความเป็นจริงไม่ได้มีแค่การบวก ลบ คูณ หาร เหมือนคณิตศาตร์ปฐมศึกษา มัน
มีมากมาย มากเท่าไร่ผมก็ไม่ทราบ เพราะเท่าที่ทราบก็จำได้ไม่หมด ด้วยความที่มันมีมากมายเหลือคนานับ จึงมีความ
จำเป็นจะต้องใช้สิ่งอื่นที่ง่ายกว่า สั้นกว่า กระชับกว่า เข้ามาแทนคำพูดหรือคำอธิบาย สิ่งๆนั้นคือ เครื่องหมาย หรือ
สัญญลักษณ์ แน่นอน สัญญลักษณ์เหล่านี้ก็มีมากมายเช่นกัน ผมจะค่อยๆ แทรกลงไปเรื่อยๆ ในบทความชุดนี้

ดูสัญญลักษณ์แรกกันครับ




ตัวนี้เรียกว่า "Summation" ใช้สำหรับบ่งถึงกระบวนการรวมของอนุกรมตัวเลข จากตัวอย่างก่อนหน้า อนุกรมตัวเลข
คือ 10 8 และ 2

x[n] อาจเขียนแทนด้วย x(n) หรือ xn แต่ในโลกของคณิตศาสตร์คอมพิวเตอร์จะว่าด้วย Discrete mathematics
และนิยมใช้เครื่องหมาย [ ] ("square bracket") และใช้เป็นสิ่งบอกตำแหน่ง (Index) เช่น x[0]=10 หมายความว่า x
ในตำแหน่งแรกมีค่าเท่ากับ 10 (โปรแกรมคอมพิวเตอร์ส่วนมากจะกำหนด Index เริ่มต้นที่ 0)

n=0 ที่อยู่ใต้เครื่องหมาย Summation เป็นตัวบอกว่าค่าของตัวแปร n จะเริ่มจาก 0 เป็นต้นไป

N-1 ที่อยู่บนเครื่องหมาย Summation เป็นตัวบอกว่า n จะมีค่าสุดท้ายเท่ากับ N-1 เมื่อ N คือจำนวนของตัวเลขที่เรา
สนใจ ในตัวอย่างนี้ก็คือ 3 เพราะมีเลขอยู่สามตัว (10 8 และ 2)
ทำไม N ต้องลบด้วย 1? คำตอบคือเพราะ n เริ่มจาก 0 ในโลกของเรา การนับเริ่มที่ 1 ไปจบลงที่ N แต่ถ้าการนับเริ่ม
ที่ 0 ก็ต้องจบ ที่ N-1 (1 ถึง 3 มีค่าเท่ากับ 0 ถึง 2)

y แน่นอนคือผลลัพธ์ของการกระทำนี้ นั่นก็คือผลรวม ตีความของสัญญลักณ์นี้เป็นภาษาพูดจะได้ว่า ผลรวมของตัว
เลขทุกตัวที่อยู่ใน x ตั้งแต่ตำแหน่งที่ 0 จนถึงตำแหน่งที่ N-1 หรือ y เท่ากับ ผลรวมของ x ตั้งแต่ตำแหน่งที่ 0 จนถึง
ตำแหน่งที่ N-1

ต่อไปมาดูภาษาคอมพิวเตอร์กันบ้าง



CODE:: (c)




  1. #include 

  2. void main(void)  

  3. {  

  4.    #define N 3 // จำนวนตัวเลขที่ต้องการมีอยู่ 3 ตัว

  5. double x[N]; // ตัวแปรสำหรับเก็บตัวเลขทั้ง 3 ตัว

  6. double y = 0; // ตัวแปรสำหรับเก็บผลรวม ให้ค่าเริ่มต้นเท่ากับ 0

  7. int n; // ตัวแปรระบุตำแหน่ง (Index) ของ x 


  8.    x[0] = 10; // กำหนดค่าลงไปยังตำแหน่งต่างๆ ของ x ตามความต้องการ

  9.    x[1] = 8;  

  10.    x[2] = 2;  


  11. for(n=0; n// วนลูป N (3) ครั้ง

  12.       y = y+x[0]; // บวกสะสม (cumulative sum)

  13.    }  

  14.    printf("y=%3.3fn",y); // แสดงผลลัพธ์

  15. }  




และนั่นคือการบวกรวม บางคนอาจจะเรียกว่าการอินทีเกรด (Integrate) ก็ไม่ว่ากัน เจอกันในตอนต่อไปครับ

หัวข้ออื่นๆ : www.shadowwares.com/forum


By Santi; www.shadowwares.com






Free TextEditor


Create Date : 13 ตุลาคม 2554
Last Update : 13 ตุลาคม 2554 14:13:05 น. 0 comments
Counter : 750 Pageviews.

TheInsight
Location :


[ดู Profile ทั้งหมด]

ฝากข้อความหลังไมค์
Rss Feed
Smember
ผู้ติดตามบล็อก : 3 คน [?]




Links
 

 Pantip.com | PantipMarket.com | Pantown.com | © 2004 BlogGang.com allrights reserved.