Sequence Decision Repeation
Total Page:16
File Type:pdf, Size:1020Kb
การเขียนโปรแกรมเบื5องต ้น (Introduction to Programming) http://www.thaiall.com/article/teachpro.htm การเขียนโปรแกรมเบื้องตน (Introduction to Programming) เว็บเพจสํารอง (Backup Webpages) : thaiabc.com | thaiall.korattown.com | perlphpasp.com | thaiall.com ปรับปรุง : 2555-01-23 (ปรับแกตัวอยาง pyramid) เรียนเขียนโปรแกรมระดับเทพ expert-programming-tutor.com Android C C++ JavaC# DataStructure เรียนเป็นระบบโดยเน ้นลงมือจริงทําจริ สารบัญ (Contents) ถารักจะเป็นนักคอมพิวเตอร .. ตองพยายามแบบ .. 1. แนวคิดการสอนเขียนโปรแกรม 2. ความหมายของ Structure Programming ฝนทั่งใหเป็นเข็ม 3. การเริ่มตนเขียนโปรแกรม sharpen an anVil to create a pin # 4. การบานคือ บันไดสูประสบการณ 5. ตัวอยางปิรามิด คือแบบฝึกหัดที่ยาก (เพิ่ม 4 ต.ย. สค.46) .. นักศึกษาของผม .. เวลาสอบตก จะพูดวา ถาพยายามจริง ๆ คงทําไดดีกวานีคงทําไดดีกวานี้้้้ 6. ตัวอยางโปรแกรมภาษา Pascal ผมก็จะถามวา กั๊กความพยายมของตน .. ไวทําไม 7. ตัวอยางโปรแกรมภาษา JaVa Script ขัขัขั้ขันตอนการเรียนรู้้้นตอนการเรียนรู เพื่เพื่่อเป็น่อเป็น Programmer 8. แบงระดับการเขียนโปรแกรม 4 ระดับ 1. เขียนโปรแกรมเบื้องตน 1 ภาษา ( Programming Language ) 9. แบบฝึกหัดสําหรับสอนการเขียนโปรแกรม (60 โจทย มค.47) 2. โครงสรางขอมูล ( Data Structures ) 10. โปรแกรมเมอรคนแรกของโลก (Augusta LoVelace Ada) 3. ระบบฐานขอมูล ( Database System ) 11. 143 ภาษาคอมพิวเตอร 4. การวิเคราะห และออกแบบระบบ ( System Analysis and Design ) 12. ภาษาคอมพิวเตอร (Time Line) 5. โครงงานนักศึกษา ( Student Project ) เพื่อฝึกปฏิบัติจริง เว็บเพจนี้ คือ ขั้นตอนที่ 1 สูการเป็น Programmer + ผูสนับสนุน ผูสนับสนุน + รับผูสนับสนุน 1. แนวคิดการสอนเขียนโปรแกรม หลายครั้งที่ผมตองเริ่มสอนเขียนโปรแกรม ใหนักเรียนกลุมใหม และก็ตองบอกเลา ดวยประโยคเดิมทุกครั้งวา "การเขียนโปรแกรม ทุกภาษานัทุกภาษานั้้้นน้นน เหมือนกันเหมือนกัน" สิ่งที่แตกตางกัน ของแตละภาษาคือ syntax แตสิ่งที่เหมือนกันของทุกภาษาคือ การใชประสบการณจากภาษาหนึง่ ไปใชในอีกภาษาหนึ่งได ดวยการซึมซับ เรื่องของ Structure Programming จนเขาใจ เพื่อควบคุมในสิ่งที่คลาย ๆ กันคือ input, process และ output ซึงหมายความวา่ ถาทาน เขียนโปรแกรมอะไร ในภาษาหนึงไดแลว่ การเขียนโปรแกรมแบบนั้น ในภาษาอื่นยอมไมใชเรื่องยากอีกตอไป เพียงแตตองศึกษาถึง syntax หรือ รูปแบบ การเขียนของภาษาใหมนั้นเพิ่มเติม แลวนําประสบการณที่เคยเขียน ไปสั่งใหภาษาใหมทํางานตามตองการ ผมจึงมักสนับสนุนใหนักเรียน ไดศึกษาภาษาที่ไม มีตัวชวยมาก เพื่อใหเขาใจในหลักการ และขั้นตอนการทํางาน อยางละเอียดชัดเจน จากการทํางานของตัวแปรภาษาที่มีตัวชวยนอย ทํางานบน dos สามารถ แปลเป็น exe และ นําไปใชไดโดยไมยุงยาก เชน c, pascal, basic, fox... หรือ clipper เป็นตน 2. ความหมายของ Structure Programming การโปรแกรมแบบมีโครงสราง หรือ การโปรแกรมโครงสราง คือ การกําหนดขั้นตอนใหเครื่องคอมพิวเตอรทํางานโดยมีโครงสรางการควบคุม พื้นฐาน 3 หลักการ ไดแก การทํางานแบบตามลําดับ(Sequence) การเลือกกระทําตามเงื่อนไข(Decision) และ การทําซํ้า(Loop) ตําราหลายเลมจะขยายความออกไปวา Decision แยกเป็น If และ Case สวน Loop แยกเป็น While และ Until ถาแยกใหละเอียดก็อาจไดถึง 5 หลักการ แตในที่นี้ขอนําเสนอไวเพียง 3 หลักการ ดังนี้ 2.1 การทํางานแบบตามลําดับ(Sequence) คือ การเขียนใหทํางานจากบนลงลาง เขียนคําสั่งเป็นบรรทัด และทําทีละบรรทัดจากบรรทัดบนสุดลง ไปจนถึงบรรทัดลางสุด สมมติใหมีการทํางาน 3 กระบวนการคือ อานขอมูล คํานวณ และพิมพ จะเขียนเป็นผังงาน(Flowchart) ในแบบตามลําดับไดตาม ภาพ 2.2 การเลือกกระทําตามเงืการเลือกกระทําตามเงื่่่อนไข(Decision)่อนไข(Decision) คือ การเขียนโปรแกรมเพื่อนําคาไปเลือกกระทํา โดยปกติจะมีเหตุการณใหทํา 2 กระบวนการ คือ เงื่อนไขเป็นจริงจะกระทํากระบวนการหนึ่ง และเป็นเท็จจะกระทําอีกกระบวนการหนึง่ แตถาซับซอนมากขึน้ จะตองใชเงื่อนไขหลายชั้น เชนการตัดเกรดนัก ศึกษา เป็นตน ตัวอยางผังงานนี้ จะแสดงผลการเลือกอยางงาย เพื่อกระทํากระบวนการเพียงกระบวนการเดียว 2.3 การทําซํการทําซํ้้้า(Repeation้า(Repeation or Loop) คือ การทํากระบวนการหนึงหลายครั้ง่ โดยมีเงื่อนไขในการควบคุม หมายถึงการทําซํ้าเป็นหลักการที่ทํา ความเขาใจไดยากกวา 2 รูปแบบแรก เพราะการเขียนโปรแกรมแตละภาษา จะไมแสดงภาพอยางชัดเจนเหมือนการเขียนผังงาน(Flowchart) ผูเขียน โปรแกรมตองจินตนาการ ถึงรูปแบบการทํางาน และใชคําสั่งควบคุมดวยตนเอง ตัวอยางผังงานที่นํามาแสดงนี้เป็นการแสดงคําสั่งทําซํ้า(do while) ซึงหมาย่ ถึงการทําซํ้าในขณะที่เป็นจริง และเลิกการทําซํ้าเมื่อเงื่อนไขเป็นเท็จ Sequence Decision Repeation รายละเอียดเพิ่มเติมที่ http://www.thaiall.com/flowchart 3. การเริการเริ่่่มตนเขียนโปรแกรม่มตนเขียนโปรแกรม X เริ่มตนเขียนโปรแกรม เริ่มตนตรงไหน : สําหรับผม เมื่อไดมาทําหนาที่สอนหนังสือ โดยเฉพาะการเขียนโปรแกรมทุกภาษา ผมจะสอนใหนักศึกษา เขียนโปรแกรมควบคุมตัวเลข เชนการพิมพ 1 ถึง 10 หรือ สูตรคูณ หรือปิรามิดของตัวเลข ที่ตองฝึกใช Structure Programming ใหชํานาญ และปัญหาก็ เกิดขึนทุกครั้ง้ คือ "นักเรียนบนวาไมชอบเขียน ไมมีประโยชน" หรือ "เขียนไมได ถึงเขียนได ก็ไมรูจะเขียนไปทําไม" แลวผมก็ตองกลับไปอธิบายอีกครั้งวา การเริ่มตนแบบนี้ "จะทําใหรูจักควบคุมโปรแกรม ตามหลักการของโปรแกรมแบบมีโครงสรางไดชํานาญขึน้ รูจักเรียนรู และแกปัญหาดวยตนเอง รวมทั้ง รูจักแกไข Syntax พื้นฐานไมใหผิดพลาด เมื่อสามารถเขียนโปรแกรมในระดับตอ ๆ ไปได" เริเริเริ่เริ่่มตนเขียนโปรแกรมทําอยางไร่มตนเขียนโปรแกรมทําอยางไร (จากหนังสือ พื้นฐานเว็บมาสเตอรบทที่ 17) 1. เลือกภาษา สําหรับนักเรียน นักศึกษานั้นงายที่จะเลือก เพราะอาจารยคอยชี้แนะ 2. หาแหลงขอมูลอางอิงจากหองสมุด ถาทานไมมีอะไรอยูในมือเลย คงนึกโครงสรางภาษาไมออกเป็นแน 1 จาก 7 25/9/2556 8:32 การเขียนโปรแกรมเบื5องต ้น (Introduction to Programming) http://www.thaiall.com/article/teachpro.htm 3. หาตัวแปลภาษา ทุกภาษาตองมีตัวแปลภาษา มีหลายภาษาที่ถูกสรางเป็น Free compiler ตองหาดู 4. เขียนโปรแกรมตัวแรกที่งาย เชน พิมพเลข 5 เป็นตน 5. ศึกษาการทําซํ้า และการเลือกตามเงื่อนไข เชนพิมพสูตรคูณ หรือพิมพ 1 ถึง 10 เป็นตน 6. ติดตอแฟมขอมูล เพื่ออานมาแสดงผล หรือปรับปรุงขอมูลได 7. เขียนเมนู เพื่อเลือกกระทําโปรแกรมตามตัวเลือก 8. ทํารายงานจากการเชื่อมแฟมหลายแฟม โดยกําหนดไดหลายตัวเลือก 9. เขียนโปรแกรมเพิ่มขอมูล เชน ซื้อ ขาย ยืม คืน หรือโปรแกรมลงทะเบียนนักศึกษาแตละภาคเรียนเป็นตน 10. สรางโปรแกรมขึนมาระบบหนึ้ ่งใหสมบูรณ (ความสมบูรณก็คือการสนองทุกความตองการของผูใช) 4. การบานคือ บันไดสูประสบการณ การบาน (Project) : การสั่งงานใหนักเรียนไดทํา เป็นสิ่งที่สําคัญมาก ผมไดเรียนแบบอาจารยที่เคยสอนผมเสมอ คือ สั่งงานเกือบทุกชั่วโมงเรียน ยก เวนเทศกาล หรือวันหยุดราชการ ที่เวนใหนักเรียนไดพักบาง สําหรับ project จะตองใชหลักการที่สําคัญทั้งหมดที่ไดเรียนมา หรือที่ศึกษาคนควาเพิ่มเติม ดวยตนเอง และตองใหญพอที่จะใชเวลาทําทั้งสัปดาหไมเสร็จ แตจะตองใชเวลาทําอยางตอเนื่อง ตลอดทั้งภาคเรียน การยอมรับคําวิงวอนใหลดงานของนัก เรียนนั้น อาจทําไดตามความเหมาะสม กับบทเรียนที่ไดสอนไป แตขนาดงานก็ไมควรนอยกวา การทําใหนักศึกษา ไดฝึกฝน และใชเวลาศึกษาดวยตนเอง (Self learning) อยางนอย 1 สัปดาห เพื่อทําใหโครงงานสําเร็จลุลวง และในบางวิชาของการเขียนโปรแกรม ควรมีโครงงานทั้งกอนสอบกลางภาค และปลาย ภาค คือมี Project 2 ชิ้น ในวิชานั้น และที่สําคัญที่สําคัญที่สุดสําหรับหลักการสั่งงานของผมคือ งานชิ้นใหญจะตองเป็นงานเดี่ยว เพื่อใหทุกคนไดมีโอกาสทํา ดวยตนเอง มีความภูมิใจในความสําเร็จ และเป็นผูรับผิดชอบขั้นตอนทั้งหมดดวยตนเอง ผมจะไมมอบ project ชิ้นใหญเป็นงานกลุม เพราะไมตองการใหนัก เรียนคนใดเลย พลาดขบวนการเรียนรู แมแตขั้นตอนเดียว และอาจารยจะตองมีเวลาที่จะตอบขอซักถามเสมอ เพราะบอยครั้งที่อาจจะสอนผิด สั่งงานผิด นัก เรียนนั่งหลับ นักเรียนจดผิด หนังสืออางอิงเขียนผิด หรือแมแตการตรวจงานผิดของอาจารย ก็เป็นได กรกฎาคม 2545 หลังจากผมสอนมาสิบปี พบวาการมอบหมายงานใหนักศึกษาไปทํางานในคอมพิวเตอรที่บาน โดยใหฝึกปฏิบัติดวยตนเอง ประสบ ความลมเหลวมาโดยตลอด เพราะมีนักศึกษาสวนหนึง่ ไมมีคอมพิวเตอร ไมสนใจที่จะเขียนโปรแกรม ไมตองการที่จะคิด และยอมแพ ทุกครั้งที่ใหเขียน โปรแกรมงาย ๆ ทั้ง ๆ ที่มีโปรแกรมยาก ๆ รออยูอีกมากมาย แตนักศึกษาทําไมได จึงนึกการใหงานแบบลาสุดออกคือ การใหลอกโปรแกรมดวยมือ เชน มีมีมี โปรแกรมงาย ๆ หรือควรรูอยู 15 โปรแกรม จึงมอบหมายใหลอกลงกระดาษลอกลงกระดาษลอกลงกระดาษลอกลงกระดาษ 4444 รอบรอบรอบรอบ และใหเสร็จในและใหเสร็จในและใหเสร็จในและใหเสร็จใน 1 สัปดาห ผลที่ไดคือนักศึกษาไดอานหนังสือ จดจํา รูปแบบภาษาไดมากขึน้ งานที่ใหลอกไมไดหยุดที่ 60 โปรแกรม แตมากขึน้ หรือนอยลงขึนกับความเขาใจ้ และเนื้อหาที่สอน การทําใหนักศึกษา คิดเป็น และ แกปัญหาโจทยได เป็นอีกปัญหาหนึงที่ตองสอนในหองปฏิบัติการ่ สวนการจํารูปแบบคําสั่งไมได แกไขไดดวยการสั่งใหลอกโปรแกรมเทานั้น ความคาดหวัง ของผูสอนวานักศึกษาจะตั้งใจเรียน แลวกลับไปทําคอมพิวเตอรที่บาน โดยไมลอกเพื่อนเพียงอยางเดียว ผมทํามา 10 ปี แตไมไดผลเลย 5. ตัวอยางโจทยปิรามิด คือแบบฝึกหัดทีคือแบบฝึกหัดที่ยากยากยาก่่่ยาก ตัวอยางปิรามิดทีตัวอยางปิรามิดที่่่่มอบหมายใหนักศึกษาไปเขียนมอบหมายใหนักศึกษาไปเขียน (ผมใชสอนในทุกภาษาที่ผมสอนทีเดียว) 1. 2. 3. 4. 11******11 123*** 15***** *1 22****22 234**** 26****** **212 33**33 345***** 37******* ***32123 4444 456****** 48******** ****4321234 Source Code .Java Source Code .Java Source Code .Java Source Code .Java 5. 6. (Java % and /) 7. 8. 11 1010101010101 111 123** 2**2 10101010101 12221 234*** 3****3 101010101 1233321 345**** 4******4 1010101 123444321 456***** 3****3 10101 12345554321 567****** 2**2 101 1234566654321 678******* 11 1 123456777654321 789******** 9. 10. 11. 12. 111111111 151 11 123456789 2222222 12421 2 2 2345678 33333 1233321 3 3 34567 444 123424321 4 4 456 5 12345154321 5 5 5 13. 14. 15. (2 * i - 1) 16. 987654321 12 21 11111 11111 1 * 7654321 23 32 2222 2222 21 ** 54321 34 43 333 333 321 *** 321 45 54 44 44 4321 **** 1 5665 5 5 54321***** X 17. 18. 19. 20. 19191919 1*1*****9 1*********5 1*1 28282828 2**2****8 2******** 4 22**22 37373737 3***3***7 3******* 3 333***333 46464646 4****4**6 4****** 2 4444****4444 55555555 5*****5*5 5***** 1 55555*****55555 2 จาก 7 25/9/2556 8:32 การเขียนโปรแกรมเบื5องต ้น (Introduction to Programming) http://www.thaiall.com/article/teachpro.htm 21. 22. 23. 24. *******1*7 *111111111* 1******1 1*1111111111 ******2**6 * 2222222 * 2***** 2 2***22222222 *****3***5 * 33333 * 3**** 3 3*****333333 ****4****4 * 444 * 4*** 4 4*******4444 ***5*****3 * 5 * 5** 5 5*********55 25. 26. 27. 28. ****5***** 11111* 1 * 54321*12345 ***444**** 2222** 2 ** 5432***2345 **33333*** 333*** 3 *** 543*****345 *2222222** 44**** 4 **** 54*******45 111111111* 5***** 5 ***** 5*********5 29. 30. 31. 32. 1*3*** *********1 11111*****