TYPE
AI = ARRAY[1.10] OF INTEGER;
AC = ARRAY[1.5] OF CHAR;
Color = (Red, Blue, Green, White, Black);
VAR
A, B, C: AI;
X, Y: AC;
M1, M2: ARRAY [-3 . 5] OF REAL;
MC: ARRAY ['A' . 'Z'] OF INTEGER;
MM: ARRAY [COLOR] OF BOOLEAN;
23 trang |
Chia sẻ: Mr Hưng | Lượt xem: 880 | Lượt tải: 0
Bạn đang xem trước 20 trang nội dung tài liệu Cơ sở dữ liệu - Kiểu dữ liệu có cấu trúc: kiểu mảng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
10.1
Chương 10
Cấu trúc dữ liệu: kiểu mảng
Kiểu dữ liệu có cấu trúc:
Được xây dựng từ các kiểu cơ sở
Cách thức truy nhập vào từng phần tử
Có 4 kiểu dữ liệu có cấu trúc:
ARRAY, SET, RECORD, FILE
10.2
Kiểu dữ liệu có cấu trúc: kiểu mảng
TYPE
Kiểu_mảng T = ARRAY [Kiểu_Chỉ_dẫn KCD]
OF kiểu_phần_tử KPT;
T = ARRAY [KCD] OF KPT;
VAR
A: Kiểu_Mảng_T;
10.3
Thí dụ 10.1
TYPE
AI = ARRAY[1..10] OF INTEGER;
AC = ARRAY[1..5] OF CHAR;
Color = (Red, Blue, Green, White, Black);
VAR
A, B, C: AI;
X, Y: AC;
M1, M2: ARRAY [-3 .. 5] OF REAL;
MC: ARRAY ['A' .. 'Z'] OF INTEGER;
MM: ARRAY [COLOR] OF BOOLEAN;
10.4
Thí dụ 10.2
Writeln(' Vao so lieu cho mang B : ');
FOR I:=1 TO 5 DO
Begin
Write(' B[', I, '] = ');
READLN( B[I] );
End;
Vao so lieu cho mang B:
B[1] =2
B[2] =12
B[3] =612
B[4] =2
B[5] =34
Bài tập: Cộng hai ma trận C=A+B
10.5
VAR
I: Integer;
CH : CHAR;
MC : ARRAY ['A'..'Z'] OF INTEGER;
BEGIN
(* Xóa mảng đếm MC về không *)
FOR CH := 'A' TO 'Z' DO MC[Ch] := 0;
(* Đọc 100 kí tự từ bàn phím và đếm *)
FOR I:=1 TO 100 DO
Begin
Readln(CH); CH:=UpCase(CH); Hãy cải tiến
MC[Ch] := MC[Ch] + 1; (* Đếm *)
End;
(* Chỉ in ra kết quả đã xuất hiện *)
FOR CH := 'A' TO 'Z' DO
IF MC[CH]> 0 then
Writeln('So chu ',Ch,' = ', MC[Ch]:4);
END.
10.6
Sắp xếp mảng
PROGRAM SAP_XEP;
CONST
N = 5;
VAR
MI: ARRAY[1..N] OF INTEGER;
T: Integer; { T: biến Trung gian }
I, J: INTEGER;
BEGIN
(* Đọc các số cần xếp vào mảng MI *)
FOR I:=1 TO N DO
BEGIN
Write(' M[',I,'] = ');
Readln(MI[i]);
END;
10.7
(* Sắp xếp *) M[1] = -1
FOR I:=1 TO N-1 DO M[2] = 456
FOR J:=I+1 TO N DO M[3] = 34
BEGIN M[4] = -312
IF MI[I >MI[J] THEN M[5] = -56
BEGIN
T := MI[I]; SAU KHI SAP XEP :
MI[I]:= MI[J]; -312 -56 -1 34 456
MI[J]:= T;
END;
END;
(* In ra kết quả *)
Writeln;
Writeln(' SAU KHI SAP XEP :');
FOR I:=1 TO N DO Write(MI[I]:6);
END.
10.8
Mảng nhiều chiều
Thí dụ 10.6
TYPE
PT: ARRAY [1..5] OF REAL;
Color = (Red, Blue, Green, White, Black);
VAR
MPT: ARRAY [1..3] OF PT;
Z: ARRAY [1..3, 'A'..'C'] OF COLOR;
10.9
TYPE
Color = (Red, Blue, Green, White, Black);
VAR
Z: ARRAY [1..3, 'A'..'D'] OF COLOR;
Cột
'A' 'B' 'C' 'D'
1
Hàng 2
3
Truy nhập vào một phần tử mảng A[i, Ch]
A[2, 'D'] := Red;
10.10
VAR
MPT: ARRAY[1..3, 1..5] OF REAL;
Cột
1 2 3 4 5
1 2.12 3.23 4.23 5.23 6.78
Hàng 2 3.23 1.22 23.5 65.3 99.2
3 34.2 56.5 12.0 2.22 5.01
Xem thí dụ nhân 2 ma trận C=A*B;
C A Bij ik kj
k
N
*
1
10.11
CONST
N = 3;
Phay = ','; (* Hằng kí tự: Dấu phẩy *)
VAR
A, B, C: ARRAY[1..N, 1..N] OF INTEGER;
I, J, K : Integer;
BEGIN
(* Đọc vào giá trị của ma trận A *)
FOR I:=1 TO N DO (* Chỉ số hàng *)
FOR J:=1 TO N DO (* Chỉ số cột *)
BEGIN
Write(' A[',I, Phay ,J,'] = ');
Readln(A[I,J]);
END;
(* Đọc vào giá trị của ma trận B: tương tự *)
10.12
(* Nhân hai ma trận vuông cấp N:C=A*B *)
FOR I:=1 TO N DO
FOR J:=1 TO N DO
BEGIN
C[I, J] := 0;
FOR K:=1 TO N DO
C[I,J] := C[I,J] + A[I,K] * B[K,J];
END;
(*In kết quả, theo kiểu viết ma trận *)
Writeln(' Tich cua hai ma tran = ');
FOR I:=1 TO N DO
Begin
FOR J:=1 TO N DO Write(C[I,J]:5);
Writeln;
End;
END.
10.13
Bài tập
Hãy cải tiến chương trình nhân ma trận:
a. Đọc cả một hàng số liệu.
b. Tạo số ngẫu nhiên để nạp vào ma trận
thử, khỏi phải đọc số liệu.
1. Viết chương trình giải hệ phương
trình tuyến tính 2 ẩn dùng ma trận
để chứa các hệ số:
a11.x + a12.y = c1
a21.x + a22.y = c2
Hãy chuyển sang hệ 3 phương trình.
10.14
3. Tạo ma trận X[10, 10].
a. Hãy lập chương trình tạo ra 100 giá
trị ngẫu nhiên nằm trong khoảng
giá trị từ 1..10.
b. Tính tổng của tất cả các phần tử nằm
trên đường chéo chính.
c. Tính tổng bình phưng các số trên
hàng chẵn.
d. Tính tổng căn bậc hai các số ở cột
lẻ.
e. Có bao nhiêu phần tử của ma trận có
giá trị nằm trong dải 4..6.
10.15
STRING [Độ_dài_cực_đại];
Thí dụ 11.1
VAR
FileName: String[20];
Line: String[80];
Xâu kí tự: String
10.16
Thí dụ 11.2
FileName := 'VIDU.PAS';
0 1 2 3 4 5 6 7 8 9 10 ... 20
V I D U . P A S * * * *
Hàm độ dài xâu FileName là Length(FileName)
Truy nhập vào từng phần tử:
If 3 < Length(FileName) then
Writeln('Kí tự thứ 3 là ', FileName[3]);
Độ dài hiện tại của xâu kí tự, CHR(8)
10.17
Cộng các kí tự
FileName := 'A:\' + FileName;
cho kết quả FileName= 'A:\VIDU.PAS'
So sánh hai xâu kí tự
'Vidu' < 'ViDu' là TRUE
'ABC' < 'BBC' là TRUE
Ghi, đọc xâu kí tự
Writeln(St);
Readln(St)
10.18
Mảng xâu kí tự
Danh sách lớp học
VAR
SV: ARRAY[1..240] OF String[25];
Hãy viết CT đọc vào danh sách lớp và in ra máy in
danh sách đó.
10.19
Khai báo String là tham số của CTC
TYPE
St20: String[20];
St30: String[30];
VAR
Ten20 : St20;
Ten30 : St30;
FUNCTION VIDU: St20;
PROCEDURE VIDU2(St: St30);
Cách viết sai:
FUNCTION VIDUSAI: String[20];
PROCEDURE VIDUSAI(St: String[30]);
10.20
Các thủ tục và hàm xử lí xâu kí tự
Length(St)
FUNCTION LENGTH(St: String): byte;
Begin
Length := Ord (St[0]);
End;
Delete(St, Pos, Num);
Với St := 'FILENAME';
Sau khi gọi Delete(St, 2, 3);
St sẽ còn 'FNAME'
10.21
Insert(Obj, St, Pos)
Với St = 'FILENAME'; Obj = '12';
Sau khi gọi Insert(Obj, St, 4);
St sẽ thành 'FIL12ENAME'.
Str(Value, St)
Str(I:5, St)
Cho ta St = ' 512'; (* 5 kí tự *)
Str(X:10:5, St)
cho ra St = ' 123.56789';
Val(St, Var1, Code)
Với St ='123.56'
Val(St, X, Result)
cho ta X = 123.56 và Result = 0;
10.22
Copy(St, Pos, Size)
St := '123456789';
St1 := Copy(St, 3, 2);
sẽ cho St1 = '34';
Pos(Obj, Target)
Nếu St = '123454545' và Obj='45'
thì Pos(Obj, St) cho giá trị bằng 4
Pos('4X', St) cho giá trị bằng 0
10.23
Bài tập
• Viết lại một số thủ tục và hàm vừa học
• Làm bài tập trong sách
3. Dùng Delete, Copy ... Lập CTC tách từ đầu
tiên TWord ra khỏi một xâu kí tự.
'từ' là tập hợp các kí tự không chứa các dấu phân
đoạn câu: Space , Xuống dòng (Return), Tab
(dấu nhẩy cách nhiều kí tự).
Procedure TáchTừ(Var TWord, Line: String);
Ví dụ với Line=' VIET NAM' thì TWord='VIET'.
Các file đính kèm theo tài liệu này:
- ngon_ngu_lap_trinh_pascalchuong10_6454.pdf