Cơ bản về ngôn ngữ Pascal
Pascal là tên của một trong các ngôn ngữ lập trình cấpcao thông dụng. Ngôn ngữ lập
trình Pascal đượcgiáo sư Niklaus Wirth ở trườngÐại học Kỹ thuật Zurich (Thụy sĩ)
thiết kế vàcông bố vào năm 1970. NiklausWirthđặt tên chongôn ngữ này là P ascal
để tưởngnhớ đến nhà T oán học và T riết họcPháp ở thế kỷ 17 là Blaise P ascal, người
đã phát minhra một máy tínhcơ khí đơn giản đầutiên của con người.
Ngôn ngữ Pascal được dùng hiện nay có nhiều điểm khác biệt với chuẩn Pascal
nguyên thủy của Giáo sưWirth. T ùytheo quốc giahoặc công ty đã phát triển cho ra
đời các chương trình biên dịch ngôn ngữ Pascal như:
· ISO PASCAL (International StandardsOrganization) của Châu Âu
· ANSI P ASCAL (American National Standards Institute) của Mỹ
· TURBO PASCAL của hãng BORLAND (Mỹ)
· IBM PASCAL của hãng Microsoft (Mỹ)
· v .v .
Ðến nay, ngôn ngữ Pascal đãpháttriển đếnphiên bản T urboPascal V ersion 7.Các
diễn giải và ví dụtronggiáo trình này chủ yếu sử dụngchương trình T urbo Pascal 5.5
- 7.0, hiện đang đượcsử dụng rộng rãi ở Việt Nam
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 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. •
File đính kèm:
- Cơ bản về ngôn ngữ Pascal.pdf