Cơ bản về ngôn ngữ Pascal I. Giới Thiệu


IV. KIỂU BẢN GHI (RECORD)



tải về 291.86 Kb.
trang4/4
Chuyển đổi dữ liệu30.08.2016
Kích291.86 Kb.
#28831
1   2   3   4

IV. KIỂU BẢN GHI (RECORD)



1. Ðịnh nghĩa và khai báo



Các cấu trúc dữ liệu kiểu mảng (Array) và tập hợp (Set) có hạn chế ở chỗ các phần tử trong tập hợp của chúng phải cùng kiểu mô tả. Song trong thực tế, có những kiểu cấu trúc dữ liệu khác nhau nhưng lại có một mối liên quan nào đó.


Ví dụ 8.36:
Ðể mô tả dữ liệu về lý lịch một người nào đó, người ta phải khai báo họ tên người (kiểu String), Phái (Nam :=True, Nữ := False theo kiểu Boolean), ngày sinh (mô tả kiểu date), địa chỉ (kiểu String) và mức lương (kiểu integer), v.v... Với các kiểu cơ bản khác nhau như vậy trong Pascal, ta phải dùng kiểu bản ghi (RECORD).
Kiểu bản ghi trong ngôn ngữ Pascal gắn liền với kiểu tập tin (FILE) - sẽ được trình bày trong phần kế tiếp. Tuy nhiên, ta có thể sử dụng RECORD một cách độc lập với FILE.
RECORD là kiểu dữ liệu bao gồm nhiều thành phần có thể khác nhau về kiểu dữ liệu, mỗi thành phần được gọi là trường (Field).
Cú pháp khai báo kiểu bản ghi (Record) trước rồi khai báo biến như sau:
+ Khai báo gián tiếp:
TYPE
= RECORD
[,,...] : ;
[,,...] : ;
.................................................. ............................................ ;
END ;
VAR
[,, ...] : ;
Ví dụ 8.37:
Ta đang làm một khai báo về khách hàng của công ty chuyên bán hàng trả góp nào đó. Số liệu cần sử dụng là ngày tháng làm bản ghi và các thông tin cơ bản về khách hàng nợ thanh toán cho công ty, theo minh họa ở hình dưới:

Trong chương trình này, Công ty phân ra 3 tình trạng loại khách nợ (status): đúng kỳ hạn phải trả (current), đã quá hạn phải trả (overdue) và loại khách chểnh mảng, dây dưa việc trả nợ nhiều lần (delinquent). Ở đây:
- Status được khai báo theo kiểu dữ liệu liệt kê (enumerated data type).
- Account (Số kế toán) là một kiểu record, chứa các thông tin về tên và địa chỉ khách nợ (kiểu chuỗi string), số khách nợ (kiểu số nguyên integer-type), loại khách nợ (kiểu liệt kê enumerated type) và số liệu tồn đọng nợ của khách (kiểu số thực real-type).
- Date (Ngày tháng) là một kiểu Record trong chương trình ghi ngày, tháng năm đáo nợ của khách hàng.
Biến của chương trình là khách hàng (customer).
Ta có thể khai báo như sau:

Code:


TYPE status = (current, overdue, delinquent);

date = RECORD

day : 1 .. 31 ;

month : 1 ..12 ;

year : 1900 .. 2100 ;

END ;


account = RECORD

Custname : String ;

Custaddress : String ;

Custno : 1 .. 9999 ;

Custtype : status ;

Custbalance : Real ;

Lastpayment : date;

END;


VAR customer : account ;

+ Khai báo trực tiếp
VAR
[,, ...] : RECORD
[,,...] : ;
[,,...] : ;
.................................................. ............................................ ;
END ;

2. Truy xuất một Record



Ðể truy xuất vào một trường của kiểu Record, ta cần dùng tên biến kiểu Record, sau đó là dấu chấm (.) rồi đến tên trường. Dạng tổng quát sau:


.
Ví dụ 8.39: Nhập lý lịch nhân viên của một cơ quan

Code:


TYPE

