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

