Cơ sở dữ liệu - Kiểu dữ liệu có cấu trúc: kiểu mảng

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;

pdf23 trang | Chia sẻ: Mr Hưng | Lượt xem: 880 | Lượt tải: 0download
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:

  • pdfngon_ngu_lap_trinh_pascalchuong10_6454.pdf
Tài liệu liên quan