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 แล้วเขียนโปรแกรมคำนวณหาพื้นที่ของวงกลม

*หมายเหตุ เมื่อเราวาดภาพในโปรแกรม 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 บวก ลบ เท่ากับ วนลูป แค่นี้แหละครับ

สุดท้าย สำหรับผู้ที่ตั้งใจอ่าน ตั้งใจฝึกฝน
ผมขออวยพรให้
"ความรู้ จงสถิตอยู่ คู่กับคุณ"

ความเห็น

โพสต์ยอดนิยมจากบล็อกนี้

การแก้สมการ Differential ด้วย MATLAB

การหาค่าเฉลี่ยโดยไม่ต้องเก็บค่า

ว่าด้วยเรื่องของ ERROR