Bài đọc thêm 2: Ngôn ngữ Pascal

Chia sẻ bởi Hà Anh Tuấn | Ngày 10/05/2019 | 329

Chia sẻ tài liệu: Bài đọc thêm 2: Ngôn ngữ Pascal thuộc Tin học 11

Nội dung tài liệu:

Phần III
Ngôn ngữ lập trình PASCAL
Khái niệm NNLT:
NNLT là một hệ thống các ký hiệu tuân theo các qui ước về ngữ pháp và ngữ nghĩa dùng để viết chương trình cho máy tính bằng cách diễn đạt các bước cần tiến hành công việc sao cho máy tính có thể hiểu và thực hiện được chương trình.
giới thiệu Ngôn ngữ lập trình
Khái niệm chương trình:
Ta có thể định nghĩa một chương trình máy tính là một dãy lệnh, một dãy chỉ thị hướng dẫn cho máy tính thực hiện một nhiệm vụ, một xử lý nào đó trên một tập các dữ liệu, số liệu.
Thuật toán + Cấu trúc dữ liệu = Chương trình
Như vậy NNLT dùng để thể hiện thuật toán và dữ liệu của một bài toán và giải quyết bài toán đó.
Sự phát triển của NNLT:

Ngôn ngữ bậc thấp (Ngôn ngữ máy)
Hợp ngữ (Assembly)
Ngôn ngữ bậc cao: Fortran, Algol, Lips, Pascal, C, Visual Studio, Java scrip,...
Thuật toán
- Khái niệm: Thuật toán được hiểu là tập hợp các qui tắc dùng cho một lớp bài toán nào đó để từ các số liệu ban đầu qua một quá trình thao tác dẫn đến kết quả xác định.
- Đặc điểm:
+ Tính tổng quát
+ Có giới hạn
+ Tính duy nhất
Thuật toán
- Các cách biểu diễn thuật toán
+ Bằng ngôn ngữ tự nhiên
+ Bằng sơ đồ khối
+ Bằng một NNLT

- VD: Hãy biểu diễn thuật toán giải phương trình bậc nhất ax + b = 0 bằng 3 cách nói trên.
Các kí hiệu sử dụng trong sơ đồ khối
1
2
3
4
5
1. Bắt đầu hay kết thúc

2. Vào ra dữ liệu

3. Thực hiện một công việc

4. Kiểm tra điều kiện

5. Đường dẫn
Bằng ngôn ngữ tự nhiên

- Bắt đầu thuật toán
- Nhập giá trị cho các tham số a,b
- Kiểm tra giá trị của a và b như sau:
- Nếu a=0, b=0 thì PT vô số nghiệm
- Nếu a=0, b <>0 thì PT vô nghiệm
- Nếu a <>0 thì PT có nghiệm x = -b/a
- Kết thúc thuật giải.
Bằng sơ đồ khối
Ngôn ngữ lập trình PASCAL
Giới thiệu chung

Pascal là một NNLT bậc cao ra đời vào năm 1970 do Niklaus Wirth viết, lấy tên một nhà toán học.
Pascal có đặc điểm: ngữ pháp, ngữ nghĩa đơn giản, có tính logíc, cấu trúc chương trình dễ hiểu, dễ sửa chữa, cải tiến.
Turbo Pascal tỏ ra có nhiều ưu điểm và trở thành NNLT bậc cao phổ biến sử dụng trong lĩnh vực giảng dạy ở các trường học.
giới thiệu Turbo pascal for win
Các tệp chính của Turbo Pascal for WIN:
TPW.EXE
TPW.TPL
Khởi động TPW 7.0, có 2 cách:
C1: Bấm đúp vào biểu tượng
C2: Bấm StartProgramTPW1.5TPW1.5
Màn hình làm việc, có 2 loại:
Cửa sổ soạn thảo chương trình
Cửa sổ chạy chương trình
Các bước cơ bản khi lập trình bằng PASCAL

B1: Soạn thảo chương trình đã được biểu diễn bằng NNLT PASCAL tại cửa sổ soạn thảo, lưu CT lại trên đĩa.
B2: Dịch chương trình sang mã máy.
B3: Thực hiện chương trình (Chạy CT), trên màn hình xuất hiện cửa sổ chạy CT.

* Chú ý:
- Có thể kết hợp B2 và B3 lại.
- CT thực hiện xong, đóng cửa số chạy CT lại.
Một số lệnh thường dùng

FileNew: Mở 1 cửa sổ soạn thảo mới
FileOpen: Mở 1 cửa sổ soạn thảo đã có sẵn
FileSave:. Lưu giữ cửa sổ soạn thảo lên đĩa
EditCut: Đưa dữ liệu vào bộ nhớ
EditCopy: Sao chép dữ liệu vào bộ nhớ
EditPaste: Dán dữ liệu từ bộ nhớ ra
FileExit: Thoát khỏi TP
Dịch chương trình: Alt-F9
Chạy chương trình: Ctrl-F9
Các kháI niệm cơ bản
1. Bộ ký tự:

Turbo Pascal được xây dựng với bộ ký tự sau:
Các chữ cái: 26 chữ hoa (A, B, C, ?)
26 chữ thường (a, b, c, ?)
Các chữ số thập phân: 0..9
Các dấu toán học thông dụng: + - * / =?
Dấu gạch nối, các kí hiệu đặc biệt: &, $, ^, ?.
2. Từ khoá - Keyword

Từ khoá: là các từ dành riêng trong PASCAL, không được dùng nó vào việc khác hoặc đặt tên mới trùng với các từ khoá.

PASCAL chia làm mấy loại từ khoá như sau:
- Từ khoá chung: Prorgam, Begin, End.. .
- Từ khoá khai báo: var, const, label, type.. .
- Từ khoá của lệnh: if.. ., then.. ., else.. .
Các từ khoá này có thể viết bằng chữ to hoặc chữ nhỏ, giá trị và ý nghĩa của từ khoá không thay đổi.
VD: BEGIN có thể viết là begin, Begin, beGin.. .
3. Tên.

Khái niệm: Tên là một dãy ký tự được dùng để đặt tên cho một đối tượng của Pascal bao gồm tên của hằng, biến, kiểu, chương trình.. .

Đặc điểm:
Tên được tạo thành từ các chữ cái và các chữ số, song chữ đầu bắt buộc là chữ cái.
Tên không chứa dấu cách.
Tên không trùng với từ khoá hoặc tên có sẵn.
Chú ý:

Để làm sáng sủa tên, người ta cho phép sử dụng dấu gạch nối dưới _ (cần phân biệt với dấu trừ - ) khi viết tên.

- Một số tên như tên của một số chương trình con (sin, cos.. . ) đã được Pascal định nghĩa sẵn được gọi là tên chuẩn hay tên đã được định nghĩa trước. Một số tên chuẩn của Pascal: Boolean, Char, Real, Byte.. .
Cấu trúc chung của một chương trình pascal
Phần 1: Phần tiêu đề.
Phần 2: Phần khai báo.
Phần 3: Phần thân CT
Phần tiêu đề
ý nghĩa: Dùng để đặt tên cho CT
Cách dùng:
PROGRAM Tên CT;
Chú ý:
- Phần tiêu đề chỉ nằm trên 1 dòng.
- Có thể không có.



Phần Khai Báo
ý nghĩa: Dùng để mô tả đối tượng (hằng, biến?) sẽ được sử dụng trong chương trình: tên, kiểu dữ liệu...

Phân loại: Có 7 loại khai báo có thể có trong 1 CT PASCAL (USES, LABEL, CONST, TYPE, VAR, FUNCTION, PROCEDURE).

Chú ý:
- Phần khai báo cũng có thể không có tuỳ thuộc vào từng yêu cầu của bài toán.
- Khai báo USES bắt buộc ở vị trí đầu còn thứ tự của các phần khai báo còn lại là không bắt buộc.
USES Danh sách Tên thư viện ;
ý nghĩa: Dùng để khai báo sử dụng các thư viện chuẩn có sẵn của PASCAL sẽ sử dụng trong CT;

Ví dụ minh hoạ:
- Uses WINCRT;
- Uses GRAPH, DOS;

CONST Tên hằng = giá trị hằng;
ý nghĩa: Dùng để khai báo các đại lượng hằng sẽ sử dụng trong CT;

Ví dụ minh hoạ:
Const
a = 5;
b = 3.15;
c = true;
d =?A?;

VAR danh sách Tên biến: Kiểu dữ liệu;
ý nghĩa: Dùng để khai báo các biến sẽ sử dụng trong CT; Khi ta khai báo 1 biến có nghĩa là ta sẽ sử dụng 1 ô nhớ trong máy tính có dung lượng bằng kiểu dữ liệu của biến.
Ví dụ minh hoạ:
Var i,j: integer;
Chú ý:
Có thể khai báo nhiều biến cùng kiểu thông qua dấu phẩy giữa các tên biến.
Phần thân chương trình
ý nghĩa: chứa toàn bộ nội dung gồm các câu lệnh thực hiện CT.

Đặc điểm:
Các câu lệnh nằm giữa 2 từ khoá BEGIN?.END.
Các câu lệnh ngăn cách nhau bởi dấu chấm phẩy.

Lời chú giải:
Các câu này được đặt giữa 2 dấu ngoặc nhọn {?}
hoặc (* ... *) và không được dịch khi thực hiện chương trình.
cấu trúc chung một chương trình pascal
Program tên chương trình;

Label danh sách nhãn;
Const danh sách hằng;
Type danh sách các kiểu;
Var danh sách các biến;

Function tên hàm ... ;
......
Procedure tên thủ tục ... ;
......


Begin
. . . . . . . ;
End.

các kiểu dữ liệu
Kiểu dữ liệu
Một kiểu dữ liệu là sự qui định về cấu trúc, miền giá trị của dữ liệu và tập các phép toán tác động lên miền giá trị đó.
Một NNLT chỉ chấp nhận và xử lý những dữ liệu tuân theo sự qui định về kiểu của NNLT đó. Một dữ liệu bao giờ cũng thuộc về một kiểu dữ liệu nhất định.
Phân loại: Có 2 loại
Kiểu dữ liệu đơn giản.
Kiểu dữ liệu có cấu trúc.
Kiểu dữ liệu đơn giản:

Kiểu Logic
Kiểu số nguyên
Kiểu số thực
Kiểu ký tự

Kiểu dữ liệu có cấu trúc:
Kiểu array
Kiểu string
Kiểu set
Kiểu file
Kiểu record

1. Kiểu logic (Boolean)
- Từ khoá khai báo: BOOLEAN.
- Phạm vi : True, False.
- Cấp phát : 1 byte.
- Phép tính: AND, OR, NOT, XOR.
2. Kiểu Số nguyên
- Phân loại: Có năm kiểu số nguyên.









- Phép tính: Cộng (+), trừ (-), nhân (*), chia (/ div mod).
3. Kiểu Số thực
- Phân loại: Có năm kiểu số thực:







- Phép toán: +, -, *, /
- Dạng thể hiện: Có 2 dạng
Dạng viết thập phân bình thường
Dạng viết có phần mũ
3. Kiểu Số thực
- Dạng thể hiện:
Dạng viết thập phân bình thường: Dùng dấu chấm thay cho dấu phẩy thập phân.
VD: 3.14, 3.0
Dạng viết có phần mũ: Gồm 2 phần (phần định trị và phần mũ viết sau chữ E để biểu diễn số mũ của cơ số 10)
VD: 623.123=6.23123*102 = 6.23123E+02
-0.001234=-1.234*10-3=-1.234E-03
4. Kiểu ký tự (Char)
- Từ khoá khai báo: CHAR.
- Phạm vi : 256 ký tự trong bảngmã ASCII.
- Cấp phát : 1 byte.
- Phép tính : + (phép cộng xâu).
Một giá trị kiểu Char biểu diễn được một ký tự thông qua bảng mã ASCII. Mã của một ký tự chính là số thứ tự của nó trong bảng mã.
4. Kiểu ký tự (Char)
Ví dụ: Có tất cả 256 ký tự đánh số từ 0 đến 255, mã của ký tự A là 65.
Để biểu diễn một ký tự có thể dùng một trong ba cách: đặt ký tự trong hai dấu nháy đơn, dùng hàm Chr(n), dùng #n (trong đó n là mã của ký tự cần biểu diễn)
Ví dụ: ?A?, Chr(65), #65

