KIỂU DỮ LIỆU CÓ CẤU TRÚC: ARRAY (KIỂU MẢNG)
I. MỤC TIấU:
- Viết được chương trỡnh về dóy số.
II. CHUẨN BỊ
III. TIẾN TRèNH BÀI DẠY:
1. Kiến thức cơ bản:
2. Bài tập:
KIẾN THỨC YÊU CẦU:
Biết xác định vấn đề nào có sử dụng đến cấu trúc mảng.
Biết cách khai báo và sử dụng.
KIẾN THỨC ĐẠT ĐƯỢC
Biết các khái niệm về dữ liệu cấu trúc mảng.
Biết cách khai báo mảng một chiều và hai chiều.
Biết nhập và xuất dữ liệu trong mảng.
Biết cách tìm kiếm một phần tử bất kỳ trong mảng.
Biết cách sắp xếp các phần tử trong mảng theo phương pháp chọn và phương pháp Bubble sort.
ất dữ liệu trong mảng. r Biết cách tìm kiếm một phần tử bất kỳ trong mảng. r Biết cách sắp xếp các phần tử trong mảng theo phương pháp chọn và phương pháp Bubble sort. 2. Bài tập: Bài 1: Viết N chương trình nhập n số nguyên từ bàn phím và in ra màn hình số nhỏ nhất và số lớn nhất. N cũng được nhập vào từ bàn phím Program MaxMin; Uses crt; Var i, n, max. min: Integer; A: array[1..100] of integer; Begin clrscr; Writeln(‘hay nhap vao do dai cua day so, N= ‘); Readln(N); Writeln(‘Nhap cactu cua day so:’); For i := 1 to N do Begin Writeln(‘a[‘,i,’]=’); Readln(a[i]); End; Max := a[1]; Min := a[1]; For i := 1 to N do Begin if Max < a[i] then Max := a[i]; If Min > a[i] then Min := a[i]; End; Writeln(‘So lon nhat la Max = ‘, Max); Writeln(‘so nho nhat la Min = , Min); Readln; End. Bài 2: Viết chương trỡnh nhập vào n số nguyờn từ bàn phớm. Đếm và in ra số cỏc số chia hết cho 3 và in ra tất cả cỏc số chia hết cho 3. program bai1; uses crt; var i,n,d:integer; a: array[1..100] of integer; begin clrscr; write('Nhap vao so N = '); Readln(n); for i:=1 to n do begin write('Nhap vao so thu ', i, ': '); Readln(a[i]); end; d:=0; for i:=1 to n do If a[i] mod 3 = 0 then d:=d+1; If d=0 then writeln('Khong co so chia het cho 3') else write('co ', d,' so chia het cho 3 la: '); for i:=1 to n do If a[i] mod 3 = 0 then write(a[i],' '); Readln; End. Bài 3: Viết chương trỡnh nhập điểm của cỏc bạn trong lớp. Sau đú in ra màn hỡnh số bạn đạt kết quả học tập loại giỏi, khỏ, trung bỡnh và kộm (theo tiờu chuẩn từ 8.0 trở lờn đạt loại giỏi, từ 6.5 đến 7.9 đạt loại khỏ, từ 5.0 đến 6.4 đạt trung bỡnh và dưới 5.0 xếp loại kộm). program Phanloai; uses crt; Var i, n, Gioi, Kha, Trungbinh, Kem: integer; A: array[1..100] of real; Begin clrscr; write(‘Nhap so cac ban trong lop, n = ‘); readln(n); writeln(‘Nhap diem:’); For i:=1 to n do Begin write(i,’. ‘); readln(a[i]); End; Gioi:=0; Kha:=0; Trungbinh:=0; Kem:=0; for i:=1 to n do begin if a[i]>=8.0 then Gioi:=Gioi+1; if a[i]<5 then Kem:=Kem+1; if (a[i]=6.5) then Kha:=Kha+1; if (a[i]>=5) and (a[i]<6.5) then Trungbinh:=trungbinh+1 end; writeln(‘Ket qua hoc tap:’); writeln(Gioi,’ ban hoc gioi’); writeln(Kha,’ ban hoc kha’); `writeln(Trungbinh,’ ban hoc trung binh’); writeln(Kem,’ ban hoc kem’); readln; End. Bài 4: Viết chương trỡnh nhập vào cỏc phần tử của một dóy số, sắp xếp dóy số đú theo thứ tự tăng dần. In ra tất cả cỏc số chia hết cho 5. program sap_xep2; uses crt; var n,i,j,tg:integer; a:array[1..100] of integer; begin clrscr; writeln('nhap vao so phan tu'); readln(n); for i:=1to n do begin write('nhap vao so phan tu thu',i,': '); readln(a[i]); end; for i:=1 to n-1 do for j:=i+1 to n do if a[i]> a[j] then begin tg:=a[i]; a[i]:=a[j]; a[j]:= tg; end; write(' thu tu sap xep tang dan la' ); for i:=1 to n do write(a[i],' '); writeln; write('so chia het cho 5 la:'); for i:=1 to n do if a[i] mod 5 =0 then write (a[i],' '); writeln; Bài 5: Viết chương trỡnh nhập vào một dóy n phần tử. In ra giỏ trị lớn nhất của dóy. In ra cỏc số dương và tổng cỏc số dương của dóy. Program phantu; Uses crt; Var n,i,max:integer; t:real; a:array[1..300] of integer; Begin clrscr; Write('so phan tu cua day la : '); Readln(n); For i:=1 to n do Begin Write('nhap vao phan tu thu ',i,': '); Readln(a[i]); End; max:=a[1]; For i:=2 to n do If max<a[i] then max:=a[i]; Writeln('so lon nhat la : ',max); t:=0; Write('cac so duong la : '); For i:=1 to n do If a[i] > 0 then Begin Write(a[i],' '); t:=t+a[i]; End; Writeln; Writeln('tong cac so duong la : ',t:5:1); Readln; End. IV. Dặn dũ: Về xem lại cỏc bài tập đó làm ở trờn Ngày soạn: 05/9/2015 Ngày dạy: 11/9/2015 Tiết 7-9 Các dạng toán về CAÁU TRUÙC Dệế LIEÄU MAÛNG I. MỤC TIấU: - Viết được chương trỡnh về dóy số. II. CHUẨN BỊ III. TIẾN TRèNH BÀI DẠY: Làm bài tập: KIếN THứC YÊU CầU: r Biết xác định vấn đề nào có sử dụng đến cấu trúc mảng. r Biết cách khai báo và sử dụng. KIếN THứC ĐạT ĐƯợC r Biết cách khai báo mảng một chiều và hai chiều. r Biết nhập và xuất dữ liệu trong mảng. r Biết cách tìm kiếm một phần tử bất kỳ trong mảng. IV. NỘI DUNG Baứi 1 : Giaỷi heọ phửụng trỡnh tuyeỏn tớnh hai aồn duứng ma traọn : a11x + a12y = c1 a21x + a22y = c2 GIAÛI Uses Crt; Var a: array[1..2, 1..2] of real; c: array[1..2] of real; d, dx, dy, x, y: real; BEGIN Clrscr; Writeln('Giai he phuong tring tuyen tinh hai an:'); Writeln(' a11x+a12y=c1'); Writeln(' a21x+a22y=c2'); Writeln('Nhap cac he so cua he phuong trinh'); Write('a11='); Readln(a[1,1]); Write('a12='); Readln(a[1,2]); Write('c1='); Readln(c[1]); Write('a21='); Readln(a[2,1]); Write('a22='); Readln(a[2,2]); Write('c2='); Readln(c[2]); d:=a[1,1]*a[2,2] - a[2,1] * a[1,2]; dx:=c[1]*a[2,2] - c[2] * a[1,2]; dy:=a[1,1]*c[2] - a[2,1] * c[1]; If d=0 then Writeln(' He vo nghiem hoac vo so nghiem') Else Begin x:=dx/d; y:=dy/d; Writeln('He co nghiem duy nhat :'); Writeln('x=', x:0:2, ' ; y=', y:0:2); End ; Readln; END . Baứi 2 : Laọp phửụng trỡnh taùo ra moọt maỷng chửựa baỷng cửỷu chửụng . Uses Crt ; Var a : Array[1..10, 2..9] Of Byte ; i, j : Byte ; BEGIN Clrscr ; For i := 1 To 10 Do For j := 2 To 9 Do a[i, j] := i*j ; Writeln(' Bang cuu chuong : ') ; Writeln ; For i := 1 To 10 Do For j := 2 to 9 do Write ( j:4 , 'x' , i:2 , '=' , a[i , j]:2) ; (* heỏt 80 coọt tửù ủoọng xuoỏng haứng *) Readln ; END . Baứi 3 : Vieỏt chửụng trỡnh nhaọp hai soỏ nguyeõn dửụng m , n . Sau ủoự tớnh trung bỡnh coọng bỡnh phửụng caực soỏ nguyeõn tửứ m ủeỏn n . Var m , n , k , s : Word ; tb : real ; BEGIN Writeln('Nhap 2 so nguyen duong m, n :') ; Write (' m = ') ; Readln(m) ; Write (' n = ') ; Readln(n); If m > n Then (* ủoói choó ủeồ m <= n *) Begin k := m ; m := n ; n := k ; End ; s := 0 ; For k := m To n do s := s + sqr(k) ; tb := s / (n - m + 1) ; Writeln ('Trung binh cong bimh phuong cac so ' + 'nguyen tu m den n la: ', tb:12:2); Readln ; END . Baứi 4 : Vieỏt chửụng trỡnh nhaọp tửứ baứn phớm caực phaàn tửỷ cuỷa moọt maỷng hai chieàu . Kớch thửụực cuỷa maỷng ủửụùc nhaọp trửụực tửứ baứn phớm . Var m , n , i , j : Byte ; a : Array[1..100, 1..100] Of Real; BEGIN Write ('Nhap cac kich thuoc cua mang hai chieu : ') ; Write (' So hang m = ') ; Readln(m) ; Write (' So cot n = ') ; Readln(n) ; Writeln (' Nhap cac phan tu cua mang : ') ; For i := 1 To m Do For j := 1 To n Do Begin Write ('a[', i:2, ', ' , j:2 ,']=') ; Readln(a[i, j]) ; End ; Readln ; END . Baứi 5 : Daừy soỏ sau ủửụùc goùi laứ daừy Fibonaci : a1 = 1 a2 = 1 a3 = 2 a4 = 3 . . . an = an-1 + an-2 Vieỏt chửụng trỡnh tớnh 20 soỏ Fibonaci ủaàu tieõn vaứ ủửa ra keỏt quaỷ vaứo moọt maỷng 20 phaàn tửỷ . Var a : Array[1..20] Of Byte ; i : Byte ; BEGIN a[1] :=1; a[2] :=1; For i:=3 to 20 do a[i]:=a[i-1]+a[i-2] ; END . Baứi 6 : Daừy soỏ an ủửụùc ủũnh nghúa nhử sau : a1 = 1 a2 = 2 . . . an = 2an-1 + an-2 ( n > 2 ) Haừy laọp chửụng trỡnh tớnh vaứ gaựn giaự trũ cuỷa daừy vaứo bieỏn maỷng . Var a : Array [1..100] Of Word ; i, N : Byte ; S : Real ; BEGIN Write (' Nhap so N>=2 : ') ; Readln(n) ; a[1] := 1 ; a[2] := 2 ; For i := 3 To N Do a[i] := 2*a[i-1]+a[i-2] ; S := 0 ; For i := 1 to N do S := S+1/sqr(a[i]) ; Writeln (' S = ', S:12:6) ; Readln ; END . V. DẶN Dề xem lại cỏc bài tập đó chạy trờn lớp.Ngày soạn: 12/9/2015 Ngày dạy: 18/9/2015 Tiết 10-12 Các dạng toán về CAÁU TRUÙC Dệế LIEÄU MAÛNG I. MỤC TIấU: - Viết được chương trỡnh về dóy số. II. CHUẨN BỊ III. TIẾN TRèNH BÀI DẠY: Làm bài tập: KIếN THứC YÊU CầU: r Biết xác định vấn đề nào có sử dụng đến cấu trúc mảng. r Biết cách khai báo và sử dụng. KIếN THứC ĐạT ĐƯợC r Biết cách khai báo mảng một chiều và hai chiều. r Biết nhập và xuất dữ liệu trong mảng. r Biết cách tìm kiếm một phần tử bất kỳ trong mảng. IV. NỘI DUNG Baứi 7 : Nhaọp soỏ tửù nhieõn N vaứ vieỏt chửụng trỡnh taùo maỷng bao goàm N soỏ nguyeõn toỏ ủaàu tieõn . var a:array[1..100,1..100]of byte; n,i,j,k,l,ba:byte; d:boolean; BEGIN write(' Nhap kich thuoc cua mang hai chieu NxN. N = ');readln(n); for i:=1 to n do for j:=1 to n do begin ba:=0; repeat d:=FALSE; if j>1 then for k:=1 to j-1 do if a[i,k]=ba then d:=true; if i>1 then for k:=1 to i-1 do if a[k,j]=ba then d:=true; ba:=ba+1; until not d; a[i,j]:=ba-1; end; for i:=1 to n do for j:=1 to n do write(a[i,j]:8); readln; END . Baứi 8 : Vieỏt chửụng trỡnh nhaọp moọt baỷng soỏ 3 x 3 vụựi ủieàu kieọn caực soỏ ủửụùc nhaọp seừ hieọn treõn maứn hỡnh ủuựng taùi vũ trớ cuỷa mỡnh treõn baỷng soỏ . Uses Crt; Var a : array[1..3, 1..3] of integer ; i, j: byte ; BEGIN Clrscr; Writeln('Nhap mot bang so nguyen kich thuoc 3x3:'); Gotoxy(10, 4); Write(1); Gotoxy(19, 4); Write(2); Gotoxy(28, 4); Write(3); Gotoxy(5, 6); Write(1); Gotoxy(5, 8); Write(2); Gotoxy(5,10); Write(3); For i:=1 to 3 do For j:=1 to 3 do Begin Gotoxy(9*j-1, 2*i+4); Read(a[i, j]); Gotoxy(9*j-1, 2*i+4); ClrEol; Write(a[i, j]:6); End; Readln; END . Baứi 9 : a. Vieỏt chửụng trỡnh nhaọp dửừ lieọu tửứ daừy ủoỏi xửựng vaứo maỷng moọt chieàu . b. Vieỏt chửụng trỡnh nhaọp dửừ lieọu laứ ma traọn ủoỏi xửựng vaứo maỷng hai chieàu . a) Var a: array [1..100] of integer; n, i: byte; Begin Write('Nhap so phan tu cua day doi xung:'); Readln(n); Writeln('Nhap cac phan tu cua day:'); For i:=1 to (n+1) div 2 do Begin Write('a[', i:2, ']='); Readln(a[i]); a[n-i+1] := a[i]; End; Readln ; END ; b) Var a: array [1..100, 1..100] of integer; n, i, j: integer; BEGIN Write('Nhap kich thuoc cua mang doi xung: '); Readln(n); Write('Nhap cac phan tu cua mang:'); For i:=1 to n do For j:=1 to i do Begin Write('a[', i:2, ',', j:2, ']='); Readln(a[i, j]); a[j,i]:=a[i,j]; End; Readln ; END ; V. DẶN Dề xem lại cỏc bài tập đó chạy trờn lớp.Ngày soạn: 21/9/2015 Ngày dạy: 25/9/2015 Tiết 13-15 XÂU KÍ TỰ I. MỤC TIấU: - Nắm được khỏi niệm về xõu kớ tự - Biết cỏch khai bỏo xõu - Sử dụng cỏc hàm trong xõu. II. CHUẨN BỊ Giỏo ỏn Mỏy tớnh III. TIẾN TRèNH BÀI DẠY: Lý thuyết Bài tập KIếN THứC YÊU CầU: r Biết xác định vấn đề nào có sử dụng đến xõu r Biết cách khai báo và sử dụng xõu KIếN THứC ĐạT ĐƯợC r Biết cách khai báo và sử dụng xõu r Biết nhập và xuất dữ liệu trong xõu IV. NỘI DUNG I. KHAI BÁO KIỂU STRING TYPE TờnKiểu = STRING[Max]; VAR Tờn biến : TờnKiểu; hoặc khai bỏo biến trực tiếp: VAR Tờn biến : STRING[Max]; Trong đú Max là số ký tự tối đa cú thể chứa trong chuỗi (Max ẻ [0,255]). Nếu khụng cú khai bỏo [Max] thỡ số ký tự mặc định trong chuỗi là 255. Vớ dụ: Type Hoten = String[30]; St80 = String[80]; Var Name : Hoten; Line : St80; St : String; {St cú tối đa là 255 ký tự} II. TRUY XUẤT DỮ LIỆU KIỂU STRING - Cú thể sử dụng cỏc thủ tục xuất nhập Write, Writeln, Readln để truy xuất cỏc biến kiểu String. - Để truy xuất đến ký tự thứ k của xõu ký tự, ta sử dụng cỳ phỏp sau: Tờnbiến[k]. III. CÁC PHẫP TOÁN TRấN XÂU Kí TỰ 3.1. Phộp nối xõu: + 3.2. Cỏc phộp toỏn quan hệ: =, , , >=. Chỳ ý: Cỏc phộp toỏn quan hệ được so sỏnh theo thứ tự từ điển. IV. CÁC THỦ TỤC VÀ HÀM VẾ XÂU Kí TỰ 4.1. Hàm lấy chiều dài của xõy ký tự LENGTH(St : String):Integer; 4.2. Hàm COPY(St : String; Pos, Num: Byte): String; Lấy ra một xõu con từ trong xõu St cú độ dài Num ký tự bắt đầu từ vị trớ Pos . 4.3. Hàm POS(SubSt, St :String):Byte; Kiểm tra xõu con SubSt cú nằm trong xõu St hay khụng? Nếu xõu SubSt nằm trong xõu St thỡ hàm trả về vị trớ đầu tiờn của xõu con SubSt trong xõu St, ngược lại hàm trả về giỏ trị 0. 4.4. Thủ tục DELETE(Var St:String; Pos, Num: Byte); Xoỏ trong xõu St, Num ký tự bắt đầu từ vị trớ Pos. 4.5. Thủ tục INSERT(SubSt: String; Var St: String; Pos: Byte); Chốn xõu SubSt vào xõu St bắt đầu tại vị trớ Pos. 4.6. Thủ tục STR(Num; Var St:String); Đổi số nguyờn hay thực Num thành dạng xõu ký tự, kết quả lưu vào biến St. 4.7. Thủ tục VAL(St:String; Var Num; Var Code:Integer); Đổi xõu số St thành số và gỏn kết quả lưu vào biến Num. Nếu việc chuyển đổi thành cụng thỡ biến Code cú giỏ trị là 0, ngược lại biến Code cú giỏ trị khỏc 0 (vị trớ của lỗi). 4.8. Hàm UPCASE(xõu): Đổi ký tự thường sang ký tự hoa. 4.9. Hàm CHR(ORD(xõu)+32): Đổi ký tự hoa sang ký tự thường. 4.10. {Xúa cỏc ký tự trắng ở đầu xõu} While St[1]=#32 Do Delete(St,1,1); {Xúa cỏc ký tự trắng ở cuối xõu} While St[Length(St)]=#32 Do Delete(St,Length(St),1); {Xúa cỏc ký tự trắng ở giữa xõu} BÀI TẬP MẪU Bài tập 1: Viết chương trỡnh nhập vào một xõu ký tự từ bàn phớm. Đổi xõu ký tự đú sang chữ in hoa rồi in kết quả ra màn hỡnh. Vớ dụ :Xõu abcdAbcD sẽ cho ra xõu ABCDABCD. Uses Crt; Var St:String; i:Byte; Begin Write(‘Nhap xau St: ‘); Readln(St); For i:=1 to length(St) do St[i]:=Upcase(St[i]); Write(‘Xau ket qua: ‘, St); Readln; End. Bài tập 2: Viết chương trỡnh nhập vào một xõu ký tự từ bàn phớm. Đổi xõu ký tự đú sang chữ thường rồi in kết quả ra màn hỡnh. Vớ dụ :Xõu abCdAbcD sẽ cho ra xõu abcdabcd. Uses Crt; Var St:String; i:Byte; Begin Write(‘Nhap xau St: ‘); Readln(St); For i:=1 to length(St) do If St[i] IN [‘A’..’Z’] Then St[i]:=CHR(ORD(St[i])+32); Write(‘Xau ket qua: ‘, St); Readln; End. Bài tập 3: Viết chương trỡnh đếm số ký tự chữ số trong một xõu ký tự được nhập vào từ bàn phớm. Uses Crt; Var St:String; i,d:Byte; Begin Write(‘Nhap xau St: ‘); Readln(St); For i:=1 to length(St) do If St[i] IN [‘0’..’9’] Then d:=d+1; Write(‘So ky tu chu so trong xau: ‘, d); Readln; End. Bài tập 4: Viết chương trỡnh nhập một xõu từ bàn phớm. In ra xõu đú sau khi xúa hết cỏc ký tự trắng thừa trong xõu. (Ký tự trắng thừa là cỏc ký tự trắng đầu xõu, cuối xõu và nếu ở giữa xõu cú 2 ký tự trắng liờn tiếp nhau thỡ cú 1 ký tự trắng thừa). Uses Crt; Var St:String; Procedure XoaTrangThua(Var St:String); Begin {Xúa cỏc ký tự trắng ở đầu xõu} While St[1]=#32 Do Delete(St,1,1); {Xúa cỏc ký tự trắng ở cuối xõu} While St[Length(St)]=#32 Do Delete(St,Length(St),1); {Xúa cỏc ký tự trắng ở giữa xõu} While POS(#32#32,St)0 Do Delete(St,POS(#32#32,St),1); End; Begin Write(‘Nhap xau St: ‘); Readln(St); XoaTrangThua(St); Write(‘Xau sau khi xoa cac ky tu trang thua: ‘, St); Readln; End. Bài tập 5: Viết chương trỡnh liệt kờ cỏc từ của một xõu ký tự được nhập vào từ bàn phớm, mỗi từ phải được viết trờn một dũng. Uses Crt; Var St:String; Procedure XoaTrangThua(Var St:String); Begin {Xúa cỏc ký tự trắng ở đầu xõu} While St[1]=#32 Do Delete(St,1,1); {Xúa cỏc ký tự trắng ở cuối xõu} While St[Length(St)]=#32 Do Delete(St,Length(St),1); {Xúa cỏc ký tự trắng ở giữa xõu} While POS(#32#32,St)0 Do Delete(St,POS(#32#32,St),1); End; Begin Write(‘Nhap xau St: ‘); Readln(St); XoaTrangThua(St); St:=St+#32; Writeln(‘Liet ke cac tu trong xau: ‘); While POS(#32,St)0 Do Begin Writeln(Copy(St,1,POS(#32,St))); Delete(St,1,POS(#32,St)); End; Readln; End. IV. DẶN Dề: Xem lại lý thuyết và 2 bài tập trờn để tuần sau làm bài tập vận dụng. ----------------------------------------- Ngày soạn: 29/9/2015 Ngày dạy: 2/10/2015 Tiết 16-18 XÂU KÍ TỰ (tt) I. MỤC TIấU: - Nắm được khỏi niệm về xõu kớ tự - Biết cỏch khai bỏo xõu - Sử dụng cỏc hàm trong xõu. II. CHUẨN BỊ Giỏo ỏn Mỏy tớnh III. TIẾN TRèNH BÀI DẠY: Làm bài tập KIếN THứC YÊU CầU: r Biết xác định vấn đề nào có sử dụng đến xõu r Biết cách khai báo và sử dụng xõu KIếN THứC ĐạT ĐƯợC r Biết cách khai báo và sử dụng xõu r Biết nhập và xuất dữ liệu trong xõu IV. NỘI DUNG Bài tập 6: Viết chương trỡnh nhập vào một xõu ký tự từ bàn phớm. Tỡm xõu đảo ngược của xõu đú rồi in kết quả ra màn hỡnh theo 2 cỏch: Đệ qui và khụng đệ qui. í tưởng: - Nếu xõu St cú 1 ký tự thỡ xõu đảo = St. - Ngược lại: Xõu đảo = Ký tự cuối + Đệ qui(Phần cũn lại của xõu St). Uses Crt; Var St:String; {Giải thuật khụng đệ qui} Function XauDao(St:String):String; Var S:String; i:Byte; Begin S:=’’; For i:=Length(St) DowTo 1 Do S:=S+St[i]; XauDao:=S; End; {Giải thuật đệ qui} Function DeQui(St:String):String; Begin If Length(St)<=1 Then DeQui:=St Else DeQui:=St[Length(St)] + DeQui(Copy(St,1,Length(St)-1)); End; Begin Write(‘Nhap xau St: ‘); Readln(St); Write(‘Xau dao nguoc: ‘, XauDao(St)); Readln; End. Bài tập 7: Viết chương trỡnh nhập vào một xõu ký tự từ bàn phớm. Thụng bỏo lờn màn hỡnh cỏc chữ cỏi cú trong xõu và số lượng của chỳng ( Khụng phõn biệt chữ hoa hay chữ thường). í tưởng: - Dựng một mảng dem với chỉ số là cỏc chữ cỏi để lưu trữ số lượng của cỏc chữ cỏi trong xõu. - Duyệt qua tất cả cỏc ký tự của xõu St: Nếu ký tự đú là chữ cỏi thỡ tăng ụ biến mảng dem[St[i]] lờn 1 đơn vị. Uses Crt; Var St:String; dem: Array[‘A’..’Z’] Of Byte; i:Byte; ch:Char; Begin Write(‘Nhap xau St: ‘); Readln(St); {Khởi tạo mảng} For ch:=’A’ To ‘Z’ Do dem[ch]:=0; {Duyệt xõu} For i:=1 To Length(St) Do If Upcase(St[i]) IN [‘A’..’Z’] Then Inc(dem[Upcase(St[i])]); {Liệt kờ cỏc ký tự ra màn hỡnh} For ch:=’A’ To ‘Z’ Do If dem[ch]>0 Then Writeln(ch,’ : ’,dem[ch]); Readln; End. Bài tập 8: Viết chương trỡnh xúa cỏc ký tự chữ số trong một xõu ký tự được nhập vào từ bàn phớm. Uses Crt; Var St:String; {Hàm POSNUM kiểm tra xem trong xõu St cú ký tự chữ số hay khụng? Nếu cú, hàm trả về vị trớ đầu tiờn của ký tự chữ số, ngược lại hàm trả về giỏ trị 0} Function POSNUM(St:String):Byte; Var OK:Boolean; i:Byte; Begin OK:=False; i:=1; While (i<=Length(St)) AND (Not OK) Do If St[i] IN [‘0’..’9’] Then OK:=True Else i:=i+1; If OK Then POSNUM:=i Else POSNUM:=0; End; Begin Write(‘Nhap xau St: ‘); Readln(St); While POSNUM(St)0 Do Delete(St,POSNUM(St),1); Write(‘Xau sau khi xoa: ‘,St); Readln; End. Bài tập 9: Viết chương trỡnh để mó hoỏ và giải mó một xõu ký tự bằng cỏch đảo ngược cỏc bit của từng ký tự trong xõu. Uses crt; Var st:string; {Hàm đảo bit ký tự c} Function DaoBit(c:char):char; Var n,i,s,bitcuoi,Mask:byte; Begin {Đổi ký tự sang số} n:=ORD(c); {s: kết quả đảo bit, Mask: mặt nạ dựng để bật bit thứ i} s:=0; Mask:=128; For i:=1 To 8 Do {duyệt qua 8 bit của n} Begin {Lấy bit cuối cựng của n: bit cực phải} bitcuoi:=n AND 1; n:=n shr 1; {loại bỏ bit cuối cựng: n:=n DIV 2} {Bật bit thứ i lờn: từ trỏi sang phải} if bitcuoi=1 then s:=s OR Mask; Mask:=Mask shr 1; { Mask:= Mask DIV 2} End; DaoBit:=CHR(s); End; Function MaHoa(st:string):string; Var i:Byte; Begin {Đảo bit từng ký tự trong xõu st} For i:=1 To Length(st) Do st[i]:=DaoBit(st[i]); Mahoa:=st; End; Begin Write('Nhap xau: '); Readln(st); st:=MaHoa(st); Writeln('Xau sau khi ma hoa: ',st); Readln; st:=MaHoa(st); Writeln('Xau sau khi giai ma: ',st); Readln; End. Bài tập 10: Viết chương trỡnh thực hiện phộp cộng 2 số tự nhiờn lớn (khụng quỏ 255 chữ số). Uses crt; Var so1,so2,kqua:string; Procedure LamDayXau(Var st1,st2:string); {Them so 0 vao truoc xau ngan} var i:Byte; Begin If Length(st1)>Length(st2) Then For i:=1 To Length(st1)-Length(st2) Do st2:='0'+st2 Else For i:=1 To Length(st2)-Length(st1) Do st1:='0'+st1; End; Function Cong(st1,st2:string):string; Var i,a,b,c,sodu:Byte; code:integer; st,ch:string; Begin st:=''; sodu:=0; LamDayXau(st1,st2); {Lấy từng số của 2 xõu: từ phải sang trỏi} For i:=Length(st1) DownTo 1 Do Begin {Đổi ký tự sang số nguyờn} Val(st1[i],a,code); Val(st2[i],b,code); {Tớnh tổng của 2 số a,b vừa lấy ra cho vào biến c} c:=(a+b+sodu) MOD 10; {Lấy phần dư của tổng a+b} sodu:=(a+b+sodu) DIV 10; {Đổi số nguyờn c sang xõu ký tự ch} str(c,ch); {Cộng xõu ch vào bờn trỏi xõu kết quả st} st:=ch+st; End; {Xử lý trường hợp số dư cuối cựng >0} If sodu>0 Then Begin str(sodu,ch); st:=ch+st; End; Cong:=st; End; Begin Write('Nhap so thu nhat: '); Readln(so1); Write('Nhap so thu hai: '); Readln(so2); kqua:=Cong(so1,so2); Writeln('Tong= ',kqua); Readln; End. Bài 11: Viết chương trỡnh nhập vào một xõu, tớnh và in ra số kớ tự, số từ trong một xõu. program xau; uses crt; var d1,d2,i:integer; x:string; begin clrscr; write('nhap vao xau: '); readln(x); d2:=0; for i:=1 to length(x) do d2:=d2+1; write('so ki tu trong xau la: ',d2); writeln; x:=' '+x; d1:=0; for i:=2 to length(x) do begin if (x[i-1]=' ') and(x[i]' ')then d1:=d1+1; end; Bài 12: Viết chương trỡnh nhập vào hai xõu, in ra xõu tổng của hai xõu đú, đếm và in ra số kớ tự của xõu tổng. program bai2; uses crt; var i, d:integer; x1, x2, xt:string; begin clrscr; write('nhap vao xau thu nhat: '); Readln(x1); write('nhap vao xau thu hai: '); Readln(x2); xt:= x1+x2; d:=0; write('Xau tong la: '); For i:=1 to length(xt) do d:=d+1; writeln(xt); write('So ki tu cua xau tong la: ',d); Readln; End. write('so tu trong xau la: ',d1); writeln; readln; end. Bài 13: Viết chương trỡnh nhập vào một số xõu, tỡm và in ra xõu tổng khụng cú cỏc kớ tự số Program xau1; Uses crt; Var n,i,j:integer; x,xt:string; Begin clrscr; write('so xau la: '); Readln(n); xt:=' '; For i:=1 to n do Begin Write('nhap vao xau thu ',i,': '); Readln(x); For j:=1 to length(x) do If not((x[j] >='0') and (x[j]<='9')) then xt:=xt+x[j]; End; Writeln('xau tong la: ',xt); Readln; End. Ngày soạn: 5/10/2015 Ngày dạy: 9/10/2015 Tiết 19-21 Các dạng toán về xâu kí tự I. MỤC TIấU: - Nắm được khỏi niệm về xõu kớ tự - Biết cỏch khai bỏo xõu - Sử dụng cỏc hàm trong xõu. II. CHUẨN BỊ Giỏo ỏn Mỏy tớnh III. TIẾN TRèNH BÀI DẠY: Làm bài tập KIếN THứC YÊU CầU: r Biết xác định vấn đề nào có sử dụng đến xõu r Biết cách khai báo và sử dụng xõu KIếN THứC ĐạT ĐƯợC r Biết cách khai báo v
Tài liệu đính kèm: