9. แบบฝึกหัด ทดสอบความเข้าใจ
เอาละครับ หลังจากที่เราได้ศึกษาเนื้อหาทั้งหมดแล้ว ต่อไปเราจะฝึกฝนการใช้ความรู้เหล่านั้นกันครับ เพราะแค่อ่านอย่างเดียวถึงจะดูเหมือนเข้าใจดี แต่ถ้าไม่นำมาใช้จริง เวลาใช้งานก็จะใช้ไม่เป็นนะครับ
แบบฝึกหัดต่อไปนี้จะเน้นไปที่การใช้งานวนลูปและการเลือกทำ ซึ่งตัวอย่างที่เห็นได้ชัดและเข้าใจง่ายที่สุด คือการทำงานกับข้อมูลที่เป็นรูปภาพ เพราะตาของมนุษย์สามารถมองเห็นตัวเลขในอาเรย์ได้ในรูปแบบของสี (ส่วนคอมพิวเตอร์มองเห็นเป็นตัวเลข) และเวลาตรวจสอบคำตอบก็ทำได้ง่ายมาก ซึ่งผลลัพธ์ของโจทย์แต่ละข้อ จะแสดงออกมาในรูปแบบของรูปภาพ ดังนั้นผู้ฝึกหัด จึงสามารถตรวจสอบรูปภาพได้โดยตรง ว่าถูกต้องตามที่โจทย์ต้องการหรือไม่
แต่การทำงานกับรูปภาพนั้น จำเป็นต้องรู้คำสั่งการอ่านภาพ และการแปลงภาพสักเล็กน้อยครับ ผมจึงจะสอนคำสั่งพิเศษเพิ่มเติมอีก 3 คำสังคือ
- คำสั่งอ่านรูปภาพ imread(‘picturename.jpg’) โดยที่ picturename.jpg คือชื่อรูปภาพ ซึ่งนามสกุลของภาพอาจเป็นอย่างอื่นก็ได้เช่น png หรือ bmp ตัวอย่างเช่น
>> pic = imread(‘test01.jpg’);
ถ้าภาพ test01.jpg เป็นภาพสี ตัวแปร pic จะมีโครงสร้างเป็นอาเรย์ 3 มิติ แต่เนื่องจากเราไม่ได้เรียนเรื่อง image processing และเราใช้ภาพเพื่อฝึกการเขียนโปรแกรมเท่านั้น ดังนั้นเราจะใช้แค่ภาพ gray scale หรือภาพสีเทา เท่านั้น โดยใช้คำสั่งต่อไปนี้ เพื่อแปลงภาพสีให้เป็นภาพสีเทา
>> np = rgb2gray(pic);
แต่การแสดงผลข้อมูลที่เป็นอาเรย์ 2 มิตินั้น หากใช้คำสั่ง disp() เราก็จะเห็นเป็นเพียงชุดตัวเลขเท่านั้น ซึ่งรูปภาพเหล่านี้ก็เป็นชุดของตัวเลขเช่นกัน ดังนั้นในเราจึงใช้วิธีการอื่นในการแสดงผลรูปภาพ โดยใช้คำสั่ง imshow เพื่อเปลี่ยนค่าตัวเลขเหล่านั้นให้กลายเป็นสี ตัวอย่างเช่น
>> imshow(np)
และเราสามารถใช้ data cursor (icon ที่วงกลมไว้ในภาพ ใต้เมนู Desktop) คลิกที่ตำแหน่งใดในภาพก็ได้ เพื่อดูค่าตัวเลขในตำแหน่งนั้น โดยที่รูปภาพเหล่านี้จะมีค่าสูงสุดอยู่ที่ 255 แสดงผลเป็นสีขาว และมีค่าต่ำสุดคือ 0 แสดงผลเป็นสีดำ ขอให้ผู้อ่านจำตัวเลขนี้ไว้ให้ขึ้นใจ
*หมายเหตุ เมื่อเราวาดภาพในโปรแกรม paint เสร็จแล้วให้บันทึกภาพเป็น .png หรือ .jpg เอาไว้ในโฟลเดอร์เดียวกันกับโปรแกรมของเรา โดยในตัวอย่างนี้ผมบันทึกภาพนี้ในชื่อ ‘test01.png’
ซึ่งแต่ละคนไม่มีทางได้คำตอบเหมือนกันแน่นอนครับ เพราะขึ้นอยู่กับว่า ใครจะวาดรูปใหญ่ หรือรูปเล็ก
2. จงวาดรูปวงกลมดังรูปด้านล่างในโปรแกรม paint แล้วเขียนโปรแกรมคำนวณหาพื้นที่
*โปรดจำไว้ว่า ไม่ว่าภายในวงกลมจะเป็นสีดำหรือสีขาว วงกลมที่มีรัศมีเท่ากัน จะยังคงมีพื้นที่เท่ากันเสมอ
3. จงวาดภาดเส้นตรงดังรูปด้านล่าง แล้วหาความชันของเส้นตรง
4. จงคำนวณหาความยาวของเส้นรอบวง ของรูปวงรีในข้อที่
5. จงคำนวณหารัศมีของรูปวงกลมในข้อที่ 2 แล้วคำนวณหาพื้นที่โดยใช้สูตร pi*(r^2) แล้วเปรียบเทียบกับผลลัพธ์ที่ได้ในข้อ 2 ว่าตรงกันหรือไม่
6. จงสร้างแมททริกซ์ A ด้วยคำสั่งนี้ A = randi([1,100],100,100); แล้วหาค่ามากที่สุดอันดับ 2 ใน A (ค่าที่เป็นรองจากค่ามากที่สุด)
7. จากวงกลมในข้อ 2 จงเปลี่ยนค่าทุกค่าที่อยู่ภายในวงกลมสีดำให้เป็น 100 แล้วแสดงผล
แบบฝึกหัดต่อไปนี้จะเน้นไปที่การใช้งานวนลูปและการเลือกทำ ซึ่งตัวอย่างที่เห็นได้ชัดและเข้าใจง่ายที่สุด คือการทำงานกับข้อมูลที่เป็นรูปภาพ เพราะตาของมนุษย์สามารถมองเห็นตัวเลขในอาเรย์ได้ในรูปแบบของสี (ส่วนคอมพิวเตอร์มองเห็นเป็นตัวเลข) และเวลาตรวจสอบคำตอบก็ทำได้ง่ายมาก ซึ่งผลลัพธ์ของโจทย์แต่ละข้อ จะแสดงออกมาในรูปแบบของรูปภาพ ดังนั้นผู้ฝึกหัด จึงสามารถตรวจสอบรูปภาพได้โดยตรง ว่าถูกต้องตามที่โจทย์ต้องการหรือไม่
แต่การทำงานกับรูปภาพนั้น จำเป็นต้องรู้คำสั่งการอ่านภาพ และการแปลงภาพสักเล็กน้อยครับ ผมจึงจะสอนคำสั่งพิเศษเพิ่มเติมอีก 3 คำสังคือ
- คำสั่งอ่านรูปภาพ imread(‘picturename.jpg’) โดยที่ picturename.jpg คือชื่อรูปภาพ ซึ่งนามสกุลของภาพอาจเป็นอย่างอื่นก็ได้เช่น png หรือ bmp ตัวอย่างเช่น
>> pic = imread(‘test01.jpg’);
ถ้าภาพ test01.jpg เป็นภาพสี ตัวแปร pic จะมีโครงสร้างเป็นอาเรย์ 3 มิติ แต่เนื่องจากเราไม่ได้เรียนเรื่อง image processing และเราใช้ภาพเพื่อฝึกการเขียนโปรแกรมเท่านั้น ดังนั้นเราจะใช้แค่ภาพ gray scale หรือภาพสีเทา เท่านั้น โดยใช้คำสั่งต่อไปนี้ เพื่อแปลงภาพสีให้เป็นภาพสีเทา
>> np = rgb2gray(pic);
แต่การแสดงผลข้อมูลที่เป็นอาเรย์ 2 มิตินั้น หากใช้คำสั่ง disp() เราก็จะเห็นเป็นเพียงชุดตัวเลขเท่านั้น ซึ่งรูปภาพเหล่านี้ก็เป็นชุดของตัวเลขเช่นกัน ดังนั้นในเราจึงใช้วิธีการอื่นในการแสดงผลรูปภาพ โดยใช้คำสั่ง imshow เพื่อเปลี่ยนค่าตัวเลขเหล่านั้นให้กลายเป็นสี ตัวอย่างเช่น
>> imshow(np)
และเราสามารถใช้ data cursor (icon ที่วงกลมไว้ในภาพ ใต้เมนู Desktop) คลิกที่ตำแหน่งใดในภาพก็ได้ เพื่อดูค่าตัวเลขในตำแหน่งนั้น โดยที่รูปภาพเหล่านี้จะมีค่าสูงสุดอยู่ที่ 255 แสดงผลเป็นสีขาว และมีค่าต่ำสุดคือ 0 แสดงผลเป็นสีดำ ขอให้ผู้อ่านจำตัวเลขนี้ไว้ให้ขึ้นใจ
ตัวอย่าง
จงวาดลงกลมดังรูปในโปรแกรม paint แล้วเขียนโปรแกรมคำนวณหาพื้นที่ของวงกลม*หมายเหตุ เมื่อเราวาดภาพในโปรแกรม paint เสร็จแล้วให้บันทึกภาพเป็น .png หรือ .jpg เอาไว้ในโฟลเดอร์เดียวกันกับโปรแกรมของเรา โดยในตัวอย่างนี้ผมบันทึกภาพนี้ในชื่อ ‘test01.png’
ซึ่งแต่ละคนไม่มีทางได้คำตอบเหมือนกันแน่นอนครับ เพราะขึ้นอยู่กับว่า ใครจะวาดรูปใหญ่ หรือรูปเล็ก
แบบฝึกหัด
1. จงวาดรูปวงรีดังรูปด้านล่างในโปรแกรม paint แล้วเขียนโปรแกรมคำนวณหาพื้นที่2. จงวาดรูปวงกลมดังรูปด้านล่างในโปรแกรม paint แล้วเขียนโปรแกรมคำนวณหาพื้นที่
*โปรดจำไว้ว่า ไม่ว่าภายในวงกลมจะเป็นสีดำหรือสีขาว วงกลมที่มีรัศมีเท่ากัน จะยังคงมีพื้นที่เท่ากันเสมอ
3. จงวาดภาดเส้นตรงดังรูปด้านล่าง แล้วหาความชันของเส้นตรง
4. จงคำนวณหาความยาวของเส้นรอบวง ของรูปวงรีในข้อที่
5. จงคำนวณหารัศมีของรูปวงกลมในข้อที่ 2 แล้วคำนวณหาพื้นที่โดยใช้สูตร pi*(r^2) แล้วเปรียบเทียบกับผลลัพธ์ที่ได้ในข้อ 2 ว่าตรงกันหรือไม่
6. จงสร้างแมททริกซ์ A ด้วยคำสั่งนี้ A = randi([1,100],100,100); แล้วหาค่ามากที่สุดอันดับ 2 ใน A (ค่าที่เป็นรองจากค่ามากที่สุด)
7. จากวงกลมในข้อ 2 จงเปลี่ยนค่าทุกค่าที่อยู่ภายในวงกลมสีดำให้เป็น 100 แล้วแสดงผล
ถ้าผู้อ่านสามารถทำโจทย์ได้ทั้ง 7 ข้อ โดยไม่ใช้คำสั่งพิเศษใดๆ ที่อยู่นอกเหนือเอกสารชุดนี้
(ย้ำนะครับว่าโดยไม่ใช้คำสั่งพิเศษใดๆ)
แสดงว่าผู้อ่านเข้าใจเนื้อหาที่ผมสอนหมดแล้วครับ จบหลักสูตรได้
ส่วนใครที่คิดว่า ก็ MATLAB มันมีคำสั่งพิเศษมาให้ ผมจะใช้ก็ไม่เห็นจะเสียหายตรงไหน
ผลที่ตามมาก็คือ หากคุณไปเจอโจทย์ที่ MATLAB มันไม่มีคำสั่งเฉพาะเจาะจงมาให้
คุณก็จะทำอะไรไม่เป็น ซึ่งมักจะมีคนมาถามผมบ่อยๆ ว่า "ผมต้องการทำแบบนี้ ต้องใช้คำสั่งไหนครับ"
ซึ่งหลายๆ ครั้ง โจทย์พวกนั้นก็ใช้แค่คำสั่งธรรมดา เช่น if-else บวก ลบ เท่ากับ วนลูป แค่นี้แหละครับ
สุดท้าย สำหรับผู้ที่ตั้งใจอ่าน ตั้งใจฝึกฝน
ผมขออวยพรให้
"ความรู้ จงสถิตอยู่ คู่กับคุณ"
(ย้ำนะครับว่าโดยไม่ใช้คำสั่งพิเศษใดๆ)
แสดงว่าผู้อ่านเข้าใจเนื้อหาที่ผมสอนหมดแล้วครับ จบหลักสูตรได้
ส่วนใครที่คิดว่า ก็ MATLAB มันมีคำสั่งพิเศษมาให้ ผมจะใช้ก็ไม่เห็นจะเสียหายตรงไหน
ผลที่ตามมาก็คือ หากคุณไปเจอโจทย์ที่ MATLAB มันไม่มีคำสั่งเฉพาะเจาะจงมาให้
คุณก็จะทำอะไรไม่เป็น ซึ่งมักจะมีคนมาถามผมบ่อยๆ ว่า "ผมต้องการทำแบบนี้ ต้องใช้คำสั่งไหนครับ"
ซึ่งหลายๆ ครั้ง โจทย์พวกนั้นก็ใช้แค่คำสั่งธรรมดา เช่น if-else บวก ลบ เท่ากับ วนลูป แค่นี้แหละครับ
สุดท้าย สำหรับผู้ที่ตั้งใจอ่าน ตั้งใจฝึกฝน
ผมขออวยพรให้
"ความรู้ จงสถิตอยู่ คู่กับคุณ"