Một số hàm thường dùng
SQR(x): Bình phương của một số nguyên hay thực
ABS(x): trị tuyệt đối của x
SQRT(x): căn bậc hai của x
SIN(x): tính giá trị sin(x) với x là radian
COS(x):tính giá trị cos(x) với x là radian
ARCTAN(x): tính gía trị Arctg(x)
LN(x): hàm lôga cơ số e của x
EXP(x): hàm ex
TRUNC(x): cắt bỏ phần lẻ thập phân của x (nếu có).
Một số hàm thường dùng
ROUND(x): cho số nguyên gần x nhất.
PRED(x): cho giá trị đứng trước x
SUCC(x): cho giá trị sau x (x không là số thực)
ORD(ký tự): cho STT của ký tự trong bảng mã ASCII
CHR(n): cho ký tự có STT là n trong bảng mã ASCII.
ODD(x): kiểm tra tính chẵn lẻ của một số. hàm trả lại True khi x lẻ và False khi x chẵn.
các thủ tục nhập xuất dữ liệu
Mục đích: Dùng để đưa dữ liệu vào để thực hiện bài toán và đưa dữ liệu ra
Các thủ tục:
Nhập dữ liệu
Xuất dữ liệu
thủ tục nhập dữ liệu
Có 2 cách để nhập dữ liệu
Sử dụng phép gán
Sử dụng thủ tục READ
Chú ý:
Ta chỉ có thể nhập dữ liệu cho các biến
Khi nhập dữ liệu vào phải đảm bảo sự tương ứng:
Về số lượng
Về thứ tự
Về kiểu dữ liệu
1/ sử dụng phép gán
Tên biến:= Biểu thức;
Ví dụ: a:=5; b:=2; x:= a + b;
Chú ý:
Tính tương thích của kiểu dữ liệu
Vế trái của phép gán chỉ có thể là 1 biến
thủ tục nhập dữ liệu
2/ sử dụng thủ tục read
Các mẫu lệnh
READ(Biến1, Biến 2,?,Biến N); (1)
READLN(Biến1, Biến 2,?,Biến N); (2)
READLN; (3)
Thực hiện: Khi chương trình thực hiện thì trên màn hình xuất hiện dấu nhấp nháy_, ta phải nhập dữ liệu vào từ bàn phím.
Khi nhập dữ liệu cho biến xong ta phải ấn Enter để kết thúc.

thủ tục nhập dữ liệu
Thực hiện
Dạng 1, dạng2: Nhập dữ liệu cho các biến, sau khi kết thúc, con trỏ chuyển xuống dòng tiếp theo.
Dạng 3: Dừng chương trình lại. Nhấn Enter để tiếp tục.
thủ tục nhập dữ liệu
thủ tục xuất dữ liệu
Các mẫu lệnh
WRITE(Item1, Item2,...Item N); (1)
WRITELN(Item1, Item2,...Item N); (2)
WRITELN; (3)
Trong đó: Item1, Item 2,...Item N có thể là: Hằng, biến, hàm hoặc là biểu thức.
Lưu ý: Nếu Item là hằng ký tự thì phải đặt chúng trong cặp dấu nháy.
thủ tục xuất dữ liệu
VD: WRITE(?chao cac ban?); Viết ra hằng ký tự
WRITE(X); Viết ra biến
WRITE(sin(x)); Viết ra hàm
WRITE(-b/2*a); Viết ra biểu thức
Thực hiện
Tại vị trí hiện thời của con trỏ, giá trị của các Item lần lượt được in lên màn hình.
thủ tục xuất dữ liệu

Dạng 1: Sau khi giá trị của các Item được in ra màn hình thì con trỏ ở cuối dòng.
Dạng 2: Sau khi giá trị của các Item được in lên màn hình thì con trỏ tự động chuyển xuống đầu dòng tiếp theo.
Dạng 3: Thực hiện thao tác xuống dòng.
Sự khác nhau giữa WRITE và WRITELN ?


a/ Viết ra kiểu số nguyên:
Cách viết không quy cách: Các số nguyên sẽ được viết ra màn hình đúng bằng chữ số đó và bắt đầu từ bên trái. VD: WRITE(123);
- Cách viết có quy cách: Ta sẽ bố trí sỗ chỗ cố định để viết số nguyên bằng cách thêm dấu : và theo sau là số chỗ để viết. Máy sẽ viết số nguyên từ bên phải sang bên trái, nếu thừa chỗ nó sẽ để trống ở bên trái.

VD: WRITE(1233:6);
b/ Viết ra kiểu số thực:
Cách viết không quy cách: Gồm 2 phần (phần định trị và phần mũ viết sau chữ E để biểu diễn số mũ của cơ số 10)
VD: 123.456=1.23456*102 = 1.23456E+02
-0.001234=-1.234*10-3=-1.234E-03
VD: WRITE(3.14);
Cách viết có quy cách:
Item : M : N
M: Số chỗ dành cho cả số thực
N: Số chỗ dành cho phần thập phân
VD: WRITE(3.14:6:1);
c/ Viết ra kiểu ký tự:
Cách viết không quy cách: Máy sẽ viết ra các ký tự bình thường (mỗi ký tự chiếm 1 chỗ)
Cách viết có quy cách: Máy sẽ bố trí các chỗ trắng ở phía trái
d/ Viết ra kiểu Boolean: Nó sẽ viết ra các từ TRUE hoặc FALSE theo kiểu có quy cách họăc không quy cách.
Sự khác nhau giữa read và readln
Tương tự như WRITE và WRITELN
4/ Các thủ tục trình bày màn hình của PASCAL.
Trước hết muốn sử dụng các thủ tục trình bày màn hình thì ta phải khai báo các thủ tục trình bày màn hình như sau:
USES tenunit;
Với tenunit chứa tên của UNIT cần mở.
VD: USES WINCRT; là thủ tục trình bày màn hình
GOTOXY(X,Y);
Là thủ tục đặt con trỏ vào toạ độ X, Y của màn hình. X là tọa độ cột được tính tà 1 đến 80. Y là tọa độ dòng được tính từ 1 đến 25.
CLRSCR;
(Clear Screen) Là thủ tục xoá toàn bộ màn hình và sau khi xoá con trỏ sẽ ở vị trí góc trên bên trái.
* Ngoài cách nhập dữ liệu bằng bàn phím ta còn có cách nhập dữ liệu là những số nguyên ngẫu nhiên trong khoảng từ 0 đến N như sau: random(N);

một số thủ tục trình bày màn hình
GOTOXY(X,Y): Đặt con trỏ vào toạ độ (X,Y) của màn hình. Trong đó 1<=X<=80, 1<=Y<=25.
CLRSCR: Thủ tục xoá màn hình, đưa con trỏ lên góc trên bên trái của màn hình.
TEXTBACKGROUND(Màu): Xác lập màu nền
TEXTCOLOR(Màu): Xác lập màu văn bản.

bảng màu


các cấu trúc điều khiển
Cấu trúc tuần tự
Cấu trúc rẽ nhánh
Cấu trúc lặp
cấu trúc tuần tự
Sơ đồ khối
Thực hiện: Theo cấu trúc tuần tự, các lệnh trong chương trình được thực hiện lần lướt từ đầu đến cuối theo thứ tự.
Ví dụ minh hoạ: Lập trình tính diện tích và chu vi hình chữ nhật khi biết chiều dài và chiều rộng của hình chữ nhật đó.

cấu trúc rẽ nhánh

Sơ đồ khối







Dạng 1
Thực hiện
- Nếu điều kiện là đúng thì làm lệnh P rồi chuyển sang lệnh kế tiếp.
Nếu điều kiện là sai thì không làm lệnh P mà chuyển ngay sang lệnh kế tiếp
3. Câu lệnh
IF <ĐK> THEN Lệnh P;






cấu trúc rẽ nhánh

Sơ đồ khối







Dạng 2
Thực hiện
- Nếu điều kiện là đúng thì làm lệnh P rồi chuyển sang lệnh kế tiếp.
Nếu điều kiện là sai thì làm lệnh Q rồi chuyển sang lệnh kế tiếp.
3. Câu lệnh
IF <ĐK> THEN Lệnh P
ELSE Lệnh Q;






cấu trúc rẽ nhánh
* Chú ý:
Điều kiện là một biểu thức logic trả lại kết quả Đúng hoặc sai.
Lệnh P là 1 lệnh đơn hoặc một lệnh ghép. Các lẹnh ghép phải được đặt trong khối Begin ?End;
*Ví dụ:
cấu trúc rẽ nhánh
Sơ đồ khối







Dạng 3
cấu trúc rẽ nhánh
2. Thực hiện
- Tính giá trị của biểu thức G
- So sánh và lựa chọn
Nếu giá trị của bt G bằng hằng 1 thực hiện lệnh P1 ròi sang lệnh kế tiếp.
?
Nếu giá trị của bt G bằng hằng n thực hiện lệnh Pn ròi sang lệnh kế tiếp.
Nếu giá trị của bt G không bằng giá trị hằng nào thì chuyển sang lệnh kế tiếp.
Dạng 3
cấu trúc rẽ nhánh
3. Câu lệnh
CASE OF
Hằng 1: ;
Hằng 2: ;
. . . . . . . .
Hằng N: ;
END;
Dạng 3
cấu trúc rẽ nhánh
*Chú ý
Kiểu dữ liệu của biểu thứcchỉ có thể là kiểu nguyên, ký tự, logic hoặc kiểu liệt kê.
Các hằng phải có kiểu dữ liệu phù hợp với kiểu dữ liệu của biểu thức.
* Ví dụ:
Dạng 3
cấu trúc rẽ nhánh
Sơ đồ khối







Dạng 4
cấu trúc rẽ nhánh
2. Thực hiện
Tương tự như ở dạng 3, tuy nhiên nếu giá trị của bt G không bằng giá trị hằng nào thì thực hiện lệnh Q rồi chuyển sang lệnh kế tiếp.

Dạng 4
cấu trúc rẽ nhánh
3. Câu lệnh
CASE OF
Hằng 1: ;
Hằng 2: ;
. . . . . . . .
Hằng N: ;
ELSE ;
END;
Dạng 4
cấu trúc điều khiển lặp
* Khái niệm:Các lệnh giống nhau được thực hiện nhiều lần sẽ được sử dụng trong cấu trúc lặp.
* Phân loại: Có 2 loại:
Vòng lặp có bước lặp xác định
Vòng lặp có số bước lặp không xác định
vòng lặp có bước lặp xác định
*Sơ đồ khối
Dạng 1
vòng lặp có bước lặp xác định
*Thực hiện
Đầu tiên biến điều khiển nhận giá trị ban đầu, sau đó thực hiện chu kỳ lặp như sau: chừng nào biến điều khiển còn nhỏ hơn hoặc bằng giá trị cuối thì thực hiện lệnh, sau mỗi lần thực hiện biến điều khiển sẽ thay đổi giá trị như sau:
Biến điều khiển:=Biến điều khiển + 1;

Dạng 1
vòng lặp có bước lặp xác định
*Câu lệnh
FOR Biến_điều_khiển := GT_đầu TO GT_cuối DO ;
Dạng 1
vòng lặp có bước lặp không xác định
*Sơ đồ khối
Dạng 1
vòng lặp có bước lặp không xác định
*Thực hiện
Máy tính sẽ thực hiện chu kỳ lặp như sau: Chừng nào biểu thức boolean còn đúng (TRUE) thì công việc được thực hiện, các câu lệnh phải đặt giữa Begin và End. Vòng lặp sẽ kết thúc khi biểu thức boolean sai (FALSE).
Dạng 1
vòng lặp có bước lặp không xác định
*Câu lệnh
WHILE DO
Begin
;
End;
Dạng 1
vòng lặp có bước lặp không xác định
*Sơ đồ khối
Dạng 2
vòng lặp có bước lặp không xác định
*Thực hiện
Máy tính thực hiện chu kỳ lặp như sau: máy tính sẽ thực hiện công việc cho đến khi bt boolean có giá trị đúng (TRUE) thì thoát khỏi vòng lặp. Giữa REPEAT và UNTIL không cần dùng Begin và End.

