259201 Computer Programming for Engineers Week 10 Structure
โครงสร้าง (Structure) โครงสร้าง (Structure) ประกอบไปด้วย ชุดของข้อมูลที่เกี่ยวข้องกัน โดยมีข้อมูลย่อยที่อ้างถึงได้โดยใช้ชื่อฟิลด์ (Field) ที่มีชนิดแตกต่างกันได้ เช่น ชุดข้อมูลนักศึกษา 1 คน ประกอบไปด้วยข้อมูลย่อยหรือฟิลด์ ชื่อ รหัสนักศึกษา อีเมล์ คะแนนสอบ
ตัวอย่างโครงสร้าง (Structure) เช่น ชุดข้อมูลนักศึกษา 1 คน ประกอบไปด้วยข้อมูลย่อยหรือฟิลด์ ชื่อ รหัสนักศึกษา อีเมล์ และคะแนนสอบ (3 ครั้ง) student.name = 'Steven Gerrard'; student.id = '51060000'; student.email = 'gerrard@eng.cmu.ac.th'; student.tests = [67, 75, 84]; ในกรณีนี้ จะมีข้อมูลย่อยที่เกี่ยวข้องกัน หรือผูกติดกันไว้โดยโครงสร้างที่ชื่อ student เปรียบเทียบกับกรณีที่ตัวแปร 4 ตัว name, id, email และ tests แยกกันโดยอิสระ
ตัวอย่างการเรียกใช้โครงสร้าง (Structure) ในกรณีนี้ มีข้อมูลเพียงชุดข้อมูลเดียว การเรียกดูข้อมูลสามารถทำได้โดย >> student student = name: 'Steven Gerrard' id: '5106001' email: 'gerrard@eng.cmu.ac.th' tests: [67 75 84]
ตัวอย่างการเรียกใช้ข้อมูลย่อยในโครงสร้าง (Structure) หรือหากต้องการเรียกดูข้อมูลย่อยต่างๆ สามารถทำได้โดย >> student.name ans = Steven Gerrard >> student.tests 67 75 84
ตัวอย่างการเรียกใช้ข้อมูลย่อยในโครงสร้าง (Structure) เนื่องจากข้อมูลย่อยคะแนนสอบ tests เป็นอาเรย์ของตัวเลข ถ้าต้องการดูคะแนนสอบครั้งที่ 2 ทำได้โดย >> student.tests(2) ans = 75
อาเรย์ของโครงสร้าง (Structure Array) โครงสร้าง (Structure) ที่เก็บข้อมูลที่เกี่ยวข้องกันได้ชุดเดียว ใช้ประโยชน์ได้ไม่มาก การใช้งานที่เป็นประโยชน์มากกว่าคือการใช้งาน อาเรย์ของโครงสร้าง (Structure Array) เช่น ต้องการเก็บข้อมูลของนักศึกษาหลายคน
การใช้งานอาเรย์ของโครงสร้าง ถ้าต้องการเก็บข้อมูลนักศึกษา 2 คน student(1).name = 'Steven Gerrard'; student(1).id = '5016001'; student(1).email = 'gerrard@eng.cmu.ac.th'; student(1).tests = [67 75 84]; student(2).name = 'Fernando Torres'; student(2).id = '5106002'; student(2).email = 'torres@eng.cmu.ac.th'; student(2).tests = [84 78 93];
การใช้งานอาเรย์โครงสร้าง โครงสร้าง student . . . student(1) student(2) name: Steven Gerrard name: Fernando Torres id : 5106001 id : 5106002 email: gerrard@eng.cmu.ac.th email: torres@eng.cmu.ac.th tests: [67, 75, 84] tests: [84, 78, 93]
การใช้งานอาเรย์ของโครงสร้าง ถ้าป้อน student เข้าไป ในกรณีนี้ MatLab จะตอบกลับมาว่าโครงสร้างนี้ประกอบด้วยข้อมูลย่อยหรือฟิลด์อะไรบ้าง และมีขนาดอาเรย์เท่ากับเท่าไหร่ >> student student = 1x2 struct array with fields: name id email tests
การใช้งานอาเรย์ของโครงสร้าง ถ้าต้องการดูข้อมูลของนักศึกษาคนที่ 2 ใช้คำสั่ง >> student(2) ans = name: 'Fernando Torres' id: '5106002' email: 'torres@eng.cmu.ac.th' tests: [84 78 93]
การใช้งานอาเรย์ของโครงสร้าง ถ้าต้องการดูข้อมูลชื่อของนักศึกษาคนที่ 2 ใช้คำสั่ง >> student(2).name ans = Fernando Torres
การใช้งานอาเรย์ของโครงสร้าง ถ้าต้องการดูข้อมูลคะแนนที่ 3 ของนักศึกษาคนที่ 2 ใช้คำสั่ง >> student(2).tests(3) ans = 93
การใช้งานอาเรย์โครงสร้าง คำสั่ง fieldnames >> fieldnames(student) ans = 'name' 'id' 'email' 'tests' ถ้าป้อนข้อมูลในอาเรย์นั้นไม่ครบฟิลด์ MatLab จะกำหนดให้ว่าง แต่ละฟิลด์มีขนาดหรือชนิดต่างกันได้
การเปลี่ยนแปลงโครงสร้าง เพิ่มฟิลด์ >>student(1).phone = '0-5394-2024'; ลบฟิลด์ใช้คำสั่ง rmfield new_struc = rmfield(old_struc,'field'); >>new_student = rmfield(student,'id'); สามารถใช้งาน operator ทั่วไปได้ >>max(student(2).tests); ทุก element ก็จะมีฟิลด์ นี้เพิ่มขึ้นมา
ตัวอย่างอาเรย์โครงสร้าง ฟังก์ชันทำการรับข้อมูลชื่อและค่าคะแนนแล้วทำการหาคะแนนเฉลี่ย n = input('How many student? '); sum = 0; for i=1:n %student is a structure array for name & score student(i).name = input(‘Name: ','s'); student(i).score = input('Score: '); sum = sum + student(i).score; end avg = sum/n; fprintf(‘Average score is %.2f\n', avg);