Lylich = RECORD {Lý lịch gồm Họ tên, Tuổi, Phái, Lương}

Hoten : string [25] ;

Tuoi : integer ;

PhaiNam : boolean; {Nam : M (Male), Nữ : F (Female)}

Luong : real;

END;

VAR x, y : Lylich ;



nv : ARRAY [1 .. 200] OF Lylich ; {nv là mảng lý lịch các nhân viên}

..................................

Write('Nhập tổng số nhân viên : '); readln(n) ;

FOR i := 1 TO n DO

BEGIN

Write(' Họ tên : '); readln(nv[i].Hoten);



Writeln(' Tuổi : '); readln(nv[i].Tuoi) ;

Write(' Phái (Nam :M, Nữ : F) ? '); readln (Phai);

IF (Phai = ‘M’) or (Phai =‘m’) THEN nv[i].PhaiNam := TRUE

ELSE nv[i].PhaiNam := FALSE ;

Writeln(' Lương : '); read(nv[i].Luong) ;

END ;


.......................................
Lưu ý :
· Các biến Record có thể gán cho nhau. Ví dụ x và y là 2 biến bản ghi có cùng kiểu Lylich, thì ta có thể gán:
x := y;
Như vậy ta không phải lặp lại:
x.Hoten := y.Hoten ;
x.Tuoi := y.Tuoi ;
.................................
· Không được viết ra màn hình hoặc đọc từ bàn phím một biến record như :
Writeln(x); hoặc Readln(x);
· Không thể so sánh các record bằng các phép toán quan hệ <, >, <=, >=,=,<>
· Không được dùng các toán số học và logic với kiểu record.
Ví dụ 8.40: Nhập vào 2 số phức C1 và C2 và tính C3 là tổng của chúng
Với chương trình loại này ta phải lần lượt nhập từng phần thực và phần ảo riêng rẽ của C1 và C2. Ta không thể dùng dòng lệnh C3 = C1 + C2. Kết quả tính C3 phải là phép cộng riêng rẽ từng phần thực và phần ảo của C1 và C2 rồi ghép lại.

Code:


PROGRAM So_Phuc ;

TYPE


Sophuc = Record

pt, pa : real ;

End;

VAR


c1, c2, c3 : Sophuc ;

BEGIN


Write('Lần lượt nhập phần thực và phần ảo của 2 số phức C1 và C2') ;

Write('Nhập phần thực của số phức C1 : ') ; Readln(c1.pt) ;

Write('Nhập phần ảo của số phức C1 : ') ; Readln(c1.pa) ;

Write('Nhập phần thực của số phức C2 : ') ; Readln(c2.pt) ;

Write('Nhập phần ảo của số phức C2: ') ; Readln(c2.pa) ;

c3.pt := c1.pt + c2.pt ;

c3.pa := c1.pa + c2.pa ;

Writeln('Kết quả của phép cộng 2 số phức :');

Write(‘C3 = C1 + C2 ‘);

Write(‘ = (‘, c1.pt:5:2, ‘+i ‘, c1.pa:5:2, ‘) +(‘, c2.pt:5:2, ‘+i ‘,c2.pa:5:2, ‘) ‘);

Write(‘C3 = ‘, c3.pt:5:2, ‘+i’, c3.pa:5:2 );

Readln;


END.



3. Các Record lồng nhau





Record lồng nhau là record mà có trường (field) của nó lại có kiểu là một record khác. Ta có thể định nghĩa các record lồng nhau theo một cách trực tiếp hay gián tiếp nhau và cách khai báo cũng hoàn toàn tương tự như cách khai báo record ở trên.
Ví dụ 8.41:

Code:


TYPE

dd_mm_yy = Record

dd:1..31;

mm:1..12;

yyyy:1900..2100;

end;


hoso = Record

masv:string[7];

ngsinh:dd_mm_yyyy;

diem:real;

end;

VAR


Lop: Array[1..20] of hoso;

4. Câu lệnh WITH

TOP

