ขั้นตอนการแก้ปัญหา
โดยปกติมนุษย์มีกระบวนในการแก้ปัญหา ซึ่งประกอบด้วย 4
ขั้นตอนคือ
1) การวิเคราะห์และกำหนดรายละเอียดของปัญหา (State The Problem) ขั้นตอนนี้เป็นขั้นตอนแรกสุดก่อนที่จะลงมือแก้ปัญหา
แต่ผู้แก้ปัญหามักจะมองข้ามไป
จุดประสงค์ของขั้นตอนนี้ คือ
การทำความเข้าใจกับปัญหาเพื่อแยกให้ออกว่าข้อมูลที่กำหนดมาในปัญหาหรือ
เงื่อนไขของปัญหาคืออะไร อีกทั้งวิธีการที่ใช้ประมวลผล
กล่าวโดยสรุปมีองค์ประกอบในการวิเคราะห์ดังนี้
1) การวิเคราะห์และกำหนดรายละเอียดของปัญหา (State The Problem) ขั้นตอนนี้เป็นขั้นตอนแรกสุดก่อนที่จะลงมือแก้ปัญหา
แต่ผู้แก้ปัญหามักจะมองข้ามไป
จุดประสงค์ของขั้นตอนนี้ คือ
การทำความเข้าใจกับปัญหาเพื่อแยกให้ออกว่าข้อมูลที่กำหนดมาในปัญหาหรือ
เงื่อนไขของปัญหาคืออะไร อีกทั้งวิธีการที่ใช้ประมวลผล
กล่าวโดยสรุปมีองค์ประกอบในการวิเคราะห์ดังนี้
การระบุข้อมูลเข้า
ได้แก่ การพิจารณาข้อมูลและเงื่อนไขที่กำหนดมาในปัญหา
การระบุข้อมูลออก
ได้แก่ การพิจารณาเป้าหมายหรือสิ่งที่ต้องหาคำตอบ
การกำหนดวิธีประมวลผล
ได้แก่ การพิจารณาขั้นตอนวิธีการได้มาซึ่งคำตอบหรือข้อมูลออก
ได้แก่ การพิจารณาข้อมูลและเงื่อนไขที่กำหนดมาในปัญหา
การระบุข้อมูลออก
ได้แก่ การพิจารณาเป้าหมายหรือสิ่งที่ต้องหาคำตอบ
การกำหนดวิธีประมวลผล
ได้แก่ การพิจารณาขั้นตอนวิธีการได้มาซึ่งคำตอบหรือข้อมูลออก
2) การเลือกเครื่องมือและออกแบบขั้นตอนวิธี (Tools And Algorithm Development) ขั้นตอนนี้เป็นขั้นตอนของการวางแผนในการแก้ปัญหาอย่างละเอียดถี่ถ้วน
หลังจากที่เราทำความเข้าใจกับปัญหา พิจารณาเงื่อนไขและข้อมูลที่มีอยู่
และสิ่งที่ต้องการหาในการแก้ปัญหาอย่างละเอียดถี่ถ้วน
หลังจากที่เราทำความเข้าใจกับปัญหา พิจารณาเงื่อนไขและข้อมูลที่มีอยู่
และสิ่งที่ต้องการหาในขั้นตอนที่ 1แล้ว
เราสามารถคาดคะเนวิธีการที่จะใช้ในการแก้ปัญหา
ขั้นตอนนี้จำเป็นต้องอาศัยประสบการณ์ของผู้แก้ปัญหาเป็นหลัก
หากผู้แก้ปัญหาเคยพบกับปัญหาทำนองนี้มาแล้วก็สามารถดำเนินการตามแนวทางที่
เคยปฏิบัติมา
หลังจากที่เราทำความเข้าใจกับปัญหา พิจารณาเงื่อนไขและข้อมูลที่มีอยู่
และสิ่งที่ต้องการหาในการแก้ปัญหาอย่างละเอียดถี่ถ้วน
หลังจากที่เราทำความเข้าใจกับปัญหา พิจารณาเงื่อนไขและข้อมูลที่มีอยู่
และสิ่งที่ต้องการหาในขั้นตอนที่ 1แล้ว
เราสามารถคาดคะเนวิธีการที่จะใช้ในการแก้ปัญหา
ขั้นตอนนี้จำเป็นต้องอาศัยประสบการณ์ของผู้แก้ปัญหาเป็นหลัก
หากผู้แก้ปัญหาเคยพบกับปัญหาทำนองนี้มาแล้วก็สามารถดำเนินการตามแนวทางที่
เคยปฏิบัติมา
ขั้นตอนนี้จะเริ่มจากการเลือกเครื่องมือที่ใช้ในการแก้ปัญหา
โดยพิจารณาความเหมาะสมระหว่างเครื่องมือกับเงื่อนไขต่างๆ ของปัญหา
ซึ่งหมายรวมถึงความสามารถของเครื่องมือในการแก้ปัญหาดังกล่าว
และสิ่งที่สำคัญที่สุดคือความคุ้นเคยในการใช้งานเครื่องมือนั้นๆ ของผู้แก้ปัญหา
โดยพิจารณาความเหมาะสมระหว่างเครื่องมือกับเงื่อนไขต่างๆ ของปัญหา
ซึ่งหมายรวมถึงความสามารถของเครื่องมือในการแก้ปัญหาดังกล่าว
และสิ่งที่สำคัญที่สุดคือความคุ้นเคยในการใช้งานเครื่องมือนั้นๆ ของผู้แก้ปัญหา
อีกสิ่งหนึ่งที่ สำคัญในการแก้ปัญหา คือ
ยุทธวิธีที่ใช้ในการแก้ปัญหา หรือที่เราเรียกว่า “ขั้นตอนวิธี” (Algorithm) ในการแก้ปัญหา
หลังจากที่เราได้เครื่องมือช่วยแก้ปัญหาแล้ว
ผู้แก้ปัญหาต้องวางแผนว่าจะใช้เครื่องมือดังกล่าวเพื่อให้ได้ผลลัพธ์ที่ถูก
ต้องที่สุด การออกแบบขั้นตอนวิธีในการแก้ปัญหา
ผู้แก้ปัญหาควรใช้แผนภาพหรือเครื่องมือในการแสดงขั้นตอนการทำงาน
เพื่อให้ง่ายต่อความเข้าใจ เช่น ผังงาน (Flowchart) ที่จำลองวิธีขั้นตอนการแก้ปัญหาในรูปแบบสัญลักษณ์
รหัสจำลอง (Pseudo Code) ซึ่งเป็นการจำลองขั้นตอนวิธีการปัญหาในรูปแบบคำบรรยาย
การใช้เครื่องมือช่วยออกแบบดังกล่าว
นอกจากแสดงกระบวนการที่ชัดเจนแล้วยังช่วยให้ผู้แก้ปัญหาสามารถหาข้อผิดพลาด
ของวิธีการที่ใช้ได้ง่ายและแก้ไขได้อย่างรวดเร็ว
ยุทธวิธีที่ใช้ในการแก้ปัญหา หรือที่เราเรียกว่า “ขั้นตอนวิธี” (Algorithm) ในการแก้ปัญหา
หลังจากที่เราได้เครื่องมือช่วยแก้ปัญหาแล้ว
ผู้แก้ปัญหาต้องวางแผนว่าจะใช้เครื่องมือดังกล่าวเพื่อให้ได้ผลลัพธ์ที่ถูก
ต้องที่สุด การออกแบบขั้นตอนวิธีในการแก้ปัญหา
ผู้แก้ปัญหาควรใช้แผนภาพหรือเครื่องมือในการแสดงขั้นตอนการทำงาน
เพื่อให้ง่ายต่อความเข้าใจ เช่น ผังงาน (Flowchart) ที่จำลองวิธีขั้นตอนการแก้ปัญหาในรูปแบบสัญลักษณ์
รหัสจำลอง (Pseudo Code) ซึ่งเป็นการจำลองขั้นตอนวิธีการปัญหาในรูปแบบคำบรรยาย
การใช้เครื่องมือช่วยออกแบบดังกล่าว
นอกจากแสดงกระบวนการที่ชัดเจนแล้วยังช่วยให้ผู้แก้ปัญหาสามารถหาข้อผิดพลาด
ของวิธีการที่ใช้ได้ง่ายและแก้ไขได้อย่างรวดเร็ว
3) การดำเนินการแก้ปัญหา (Implementation) หลังจากที่ออกแบบขั้นตอนวิธีเรียบร้อยแล้ว
ขั้นตอนนี้เป็นขั้นตอนที่ต้องลงมือแก้ปัญหาโดยใช้เครื่องมือที่เลือกไว้
การแก้ปัญหาดังกล่าวใช้คอมพิวเตอร์เข้ามาช่วยงาน
ขั้นตอนนี้ก็เป็นการใช้โปรแกรมสำเร็จหรือใช้ภาษาคอมพิวเตอร์เขียนโปรแกรมแก้ ปัญหา
ขั้นตอนนี้ต้องอาศัยความรู้เกี่ยวกับเครื่องมือที่เลือกใช้
ซึ่งผู้แก้ปัญหาต้องศึกษาให้เข้าใจและเชี่ยวชาญ ในขณะดำเนินการ
หากพบแนวทางที่ดีกว่าที่ออกแบบไว้ ก็สามารถปรับเปลี่ยนได้
4) การตรวจสอบและปรับปรุง (Refinement) หลังจากที่ลงมือแก้ปัญหาแล้ว
ต้องตรวจสอบให้แน่ใจว่า
วิธีการนี้ให้ผลลัพธ์ที่ถูกต้อง
โดยผู้แก้ปัญหาต้องตรวจสอบว่าขั้นตอนวิธีที่สร้างขึ้นสอดคล้องกับรายละเอียด
ของปัญหา ซึ่งได้แก่ ข้อมูลเข้าและข้อมูลออก
เพื่อให้มั่นใจว่าสามารถรองรับข้อมูลเข้าได้ทุกกรณีอย่างถูกต้องสมบูรณ์ ในขณะเดียวกันก็ต้องปรับปรุงวิธีการเพื่อให้การแก้ปัญหานี้ได้ผลลัพธ์ที่ดี
ที่สุด
ต้องตรวจสอบให้แน่ใจว่า
วิธีการนี้ให้ผลลัพธ์ที่ถูกต้อง
โดยผู้แก้ปัญหาต้องตรวจสอบว่าขั้นตอนวิธีที่สร้างขึ้นสอดคล้องกับรายละเอียด
ของปัญหา ซึ่งได้แก่ ข้อมูลเข้าและข้อมูลออก
เพื่อให้มั่นใจว่าสามารถรองรับข้อมูลเข้าได้ทุกกรณีอย่างถูกต้องสมบูรณ์ ในขณะเดียวกันก็ต้องปรับปรุงวิธีการเพื่อให้การแก้ปัญหานี้ได้ผลลัพธ์ที่ดี
ที่สุด
การถ่ายทอดความคิดในการแก้ปัญหา
การถ่ายทอดความคิดในการแก้ไขปัญหาด้วยอัลกอริทึม
[ Algorithm ]
อัลกอริทึม
(Algorithm) คือ
กระบวนการ การทำงานที่ใช้การตัดสินใจ
โดยนำหลักเหตุผลและคณิตศาสตร์มาช่วยเลือกวิธีการหรือขั้นตอนการดำเนินงานต่อไป
จนกระทั่งถึงขั้นตอนสุดท้าย เป็นวิธีการที่ใช้แยกย่อยและเรียงลำดับขั้นตอนของกระบวนการในการทำงานต่างๆ
เพื่อเพิ่มประสิทธิภาพในการค้นหาและแก้ไขปัญหา

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