Dạng 2
vòng lặp có bước lặp không xác định
*Câu lệnh
REPEAT
;
UNTIL ;
Dạng 1
vòng lặp có bước lặp không xác định
*Chú ý
Cả 2 vòng lặp đều có số lần lặp không xác định trước, cần phải lưu ý trong khi thực hiện công việc lặp, ta phải có 1 lệnh lặp làm thay đổi 1 biến nằm trong biểu thức boolean để thay đổi giá trị của biêủ thức nhằm dừng vòng lặp lại vì nếu không như vậy vòng lặp sẽ chạy mãi không dừng dẫn đến máy sẽ bị treo khi thực hiện chương trình.

Kiểu dữ liệu có cấu trúc
*.Khái niệm
- Kiểu dữ liệu có cấu trúc là các kiểu dữ liệu được tạo ra từ các phần tử có kiểu dữ liệu đơn giản bằng một cách nào đó.
- Kiểu dữ liệu có cấu trúc được đặc trưng bằng kiểu dữ liệu của các phần tử và phương pháp cấu thành kiểu dữ liệu mới (điều đó cũng có nghĩa là phương pháp truy nhập vào kiểu dữ liệu có cấu trúc).
- PASCAL có tất cả 4 kiểu dữ liệu có cấu trúc: ARRAY, SET, RECORD, FILE
1. Kiểu dữ liệu mảng
*.Khái niệm
Mảng là một tập gồm hữu hạn các phần tử có cùng chung một kiểu dữ liệu. Mỗi phần tử của mảng có một đại lượng xác định vị trí tương đối của phần tử đó so với phần tử khác trong mảng, gọi là chỉ số.
*. Phần loại
- Mảng1 chiều
- Mảng 2 chiều
1. Kiểu dữ liệu mảng
*. Các yếu tố để xác định một mảng
- Tên mảng
- Kiểu dữ liệu của các phần tử
- Kiểu dữ liệu của các chỉ số và phạm vi
* Chú ý: Kiểu dữ liệu của chỉ số phải là kiểu đếm được (Integer, char,?)
* Truy xuất các phần tử của mảng
Tên mảng [Chỉ số phần tử]
VD: A[5}; B[?A?]; C[1,2]
mảng 1 chiều
*. Khai báo: Có 2 cách
Khai báo trực tiếp
VAR
Tên mảng:ARRAY[m1..m2] OF Kiểu dữ liệu;
- m, m2: là 2 hằng xác định phạm vi của chỉ số, m1<=m2
VD:
Var A:array[0..10] of real;
B:array[1..5] of integer;
C:arrar[?A?..?Z?] of Boolean;
mảng 1 chiều
*. Khai báo: Có 2 cách
Khai báo gián tiếp (qua 1 kiểu dữ liệu mới)
TYPE
Tên kiểu mảng:ARRAY[m1..m2]
OF Kiểu dữ liệu;
VAR
Tên mảng: Tên kiểu mảng;
- m, m2: là 2 hằng xác định phạm vi của chỉ số, m1<=m2
mảng 1 chiều
VD:
TYPE
Mang1=array[0..10] of real;
Mang2=array[1..5] of integer;
Mang3=array[?A?..?Z?] of Boolean;
VAR
A:Mang1;
B:Mang2;
C:Mang3;
mảng 1 chiều
*Khai báo mảng có giá trị ban đầu
CONST
Tên mảng: ARRAY[m1..m2] OF Kiểu dữ liệu=(Hăng1, Hăng2,?,Hằngm);
VD:
Const X:array[1..5] of integer =(12,5,7,8,3);
Chú ý:
- Mặc dù từ khoá là Const, X được dùng như biến, vì vậy ta có thể thay đổi giá trị được.
mảng 1 chiều
* Các bài toán cơ bản của mảng
1. Nhập dữ liệu cho mảng
2. Viết các giá trị của mảng lên màn hình
3. Tính tổng các phần tử trong mảng
4. Đếm số lần xuất hiện của phần tử x trong mảng
5. Tìm số lớn nhất và nhỏ nhất của mảng
6. Bài toán sắp xếp trong mảng
7. Kiểm tra mảng có thoả một tính chất nào đó hay không
mảng 2 chiều
*. Khai báo: Có 2 cách
Khai báo trực tiếp
VAR
Tên mảng:ARRAY[m1..m2,m3..m4] OF Kiểu dữ liệu;
- m1, m2, m3, m4: là 2 hằng xác định phạm vi của chỉ số, m1<=m2, m3<=m4
VD:
Var A:array[0..10,0..10] of real;
B:array[1..5,1..10] of integer;
C:array[?A?..?Z?,1..5] of Boolean;
mảng 2 chiều
*. Khai báo: Có 2 cách
Khai báo gián tiếp (qua 1 kiểu dữ liệu mới)
TYPE
Tên kiểu mảng=ARRAY[m1..m2,m3..m4] OF Kiểu dữ liệu;
VAR
Tên mảng: Tên kiểu mảng;
- m1, m2, m3, m4: là 2 hằng xác định phạm vi của chỉ số, m1<=m2, m3<=m4
mảng 2 chiều
VD:
TYPE
Mang1=array[0..10,0..10] of real;
Mang2=array[1..5,1..10] of integer;
Mang3=array[?A?..?Z?,1..5] of Boolean;
VAR
A:Mang1;
B:Mang2;
C:Mang3;
Kiểu dữ liệu xâu ký tự (string)
*.Khái niệm
Xâu ký tự là kiểu dữ liệu mới để xử lý các chuỗi, các dãy ký tự có độ dài thay đổi nhằm đáp ứng nhu cầu xử lý văn bản, xử lý từ .
Cấu trúc của xâu ký tự như sau: trong bộ nhớ nó chiếm số byte bằng số ký tự cực đại để chứa các ký tự, cộng với 1 byte đầu tiên chứa số ký tự hiện có của xâu ký tự.
Ký tự trắng cũng được gọi là ký tự, còn ký tự rỗng không có độ dài. Độ dài của mỗi xâu ký tự không quá 255 ký tự.
Kiểu dữ liệu xâu ký tự (string)
*. Khai báo:
VAR
Tên xây ký tự: STRING;
Tên xây ký tự: STRING[Độ dài cực đại];
VD:
VAR
St: String;
St1:String[30];
Kiểu dữ liệu xâu ký tự (string)
* Truy nhập vào các phần tử của xâu ký tự:
- String là một mảng ký tự có chỉ số chạy từ 0 đến độ dài cực đại, phần tử 0 chứa độ dài thực của xâu và xâu ký tự có độ dài luôn luôn không đổi.
- Truy nhập vào xâu ký tự: Tên biến và chỉ số đặt trong ngoặc vuông như khi truy nhập vào phần tử của mảng. Chỉ số này có thể chạy từ 1 đến độ dài cực đại của xâu ký tự.
- Nếu vị trí ký tự đó nằm ngoài độ dài thực của xâu ký tự thì phần tử đó của xâu không có giá trị xác định.
Kiểu dữ liệu xâu ký tự (string)
* Các thao tác với xâu ký tự.
- Phép cộng xâu: (+) VD: ?A? + ?B? = ?AB?
- So sánh xâu ký tự: Khi so sánh hai xâu ký tự, các ký tự của hai xâu được so sánh từng cặp một từ trái qua phải theo giá trị của bảng mã ASCII.
- Đọc và viết ra màn hình: Dùng 2 thủ tục WRITE và READ bình thường.
Kiểu dữ liệu xâu ký tự (string)
* Các thủ tục và hàm chuẩn xử lý xâu.
- Length(st): là hàm cho ta độ dài thực của xâu ký tự st.
VD: st:=?Hà Nội? Length(st) = 6.
- Delete(st,Pos,Num): là thủ tục xoá đi một số ký tự Num kể từ vị trí Pos trong xâu st.
VD: st:=?FILENAME?
Delete(st,2,3) st:=?FNAME?
Kiểu dữ liệu xâu ký tự (string)
* Các thủ tục và hàm chuẩn xử lý xâu.
- Insert(Obj,st,Pos): là thủ tục xen xâu ký tự Obj vào xâu st tạo vị trí Pos.
VD: st:=?FILENAME? Obj:=?12? Insert(?12?,st,4) st:=?FIL12ENAME?
Nếu Length(Obj) + Legth(st) vượt quá độ dài cực đại cho phép thì chỉ những ký tự nào nằm trong khoảng độ dài cực đại cho phép mới được giữ lại.
Kiểu dữ liệu xâu ký tự (string)
* Các thủ tục và hàm chuẩn xử lý xâu.
- Str(Value,st): là thủ tục biến đổi giá trị bằng số nguyên hoặc thực Value thành một dãy ký tự biểu diễn số đó. Cách biểu diễn của st sẽ được qui định do qui cách của Value.
VD: I:= 512 Str(I:5,st) st:=? 512?
R:=123.5678901 Str(R:10:5,st) st:=? 123.56789?
Kiểu dữ liệu xâu ký tự (string)
* Các thủ tục và hàm chuẩn xử lý xâu.
- Val(st,Var1,Code): là thủ tục biến đổi một xâu ký tự st (biểu diễn một số nguyên hoặc thực) thành một số nguyên hoặc thực chứa trong Var1. Code là số nguyên để phát hiện lỗi: nếu phép biến đổi mà đúng thì Code có giá trị 0, nếu sai do st không biểu diễn đúng số nguyên hoặc số thực. Code sẽ nhận giá trị bằng vị trí của các ký tự sai trong xâu chữ st.
VD: st:=?123? Val(st,X,Code) X:=123
Kiểu dữ liệu xâu ký tự (string)
* Các thủ tục và hàm chuẩn xử lý xâu.
- Copy(st,Pos,Size): hàm Copy sẽ nhận Size ký tự trong st từ vị trí Pos.
VD: st:?12345678? st1:=copy(st,3,2) st1:=?45?
Nếu Pos > Length(st) thì Copy sẽ cho một xâu rỗng.
Nếu Pos + Size > length(st) thì copy sẽ chỉ nhận các ký tự nằm trong xâu st.

