intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Bài giảng Ngôn ngữ lập trình Pascal: Chương 10 - Kiểu dữ liệu có cấu trúc

Chia sẻ: Lavie Lavie | Ngày: | Loại File: PDF | Số trang:23

80
lượt xem
7
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Bài giảng Ngôn ngữ lập trình Pascal: Chương 10 - Kiểu dữ liệu có cấu trúc bao gồm những nội dung về kiểu dữ liệu có cấu trúc như kiểu mảng, sắp xếp mảng, mảng nhiều chiều, xâu ký tự String. Với các bạn chuyên ngành Công nghệ thông tin thì đây là tài liệu hữu ích.

Chủ đề:
Lưu

Nội dung Text: Bài giảng Ngôn ngữ lập trình Pascal: Chương 10 - Kiểu dữ liệu có cấu trúc

  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.1
  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.2
  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.3
  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.4
  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); 10.5 END.
  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]); 10.6 END;
  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.7
  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.8
  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] 10.9 A[2, 'D'] := Red;
  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; N Cij   Aik * Bkj k 1 10.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.11
  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.12
  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.13
  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.14
  15. Xâu kí tự: String STRING [Độ_dài_cực_đại]; Thí dụ 11.1 VAR FileName: String[20]; Line: String[80]; 10.15
  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 * * * * Độ dài hiện tại của xâu kí tự, CHR(8) 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]); 10.16
  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.17
  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.18
  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.19
  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.20
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2