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

pdf37 trang | Chuyên mục: Pascal | Chia sẻ: dkS00TYs | Lượt xem: 2120 | Lượt tải: 4download
Tóm tắt nội dung Cơ bản về ngôn ngữ Pascal, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
 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:

  • pdfCơ bản về ngôn ngữ Pascal.pdf