รหัสลำลองหรือ pseudocode เป็นคำบรรยายที่เขียนแสดงขั้นตอนวิธี(algorithm) ของการเขียนโปรแกรม
โดยใช้ภาษาที่กะทัดรัด สื่อสารกับโปรแกรมเมอร์ผู้เขียนโปรแกรม โดยอาจใช้ภาษาที่ใช้ทั่วไปและอาจมีภาษาที่ใช้ในการเขียนโปรแกรมประกอบ
แต่ไม่มีมาตรฐานแน่นอนในการเขียน pseudocode และไม่สามารถนำไปทำงานบนคอมพิวเตอร์โดยตรง(เพราะไม่ใช่คำสั่งในภาษาคอมพิวเตอร์)
และไม่ขึ้นกับภาษาคอมพิวเตอร์ภาษาใดภาษาหนึ่ง นิยมใช้ pseudocode แสดง algorithm มากกว่าใช้ผังงาน
เพราะผังงานอาจไม่แสดงรายละเอียดมากนักและใช้สัญลักษณ์ซึ่งทำให้ไม่สะดวกในการเขียน
เช่นโปรแกรมใหญ่ ๆ มักจะประกอบด้วยคำสั่งต่างๆที่ใกล้เคียงกับภาษาคอมพิวเตอร์ที่ใช้ในการเขียนโปรแกรมจริงๆ
เช่น begin…end,
if…else, do…while, while, for, read และ printการเขียนรหัสจำลองจะต้องมีการวางแผนสำหรับการอ้างอิงถึงข้อมูลต่างๆที่จะใช้ในโปรแกรมด้วยการสร้างตัวแปร
โดยใช้เครื่องหมายเท่ากับ (=) แทนการกำหนดค่าให้กำหนดตัวแปรนั้นๆ

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