Nhiều chương trình đòi hỏi các phần tử khác nhau của cùng một record phải được thao tác tại các vị trí khác nhau bên trong chương trình. Như vậy phải cần có nhiều chỉ thị trường khác nhau đặc trưng. Việc này làm chương trình trở nên phức tạp, tẻ nhạt và khó theo dõi. Ðể giải quyết tình trạng này, Pascal đã đưa ra cấu trúc câu lệnh WITH ... DO trong record nhằm bớt đi các rắc rối từ các chỉ thị trường (hay nói cách khác, câu lệnh WITH .. DO như là phép toán đặt thừa số chung mà ở đó thừa số chung là các tên biến record).
Dạng tổng quát của câu lệnh WITH là:
WITH DO
BEGIN
;
............................................. ;
;
END ;
Ví dụ 8.42:
Một biến bản ghi DANSO có các trường KHUVUC, HOTEN, NGAYSINH, DIACHI, NGHE đưa dữ liệu từ bàn phím như sau:

Code:


WITH DANSO DO

BEGIN


Write ('Khu vực điều tra :'); Readln (KHUVUC);

Write ('Họ tên công dân :'); Readln (HOTEN);

Write ('Ngày-tháng-năm sinh :'); Readln (NGAYSINH);

Write ('Ðịa chỉ công dân :'); Readln (DIACHI);

Write ('Nghề nghiệp : '); Readln (NGHE);

END ;


Ðối với bản ghi có nhiều thứ bậc:
R1 là biến bản ghi có trường R2
R2 là biến bản ghi con có trường R3
R3 là biến bản ghi con có trường R4
.....................
thì câu lệnh WITH được tổ chức lồng nhau:
WITH R1 DO
WITH R2 DO
...............
WITH RN DO ;
hay viết đơn giản hơn:
WITH Record1, Record2, ..., RecordN DO ;
Ở ví dụ 8.41, ta có thể viết như sau:

Code:


WITH Lop[i] DO

Begin


With Ngsinh Do

Begin dd:= 25; mm:=05; yyyy:=1978; End;

masv:='7962343'; diem:=9.0;

End;