Kiểu dữ liệu xâu ký tự (string)
* Các thủ tục và hàm chuẩn xử lý xâu.
- Concat(st1,st2,...stn): là hàm ghép nối tất cả các xâu ký tự st1, st2, ...stn thành một xâu ký tự theo thứ tự đã viết. Tất nhiên nếu tổng số chiều dài của các xâu ký tự lớn hơn 255 thì máy sẽ báo lỗi.
- Pos(Obj,Target): là hàm cho ta vị trí đầu tiên của xâu Obj gặp trong xâu Target. Nếu không tìm thấy thì Pos có giá trị bằng 0.
Kiểu dữ liệu bản ghi (record)
*.Khái niệm

Kiểu dữ liệu bản ghi (record)
*.Khái niệm
Trong ngôn ngữ PASCAL, mỗi dòng được gọi là một RECORD (bản ghi), mỗi cột được gọi là một FIELD (trường, thành phần, thuộc tính)
Vậy bản ghi là một tập thông tin bao gồm nhiều trường, mỗi trường có thể có kiểu dữ liệu khác nhau
Mỗi bản ghi là một tập gồm nhiều biến kết hợp lại với nhau.
Kiểu dữ liệu bản ghi (record)
*.Khai báo
TYPE
Tên kiểu bản ghi= RECORD
Trường 1: Kiểu dữ liệu 1;
Trường 2: Kiểu dữ liệu 2;
?
Trường m: Kiểu dữ liệu m;
End;
VAR
Tên biến: Tên kiểu bản ghi;
Kiểu dữ liệu bản ghi (record)
*.Ví dụ
TYPE
Sinhvien = RECORD
Hoten: String[30];
Ngaysinh: Integer;
Nơisinh: String
End;
VAR
S: sinhvien;
Kiểu dữ liệu bản ghi (record)
*.Cách truy nhập
- Ta có thể truy nhập vào từng trường của bản ghi bằng 2 cách
Tên biến. Tên trường
With Tên biến Do Tên trường
VD:
Sinhvien.hoten;
With sinhviên Do Hoten
Kiểu dữ liệu bản ghi (record)
*Chú ý:
- Kiểu bản ghi có thể sử dụng như là một kiểu dữ liệu phần tử của mảng
- Không thể viết ra màn hình hoặc đọc từ bàn phím cả một biến kiể Record.
- Không thể so sánh các Record: <, >, <=, >=
- Không thể dùng các phép toán số học và logic