1. ผังงานระบบ (system flowchart) เป็นผังซึ่งแสดงขอบเขต
และลำดับขั้นตอนการทำงานของระบบหนึ่ง ๆ
2. ผังงานโปรแกรม (Program flowchart) เป็นผังงานซึ่งแสดงลำดับขั้นตอนการทำงานของโปรแกรมหนึ่ง
ๆ

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



เป็นรูปแบบพื้นฐานของการเขียนผังงาน
เนื่องจากเขียนได้ง่ายและนำไปใช้งานมากที่สุด







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

•
ช่วยให้สามารถทำความเข้าใจลำดับขั้นตอนการทำงานของโปรแกรมหรือระบบใด
ๆได้อย่างรวดเร็ว
•
ช่วยแสดงลำดับขั้นตอนการทำงาน
ทำให้สามารถเขียนโปรแกรมได้อย่างเป็นระบบไม่สับสน
นอกจากนี้ผังงานยังเป็นอิสระต่อภาษาที่ใช้ในการ เขียนโปรแกรม
กล่าวคือจากผังงานเดียวกันสามารถนำไปเขียนโปรแกรมด้วยภาษาใดก็ได้
•
ช่วยในการตรวจสอบ
และแก้ไขโปรแกรมได้ง่าย เมื่อเกิดข้อผิดพลาด ช่วยให้การดัดแปลง แก้ไข
ทำได้อย่างสะดวกและรวดเร็ว
•
ช่วยให้ผู้อื่นสามารถศึกษาการทำงานของโปรแกรมได้อย่างง่าย
การกำหนดค่า ในทางวิทยาการคอมพิวเตอร์ คือการระบุค่าหรือการตั้งค่าใหม่ให้กับตำแหน่งเก็บข้อมูลที่แสดงไว้โดยชื่อตัวแปร ในภาษาโปรแกรมเชิงคำสั่ง ข้อความสั่งกำหนดค่า เป็นข้อความสั่งพื้นฐานอย่างหนึ่ง
ข้อความสั่งกำหนดค่ามักอนุญาตให้ชื่อตัวแปรเดิมสามารถมีได้หลายค่าในเวลาต่าง ๆ
ในระหว่างที่โปรแกรมทำงานตัวแทนการนำเสนอแบบข้อความโดยสามัญของการกำหนดค่ามักจะใช้เครื่องหมายเท่ากับ "=" และ
":=" รูปแบบทั้งสองนี้เป็นรูปแบบปกติของภาษาโปรแกรมหลายภาษา (เช่นภาษาซี) ซึ่งจัดจำแนกการกำหนดค่าว่าเป็นตัวดำเนินการเติมกลาง
ตัวแปร = นิพจน์
|
|
ตัวแปร := นิพจน์
|
ความเป็นไปได้อย่างอื่นคือเพิ่มลูกศรชี้ข้างซ้ายหรือคำหลักเข้าไป
หรือแม้แต่รูปแบบต่างที่สามารถใช้ได้ซึ่งพบเห็นได้น้อยกว่า
ตัวแปร << นิพจน์
|
|
ตัวแปร <- นิพจน์
|
|
ตัวแปร ← นิพจน์
|
|
ตัวแปร =: นิพจน์
|
|
LET ตัวแปร = นิพจน์
|
|
set ตัวแปร to นิพจน์
|
|
set ตัวแปร = นิพจน์
|
|
Set-Variable ตัวแปร (นิพจน์)
|
|
val ตัวแปร = นิพจน์
|
|
ตัวแปร : นิพจน์
|
บางแพลตฟอร์มก็วางนิพจน์ไว้ทางซ้ายและวางตัวแปรไว้ทางขวา
MOVE นิพจน์ TO ตัวแปร
|
|
นิพจน์ → ตัวแปร
|
|
นิพจน์ -> ตัวแปร
|
ในภาษาโปรแกรมเชิงนิพจน์บางภาษา อย่างเช่นภาษาลิสป์ [7][8] และภาษาทีซีแอล
ใช้วากยสัมพันธ์แบบเติมหน้าเพียงอย่างเดียวสำหรับทุกข้อความสั่ง
ซึ่งรวมทั้งการกำหนดค่าด้วย
(setq ตัวแปร นิพจน์)
|
|
set ตัวแปร นิพจน์
|
การดำเนินการกำหนดค่าตามความหมายแล้วเป็นการเปลี่ยนแปลงสถานะปัจจุบันของโปรแกรมที่กำลังทำงานอยู่
ดังนั้นการกำหนดค่าจึงขึ้นอยู่กับแนวคิดของตัวแปร ในการกำหนดค่าหนึ่ง ๆ นิพจน์ จะถูกประเมินค่าในสถานะปัจจุบันของโปรแกรม
และ ตัวแปร จะถูกกำหนดด้วยค่าที่ประเมินนั้น
แทนที่ค่าที่มีอยู่ก่อนหน้าในตัวแปร ตัวอย่างเช่น สมมติให้ a เป็นตัวแปรเชิงตัวเลข การกำหนดค่า a := 2*a หมายถึงการทำให้ข้อมูลของตัวแปร a เพิ่มค่าเป็นสองเท่าหลังจากทำงานข้อความสั่งนี้แล้ว
ต่อไปนี้คือตัวอย่างส่วนหนึ่งของภาษาซี
int x = 10;
float y;
x = 23;
y = 32.4;
จากตัวอย่างนี้ ตัวแปร x ประกาศไว้ว่าเป็นจำนวนเต็ม (int) เมื่อเริ่มแรก จากนั้นจึงกำหนดค่าเป็น
10 สังเกตว่าการประกาศและการกำหนดค่าเกิดขึ้นในข้อความสั่งเดียวกัน
บรรทัดที่สอง ตัวแปร y ประกาศเป็นจำนวนจุดลอยตัว (float) โดยไม่กำหนดค่า บรรทัดถัดไป x ถูกกำหนดค่าใหม่ให้เป็น 23 และท้ายสุด y ถูกกำหนดให้มีค่าเท่ากับ 32.4
ในการดำเนินการกำหนดค่านั้น
สิ่งสำคัญคือค่าของ นิพจน์ จะต้องนิยามไว้แล้วเป็นอย่างดี (เป็น rvalue ที่ถูกต้อง) และ ตัวแปร จะต้องแทนด้วยเอนทิตีที่สามารถแก้ไขได้
(เป็น lvalue ที่เปลี่ยนแปลงได้
คือไม่เป็นค่าคงตัว) ในบางภาษาอย่างเช่นภาษาเพิร์ล ไม่จำเป็นต้องประกาศตัวแปรก่อนกำหนดค่าก็ได้
การกำหนดค่าแบบขนาน[แก้]
ภาษาโปรแกรมบางภาษาเช่น ภาษาอ็อกแคม 2[12] ภาษาไพทอน[13] ภาษาเพิร์ล[14] ภาษาเรบัล ภาษารูบี[15] วินโดวส์ เพาเวอร์เชลล์ และจาวาสคริปต์ (ตั้งแต่รุ่น 1.7) อนุญาตให้กำหนดค่าตัวแปรหลายตัวแบบขนานได้ (parallel assignment) ด้วยวากยสัมพันธ์คล้ายดังนี้
a,b := 0,1
คำสั่งนี้กำหนดค่า 0 ลงใน a และค่า 1 ลงใน b ในเวลาเดียวกัน
ถ้าฝั่งขวามือของการกำหนดค่าเป็นตัวแปรแถวลำดับ คุณลักษณะดังนี้อาจเรียกว่า การขยายลำดับออก (sequence
unpacking)
var list :=
0,1
a,b := list
รายการแถวลำดับจะถูกขยายออก ทำให้กำหนดค่า
0 ลงใน a และค่า 1 ลงใน b ได้เช่นกัน
รหัสต่อไปนี้เป็นตัวอย่างที่น่าสนใจ
a,b := b,a
ข้อความสั่งดังกล่าวจะสลับค่าของ a กับ b ส่วนภาษาที่ไม่มีการกำหนดค่าแบบขนาน
การสลับค่าอาจต้องเขียนโดยใช้ตัวแปรชั่วคราว t ดังนี้
var t := a
a := b
b := t
เนื่องจากข้อความสั่ง a:=b ; b:=a จะส่งผลให้ตัวแปรทั้งสองมีค่าเดียวกันคือค่าเริ่มต้นของ b
การกำหนดค่าแบบขนานเริ่มแนะนำในภาษาซีพีแอลเมื่อ พ.ศ. 2506 (ค.ศ. 1963) ในชื่อ การกำหนดค่าพร้อมกัน (simultaneous assignment) [16]
ค่าของการกำหนดค่า[แก้]
ในภาษาโปรแกรมเชิงนิพจน์ส่วนใหญ่
ข้อความสั่งกำหนดค่าจะคืนค่าเป็นค่าที่ถูกกำหนดนั้น ซึ่งทำให้ข้อความสั่งเช่น x = y = a ค่าของ a จะถูกกำหนดให้กับทั้ง x และ y หรืออย่างเช่น while (f = read()) {…} ค่าที่คืนจากฟังก์ชันจะเป็นตัวควบคุมการวนรอบ
ในเวลาเดียวกันก็กำหนดค่าที่เหมือนกันให้กับตัวแปรด้วย
ส่วนภาษาโปรแกรมอื่น
ค่าที่ส่งคืนจากการกำหนดค่าอาจไม่นิยาม และทำให้ข้อความสั่งเช่นนั้นใช้การไม่ได้
ยกตัวอย่างเช่นภาษาสกีม
ในภาษาแฮสเกลล์ [17] ไม่มีการกำหนดค่าให้กับตัวแปร
แต่การดำเนินการที่คล้ายกับการกำหนดค่า
(เหมือนการกำหนดค่าไปยังเขตข้อมูลของแถวลำดับ
หรือเขตข้อมูลของโครงสร้างข้อมูลเปลี่ยนแปลงได้) คือการประเมินค่าเป็นยูนิต ซึ่งเป็นชนิดข้อมูลทั่วไปของนิพจน์ที่ถูกประเมินค่าเพื่อให้เกิดผลข้างเคียงโดยเฉพาะ
ในการเขียนโปรแกรมเชิงฟังก์ชัน การกำหนดค่าจะลดความสำคัญลงเพื่อประโยชน์ในการกำหนดค่าเชิงเดี่ยว (single assignment) หรืออาจเรียกว่า การยึดเหนี่ยวกับชื่อ หรือ การกำหนดค่าเริ่มต้น การกำหนดค่าเชิงเดี่ยวต่างจากการกำหนดค่าปกติตรงที่สามารถกำหนดค่าได้เพียงครั้งเดียวเท่านั้น
โดยเฉพาะเมื่อตัวแปรถูกสร้างขึ้น นั่นคือไม่สามารถกำหนดค่าใหม่ภายหลัง
ค่าที่ถูกตั้งชื่อโดยการกำหนดค่าเชิงเดี่ยวจะไม่ถือว่าเป็นตัวแปร แต่จะเป็นวัตถุเปลี่ยนแปลงไม่ได้
การกำหนดค่าเชิงเดี่ยวเป็นรูปแบบเพียงอย่างเดียวที่มีอยู่สำหรับภาษาโปรแกรมเชิงฟังก์ชันอย่างแท้จริง
(purely funtional) เช่นภาษาแฮสเกลล์ ซึ่งไม่มีตัวแปรอย่างภาษาโปรแกรมเชิงคำสั่งอื่น
ๆ
ภาษาโปรแกรมเชิงฟังก์ชันที่ไม่แท้จริงก็อาจมีทั้งการกำหนดค่าเชิงเดี่ยวและการกำหนดค่าปกติ
(แม้ว่าการกำหนดค่าปกติมีที่ใช้น้อยกว่าในภาษาโปรแกรมเชิงคำสั่ง) ตัวอย่างเช่น
ในภาษาสกีม การกำหนดค่าเชิงเดี่ยวและการกำหนดค่าปกติสามารถใช้ได้กับตัวแปรทุกตัว
หรือในภาษาอ็อบเจกทีฟแคมัล การกำหนดค่าเชิงเดี่ยวใช้กับตัวแปรโดยใช้รูปแบบ let ชื่อ = ค่า ส่วนการกำหนดค่าปกติซึ่งใช้ตัวดำเนินการ <- ใช้กับสมาชิกของแถวลำดับและสายอักขระ
เช่นเดียวกับเขตข้อมูลของระเบียนและวัตถุที่ถูกประกาศอย่างชัดเจนว่าให้สามารถเปลี่ยนแปลงได้
(หมายความว่าขนาดความจุของมันสามารถเปลี่ยนแปลงได้หลังจากการประกาศตอนเริ่มต้น)
โปรแกรมเมอร์ระดับเริ่มต้นเกิดความสับสนบ่อยครั้งระหว่างการกำหนดค่ากับตัวดำเนินการสัมพันธ์ของภาวะเท่ากัน เนื่องจาก = หมายถึงภาวะเท่ากันในทางคณิตศาสตร์ และถูกใช้เป็นตัวดำเนินการกำหนดค่าในหลายภาษา
แต่การกำหนดค่าคือการเปลี่ยนแปลงค่าของตัวแปร
ในขณะที่การทดสอบภาวะเท่ากันจะตรวจสอบนิพจน์สองนิพจน์ว่ามีค่าเหมือนกันหรือไม่
หลายภาษาใช้สัญกรณ์ที่แตกต่างกันสำหรับการดำเนินการแต่ละชนิด
ตัวอย่างเช่น ตัวดำเนินการกำหนดค่าใช้เครื่องหมายเท่ากับตัวเดียว =
ในขณะที่ตัวดำเนินการเทียบเท่าใช้เครื่องหมายเท่ากับสองตัว == ในภาษาซี
แต่ในบางภาษาเช่นภาษาเบสิก เครื่องหมายเท่ากับตัวเดียวใช้แทนการดำเนินการทั้งสอง
ซึ่งความหมายของมันจะพิจารณาจากบริบท
ความสับสนเช่นนี้อาจนำไปสู่ความผิดพลาด
หากโปรแกรมเมอร์หลงลืมว่ารูปแบบใดถูกต้องเหมาะสม (=, ==, :=) หรือลงรหัสผิดพลาด (เช่นพิมพ์ = แทนที่ตั้งใจให้เป็น ==)
เป็นปัญหาปกติสามัญของการเขียนโปรแกรม อาทิในภาษาซี
ตัวดำเนินการกำหนดค่าจะคืนค่าเป็นค่าที่กำหนดไปนั้น
และสามารถใช้ซ้อนภายในนิพจน์ได้ (แบบเดียวกับฟังก์ชันที่คืนค่าออกมา)
ถ้าความตั้งใจคือการเปรียบเทียบค่าสองค่าในเงื่อนไข if การกำหนดค่าในเงื่อนไขอาจถูกตีความหมายว่าเป็นค่า TRUE ซึ่งจะทำให้ข้อความสั่งตามเงื่อนไขทำงาน
นำไปสู่พฤติกรรมของโปรแกรมที่ไม่คาดหวัง
ตัวประมวลผลของบางภาษาสามารถตรวจจับสถานการณ์เช่นนั้น และแจ้งเตือนโปรแกรมเมอร์เกี่ยวกับความผิดพลาดที่อาจเกิดขึ้นได้
1.
↑ Moore , Lawrie (1980). Foundations of Programming with
Pascal. New York :
John Wiley & Sons. ISBN 0-470-26939-1.
2.
↑ Feinberg,
Neal; Keene, Sonya E.; Mathews, Robert O.; Withington, P. Tucker (1997). Dylan
Programming. Massachusetts :
Addison Wesley. ISBN 0-201-47976-1.
3.
↑ Meyer,
Bertrand (1992). Eiffel the Language. Hemel Hempstead: Prentice
Hall International(UK ). ISBN 0-13-247925-7.
4.
↑ Wiener,
Richard (1996). An Object-Oriented Introduction to Computer Science
Using Eiffel. Upper Saddle River ,
New Jersey : Prentice Hall. ISBN 0-13-183872-5.
6.
↑ Ullman,
Jeffrey D. (1998). Elements of ML Programming: ML97 Edition. Englewood Cliffs, New
Jersey : Prentice Hall. ISBN 0-13-790387-1.
8.
↑ Steele, Guy
L. (1990). Common Lisp - The Language. Lexington : Digital Press. ISBN 1-55558-041-6.
9.
↑ Dybvig, R.
Kent (1996). The Scheme Programming Language: Ansi Scheme. New Jersey : Prentice
Hall. ISBN 0-13-454646-6.
10.
↑ Smith,
Jerry D. (1988). Introduction to Scheme. New Jersey : Prentice Hall. ISBN 0-13-496712-7.
11.
↑ Abelson,
Harold; Sussman, Gerald Jay; Sussman, Julie (1996). Structure and
Interpretation of Computer Programs. New
Jersey : McGraw-Hill. ISBN 0-07-000484-6.
12.
↑ INMOS
Limited, ed. (1988). Occam 2 Reference Manual. New Jersey : Prentice Hall. ISBN 0-13-629312-3.
13.
↑ Lutz, Mark
(2001). Python programming language (2 ed.). Sebastopol :
O´Reilly. ISBN 0-596-00085-5.
14.
↑ Wall,
Larry; Christiansen, Tom; Schwartz, Randal C. (1996). Perl programming
language (2 ed.). Cambridge :
O´Reilly. ISBN 1-56592-149-6.
15.
↑ Thomas,
David; Hunt, Andrew (2001). Programming Ruby: The Pragmatic
Programmer´s Guide. Upper
Saddle River :
Addison Wesley. ISBN 0-201-71089-7.
16.
↑ D.W. Barron et
al., "The main features of CPL", Computer Journal 6:2:140
(1963). full text
(subscription)
17.
↑ Hudak, Paul
(2000). The Haskell
School of Expression:
Learning Functional Programming Through Multimedia. Cambridge :
Cambridge University Press. ISBN 0-521-64408-9.
1.
การคิดแก้ปัญหา
องค์ประกอบของการคิดแก้ปัญหา
องค์ประกอบสำคัญของการคิดแก้ปัญหา จะต้องคำนึงถึงนักเรียนเป็นสำคัญ โดยพิจารณาจากเรื่องที่เกี่ยวข้องกับตัวนักเรียน อยู่ในขอบเขตความสามารถทางสติปัญญาของนักเรียน มีกิจกรรมหรือสิ่งเร้าให้นักเรียนมองเห็นปัญหา ครูแนะนำวิธีการ การวางแผนแก้ปัญหา เก็บรวบรวมข้อมูล และการประเมินผลให้นักเรียนเข้าใจ ส่งผลให้นักเรียนสามารถดำเนินการแก้ปัญหา จนกระทั่งสรุปผลการแก้ปัญหาได้
ขั้นตอนการคิดแก้ปัญหา
ขั้นตอนการแก้ปัญหานั้นนักการศึกษาได้เสนอไว้หลายรูปแบบด้วยกัน ซึ่งทุกรูปแบบจะมีขั้นตอนที่คล้ายกัน คือ
1. ระบุปัญหา
/ กำหนดปัญหา
2. ระบุสาเหตุของปัญหา
3. การเสนอแนวทาง
/ วิธีแก้ปัญหา
4. ตรวจสอบผลลัพธ์ที่ได้จากการแก้ปัญหา
แนวทางการส่งเสริมให้นักเรียนคิดแก้ปัญหา
1. ฝึกให้นักเรียนได้ทำงานหรือทำกิจกรรมอยู่เสมอ
2. ฝึกให้นักเรียนเรียนรู้จากการปฏิบัติจริง
3. ฝึกให้นักเรียนเป็นผู้มีเหตุผลมีความเชื่อมั่น
4. ฝึกให้นักเรียนรู้จักวิจารณ์
5. ฝึกให้นักเรียนรู้การวิเคราะห์
สังเคราะห์ และฝึกให้รู้จักแสดงความคิดเห็น
6. จัดสิ่งเร้าหรือการกระตุ้นที่ดี เสนอปัญหาหรือประเด็นที่ท้าทายน่าสนใจและมีวิธีการแก้ปัญหาได้หลายวิธีมาให้นักเรียนฝึก
7. จัดบรรยากาศหรือจัดสิ่งแวดล้อมให้สามารถเปลี่ยนแปลงได้ เพื่อให้นักเรียนมีความรู้สึกว่าเขาสามารถคิดค้นเปลี่ยนแปลง และมีอิสระในการคิด กล้าคิด กล้าแสดงออก
การฝึกทักษะการคิดแก้ปัญหา
ไม่มีความคิดเห็น:
แสดงความคิดเห็น