Phạm Văn Ất, 1993. Turbo Pascal 5 & 6 - Giáo trình cơ sở và nâng cao kỹ thuật lập trình hướng đối tượng, NXB Giáo dục, Hà Nội.
Byron S. GottFried, 1994. Theory and Problems of Programming with Pascal, 2/ed, Schaum's Outline Series, McGraw-Hill Int. Ed., New York, USA.
Hồ Sĩ Ðàm, Nguyễn Tô Thành, Dương Việt Thắng, Nguyễn Thanh Tùng, 1995. Bài tập Tin học I, NXB Giáo dục, Hà Nội.
Francis Scheid, 1982. Theory and Problems of Computers and Programming, McGraw-Hill Book Co., New York, USA.
J. Glenn Brookhear, 1991. Computer Science. The Benjamin/ Cummings Publishing Co.,l nc., New York, USA.
Bùi Việt Hà, 1995. Hướng dẫn sử dụng Norton Commander, NXB. Giáo dục ,Hà Nội.
Ðoàn Nguyên Hải, Nguyễn Trung Trực, Ng. Anh Dũng, 1993. Lập trình căn bản ngôn ngữ Pascal, NXB Khoa Tin học, Ðại học Bách khoa TP. HCM.
Henri E. Bal, Dick Grune, Programming Language Essentials, Addison - Wesley Publishing Company, New York, USA.
Nguyễn Văn Hoài, Nguyễn Tiến, 1995. Tin học căn bản, NXB. Giáo dục, Hà Nội.
Nguyễn Tiến Huy, 1995. Giáo trình Tin học căn bản , TT Tin học Ðaị học Tổng hợp TP. Hồ Chí Minh, NXB Ðồng Nai, Biên Hòa.
Trần Sĩ Huyên, 1996. Các vấn đề về lập trình Pascal, NXb Trẻ, TP. Hồ Chí Minh.
Nguyễn Xuân Quốc Hưởng, 1996. Tin học A & B, NXB Trẻ, TP. Hồ Chí Minh.
Nguyễn Trần Kỷ, Vương Quang Tiến, Nguyễn Thế Hùng, 1994. DOS 6.0 & 6.2, NXB. Thống kê, Hà Nội.
Trần Thị Lệ, Hoàng Kiếm, 1995. Tin học 10, NXB. Giáo dục, Hà Nội.
Ngô Hữu Liêm, 1990. Giáo trình nhập môn lập trình, Tủ sách Trung tâm Tin học, TP.HCM.
Nguyễn Văn Linh, 1994. Giáo trình Tin học đại cương, Tủ sách Ðại học Cần Thơ.
Võ Hiếu Nghĩa, 1994. Tự học Tin học, NXB Thống kê Hà Nội.
Quách Tuấn Ngọc, 1995. Giáo trình Tin học căn bản, NXB. Giáo dục, Hà Nội.
Quách Tuấn Ngọc, 1995. Ngôn ngữ lập trình Pascal, NXB Giáo dục, Hà Nội.
Ðinh Vũ Nhân, 1995. Tin học căn bản, NXB TP. Hồ Chí Minh.
Ruknet Cezzar, A Guide to Programming Languages, Artech House, Inc., London, UK.
Trần Ngọc Tiến, Trần Văn Nam, 1995. Tin học đại cương, Trường Ðại Học Kiến Trúc Hà Nội, Hà Nội.
Nguyễn Ðình Thẳng - Hoàng Minh - Ðỗ Phúc, 1989. MS -DOS 3.30, Trung Tâm Tin học CADASA, Trường Cao đẳng Sư Phạm TP. Hồ Chí Minh.
Lương Văn Thụy, Võ Văn Sơn, Nguyễn Văn Trà, 1992. Ðiện toán căn bản, Trung tâm điện toán, UBKHNN, TP. Hồ Chí Minh.
Nguyễn Văn Trư, 1995. Hướng dẫn tự làm việc bằng máy vi tính, NXB TP. Hồ Chí Minh.
Trường Ðại học Tài chánh Kế toán Tp. Hồ Chí Minh, 1991. Turbo Pascal 5.5 và Bài tập Turbo Pascal 5.5, NXB Ðại học và Giáo dục chuyên nghiệp, Hà Nội.
Ngô Trung Việt, 1994. Kiến thức cơ bản về lập trình, NXB Giao thông vận tải, Hà Nội.
Walter Savitch, 1995. Pascal: An introduction to the Art and Science of Programming, the Benjamin/ Cummings Publishing Co.,Inc., New York, USA.
http://lhp4u.com





Каталог: nonghocbucket -> UploadDocument server07 id114188 190495
UploadDocument server07 id114188 190495 -> ChuyêN ĐỀ ĐIỀu khiển tán sắC
UploadDocument server07 id114188 190495 -> Trong khuôn khổ Hội nghị của fifa năm 1928 được tổ chức tại Amsterdam (Hà Lan), Henry Delaunay đã đưa ra một đề xuất mang tính đột phá đối với lịch sử bóng đá
UploadDocument server07 id114188 190495 -> MỤc lục phần I: MỞ ĐẦU
UploadDocument server07 id114188 190495 -> «Quản trị Tài sản cố định trong Công ty cổ phần Điện lực Khánh Hòa»
UploadDocument server07 id114188 190495 -> Khóa luận tốt nghiệp 2010 Mục tiêu phát triển kinh tế xã hội trong thời kì tới 85
UploadDocument server07 id114188 190495 -> ĐỒ Án tốt nghiệp tk nhà MÁY ĐƯỜng hiệN ĐẠi rs
UploadDocument server07 id114188 190495 -> Đề tài: Qúa trình hình thành và phát triển an sinh xã hội ở Việt Nam
UploadDocument server07 id114188 190495 -> Chuyên đề tốt nghiệp Trần Thị Ngọc – lt2 khct L ời cảM ƠN
UploadDocument server07 id114188 190495 -> Địa vị của nhà vua trong nhà nước phong kiến Việt Nam

tải về 291.86 Kb.

Chia sẻ với bạn bè của bạn:
1   2   3   4




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương