Data Type part.II
Composite data type เป็นชนิดข้อมูลที่มีค่าเป็นกลุ่ม (compound or aggregated data) Array String Union Structure Pointer สร้างจากชนิดข้อมูลพื้นฐานที่เป็นค่าเดี่ยว แล้วนำมาประกอบกันให้เกิดเป็นค่ากลุ่ม เช่น อาร์เรย์ของจำนวนเต็ม สร้างขึ้นจากเลขจำนวนเต็ม (int) หลายจำนวนรวมไว้เป็นกลุ่มเดียวกัน
ชนิดข้อมูลอาร์เรย์ (Array) อาร์เรย์ (แถวลำดับ) เป็นชนิดข้อมูลคอมโพสิต ที่เก็บข้อมูลประเภทเดียวกัน และมีจำนวนข้อมูลคงที่ เช่น คำประกาศในภาษา C int A[10]; ภาษา Pascal A : array [1 .. 10] of integer; [1 .. 10] เป็นการระบุหมายเลขอินเด็กซ์ (index or subscript) : 1, 2, …, 10 ดังนั้น เราสามารถกำหนดให้หมายเลขอินเด็กซ์เริ่มที่เท่าไรก็ได้ เช่น [-4 .. 3] จะหมายถึง -4, -3, …, 3 (ต่างจาก Java หรือ C ที่อินเด็กซ์ต้องเริ่มที่ 0 เท่านั้น)
Array (cont) นอกจากนี้ ภาษา Pascal ยังอนุญาตให้กำหนดอินเด็กซ์ด้วยค่าประเภทอื่น นอกเหนือจากเลขจำนวนเต็มได้ type Computer_Manufacturer = (IBM, HP, SUN, APPLE); var profit : array (Computer_Manufacturer) of integer; Computer_Manufacturer เป็นชนิดข้อมูลแจกแจงค่าเพื่อแทนชื่อบริษัทผู้ผลิตเครื่องคอมพิวเตอร์ Profit เป็น ตัวแปรชนิดอาร์เรย์เก็บค่าเลขจำนวนเต็ม ดังนั้น Profit(IBM) จึง...
Array (cont) อย่างไรก็ดี ข้อมูลแต่ละจำนวนในอาร์เรย์ สามารถเป็นอาร์เรย์ได้ Multi-dimensional array เช่น ภาษา C int x[10][20] เป็นการกำหนดค่าตัวแปร x ให้เป็นอาร์เรย์สองมิติ ที่มี 10 แถว และ 20 คอลัมน์ ภาษา Pascal var x : array [1 .. 10, 1 .. 20] of integer; ภาษา Ada x(3 .. 5) การระบุอินแด็กซ์เป็นช่วงแบบนี้ เรียกว่า slicing แทน x(3), x(4) และ x(5)
Array (cont) รูปภาพแสดงการ slice อาร์เรย์สองมิติ และสามมิติในภาษา FORTRAN ระบุช่วงข้อมูลบนอาร์เรย์ด้วยคำสั่งภาษาฟอร์แทรน…
Array (cont) ภาษา SNOBOL เป็นภาษาที่มีชนิดข้อมูลแบบพลวัต (dynamically typed language) จะเรียกอาร์เรย์ว่า เทเบิล (TABLE) โดยสมาชิกภายในอาร์เรย์ มีชนิดแตกต่างกันได้ วิธีสัมพันธ์ (associate) เช่น T<b> จะสัมพันธ์กับ 25 อาร์เรย์แบบนี้ จะเรียกว่า associate array
Array (cont) ภาษา Perl ก็มีการใช้ associate array เช่นเดียวกัน โดยใช้เครื่องหมายพิเศษ % นำหน้าชื่อตัวแปร เพื่อระบุว่าตัวแปรนั้นเป็นชนิด associative array %ClassList = (“Michelle”, ‘A’, “Doris”, ‘B’, “Mike”, ‘D’); การใช้งานอาร์เรย์แสดงตัวอย่างได้ดังนี้ ลองเขียนเอาท์พุตดูนะครับ
ชนิดข้อมูลสตริง (String) ตัวอย่าง ภาษา C char name[10] = {‘B’, ’i’, ’l’, ’l’, ’\0’}; หรือจะประกาศแบบนี้ char name[10] = “Bill”; ทั้งสองแบบนี้ ประกาศต่างกันแต่คงความหมายเดิม
String (cont) ในภาษา Java นั้น สตริงจะถูกเก็บในลักษณะ object ของ class string ดังนั้น การประกาศตัวแปรจึงเป็นการประกาศ object ดังนี้ String name = “Bill”; การปฏิบัติกับสตริงมีได้หลากหลายรูปแบบ แตกต่างกันไปในแต่ละภาษา ซึ่งมีรูปแบบสำคัญๆ ดังนี้ ... การเชื่อมต่อสตริง (concatenation) การเปรียบเทียบสตริง (comparison) การคัดเลือกส่วนย่อยของสตริง (substring selection) การจับคูแพทเทิร์น (pattern matching)
String (cont) Concatenation Java ใช้ “+” ในการเชื่อมต่อสตริง C ใช้ฟังก์ชัน strcat ในการเชื่อมต่อสตริง
String Comparison Substring selection การเปรียบเทียบสตริง จะเป็นการเปรียบเทียบลำดับก่อน-หลัง ของตัวอักษรในข้อความ ภาษา C ใช้ฟังก์ชัน strcmp int strcmp(char *str1, char *str2) ถ้าสิ่งที่ส่งกลับมา เท่ากันศูนย์ แสดงว่า str1 และ str2 เท่ากัน ถ้าสิ่งที่ส่งกลับมา น้อยกว่าศูนย์ แสดงว่า str1 น้อยกว่า str2 เท่ากัน ถ้าสิ่งที่ส่งกลับมา มากกว่าศูนย์ แสดงว่า str1 มากกว่า str2 เท่ากัน Substring selection เป็นการระบุตำแหน่งของอักขระภายในสตริง ภาษา FORTRAN NEXT = STR (6:10)
String (cont) Pattern matching ภาษาที่ใช้ pattern มากคือ SNOBOL และ Perl Perl จะใช้รูปแบบของ regular expression / [A-Z a-z] [A-Z a-z \d]+ / เมื่อโปรแกรมรับข้อความเข้า จากนั้น จะตรวจสอบข้อความตั้งแต่ต้นบรรทัด จนถึงท้ายบรรทัด เพื่อตรวจสอบว่า …
ชนิดข้อมูลยูเนียน (Union) Union หมายถึง OR หรือ การเลือกค่าใดค่าหนึ่งเพียงหนึ่งค่า ชนิดข้อมูลยูเนียนจึงเป็นชนิดข้อมูลที่มีการประกาศรวมได้หลายชนิด แต่การเก็บข้อมูลจริง ณ ช่วงเวลาหนึ่งๆ จะเลือกเก็บค่าได้เพียงประเภทเดียวเท่านั้น ภาษา C
ชนิดข้อมูลโครงสร้าง (Structure) Structure or record เป็นการเก็บข้อมูลหลายจำนวนที่มีประเภทแตกต่างกัน ภาษา C
Structure (cont) การประกาศโครงสร้าง เพื่อเก็บข้อมูลของ Employee จำนวน 500 คน สามารถทำได้โดยการสร้างอาร์เรย์ของ struct ดังนี้ ดังนั้น หากเราต้องการระบุเงินเดือนจำนวน 13000.00 บาท ให้กับพนักงานคนที่ 4 ก็สามารถกำหนดได้ดังนี้ …
Structure (cont) ภาษา Pascal จะเรียกข้อมูลโครงสร้างว่า เรคคอร์ด และสามารถกำหนดฟิลด์ในเรคคอร์ด ให้มีค่าแปรผันได้ (variant record) เงินเดือนของพนักงานอาจจะแยกออกเป็นสองประเภทคือ พนักงานที่ได้รับเงินรายเดือน (มีข้อมูลอัตราเงินเดือน และวันที่เริ่มทำงาน) และพนักงานที่ได้รับเงินเป็นรายชั่วโมง ประกาศเรคคอร์ดแบบแปรผัน ในภาษา Pascal