Kiểu dữ liệu tệp tin (file)
*.Khái niệm
Tệp tin (File) trong PASCAL là một kiểu dữ liệu có cấu trúc. Mỗi tập tin là một tập hợp các phần tử có cùng chung một kiểu dữ liệu được nhóm lại thành một dãy và được ghi trên đĩa với một tên chung.
Khái niệm tập tin và mảng có những điểm tương tự nhau
* Phân loại: Có 2 loại tệp tin
- Tệp tin có định kiểu
- Tệp văn bản
Kiểu dữ liệu tệp tin (file)
*. Phân biệt giữa mảng và tập tin
- Mảng được tổ chức trong bộ nhớ. còn tập tin chủ yếu được lưu trữ trên đĩa.
- Số phần tử của mảng được xác định ngay từ khi khai báo, còn số phần tử của tập tin thfi không. Các tập tin được kết thúc bằng một dấu hiệu đặc biệt là EOF ( End Of File)
- Các phần tử của mảng được truy xuất thông qua chỉ số. Các phần tử của tập tin được truy xuất nhờ một biến trung gian chỉ điểm vào các vị trí của chúng trên đĩa, gọi là con trỏ tệp. Tại mỗi thời điểm con trỏ sẽ chỉ vào một vị trí nào đó trong tệp tin, gọi là vị trí hiện thời.
tệp tin có định kiểu
*. Khái niệm
- Tập tin mà các phần tử của nó có cùng một kiểu dữ liệu. Kiểu dữ liệu của các phần tử của tập tin có thể là kiểu đơn giản hoặc kiểu dữ liệu có cấu trúc (mảng, bản ghi)
*. Khai báo
Có 2 cách khai báo: - Trực tiếp
- Gián tiếp

tệp tin có định kiểu
*. Trực tiếp
VAR Tên biến: File OF Kiểuphầntử;
VD:
TYPE SV=Record
Ten: String[20];
NS:Integer;
ĐTB: Real;
End;
VAR F1: File of Integer;
F2: File of SV;
tệp tin có định kiểu
*. Gián tiếp
TYPE Tên kiểu tệp tin = File OF Kiểu phần tử;
VAR Tên biến: Tên kiểu tệp tin;
VD: TYPE SV=Record
Ten: String[20];
NS:Integer;
ĐTB: Real;
End;
Kieu1 = File Of SV;
VAR F1: Kieu1;
tệp tin có định kiểu
*. Một số thủ tục chuẩn xử lý tệp tin
1) ASSIGN(Biến tệp tin, Tên tệp tin): Gán tên tệp tin cho biến tệp tin.
VD: Assign(F,?QLSV.DAT);
2) REWRITE(Biến tệp tin): Khởi tạo tệp tin mới, nếu tệp tin đã có -> sẽ bị xoá.
VD: Rewrite(F);
3) RESET(Biến tệp tin): Mở tệp tin đã có để sử dụng, con trỏ tệp tin trỏ vào phần tử đầu tiên (có số thứ tự là 0)
VD: Reset(F);
tệp tin có định kiểu
*. Một số thủ tục chuẩn xử lý tệp tin
4) WRITE(Biến tệp tin, bt1, bt2,?):Tuần tự ghi các giá trị của các biểu thức vào tệp tin. Các biểu thức này phải có cùng dữ liệu với dữ liệu của các phần tử của tệp tin.
VD: Write(F,5,3*6,10*2);
5) READ(Biến tệp tin, b1, b2,?): Đọc tuần tự các phần tử của tệp tin từ vị trí hiện thời của con trỏ và gán cho các biến b1, b2,?. Kiểu dữ liệu của các biến này phải đồng nhất với kiểu dữ liệu của file. Mỗi khi đọc xong một phần tử, con trỏ tệp tin tự động dời đến phần tử tiếp.
VD: Read(F,x,y);
tệp tin có định kiểu
*. Một số thủ tục chuẩn xử lý tệp tin
6) CLOSE(Biến tệp tin):Đóng tệp tin.
VD: Close(F);
7) SEEK(Biến tệp tin,k): Đặt con trỏ tệp tin vào phần tử thứ k trong tệp tin. Thủ tục này cho phép truy xuất trực tiếp một phần tử của tệp tin mà không phải thực hiện tuần tự.
VD: Seek(F,10);
Read(F,i);
Write(i);
tệp tin có định kiểu
*. Một số thủ tục chuẩn xử lý tệp tin
8) ERASE(Biến tệp tin):Xoá tệp tin.
VD: Erase(F);
9) RENAME(Biến tệp tin,Tên mới): Đổi tên
VD: Rename(F,?QLCB.DAT);
*Chú ý: Các tệp tin phải đang đóng thì lệnh xoá và đổi tên mới thực hiện được.
tệp tin có định kiểu
*. Một số hàm chuẩn xử lý tệp tin
1) EOF(Biến tệp tin):Cho kết quả True khi con trỏ đang ở cuối tệp, ngược lại là False.
2) FILESIZE(Biến tệp tin): Cho số phần tử của tệp tin. Nếu tệp tin rỗng thì số phần tử = 0;
3) FILEPOS(Biến tệp tin): Cho vị trí hiện thời của con trỏ. Phần tử đầu tiên =0, cuối = FileSize =1.
tệp tin có định kiểu
*. Ví dụ
VD1:
Viết chương trình ghi vào đĩa 100 số tự nhiên (từ 1 đến 100), viết kết quả lên màn hình.
VD2:
Viết chương trình thực hiện các công việc sau:
- Đọc từ bàn phím một danh sách gồm họ tên, môn thi 1, điểm mon1, môn thi2, điểm mon 2.
- Ghi vào đãi với tên QLHT.DAT
- Đọc dữ liệu từ File và tìm những học sinh phải thi lại (có ít nhất 1 môn điểm < 5) và viết kết quả ra màn hình.
tệp tin có định kiểu
*. Ví dụ
VD3:
Để quản lý thiết bị tại một xí nghiệp sản xuất, người ta cần nhập dữ liệu cho một tệp định kiểu có tên là THIETBI.DAT của các bản ghi có cấu trúc như sau:
THIETBI bao gồm:
MATB, TENTB: Mã và Tên thiết bị.
NGAYMUA: Ngày mua thiết bị bao gồm ngày, tháng, năm.
HSD: Hạn sử dụng của thiết bị
tệp tin có định kiểu
*. Ví dụ
Hãy lập trình thực hiện các công việc sau:
- Tạo tệp dữ liệu cho khoảng 20 thiết bị trong xí nghiệp.
- Đọc dữ liệu từ tệp THIETBI.DAT và in ra màn hình tất cả các thiết bị có hạn sử dụng trên 10 năm.
- Nhập một năm bàn phím và in ra màn hình thông báo xem trong xí nghiệp có thiết bị mua từ năm đó không và liệt kê tất cả các thiết bị mua từ năm đó và đã hết hạn sử dụng.
tệp tin có định kiểu
*. Bài tập
Để quản lý các khách hàng tại một công ty bảo hiểm, người ta cần nhập dữ liệu cho một tệp định kiểu có tên là KHACH.DAT của các bản ghi có cấu trúc như sau:
Các thông tin về khách hàng mua bảo hiểm bao gồm:
MAKH, TENKH: Mã và Tên của khách hàng.
NGAYKY: Ngày ký hợp đồng bảo hiểm.
TGBH: Thời gian bảo hiểm.
SOTIEN: Số tiền nộp hàng tháng
tệp tin có định kiểu
*. Bài tập
Hãy lập trình thực hiện các công việc sau:
- Tạo tệp dữ liệu cho khoảng 10 khách hàng của công ty.
- Đọc dữ liệu từ tệp KHACH.DAT và in ra màn hình tất cả các khách hàng đóng tiền bảo hiểm trong thời gian là 20 năm.
- Nhập một năm bàn phím và in ra màn hình danh sách các khách hàng ký hợp đồng bảo hiểm vào năm đó và với số tiền nộp hàng tháng là 215000 đồng.
tệp tin văn bản
*. Khái niệm
- Tập tin mà các phần tử của nó là các ký tự được ghi thành từng dòng có độ dài khác nhau. Các dòng được phân cách nhờ các dấu kết thúc dòng. Đó là CR và LF (Carriage Return và Line Feed)
VD:
Tep tin van ban
12345

