Giáo trình Tin học đại cương - Phần 2 - Chương 4: Kiểu dữ liệu có cấu trúc - Kiểu mảng, kiểu xâu kí tự, kiểu tập hợp
a. Khái niệm mảng : Mảng là một kiểu dữ liệu có cấu trúc bao gồm một số xác ñịnh các
phần tử có cùng kiểu, có một tên chung. Các phần tử của mảng ñược truy nhập thông qua các
chỉ số.
Trong khái niệm này ta cần chú 2 ñiểm sau:
- Sốphần tửcủa mảng phải là một sốxác ñinh, không ñược khai báo là biến. Ta có
thểkhai báo bằng một giá trịcụthểchẳng hạn như5,10,20, ; hoặc có thểkhai
báo là hằng.
- Các phần tửcủa mảng phải cùng kiểu. Có thểlà các kiểu ñơn giản hoặc kiểu có
cấu trúc.
Ví dụ: Mảng A gồm 6 phần tử là các số nguyên: A[1] A[2] A[3] A[4] A[5] A[6] .
Nhưvậy tên mảng là A, các chỉ số là 1,2,3,4,5,6.
b. Công dụng : Mảng là dùng ñể lưu trữ một dãy dữ liệu có cùng một tính chất. Ví dụ như
họ tên của các thí sinh trong 1 lớp, lương của các nhân viên trong 1 cơquan,.
Trong bộ nhớ của máy tính các phần tử của mảng ñược lưu trữ bởi các từ máy kế tiếp nhau.
Trong ví dụtrên mảng A ñược lưu trữ trong bộ nhớ bằng 6 từ máy kế tiếp nhau, mỗi từmáy
có ñộdài là 2 bytes.
t xâu kí tự St biểu diễn số ñó. Cách biểu diễn của xâu St sẽ ñược qui ñịnh do qui cách của x. I:=1234; Str(I:5,St) sẽ cho St =' 1234' x:=1234.56789111; Str(x:9:4,St) sẽ cho St='1234.5678' h. Thủ tục Var(St,x,m) Thủ tục này biến ñổi xâu kí tự St ( biểu diễn số nguyên hoặc thực ) thành một số nguyên hoặc thực chứa trong x. Biến m là biến nguyên chứa mã lỗi, nếu biến ñổi ñúng thì m=0, nếu biến ñổi sai thì m cho giá trị là vị trí của kí tự sai. Ví dụ 1: St:='1234.567'; x là biến thực, m là biến nguyên. Var(St,x,m); cho ta x=1234.567 và m=0. Ví dụ 2: St:='1234'; x là biến nguyên, m là biến nguyên. Var(St,x,m); cho ta x=1234 và m=0 Ví dụ 3: St:='123ab'; x là biến thực, m là biến nguyên. Var(St,x,m); kết quả sai và m≠0. 2.4. Các chương trình Bài toán 1: Nhập 1 xâu kí tự từ bàn phím, kiểm tra xem xâu có ñối xứng không. Xâu kí tự S có ñộ dài n, là xâu ñối xứng khi có tất cả các cặp kí tự S[i] = S[n-i+1] với i từ 1 ñến (n Div 2). Chẳng hạn xâu ‘1234321’ và xâu ‘abccba’ là các xâu ñối xứng, xâu ‘12343321’ là xâu không ñối xứng. Chương trình: Program KT_xau_doi_xung; Uses crt; Var s: string; i,n : integer; t: boolean; Begin clrscr; Witeln('Nhap xau ki tu'); readln(s); n:=length(s); t:=true; for i:=1 to n div 2 do if s[i] s[n-i+1] then t:=false; if t then writeln(' Xau ki tu doi xung') else writeln(' Xau khong doi xung'); readln; end. Bài toán 2: Nhập vào 2 xâu kí tự có ñộ dài như nhau. Xây dựng xâu mới chứa các kí tự xen kẽ của 2 xâu nhập vào theo thứ tự từ trái sang phải,. Chẳng hạn s1=’123’ s2=’abc’ thì các xâu mới xây dựng là s3=’1a2b3c’, s4=’a1b2c3’ Trường ðại học Nông nghiệp 1 - Giáo trình Tin học ñại cương --------------------------------------------- 151 151 Chương trình: Program Ghep_xen_ke_xau_ki_tu; Uses crt; Var s1,s2,s3,s4: string; i,n : integer; Begin clrscr; Witeln('Nhap xau ki tu mot s1: ‘); readln(s1); Witeln('Nhap xau ki tu hai s2: ‘); readln(s2); s3:=’’; s4:=’’; n:=length(s1); for i:=1 to n do begin s3:=s3+s1[i]+s2[i]; s4:=s4+s2[i]+s1[i]; end; Writeln(‘ Cac xau ki tu moi tao’); Writeln(s3); Writeln(s4); readln; end. Bài toán 3: Chuẩn hoá văn bản. Nôi dung chuẩn hoá văn bản như sau: Nhập vào các dòng văn bản từ bàn phìm, chuẩn hoá theo các qui ñịnh : - Các từ chỉ cách nhau 1 khoảng cách. - Sau dấu chấm phải viết hoa. - Trước các dâu . , ; : không có khoảng cách. - Sau các dâu . , ; : có 1 khoảng cách. Chương trình { xuly tep van ban ve cac dau .,;: } PROGRAM XU_LY_VAN_BAN; USES CRT; VAR S,T:STRING;TIEP:CHAR; PROCEDURE SUA(VAR P:STRING); VAR I:INTEGER; BEGIN { xoa khoang cach thua } I:=1; WHILE I<LENGTH(P)-1 DO IF (P[I]=' ') AND (P[I+1]=' ') THEN DELETE(P,I+1,1) ELSE I:=I+1; { xoa khoang cach truoc cac dau , ; : . } I:=1; WHILE I<LENGTH(P) DO IF (P[I]=' ') AND ((P[I+1]=',') OR (P[I+1]=';') OR (P[I+1]=':') OR (P[I+1]='.')) THEN DELETE(P,I,1) ELSE I:=I+1; { chen dau khoang trong sau cac dau neu thieu } I:=1; WHILE I< LENGTH(P)-1 DO IF ((P[I]=',') OR (P[I]=';') OR (P[I]=':') OR (P[I]='.')) AND (P[I+1]' ') Trường ðại học Nông nghiệp 1 - Giáo trình Tin học ñại cương --------------------------------------------- 152 152 THEN BEGIN INSERT(' ',P,I+1); I:=I+1; END ELSE I:=I+1; { Viet hoa sau dau . } I:=1; WHILE I<LENGTH(P)-2 DO IF P[I]='.' THEN BEGIN P[I+2]:=UPCASE(P[I+2]); I:=I+1; END ELSE I:=I+1; END; { Than chuong trinh chinh} BEGIN CLRSCR; TIEP:='C'; WHILE UPCASE(TIEP)='C' DO BEGIN WRITELN('NHAP XAU KI TU '); READLN(S); SUA(S); WRITELN(S); WRITE('CO TIEP TUC KHONG(C/K) '); READLN(TIEP); END; READLN; END. 3. Kiểu tập 3.1.Khái niệm tập Tập là một bộ các ñối tượng vô hướng và cùng kiểu. Mỗi ñối tượng gọi là một phần tử của Tập. Tập có tối ña là 256 phần tử. Nếu phần tử là kiểu số thì chỉ cho phép là các số nguyên có giá trị từ 0..255. Khái niệm Tập gắn liền với khái niệm Tập hơp trong trong toán học. Ví dụ: Tập các chữ cái hoa, tập này có 26 phần tử. Tập các số nguyên dương có 2 chữ số, tập này có 90 phần tử. 3.2. Khai báo tập Khai báo Tập dùng cụm từ : SET of Kiểu_phần_tử; Kiểu phần tử phải là một kiểu vô hướng. - Dùng khai báo kiểủ Type Tên_kiểu=Set of kiểu _phần_tử; Var Tên_biến: Tên _kiểu; Ví dụ: Type t=set of 1..200; Trường ðại học Nông nghiệp 1 - Giáo trình Tin học ñại cương --------------------------------------------- 153 153 Chu_hoa: Set of 'A'..'Z'; Var tuoi : t; Chu_in: chu_hoa; - Khai báo trực tiếp trong khai báo biến Var Tên_biến: Set of Kiểu_phần_tử; Ví dụ: Type mau=(do,xanh,vang,tin,nau); hinh=(tam_giac,tron,chu_nhat); Var mau_ao: Set of mau; hinh_ve: set of hinh; chu_so: 1..9; 3.3- Xây dựng một tập Xây dựng một tập bằng cách liệt kê các phần tử của tập, chúng ñược cách nhau bởi dấu phẩy và ñược viết trong dấu móc vuông ( [ ]) . Tập rỗng là tập không chứa một phần tử nào, ñược viết là [] [1..99] ; tập này có 100 phần tử . [ 2,4,6,8..12]; tập có các phần tử là 2,4,6,8,9,10,11,12. ['a'..'d',' m','n'] ; tập này có các phần tử 'a', 'b', 'c', 'd', 'm', 'n'. [xanh,do,tim,vang]; Các phần tử của tập cũng có thể cho bằng biến hoặc biểu thức. [2*i+j, i*j-2] ; nếu i=2 và j=3 thì tập có các phần tử là 7, 4. Ta ñược dùng kiểu khoảng con ñể chỉ ra các phần tử của tập. 3.4- Các phép toán trên tập a. Phép gán Gán một tập cho biến kiểu tập. Ví dụ var chu: Set of 'A' .. 'Z'; tuoi: Set of 1..200; Khi ñó có thể thực hiện các phép gán sau: chu:=['A', 'C'', 'M' . .'P']; tuoi:=[50..80, 90,100]; Tập rỗng có thể ñem gán cho mọi biến kiểu tập khác nhau. Chu:=[]; tuoi:=[]; Không thể gán các tập kiểu cơ bản không tương thích. Chẳng hạn nếu gán chu:=[1..10] là sai. b. Phép hợp Phép hợp ñược kí hiệu bằng dấu + Hợp của 2 tập là một tập có các phần tử thuộc hai tập. Ví dụ A:=[1,3,5..10]; B:=[2,4,6,8]; C:=[1,5,9]; D:=A+B; tập D sẽ là [1..10] E:=B+C; tập E sẽ là [1,2,4,5,6,8,9] c. Phép giao Trường ðại học Nông nghiệp 1 - Giáo trình Tin học ñại cương --------------------------------------------- 154 154 Phép giao ñược kí hiệu bằng dấu * Giao của 2 tập là 1 tập có các phần tử là các phần tử chung của cả 2 tập. M:=A*B; tập M sẽ là [6,8] N:=B*C; tạp N=[] d. Phép hiệu Phép hiệu ñược kí hiệu bằng dấu -. Hiệu của 2 tập là 1 tập chứa các phần tử thuộc tập thứ nhất nhưng không thuộc tập thứ 2. G:=A - B ; tập G sẽ là [1,3,5,7,9,10] H:=C - A; tập H sẽ là tập rỗng. e. Phép thuộc về Phép thuộc về kí hiệu là IN Phép thuộc về cho biết 1 phần tử hay 1 tập có thuộc về 1 tập khác không ?, kết quả của phép thuộc về là giá trị kiểu boolean (True hoặc False). 1 In A; kết quả là true. B in A; kết qủa là False. C in A; kết quả là True; Phép so sánh =, , = Hai tập ñem so sánh phải cùng kiểu. Kết quả của phép so sánh là giá trị kiểu boolean. - Hai tập bằng nhau (=) nếu chúng có các phần tử như nhau từng ñôi một. Ví dụ: x:=['a' . .'d']; y:=['a' .. 'd', 'e', 'f']; z:=['a', 'b', 'c', 'd'] x=y; kết quả là False. x=z; kết quả là True. - Hai tập là khác nhau () nếu chúng có ít nhất 1 cặp phần tử khác nhau. x y ; kết quả là True; x z ; kết quả là False. - Tập thứ nhất <= tập thứ 2 nếu tất cả các phần tử của tập thứ nhất ñều thuộc tập thứ 2. x <= y; kết quả là true. y <= x; kết quả là False. - Tập thứ nhất >= tập thứ 2 nếu mọi phần tử của tập thứ 2 ñều thuộc tập thứ 1. y >= x; kết quả cho True. z >= y; kết quả là False. 3.5- Các chương trình về tập Bài toán : Tạo một tập chứa các số có tối ña là 2 chữ số nguyên dương< 256 chia hết cho 7, in tập ñó ra. Sau ñó nhập 1 số bất kỳ kiểm tra xem nó có thuộc vào tập ñó không. Chương trình Program thao_tac_tap; uses crt; var a: set of 1..99; i,n: byte; lap: char; Begin clrscr; Trường ðại học Nông nghiệp 1 - Giáo trình Tin học ñại cương --------------------------------------------- 155 155 { Tao tap cac so chia het cho 7 } a:=[]; for i:=7 to 255 do if (i mod 7) = 0 then a:=a+[i]; { In tập } Writeln(' Tap cac so chia het cho 7'); for i:=7 to 255 do if i in a then writeln(i); { Kiem tra so nhap thuoc tap chi het cho 7} Repeat write(' Nhap so bat ky '); Realn(n); if i in a then writeln('Chia het cho 7') else witeln('Khong chia het cho 7'); Write(' Co tiep tuc khong (C/K) ? '); readln(lap); Until upcase(lap)= 'K'; readln; end. Bài tập chương 4 Hãy viết chương trình cho các bài toán sau: 1. Cho dãy số sau: a1,a2,....,an . Viết chương trình tìm phần tử lớn nhất, phần tử nhỏ nhất của dãy số ñó. 2. Cho dãy số sau: a1,a2,....,an . Viết chương trình sắp xếp dãy theo thứ tự tăng dần . 3. Cho dãy số sau: a1,a2,....,an . Viết chương trình ñếm số phần tử dương và xoá ñi phần tử thứ m trong dãy (m<=n) . 4. Cho dãy số sau: a1,a2,....,an . Viết chương trình tìm các phần tử có giá trị là x nhập vào từ bàn phím. 5. Cho dãy số sau: a1,a2,....,an . Viết chương trình thêm phần tử có giá trị là x, vào vị trí m trong dãy. Sau ñó tính tổng các phần tử của dãy mới. 6. Cho ma trận có m dòng và n cột, các phần tử là nguyên. Tìm phần tử nhỏ nhất của ma trận. 7. Cho ma trận có m dòng và n cột, các phần tử là nguyên. Tính tổng và trung bình cộng các phần tử của ma trận. 8. Viết chương trình nhập vào một xâu ký tự. Hãy xây dựng xâu chứa các ký tự ñảo của xâu ñó, ñếm xem có bao nhiêu ký tự 'a ' hoặc ‘A’ trong xâu. 9. Viết chương trình nhập vào một xâu ký tự. Hãy kiểm tra xem xâu ñó có ñối xứng không. In kí tự ñầu và kí tự cuối của xâu ñó. 10. Viết chương trình nhập vào hai xâu ký tự có ñộ dài bằng nhau. Hãy xây dựng xâu chứa các ký tự xen kẽ của hai xâu ñó, theo thứ tự một kí tự của xâu1 rồi ñến 1 kí tự của xâu 2.
File đính kèm:
- Giáo trình Tin học đại cương - Phần 2 - Chương 4_Kiểu dữ liệu có cấu trúc - Kiểu mảng, kiểu xâu kí tự, kiểu tập hợp.pdf