Giáo án bồi dưỡng học sinh giỏi môn Tin học 8

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.

 

doc 40 trang Người đăng phammen30 Lượt xem 826Lượt tải 0 Download
Bạn đang xem 20 trang mẫu của tài liệu "Giáo án bồi dưỡng học sinh giỏi môn Tin học 8", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
ấ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:

  • docgiao_an_bdhsg_tin_8.doc