Lecture 4 เรคอร์ด
ลักษณะทั่วไปของเรคอร์ด เป็นโครงสร้างข้อมูลที่ประกอบด้วยฟิลด์ที่ระบุชื่อและประเภทข้อมูลของแต่ละฟิลด์ แตกต่างจากอาร์เรย์ตรงที่สมาชิกทุกตัวต้องใช้ตัวชี้ในการเข้าถึงข้อมูล ขณะที่การเข้าถึงเรคอร์ดเข้าถึงโดยชื่อของฟิลด์
การประกาศใช้ข้อมูลแบบเรคอร์ด รูปแบบ ชื่อเรคอร์ด = RECORD ชื่อฟิลด์ : ประเภทข้อมูล; : END; หากเป็น variant record จะมีส่วนที่เรียกว่า variant part ร่วมอยู่ เช่น: student = record name :string[30]; stcode : string[7]; sex : char; end;
การประกาศใช้ข้อมูลแบบเรคอร์ด Type date = record dayname : (mon,tue,wed,thur,fri,sat,sun); day : 1..31; month : 1..12; year : integer; end; Var today,tomorrow,yesterday : date; {เรคอร์ดสามารถกำหนดช่วงข้อมูลได้}
การอ้างถึงฟิลด์ในเรคอร์ด การอ้างถึงฟิลด์ในเรคอร์ด มี 2 วิธี มีการอ้างถึง ตัวแปรเรคอร์ด.ชื่อฟิลด์ อ้างถึงโดยใช้ WITH statement เป็นคำสั่งจึงต้องอยู่ระหว่าง BEGIN ….END;
การอ้างถึงฟิลด์ในเรคอร์ด ตัวแปรเรคอร์ด.ชื่อฟิลด์ today.dayname= mon; today.year= 2543; today.month= 12; today.day= 15; การอ้างวิธีนี้ไม่จำเป็นต้องเรียงลำดับก็ได้ ขณะที่ with ต้องเรียงลำดับ WITH statement WITH today Do begin dayname= mon; day= 15; month= 12; year= 2543; end;
โครงสร้างเรคอร์ดซ้อนเรคอร์ด หมายถึงโครงสร้างเรคอร์ดที่มีฟิลด์เป็น เรคอร์ดซ้อนอยู่ เช่น study = record course# : string[6]; grade : char; term : 1..2; year : integer; end; Student = record name : string[30]; age : integer; sex : char; take_course : study; end;
โครงสร้างเรคอร์ดซ้อนเรคอร์ด มีเรคอร์ดเก็บรายละเอียดของนักศึกษาแต่ละคน โดยนักศึกษาแต่ละคนสามารถลงทะเบียนเรียนได้หลายวิชา รายละเอียดของวิชาหนึ่งๆถือเป็น 1 เรคอร์ด
โครงสร้างเรคอร์ดซ้อนเรคอร์ด program recinrec; uses wincrt; type study = record course : string[6]; grade : char; term : 1..2; year : integer; end;
โครงสร้างเรคอร์ดซ้อนเรคอร์ด Student = record name : string[30]; age : integer; sex : char; take_course : study; end; var st_info : student;
โครงสร้างเรคอร์ดซ้อนเรคอร์ด procedure getinfo; begin write('Enter student name: '); readln(st_info.name); write('Enter student age: '); readln(st_info.age); write('Enter student sex: '); readln(st_info.sex);
โครงสร้างเรคอร์ดซ้อนเรคอร์ด write('Enter student course#: '); readln(st_info.take_course.course); write('Enter student grade: '); readln(st_info.take_course.grade); write('Enter student term: '); readln(st_info.take_course.term); write('Enter student year: '); readln(st_info.take_course.year); end;
โครงสร้างเรคอร์ดซ้อนเรคอร์ด procedure writeinfo; begin writeln ('Enter student name: ', st_info.name); writeln ('Enter student age: ', st_info.age); writeln ('Enter student sex: ', st_info.sex);
โครงสร้างเรคอร์ดซ้อนเรคอร์ด writeln ('Enter student course#: ', st_info.take_course.course); writeln ('Enter student grade: ', st_info.take_course.grade); writeln ('Enter student term: ',st_info.take_course.term); writeln ('Enter student year: ',st_info.take_course.year); end;
โครงสร้างเรคอร์ดซ้อนเรคอร์ด begin getinfo; writeln('***********************************'); writeinfo; end.
โครงสร้างเรคอร์ดซ้อนเรคอร์ด เราสามารถปรับโมดูล getinfo และ writeinf ให้ใช้ WITH statement ได้ดังนี้
โครงสร้างเรคอร์ดซ้อนเรคอร์ด procedure getinfo; begin with st_info do write('Enter student name: '); readln(name); write('Enter student age: '); readln(age); write('Enter student sex: '); readln(sex); with take_course do
โครงสร้างเรคอร์ดซ้อนเรคอร์ด begin write('Enter student course#: '); readln(course); write('Enter student grade: '); readln(grade); write('Enter student term: '); readln(term); write('Enter student year: '); readln(year); end;
โครงสร้างเรคอร์ดซ้อนเรคอร์ด procedure writeinfo; begin with st_info do { อาจใช้ with st_info,take_course} with take_course do writeln ('Enter student name: ', name); writeln ('Enter student age: ', age); writeln ('Enter student sex: ', sex);
โครงสร้างเรคอร์ดซ้อนเรคอร์ด writeln ('Enter student course#: ', course); writeln ('Enter student grade: ', grade); writeln ('Enter student term: ',term); writeln ('Enter student year: ',year); end;
โครงสร้างเรคอร์ดที่มีฟิลด์เป็นอาร์เรย์ ในบางครั้งฟิลด์บางฟิลด์อาจมีการเกิดขึ้นซ้ำได้หลายครั้ง เช่น ใบเสร็จรับเงิน มีรายละเอียดสินค้าได้หลายรายการ หรือ การลงทะเบียนของนักเรียน 1 คน อาจเรียนได้หลายวิชา
โครงสร้างเรคอร์ดที่มีฟิลด์เป็นอาร์เรย์ รูปแบบ type bill = record cust_name : string[30]; address : string[30]; goods : array[1..10] of string [20]; price :array[1..10] real; end; หรือ type register = record st_name : string[20]; st_code : string[7]; subject : array [1..6] of string[7] end;
ตัวอย่าง โครงสร้างเรคอร์ดที่มีฟิลด์เป็นอาร์เรย์ ตัวอย่าง โครงสร้างเรคอร์ดที่มีฟิลด์เป็นอาร์เรย์ (* This program declare record and in side it has an array*) program r_w_rec2; uses wincrt; type person = record name : string[20]; id : string[7]; subj : array [1..6] of string[4]; end;
ตัวอย่าง โครงสร้างเรคอร์ดที่มีฟิลด์เป็นอาร์เรย์ ตัวอย่าง โครงสร้างเรคอร์ดที่มีฟิลด์เป็นอาร์เรย์ var recinfo : person; i : integer; procedure readrec; begin with recinfo do write('Enter name : '); readln (name); write('Enter id : '); readln (id);
ตัวอย่าง โครงสร้างเรคอร์ดที่มีฟิลด์เป็นอาร์เรย์ ตัวอย่าง โครงสร้างเรคอร์ดที่มีฟิลด์เป็นอาร์เรย์ for i:= 1 to 6 do begin writeln('Enter subject name : '); readln (subj[i]); end;
ตัวอย่าง โครงสร้างเรคอร์ดที่มีฟิลด์เป็นอาร์เรย์ ตัวอย่าง โครงสร้างเรคอร์ดที่มีฟิลด์เป็นอาร์เรย์ procedure writerec; begin clrscr; with recinfo do write(name:20,' ',id:10,' '); for i:= 1 to 6 do write(subj[i]:6); end;
ตัวอย่าง โครงสร้างเรคอร์ดที่มีฟิลด์เป็นอาร์เรย์ ตัวอย่าง โครงสร้างเรคอร์ดที่มีฟิลด์เป็นอาร์เรย์ begin readrec; writerec; end.
โครงสร้างอาร์เรย์ที่มีสมาชิกเป็น เรคอร์ด ในบางครั้งเราจำเป็นต้องมีการเรียงลำดับข้อมูลที่อยู่ในเรคอร์ด ซึ้งการเรียงลำดับนี้ต้องนำเรคอร์ดเข้าไปเก็บไว้ในหน่วยความจำจึงต้องอาศัยอาร์เรย์เป็นตัวเก็บข้อมูลแบบเรคอร์ด
โครงสร้างอาร์เรย์ที่มีสมาชิกเป็น เรคอร์ด รูปแบบ type phon = record phonum : string [7]; custname : string[20]; end; var custrec : array[1..max] of phon;
โครงสร้างอาร์เรย์ที่มีสมาชิกเป็น เรคอร์ด การอ่านและเขียนข้อมูลจากโครงสร้างอาร์เรย์ที่มีสมาชิกเป็น เรคอร์ด ทำได้ดังนี้
ตัวอย่าง โครงสร้างอาร์เรย์ที่มีสมาชิกเป็น เรคอร์ด ตัวอย่าง โครงสร้างอาร์เรย์ที่มีสมาชิกเป็น เรคอร์ด (* This program declare array in side it has a record.*) program r_w_rec3; uses wincrt; const max = 1; type person = record name : string[20]; id : string[7]; subj : string[4]; end; stlist = array [1..max] of person;
ตัวอย่าง โครงสร้างอาร์เรย์ที่มีสมาชิกเป็น เรคอร์ด ตัวอย่าง โครงสร้างอาร์เรย์ที่มีสมาชิกเป็น เรคอร์ด var recinfo : stlist; i : integer; procedure readrec; begin for i:= 1 to max do
ตัวอย่าง โครงสร้างอาร์เรย์ที่มีสมาชิกเป็น เรคอร์ด ตัวอย่าง โครงสร้างอาร์เรย์ที่มีสมาชิกเป็น เรคอร์ด with recinfo[i] do begin write('Enter name : '); readln (name); write('Enter id : '); readln (id); write('Enter subject name : '); readln(subj); writeln('***************') end; end; end;
ตัวอย่าง โครงสร้างอาร์เรย์ที่มีสมาชิกเป็น เรคอร์ด ตัวอย่าง โครงสร้างอาร์เรย์ที่มีสมาชิกเป็น เรคอร์ด procedure writerec; begin clrscr; for i:= 1 to max do with recinfo[i] do begin write(name:20 ',id:10,' ',subj:6); writeln; end;
ตัวอย่าง โครงสร้างอาร์เรย์ที่มีสมาชิกเป็น เรคอร์ด ตัวอย่าง โครงสร้างอาร์เรย์ที่มีสมาชิกเป็น เรคอร์ด begin readrec; writerec; end.
ตัวอย่าง การค้นหาเรคอร์ดที่อยู่ในอาร์เรย์ program searchrec; uses wincrt; const max = 100; var student: starray; size: integer; type studentrec = record id :string [7]; name:string [30]; age :integer; sex: char; end; starray = array[1..100] of studentrec;
ตัวอย่าง การค้นหาเรคอร์ดที่อยู่ในอาร์เรย์ procedure getrec(var i:integer); var tempid :string[7]; begin i :=0; clrscr; write('Enter id (id = 9999999 for end)'); readln(tempid);
ตัวอย่าง การค้นหาเรคอร์ดที่อยู่ในอาร์เรย์ id := tempid; write('Enter name :'); readln(name); write('Enter age :'); readln(age); write('Enter sex:'); readln(sex); end; while (tempid <> '9999999') and (i<max) do begin i := i +1; with student[i] do
ตัวอย่าง การค้นหาเรคอร์ดที่อยู่ในอาร์เรย์ writeln; write('Enter id (id = 9999999 for end)'); readln(tempid); end;
ตัวอย่าง การค้นหาเรคอร์ดที่อยู่ในอาร์เรย์ procedure writerec; var i: byte; begin clrscr; for i:= 1 to size do with student[i] do begin writeln(id:10,name:35,age:5,sex:5); end;
ตัวอย่าง การค้นหาเรคอร์ดที่อยู่ในอาร์เรย์ procedure searching; var i:integer; shid :string[7]; flag:boolean; begin clrscr; i:=0; flag := false;
ตัวอย่าง การค้นหาเรคอร์ดที่อยู่ในอาร์เรย์ write('Enter student id you want to search (9999999 for end) : '); readln(shid); while shid <> '9999999' do begin i := i +1; end;
ตัวอย่าง การค้นหาเรคอร์ดที่อยู่ในอาร์เรย์ while (i<=size) and (flag = false) do begin if (shid = student[i].id) then flag := true else i := i+1; end; writeln;
ตัวอย่าง การค้นหาเรคอร์ดที่อยู่ในอาร์เรย์ with student[i] do begin if flag = true then writeln(shid:10,name:30,age:5,sex:5,' is found') else writeln(shid:10,' is not found'); end; {end with}
ตัวอย่าง การค้นหาเรคอร์ดที่อยู่ในอาร์เรย์ i := 0; flag := false ; writeln; write('Enter student id you want to search (9999999 for end) : '); readln(shid); end;
ตัวอย่าง การค้นหาเรคอร์ดที่อยู่ในอาร์เรย์ Begin {*** MAIN ***} getrec(size); writerec; readln; searching; end.
Thank You…