Tin học đại cương - Phần 2 Ngôn ngữ lập trình TURBO PASCAL - Chương 4

Chia sẻ: Nguyen Nhi | Ngày: | Loại File: PDF | Số trang:15

0
63
lượt xem
34
download

Tin học đại cương - Phần 2 Ngôn ngữ lập trình TURBO PASCAL - Chương 4

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Tài liệu tham khảo giáo trình Tin học đại cương dùng cho khối A do Đỗ Thị Mơ chủ biên - Bộ môn công nghệ phần mềm gồm 2 phần chia làm 13 chương - Phần 2 Ngôn ngữ lập trình TURBO PASCAL - 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

Chủ đề:
Lưu

Nội dung Text: Tin học đại cương - Phần 2 Ngôn ngữ lập trình TURBO PASCAL - Chương 4

  1. CHƯƠNG IV KI U D LI U CÓ C U TRUC: KI U M NG, KI U XÂU KÍ T , KI U T P H P 1 - Ki u m ng 1.1- Khái ni m m ng (array) 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. 1.2- Khai báo m ng ð khai báo m ng dùng c m t sau: ARRAY [ Ki u_ch _s 1, Ki u_ch _s 2, . . . ] OF Ki u_ph n_t ; - Khai báo b ng ñ nh nghĩa ki u TYPE Tên_ki u_m ng = ARRAY [ Ki u_ch _s 1, Ki u_ch _s 2, . . . ] OF Ki u_ph n_t ; VAR Tên_bi n_m ng : Tên_ki u_m ng ; - Khai báo bi n m ng tr c ti p qua khai báo VAR: VAR Tên_bi n_m ng :ARRAY [ Ki u_ch _s 1, Ki u_ch _s 2, . . . ] OF Ki u_ph n_t ; Trong ñó: Ki u ph n t là ki u c a m i ph n t trong m ng. Ki u ph n t có th là ki u b t kỳ. Ch s ñ truy nh p ñ n các ph n t c a m ng. Ki u ch s ch cho phép là các ki u ñơn gi n sau ñây: Ki u kí t ( CHAR), ki u BOOLEAN, ki u mi n con ( kho ng con), ki u li t kê. Ki u ch s không ñư c là ki u REAL ho c INTEGER. S ch s là s chi u c a m ng, m ng 1 chi u có 1 ch s , m ng 2 chi u có 2 ch s , ... , m ng n chi u có n ch s . Kích thư c t i ña c a m ng ph i ñư c khai báo là m t s xác ñ nh ( là h ng), ch ng h n ta có th khai báo là 5 ho c 10 hay 100,... ch không ñư c khai báo là m t bi n như n,m,... 141 Trư ng ð i h c Nông nghi p 1 - Giáo trình Tin h c ñ i cương --------------------------------------------- 141
  2. Ví d 1 var B: array[ 1..5] of char ; ví d 1 m ng B có kích thư c t i ña là 5. Ví d 2 TYPE AB = ARRAY [1 .. 5] OF INTEGER ; COLOR = ( Red, Blue, Green, While, Black ); VAR X,Y,Z : AB; MAO, MKHAN : COLOR; Ví d 3 VAR DSHodem,DSTen : Array [1.. 200] of string [20] ; DSHeso, DSLuong, DSPhucap,DSTong : array [1.. 200] of real; So_lap : array [ ‘a’ .. ‘z’] of integer; 1.3- Truy nh p m ng Có th truy nh p vào b t kỳ ph n t nào trong m ng. ð truy nh p vào m t ph n t trong m ng ta vi t theo qui cách sau: Tên_bi n_m ng [ ch -s 1, ch _s 2, ..., ch _s n ] Các ph n t c a m ng ñư c coi như m t bi n, có th tham gia vào các th t c vào/ra, các bi u th c, l i g i hàm. Ví d : Var a:array[1..20] of integer; A[1]:=1; readln(a[2]; a[3]:=a[1]+a[2]; Writeln(a[3]); 1.4- M ng 1 chi u * Khai báo m ng m t chi u: Dùng c m t sau ARRAY [ki u_ch _s ] OF ki u_ph n_t ; - Dùng khai báo ki u: TYPE Tên_ki u_m ng = ARRAY [ ki u_ch _s ] OF ki u_ph n_t ; VAR Tên_bi n_m ng: Tên_ki u_m ng ; - Dùng khai báo bi n : VAR Tên_bi n_m ng : ARRAY [ ki u-ch _s ] OF ki u_ph n_t ; M ng m t chi u ch có m t ch s . * Cách dùng : M ng 1 chi u thư ng ñư c dùng cho d li u d ng danh sách tuy n tính, ví d như dãy s , dãy xâu kí t , ... Ví d 1: M t dãy s nguyên a1 , a2 , ... , an ta khai báo như sau VAR a: ARRAY [ 1. . 100 ] OF integer ; Trong khai báo này n có giá tr t i ña là 100. Ví d 2: M t danh sách có n tên h c sinh ta khai báo như sau: VAR Ten: ARRAY [ 1.. 200 ] OF String [ 25] ; Trong khai báo này n có giá tr t i ña là 200, m i tên có t i ña là 25 kí t . Ví d 3: Danh sách s l n xu t hi n ( t n s ) c a các ch cái vi t hoa trong m t văn b n ta khai báo như sau: VAR Tan_so : ARRAY [ 'A' . . 'Z' ] OF integer ; 142 Trư ng ð i h c Nông nghi p 1 - Giáo trình Tin h c ñ i cương --------------------------------------------- 142
  3. Trong khai báo này m ng có kích thư c t i ña là 26 ( 26 ch cái hoa trong b ng ch cái ti ng Anh). * Có th truy nh p vào b t kỳ ph n t nào trong m ng. ð truy nh p vào m t ph n t trong m ng m t chi u ta vi t theo qui cách sau: Tên_bi n_m ng [ ch -s ] Ví d : Ch ra ph n t th 5 trong ví d 1 ta vi t a[5] Ch ra tên th 10 trong danh sách tên ta vi t Ten[10] Ch ra t n s c a ch ‘B’ ta vi t Tan_so[ 'B' ] 1.5. Các chương trình dùng m ng m t chi u Bài toán 1: Cho m t dãy n s nguyên vi t chương trình nh p d li u vào, tính và in ra trung bình c ng, ph n t l n nh t, ph n t nh nh t c a dãy s ñó. -Tư tư ng c a thu t toán tìm ph n t max, ph n t min : Trư c tiên gán ph n t ñ u tiên là a[1] cho c max và min, như v y v trí max, v trí min ñ u là 1. Sau ñó duy t l n lư t các ph n t t ph n t ñ u cho t i ph n t cu i, n u ph n t ñang xét l n hơn max thì gán giá tr ph n t ñó cho max, v trí c a nó cho v trí max, n u ph n t ñang xét nh hơn min thì gán giá tr ph n t ñó cho min, v trí c a nó cho v trí min. Chương trình Program Trung_binh_max_min; Uses crt; Var a:Array [ 1..100] of integer ; i,n,max,min,vtmax,vtmin : integer ; tb : real ; Begin Clrscr; { Nhap du lieu } Write(' Nhap n: '); readln( n); for i:=1 to n do begin Write( ' a[', i, ']=' ); readln( a[i]); end; { Tinh toán } tb:=0; max:= a[1]; min:=a[1]; vtmax:=1; vtmin:=1; for i:=1 to n do begin tb:=tb + a[i]; if max <a[i] then begin max:=a[i]; vtmax:=i; end; if min >a[i] then begin min :=a[i]; vtmin:=i; end; end; { in ket qua } writeln(' Trung binh = ', tb/n :8:2) ; writeln(' max= ', max, ' tai vi tri : ', vtmax); writeln(' min= ', min, ' tai vi tri : ', vtmin); readln; end. Bài toán 2: Cho dãy n s th c a1, a2, .., an s p x p dãy theo th t tăng d n. 143 Trư ng ð i h c Nông nghi p 1 - Giáo trình Tin h c ñ i cương --------------------------------------------- 143
  4. Trong bài toán này ta dùng thu t toán tìm ph n t nh nh t c a dãy chưa s p và ñưa v ñ ng v trí ñ u tiên c a dãy ñó. Dãy có n ph n t thì ta ph i th c hi n n-1 l n tìm ph n t l n nh t. Tư tư ng c a thu t toán như sau: -Ta so sánh ph n t ñ u tiên c a dãy chưa s p l n lư t v i các ph n t ñ ng sau nó , n u có ph n t nào nh hơn nó thì ta s ñ i giá tr cho nhau. ð ñ i giá tr 2 ph n t cho nhau ta dùng m t ph n t trung gian. - L p l i bư c trên cho ñ n khi dãy chưa s p không ch còn m t ph n t . Như v y dãy có n ph n t thì ta l p l i n-1 l n. Chương trình PROGRAM SAP_DAY_TANG; USES CRT; VAR I,J,N: INTEGER; A:ARRAY[1..100] OF REAL; X:REAL ; BEGIN CLRSCR; (* NHAP SO LIEU *) WRITE(' HAY NHAP SO PHAN TU N ? ');READLN(N); FOR I:=1 TO N DO BEGIN WRITE('A[',I,']= '); READLN(A[I]); END; (* SAP XEP *) FOR I:=1 TO N-1 DO FOR J:=I+1 TO N DO IF A[I]>A[J] THEN BEGIN X:=A[I]; A[I]:=A[J]; A[J]:=X; END; (* IN KET QUA *) WRITELN(' DAY DA SAP THEO THU TU TANG'); FOR I:=1 TO N DO WRITELN(A[I]:8:2); READLN; END. Bài toán 3: Nh p vào m t xâu kí t . Hãy in ra t n s xu t hi n c a các ch cái, không bi t ch hoa và ch thư ng. In ra ch cái xu t hi n nhi u nh t. Chương trình program Tan_so_chu_cai ; uses crt; var s:string; ts: array [‘A’..’Z’ ] of integer ; n,j,m: integer ; i,vt: char ; Begin clrscr ; { nhap xau ki tu } Write(‘ Nhap xau ki tu : ‘); readln(s); n:=length(s); { Tinh tan so } for i:=’A’ to ‘’Z’ do ts[i] :=0 ; 144 Trư ng ð i h c Nông nghi p 1 - Giáo trình Tin h c ñ i cương --------------------------------------------- 144
  5. for j:= 1 to n do for i:=’A’ to ‘Z’ do if upcase(s[j])=i then ts[i]:=ts[i] + 1; for i:=’A’ to ‘Z’ do writeln(i,’ co tan so = ‘,ts[i]); { Tin tan so max } m:=ts[‘A’] ; vt:=’A’ ; for i:=’B’ to ‘Z’ do if m<ts[j] then begin m:=ts[j]; vt:=i ; end ; Writeln(‘ki tu ‘,vt, ‘co tan so lon nhat la : ‘,m); readln; end. 1.6- M ng nhi u chi u Trong ph n trình bày m ng 2 chi u, m ng nhi u hơn 2 chi u ñư c suy di n m t cách tương tư. * Khai báo m ng 2 chi u: Dùng c m t sau ARRAY [ki u_ch _s 1, ki u_ch _s 2] OF ki u_ph n_t ; - Dùng khai báo ki u: TYPE Tên_ki u_m ng = array [ ki u_ch _s 1, ki u_ch _s 2 ] OF ki u_ph n_t ; VAR Tên_bi n_m ng: Tên_ki u_m ng ; - Dùng khai báo bi n : VAR Tên_bi n_m ng : ARRAY [ ki u_ch _s 1,ki u_ch _s 2 ] OF ki u_ph n_t ; M ng 2 chi u có 2 ch s . * Cách dùng : M ng 2 chi u thư ng ñư c dùng cho d li u d ng b ng hay ma tr n, ví d như ma tr n s có m dòng ,n c t, ... M ng hai chi u có 2 ch s , ch s 1 ch dòng, ch s 2 ch c t. Ví d 1: M t ma tr n s nguyên a có 2 dòng, 3 c t ñư c khai báo như sau VAR A: ARRAY [ 1. . 2, 1..3 ] OF integer ; Trong b nh máy lưu tr các ph n t c a m ng A k ti p nhau theo th t sau: A[1,1], A[1,2], A[2,1], A[2,2], A[3,1], A[3,2] Ví d 2: M t b ng có 8 dòng, 8 c t, các ô c a b ng ch a các ch cái s ñư c khai báo như sau: VAR Bang: ARRAY [ 1. . 8, 1..8 ] OF char ; * Có th truy nh p vào b t kỳ ph n t nào trong m ng. ð truy nh p vào m t ph n t trong m ng hai chi u ta vi t theo qui cách sau: Tên_bi n_m ng [ ch _s 1, ch _s 2 ] Cách vi t trên ñ ch ra ph n t dòng có giá tr b ng ch s 1 và c t có giá tr b ng ch s 2. Ví d : Var A:array[1..10,1..5] of integer; A[1,1]:= 1; A[1,2]:=3*A[1,1]; Readln(A[2,1]); 145 Trư ng ð i h c Nông nghi p 1 - Giáo trình Tin h c ñ i cương --------------------------------------------- 145
  6. Writeln(A[1,2]); 1.7. Các chương trình dùng m ng 2 chi u Bài toán 1: Vi t chương trình nh p m t ma tr n m dòng , n c t và tìm giá tr l n nh t, giá tr nh nh t, tính t ng c a các ph n t , ñ m s ph n t âm. Chương trình PROGRAM TINH_MA_TRAN; (*TIM MAX, MIN, TINH TONG, DEM SO PHAN TU AM *) USES CRT; VAR I,J,M,N,MAX,MIN,T,SOPTAM:INTEGER; A:ARRAY[1..30,1..20] OF INTEGER; BEGIN CLRSCR;T:=0;SOPTAM:=0; (* NHAP SO LIEU *) WRITE('NHAP SO DONG M, SO COT N ');READLN(M,N); FOR I:=1 TO M DO FOR J:=1 TO N DO BEGIN WRITE('A[',I,',',J,']=? '); READLN(A[I,J]); END; (* TINH TOAN *) MAX:=A[1,1]; MIN:=MAX; FOR I:=1 TO M DO FOR J:=1 TO N DO BEGIN T:=T+A[I,J]; IF A[I,J]<0 THEN SOPTAM:=SOPTAM+1; IF MAX<A[I,J] THEN MAX:=A[I,J] ELSE IF MIN>A[I,J] THEN MIN:=A[I,J]; END; (* IN KET QUA *) WRITELN; WRITELN('TONG T= ',T); WRITELN('SO PHAN TU AM LA ',SOPTAM); WRITELN('GIA TRI LON NHAT = ',MAX); WRITELN('GIA TRI NHO NHAT = ',MIN); READLN; END. Bài toán 2: Nhân ma tr n a có m dòng, n c t v i ma tr n b có n dòng, l c t. K t qu là ma tr n c có m dòng, l c t. Các ph n t c a ma tr n c ñư c tính theo công th c sau: n C[i,j] = a [i, k ] * b[ k , j] v i i : 1 → m ; j: 1→l ∑ k =1 146 Trư ng ð i h c Nông nghi p 1 - Giáo trình Tin h c ñ i cương --------------------------------------------- 146
  7. Chương trình (* nhan hai ma tram *) program nhan_ma_tran; uses crt; type mang=array[1..20,1..30] of integer; var i,j,k,m,l,n:integer; a,b,c: mang; begin clrscr; (* nhap ma tran a *) write('nhap so dong, so cot m,n ? ');readln(m,n); for i:=1 to m do for j:=1 to n do begin write('a[', i, ',' ,j, ']= '); readln(a[i,j]); end; (* nhap ma tran b *) write('nhap so cot l ? ');readln(l); for i:=1 to n do for j:=1 to l do begin write('b(',i,',',j,')= '); readln(b[i,j]); end; (* Tinh toan *) for i:=1 to m do for j:=1 to l 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 ket qua *) writeln(' Ma tran tich '); for i:=1 to m do begin for j:=1 to l do write( ' ',c[i,j]:4 ); writeln; end; readln; end. 2. Ki u xâu kí t 2.1. Khai báo ki u xâu kí t a. ð nh nghĩa : D li u ki u xâu là ki u d li u có c u trúc, dùng ñ x lý các xâu kí t 147 Trư ng ð i h c Nông nghi p 1 - Giáo trình Tin h c ñ i cương --------------------------------------------- 147
  8. D li u ki u xâu ñư c khai báo b ng t khoá STRING , ñ dài t i ña c a m t xâu kí t là 255 kí t . Có th khai báo ñ dài t i ña c a m t xâu kí t trong d u ngo c vuông sau t khoá STRING như sau: STRING[...] Ví d : Tên ngư i, quê quán, trình ñ văn hóa là các d li u ki u xâu kí t . b. Khai xâu kí t ð khai báo xâu kí t dùng t khóa String n u như khai báo ñ dài xâu t i ña là 255 kí t , dùng t khóa String [n] n u như khai báo ñ dài xâu t i ña là n kí t . - Khai báo ki u xâu: Type Tên_ki u_xâu = String[n]; - Khai báo bi n xâu Var Tên_bi n: String[n]; Trong ñó n là s kí t t i ña c a xâu, n u không có ph n [n] thì s kí t t i ña c a xâu m c nh n là 255. Ví d Var Hoten: string[30]; Ngaysinh: string[10]; Quequan: string; H ng xâu kí t trong Pascal ñư c vi t trong ' ' Hoten:='Le Thu Ha'; Ngaysinh:='20-10-1960'; Quequan:='Gia lam - Ha noi '; c. Truy nh p xâu kí t M i kí t trong xâu ñư c ch ra b ng 1 s th t ñư c g i là ch s vi t trong [ ], kí t ñ u tiên có ch s là 1. Có th truy nh p t i t ng kí t trong xâu theo cách vi t sau: Tên_bi n[ch _s ] V i ví d trên Hoten[2] là 'e', Ngaysinh[8] là 9. Xâu kí t ñư c lưu tr như sau: Byte ñ u tiên ch a kí t là ñ dài th c c a xâu, các byte ti p theo là các kí t c a xâu. V i ví d trên Hoten:='Le Thu Ha'; ñư c lưu tr như sau: 01 2 3 4 5 6 7 8 9 ... 30 L e T h u H a Kí t ñ u ch a ñ dài th c c a xâu là kí t 9. ð dài c a xâu = ORD( Hoten[0]) d. Hàm chu n Length(St) : Cho ta ñ dài c a xâu kí t . M t xâu kí t không ch a kí t nào là r ng, khi ñó Length(St)=0, xâu kí t r ng ñư c kí hi u ''. 2.2. Các thao tác trên xâu kí t a. Phép c ng xâu • Kí hi u + là ghép n i các xâu kí t • Ví d Que:= 'Gia lam ' + 'Ha noi'; Cho k t qu Que= 'Gia lam Ha noi' b. Phép So sánh hai xâu kí t Khi so sánh 2 xâu kí t , so sánh mã ASCI I c a t ng c p kí t tương ng t 2 xâu theo trình t t trái sang ph i, s xu t hi n 1 trong các trư ng h p sau: - N u g p m t c p có mã khác nhau thì xâu ch a kí t có mã nh hơn là xâu nh hơn. - N u t t c các c p kí t ñ u có mã gi ng nhau thì 2 xâu b ng nhau. 148 Trư ng ð i h c Nông nghi p 1 - Giáo trình Tin h c ñ i cương --------------------------------------------- 148
  9. - N u 2 xâu có ñ dài khác nhau song các c p kí t ñ u có mã gi ng nhau ñ n ñ dài c a xâu ng n thì xâu ng n s là xâu nh hơn. K t qu c a phép so sánh là giá tr logic True ho c False. 'hang' < 'hun' cho giá tr True. 'Thoa' = 'Thoa' cho giá tr True. 'nhu' > 'nhung' cho giá tr Flase. • ð c xâu kí t t bàn phím: Readln(St); ð dài th c c a xâu St là s kí t gõ vào t bàn phím. N u không gõ kí t nào mà gõ Enter luôn thì xâu St r ng. • Vi t xâu kí t ra màn hình: Write(St) và Writeln(St) 2.3. Các th t c và các hàm chu n x lý xâu kí t Gi thi t St là xâu kí t có ñ dài chu n là 255 kí t . a. Hàm Length(St) Hàm này cho ñ dài c a xâu kí t . St:='Tin h c' ; Length(St) có giá tr là 7. b. Th t c Delete(St,m,n) Th t c này xoá ñi n kí t , b t ñ u t v trí m trong xâu St. St:='Cong trinh khoa hoc'; Delete(St,6,5); K t qu St s còn 'Cong khoa hoc' . N u m+n > Length(St) thì ch xoá ñi nh ng kí t n m trong Length(St). c. Th t c Insert (s1,St,m) Th t c này chèn xâu s1 vào xâu St t i v trí m. St:='Hoc tot'; s1:='Toan '; Insert(s1,St,5); K t qu St s là 'Hoc Toan tot'. N u Length(s1)+Length(St) > ñ dài c c ñ i cho phép c a xâu 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 la . d. Hàm Copy(St,m,n) Hàm này sao chép n kí t c a xâu St t v trí m. St:='Lao dong'; s1:=Copy(St,5,2); K t qu s cho s1='do'. N u m > Length(St) thì Copy s cho 1 xâu r ng. N u m + n > Length(St) thì Copy ch nh n các kí t n m trong xâu St. e. Hàm Concat(St1,St2,...,Stn) Hàm này 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 ng s chi u dài c a các xâu kí t không ñư c l n hơn 255. St1:='Lao dong '; St2:='Hoc tap '; St3:='Vui choi'; St:=Concat(St1,St1,St3); K t qu St là 'Lao dong Hoc tap Vui choi'. f. Hàm Pos(s1,St) Hàm này cho v trí ñ u tiên c a xâu s1 trong xâu St. N u không tìm th y thì hàm cho giá tr là 0. St:='12345abc'; 149 Trư ng ð i h c Nông nghi p 1 - Giáo trình Tin h c ñ i cương --------------------------------------------- 149
  10. s1:='345'; s2:='35ab'; Pos(s1,St) cho giá tr là 3. Pos(s2,St) cho giá tr là 0. g. Th t c Str(x,St) Th t c này bi n ñ i giá tr s nguyên ho c th c x thành m 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’ 150 Trư ng ð i h c Nông nghi p 1 - Giáo trình Tin h c ñ i cương --------------------------------------------- 150
  11. 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]<>' ') 151 Trư ng ð i h c Nông nghi p 1 - Giáo trình Tin h c ñ i cương --------------------------------------------- 151
  12. 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; 152 Trư ng ð i h c Nông nghi p 1 - Giáo trình Tin h c ñ i cương --------------------------------------------- 152
  13. 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 153 Trư ng ð i h c Nông nghi p 1 - Giáo trình Tin h c ñ i cương --------------------------------------------- 153
  14. 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; 154 Trư ng ð i h c Nông nghi p 1 - Giáo trình Tin h c ñ i cương --------------------------------------------- 154
  15. { 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. 155 Trư ng ð i h c Nông nghi p 1 - Giáo trình Tin h c ñ i cương --------------------------------------------- 155
Đồng bộ tài khoản