slide present #2 : Selection Sort.pdf
1st week :
ศุกร์ ที่ 11 พฤศจิกายน 2559
- ได้เริ่มทำ Selection Sort ใน python โดยแสดงผลใน terminal
- มีการ commit ลง bitbucket 4 ครั้ง
- ดูรายละเอียด code และผลลัพธ์ ที่ slide present #1 (ด้านบนโพสต์)
2nd week :
พุธ ที่ 11 พฤศจิการยน 2559
- present เรื่อง Selection Sort และ Simple Calculator
ศุกร์ ที่ 18 พฤศจิกายน 2559
- สร้าง app ด้วย kivy จากโค๊ด Selection Sort ใน python
นี่คือ code จากทั้ง 2 ไฟล์ คือ ไฟล์ .kv และ .py ตามลำดับ
การสร้าง GUI จะสร้างจาก BoxLayout ทั้งหมด ทั้งในส่วนหลัก และส่วนย่อย (เนื่องจากง่ายในการใช้งาน) โดยส่วนหลักจะตั้ง orientation เป็นแบบ vertical (แนวตั้ง) หลังจากนั้นจึงสร้าง ส่วนย่อย
- ส่วนย่อยแรก ได้สร้างเป็น BoxLayout แบบ horizontal (แนวนอน) ซึ่งเป็น Default เพื่อสร้าง Label แสดงคำว่า 'input' และสร้าง TextInput ไว้รับค่าที่จะนำมา Sort
- ส่วนย่อยที่สอง สร้างเป็น BoxLayout เช่นกัน ซึ่งจะสร้าง Button ไว้ ซึ่ง binding กับ method selectionSort( ) และสร้าง Label แสดงผลลัพธ์หลังจากการ Sort
การทำงานของโปรแกรม
- เริ่มด้วยการกำหนด Default ของ dSorted (data อาจไม่จำเป็นต้องมี Default) เพื่อนำไปแสดงเป็นผลลัพธ์ของโปรแกรมก่อน
- เมื่อได้รับ input จาก TextInput แล้วกดปุ่ม ' sort! ' โปรแกรมจะเรียกใช้ selectionSort( ) รับค่า จาก TextInput มาใส่ไว้ใน self.data จากนั้นจึงเริ่มการ sort (เป็นการเปรียบเทียบ String ทุกตัว ที่นำมาใส่ใน input) แล้วจึงนำผลลัพธ์ จากการ Sort ส่งค่าไปให้ .kv แสดงผล
โปรแกรม หลังจากการ Sort
3rd week :
พุธ ที่ 23 พฤศจิกายน 2559
- ปรับเปลี่ยนหน้าตา GUI
- เพิ่มการแสดงผลจากการ Sort ทุกๆขั้นตอนด้วย clock
- เปลี่ยนรูปแบบการรับ input โดยแบ่งด้วย comma ( , )
จาก code ข้างต้นจะเห็นว่ามีการรับ data จาก input มา โดยทำการ split ด้วย ' , ' ทำให้สามารถ Sort ค่าที่มากกว่า 1 หลักได้ นอกจากนั้นยังมีการใช้ clock ในการเรียกใช้ method update ทุกๆ 1 วินาที โดย method นี้จะส่งค่าของ keepSorted ให้ .kv ไปแสดงผล ซึ่งค่าของ keepSorted ได้จากค่าหนึ่งใน list ของ self.keep ซึ่ง list นี้ได้มาจาก...
ทำให้โปรแกรมต้องเปลี่ยนหน้าตา ดังนี้
และมีการ update ค่าเรื่อยๆ จนกลายเป็นค่าที่ Sort เสร็จเรียบร้อยดีแล้ว
ศุกร์ ที่ 25 พฤศจิการยน 2559
- ปรับเปลี่ยนหน้าตา GUI
- เปลี่ยนการแสดงผลจากแบบ text เป็นกล่องตัวเลข
- เลิกใช้ clock แต่จะแสดงผลเป็น step by step (กด 1 ครั้ง เปลี่ยนไป 1 ขั้นตอน)
- กดเพื่อเปลี่ยนไปขั้นถัดไปได้ และกดเพื่อย้อนหลังกลับไปขั้นก่อนหน้าได้
- ดูรายละเอียดเพิ่มเติมที่ slide present #2 (ด้านบนโพสต์)
GUI ทุกส่วนจะเป็น BoxLayout ยกเว้นส่วนแสดงการ Sort เนื่องจากหาก ใช้ BoxLayout จะทำให้ data ที่แสดงจะเรียงเป็นแถวเดียว (มีข้อดีที่จะทำให้ดูการเรียงของ data ง่าย) จึงมีข้อเสีย คือเมื่อรับ data ที่จะนำมา Sort เยอะๆ จะทำให้ผลออกมาไม่สวย (เป็นกล่องสูงๆ ที่ไม่มีความกว้าง) และอาจทำให้มองดูตัวเลขลำบาก เพราะความกว้างกล่องน้อย และทำให้โดนกล่องถัดไปบังตัวเลข [ภาพเพิ่มเติม ใน slide present #2]
การทำงานของโปรแกรม
- จะเริ่มการ Sort เมื่อใส่ input และกดปุ่ม ' sort! ' ทางขวา-บน แล้วโปรแกรมจะเริ่มสร้างตัวแปร และเก็บค่าของทุกขั้นตอนของการ Sort ไว้ จากนั้นจึงสร้าง widget ขึ้นมาเป็นกล่อง (Button) ที่มีตัวเลขอยู่ภายใน ซึ่งเป็นตัวเลขเริ่มต้น [code ใน slide present #2]
- จะแสดงค่าในขั้นตอนถัดไป เมื่อกดปุ่ม 'next' ทางขวา-ล่าง และสามารถย้อนหลังได้ เมื่อกดปุ่ม 'previous' ทางซ้าย-ล่าง ทั้งสองปุ่มนั้นมีการ binding ไปยัง method เพื่อ clear widgets และสร้าง widget ขึ้นมาใหม่ โดยเมื่อกด next โปรแกรมจะเพิ่มค่า index เพื่อจะใช้ป้อนให้ keep (list ที่เก็บ data ทุกขั้นตอนของการ Sort เอาไว้) แสดงค่าที่ต้องการออกมา ในทำนองเดียวกับ previous ที่จะลดค่า index ลง และป้อนให้ keep [ดู code ได้จาก slide present #2]
- สีของกล่อง ก็อยู่ในขั้นตอนการสร้างปุ่มเช่นกัน โดยโปรแกรมจะมี list ที่เก็บค่า iMin ไว้, มี count_up (index ที่ส่งให้ keep นำค่าที่ต้องการออกมา) เมื่อมีตัวแปรเหล่านี้แล้ว จึงเอาไปใช้เป็นเงื่อนไขในการใส่สีของกล่อง [รายละเอียดเพิ่มเติมใน slide present #2]
เช่น จากภาพด้านบน count_up = 1 (Sort ไปแล้ว 1 ขั้นตอน)
กล่องที่ index น้อยกว่า count_up จะมีสีเขียว หรือก็คือ กล่องที่ 0 มีสีเขียว
กล่องที่ index เท่ากับ count_up จะมีสีแดง หรือก็คือ กล่องที่ 1 มีสีแดง
กล่องที่ index เท่ากับ imin[count_up] จะมีสีน้ำเงิน (ตาม list ที่เก็บค่าไว้ ซึ่งใน ต.ย. คือ กล่องที่ 4 จะมีสีน้ำเงิน)



