tệp tin văn bản
*. Khai báo
VAR
Tên biến tệp tin: TEXT;
VD: F:Text;
tệp tin văn bản
*. Một số thủ tục chuẩn xử lý tệp tin
Các thủ tục chuẩn xử lý tệp tin đều giống tệp tin có định kiểu. Tuy nhiên, tệp văn bản không đồng thời vừa ghi vừa đọc dữ liệu được.
Các thủ tục WRITE và READ có thể ghi và đọc dữ liệu cho nhiều kiểu dữ liệu khác nhau (số nguyên, thực, ký tự, logic, xâu ký tự)
Các tệp van bản cho phép có thể xem, sửa trực tiếp một cách dễ dàng bằng các hệ soạn thảo đơn giản như NC, TP.
Kiểu dữ liệu tập hợp (SET)
*.Khái niệm
Một tập hợp bao gồm một số các đối tượng nào đó có cùng bản chất (cùng mô tả kiểu, dữ liệu - kiểu cơ bản). Kiểu cơ bản phải là kiểu vô hướng đếm được (byte, ký tự, logic). Số phần tử của tập hợp tối đa là 256 phần tử.
Kiểu tập hợp được mô tả bằng từ khoá SET OF, tiếp theo là kiểu cơ bản của các phần tử.
Kiểu dữ liệu tập hợp (SET)
*.Khai báo
Cách1:
TYPE Tên kiểu=SET OF Kiểu phần tử;
VAR Tên biến:Tên kiểu;
Cách 2:
VAR Tên biến: SET OF Kiểu phần tử;
Kiểu dữ liệu tập hợp (SET)
*.Ví dụ
Cách 1:
Type
Ky_tu=SET OF CHAR;
Chu_hoa=SET OF ?A?..?Z?;
So=SET OF Byte;
Var
TapA:Ky_tu;
TapB:Chu_hoa;
TapC:So;
Kiểu dữ liệu tập hợp (SET)
*.Ví dụ
Cách 2:
Var
TapA:SET OF CHAR;
TapB:SET OF ?A?..?Z?;
TapC:SET OF Byte;
*Chú ý: Các khai báo sau là sai
Var
T1: SET OF Integer;
T2: SET OF 1..256;
Kiểu dữ liệu tập hợp (SET)
*.Xác định một tập hợp
Một tập hợp được xác định bằng cách liệt kê các phần tử của nó, các phần tử được phân cách nhau bởi dấu phẩy và đặt giữa hai dấu ngoặc vuông
Ví dụ: [ ]; [3..6]; [?A?..?C?,?X?,?Z?]
Các phần tử của tập hợp có thể là biến hay biểu thức: [3,5,i+j,2*j]
Kiểu dữ liệu tập hợp (SET)
*.Các phép toán
- Phép gán: Có thể gán mọt tập hợp cho một biến tập hợp cùng kiểu
VD: TapA:=[?1?..?5?,?A?];
Tập rỗng có thể gán cho biến tập hợp kiểu nào cũng được
- Phép hợp: Hợp của tập A và B (A+B) là một tập hợp gồm các phần tử hoặc thuộc TAPA hoặc thuộc TAPB
VD: [3..5]+[4..6,10,15]=[3..6,10,15]
Kiểu dữ liệu tập hợp (SET)
*.Các phép toán
- Phép giao: Giao của tập A và B (A*B) là một tập
* Một số tài liệu cũ có thể bị lỗi font khi hiển thị do dùng bộ mã không phải Unikey ...

Người chia sẻ: Hà Anh Tuấn
Dung lượng: | Lượt tài: 3
Loại file:
Nguồn : Chưa rõ
(Tài liệu chưa được thẩm định)