SKKN Một số bài toán về kiểu xâu giúp học sinh lớp 11 trường THPT Lê Lợi học tốt hơn

SKKN Một số bài toán về kiểu xâu giúp học sinh lớp 11 trường THPT Lê Lợi học tốt hơn

Qua quá trình tham gia giảng dạy Tin học khối 11, tôi nhận thấy dữ liệu kiểu xâu thường gặp rất nhiều trong các bài toán và vận dụng linh hoạt các thao tác xử lý trên kiểu dữ liệu này vào bài toán không phải là dễ. Việc học sinh tìm hiểu về kiểu dữ liệu có cấu trúc nói chung và kiểu dữ liệu xâu nói riêng còn khá nhiều lúng túng. Đặc biệt là dữ liệu vào kiểu xâu và những yêu cầu của bài toán liên quan đến kiểu dữ liệu xâu, học sinh thường không biết bắt đầu từ đâu để giải quyết vấn đề mà bài toán đưa ra. Kỹ năng khi làm việc với kiểu dữ liệu xâu của học sinh thường không đáp ứng được yêu cầu đề ra.

Nội dung tin học lập trình lớp 11 là một nội dung mới lạ đối với đa số học sinh với nhiều khái niệm, thuật ngữ, cấu trúc dữ liệu mà học sinh mới được tiếp xúc lần đầu. Chính vì vậy mà học sinh dễ mắc sai lầm khi lập trình giải quyết các bài toán. Nguyên nhân dẫn đến những khó khăn mà học sinh thường gặp là:

+ Gặp khó khăn khi xác định bài toán đặc biệt là xác định dạng bài toán về kiểu dữ liệu xâu.

+ Khó liên hệ phương pháp giải một bài toán trong toán học với thuật toán trong tin học.

 Trong việc giảng dạy cho học sinh, ngoài việc giúp học sinh lĩnh hội những kiến thức cơ bản. Người thầy còn phải biết kích thích tính tích cực, sự sáng tạo say mê học hỏi của học sinh trong việc học tập của các em. Bởi vì, việc học tập tự giác, tích cực, chủ động và sáng tạo đòi hỏi học sinh phải có ý thức về những mục tiêu đặt ra và tạo được động lực bên trong thúc đẩy bản thân họ hoạt động để đạt các mục tiêu đó.

 

doc 17 trang thuychi01 8724
Bạn đang xem tài liệu "SKKN Một số bài toán về kiểu xâu giúp học sinh lớp 11 trường THPT Lê Lợi học tốt hơn", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
1. PHẦN MỞ ĐẦU 
1.1 Lí do chọn đề tài:
	Qua quá trình tham gia giảng dạy Tin học khối 11, tôi nhận thấy dữ liệu kiểu xâu thường gặp rất nhiều trong các bài toán và vận dụng linh hoạt các thao tác xử lý trên kiểu dữ liệu này vào bài toán không phải là dễ. Việc học sinh tìm hiểu về kiểu dữ liệu có cấu trúc nói chung và kiểu dữ liệu xâu nói riêng còn khá nhiều lúng túng. Đặc biệt là dữ liệu vào kiểu xâu và những yêu cầu của bài toán liên quan đến kiểu dữ liệu xâu, học sinh thường không biết bắt đầu từ đâu để giải quyết vấn đề mà bài toán đưa ra. Kỹ năng khi làm việc với kiểu dữ liệu xâu của học sinh thường không đáp ứng được yêu cầu đề ra.
Nội dung tin học lập trình lớp 11 là một nội dung mới lạ đối với đa số học sinh với nhiều khái niệm, thuật ngữ, cấu trúc dữ liệu mà học sinh mới được tiếp xúc lần đầu. Chính vì vậy mà học sinh dễ mắc sai lầm khi lập trình giải quyết các bài toán. Nguyên nhân dẫn đến những khó khăn mà học sinh thường gặp là:
+ Gặp khó khăn khi xác định bài toán đặc biệt là xác định dạng bài toán về kiểu dữ liệu xâu.
+ Khó liên hệ phương pháp giải một bài toán trong toán học với thuật toán trong tin học. 
	Trong việc giảng dạy cho học sinh, ngoài việc giúp học sinh lĩnh hội những kiến thức cơ bản. Người thầy còn phải biết kích thích tính tích cực, sự sáng tạo say mê học hỏi của học sinh trong việc học tập của các em. Bởi vì, việc học tập tự giác, tích cực, chủ động và sáng tạo đòi hỏi học sinh phải có ý thức về những mục tiêu đặt ra và tạo được động lực bên trong thúc đẩy bản thân họ hoạt động để đạt các mục tiêu đó.
 Các cách thiết kế bài giảng hiện nay nhằm mục đích áp dụng phương pháp hiện đại để bồi dưỡng cho học sinh năng lực ham muốn học hỏi, tư duy sáng tạo, năng lực tự giải quyết vấn đề, rèn luyện và phát triển năng lực tự học sáng tạo, nghiên cứu, nghĩ và làm việc một cách tự chủ Đồng thời để thích ứng với sự phát triển tư duy của học sinh trong xã hội mới và tiếp cận với các công nghệ tiên tiến trong xã hội, trên thế giới. Bên cạnh đó, trong các kỹ thuật dạy học mới, vai trò của người thầy có sự thay đổi là: “hướng dẫn học sinh biết tự mình tìm ra hướng giải quyết những vấn đề nảy sinh trong quá trình học tập, biết cách làm việc độc lập, làm việc tập thể. Thầy là người định hướng, là người cố vấn giúp học sinh tự đánh giá, cũng như giúp học sinh luôn đi đúng con đường tìm hiểu, lĩnh hội kiến thức”.
- Xuất phát từ thực tiễn giảng dạy tại trường THPT Lê Lợi tôi thấy rằng, để đạt hiệu quả cao trong mỗi phần học, tiết học cần có cách thiết kế bài giảng cho phù hợp với nội dung kiến thức; phương pháp, phương tiện dạy học phải phù hợp với từng đối tượng học sinh. Để qua mỗi phần học, tiết học học sinh thích thú với kiến thức mới, qua đó hiểu được kiến thức đã học trên lớp, đồng thời học sinh thấy được tầm quan trọng của vấn đề và việc ứng dụng của kiến thức trước hết để đáp ứng những yêu cầu của môn học, sau đó là việc ứng dụng của nó vào các công việc thực tiển trong đời sống xã hội.
Trong thời đại thông tin bùng nổ ngày nay, việc lập được các chương trình tự hoạt động cho máy tính, máy gia dụng là cần thiết. Và để làm được việc đó cần có một quá trình nghiên cứu, học tập về ngôn ngữ lập trình lâu dài, qua đó người lập trình có thể chọn một ngôn ngữ lập trình thích hợp. Tuy nhiên mọi thứ điều có điểm khởi đầu của nó, với học sinh việc học Pascal là khởi đầu cho việc tiếp cận ngôn ngữ lập trình bậc cao, qua đó giúp các em hình dung được sự ra đời, cấu tạo, hoạt đông cũng như ích lợi của các chương trình hoạt động trong máy tính, các máy tự động các em có thêm một định hướng, niềm đam mê về tin học, về nghề nghiệp mà các em chọn sau này. Và Pascal là một ngôn ngữ có cấu trúc thể hiện trên 3 yếu tố: Cấu trúc về mặt dữ liệu, cấu trúc về mặt lệnh, cấu trúc về mặt chương trình.
	Tuy nhiên, trong các môn học ở bậc học THPT thì môn Tin học lớp 11 được các em học sinh cho là môn học học sinh ngại tìm hiểu. Vì theo suy nghĩ của các em Môn Tin đơn thuần chỉ là người sử dụng các phần mềm sẵn có như: hệ điều hành, sọan thảo văn bản Word, bảng tính Excel, các phần mềm học tập, nghe nhạc hay chơi game thì giờ đây các em lại là người phải tìm ra lời giải cho các bài toán, chỉ ra các bước cho máy tính thực hiện và viết chương trình để tạo ra các sản phẩm phần mềm cho người khác sử dụng mặc dù mới chỉ là bước khởi đầu, cơ bản. 
	Turbo Pascal là ngôn ngữ lập trình có cấu trúc, nó được dùng phổ biến ở nước ta hiện nay trong công tác giảng dạy, lập trình tính toán, đồ họa. Turbo Pascal được dùng trong chương trình giảng dạy Tin học ở hầu hết các trường đại học, cao đẳng, trung học phổ thông và nó được mệnh danh là “ngôn ngữ học đường”.
	Các em học sinh phải làm quen với nhiều kiểu dữ liệu mới mà trong các môn học khác không có, nhiều học sinh còn bỡ ngỡ không hiểu vì sao cùng là kiểu số nguyên mà lại chia làm nhiều kiểu như byte, integer, word,  mà trong toán học chỉ gồm số nguyên âm và nguyên dương. Hoặc các loại thông tin như hình ảnh, âm thanh được xử lý như thế nào. Kiến thức mới và khó, học sinh sợ học môn Tin học 11, kết quả giảng dạy thấp, nhất là ở các lớp học sinh yếu về môn tự nhiên, ít có điều kiện sử dụng máy tính. Người thầy phải làm gì để khắc phục được điều này?
	 Để khắc phục được điều đó, theo tôi chúng ta cần phải tìm tòi, nghiên cứu tìm ra những bài toán phù hợp, kích thích được sự độc lập, tích cực của học sinh trong học tập. Học sinh có thể tự mình tìm ra được những ý tưởng sáng tạo vận dụng thiết thực vào cuộc sống thực tế khi nhu cầu nảy sinh, khi đó các em có thể tự mình hoàn thành được ý tưởng đó. 
	Trên cơ sở những gì mà học sinh được học tập về môn lập trình Pascal, để giúp cho học sinh nhìn nhận vấn đề một cách tích cực hơn, sáng tạo hơn và nhất là giúp cho các em có thể yêu thích nhiều hơn nữa ngôn ngữ lập trình Pascal. 
Xuất phát từ cơ sở trên, tôi đã chọn đề tài “Một số bài toán về kiểu xâu giúp học sinh lớp 11 trường THPT Lê Lợi học tốt hơn ”, để các em nắm được kiểu dữ liệu có cấu trúc - (Chương IV, bài 12, tin học 11).
1.2. Mục đích của đề tài:
Sử dụng các ví dụ cụ thể trước để học sinh nắm được cú pháp, ý nghĩa của kiểu xâu. Và thông qua các ví dụ đó để học sinh có thể vận dụng kiến thức của tiết học học giải quyết các bài toán khác trong chương trình môn Tin học 11
Đưa ra 1 số bài tập để học sinh thảo luận qua đó nắm vững được kiểu dữ liệu có cấu trúc: kiểu xâu. Và hình thành ở học sinh kỹ năng phân tích, sử lý các vấn đề liên quan đến bài tập kiểu xâu, sử dụng thành thạo vòng lặp biết trước, thủ tục chuẩn vào/ra đơn giản bước đầu làm quen với 1 số chương trình con dạng thủ tục tạo điều kiện thuận lợi cho việc tiếp thu kiến thức về cách viết chương trình có cấu trúc.
1.3. Đối tượng nghiên cứu:
 Học sinh khối 11 trường THPT Lê Lợi
 Sử dụng máy tính có phần mềm Free pascal hoặc Turbo pascal, máy chiếu kết nối để chạy các chương trình. 
1.4. Phương pháp nghiên cứu:
- Kết hợp thực tiễn giáo dục ở trường THPT Lê Lợi .
- Có tham khảo các tài liệu về ngôn ngữ lập trình Pascal và tài liệu về sáng kiến kinh nghiệm.
2. NỘI DUNG 
2.1 .Cơ sở lí luận
Khi học sinh học bài học Bài 12 “Kiểu xâu ”, học sinh đã có rất nhiều khó khăn, nhầm lẫn trong việc xử lý dữ liệu vì các em đang quen với các bài toán xử lý dữ liệu kiểu số, các bài toán quen thuộc như tính tổng hoặc tích của 1 dãy số thoả mãn điều kiện nào đó
	Ở bài kiểu xâu giáo viên có thể tạo sự hứng thú cho học sinh bằng các ví dụ cụ thể, có thể làm được các công việc mà các em đã gặp trong thực tế cuộc sống như các bài toán chạy chữ trên màn hình
2.2. Thực trạng vấn đề trước khi áp dụng sáng kiến kinh nghiệm:
Khi chưa áp dụng các bài tập nâng cao vào phần Bài tập thì kết quả kiểm tra học sinh 2 lớp 11a1, 11a2 như sau: 
Năm học
Sĩ số
Giỏi
Khá
Trung bình
Yếu
Kém
2016 -2017
95
SL
Tỉ lệ
SL
Tỉ lệ
SL
Tỉ lệ
SL
Tỉ lệ
SL
Tỉ lệ
12
12.6%
30
31.5%
24
25%
31
30.9%
0
0%
2.3 Nội dung và giải pháp thực hiện:
Lý thuyết dữ liệu kiểu String
 ∙ Định nghĩa :
	Xâu kí tự là một cấu trúc dữ liệu , quản lý một dãy liên tiếp các kí tự . Số lượng các kí tự của xâu được gọi là độ dài của xâu . Để biểu diễn một hằng là 1 xâu kí tự , người ta viết xâu kí tự này giữa 2 dấu nháy 
Thí dụ :
 ‘Tran van Thanh’ là hằng có kiểu xâu kí tự và có độ dài bằng 14. 
.Khai báo :
Type Tên_Xâu = String[ n] ; { n là độ dài tối đa của xâu có kiểu Tên_Xâu }
	Var	Tên_biến : Tên_Xâu;
	Thí dụ : 
	Type STR1	= String[28];
	Var S1	: STR1;
 S2	: String;
Biến S1 : Có kiểu xâu kí tự độ dài tối đa 28 kí tự . 
Biến S2 : Có kiểu xâu kí tự độ dài tối đa 255 kí tự .
Chú ý Truy nhập kí tự thứ i trong xâu S ( Kể từ trái qua phải ) thông qua S[i] . Đặc biệt có 1 trong 2 cách tổ chức xâu , người ta qui định S[0] là kí tự chỉ độ dài của xâu .Thí dụ :
S 1:= ‘Tran van Thanh’ thì S[0] là #14 { Ord( S[0] ) =14 }
Kích thước của biến S1 là 12+1=13 Byte ; biến S2 chiếm 255+1=256 Byte.
./Các phép toán - Các thủ tục và hàm xử lí xâu :
1 ) Các phép toán :
	+ Phép gán : Hai xâu cùng kiểu có thể gán giá trị cho nhau 
	+ Phép cộng : 	S1 	= ‘Trần’;
	S2 	= ‘ văn Thanh’;
	S	= S1+S2 thì S = ‘Trần văn Thanh’
	+ Các phép so sánh =, >, < 
	@ S1 = S2 nếu chúng cùng kiểu và từng kí tự tương ứng của chúng như nhau
	@ Xét S1 , S2 cùng kiểu , có độ dài tương ứng là L1,L2 .Ta nói S1<S2 nếu :
 	- Hoặc N <Min{L1,L2} sao cho với mọi i<=N thì S1[i] = S2[i] , 	 	 và S1[i+1]<S2[i+1] .
Thí dụ :’Thanh’<‘Thi’
	- Hoặc L1<L2 và với mọi i <=L1 thì S1[i]=S2[i].
 Thí dụ :’Than’<‘Thanh’
 Các Hàm :
	+ Length(S) Cho giá trị kiểu Integer là độ dài của xâu S . 
	Length(S) = Ord(S[0])-48
	Thí dụ X:= Length(‘ABCD’) Thì X=4
	+ {Function Pos (S1,S2 : String): Byte;}
	Cho giá trị kiểu Byte là vị trí bắt đầu kể từ trái qua phải thấy S1 trong S2
 	Thí dụ S2 := ‘ABCDE’ S1 := ‘BC’ Pos(S1,S2) sẽ là 2
	+ {Function Copy(S: String; I: Integer; N: Integer): String;}
Hàm này trả giá trị là một xâu con của xâu S , đó là xâu gồm n kí tự liên tiếp của xâu S , kể từ kí tự thứ i trở đi 
Thí dụ S1 := ‘ABCDE’ thì Copy(S1,2,3) sẽ là xâu ‘BCD’
	+ {Function Concat (S1,S2,..,Sn : String): String}
Nối các xâu kí tự S1,S2,..,Sn thành 1 xâu 
Thí dụ 	S2 := ‘ABCDE’ S1 := ‘BC’ thì Concat(S1,S2) sẽ là ‘BCABCDE’
 Các thủ tục :
	+ {Procedure Delete(var S: String; I: Integer; N:Integer)}
	Xoá N kí tự liên tiếp trong xâu S , kể từ kí tự thứ I
 + {Procedure Insert (S1,S2 : String; i : Integer)}
	Chèn xâu S1 vào vị trí thứ i của xâu S2
 	+ { Procedure Str(X [: Width [: Decimals ]]: Kiểu_x; var S:string);
 	Chuyển số x thành xâu kí tự chữ số là S . Kiểu_x là kiểu số
	+ { Procedure Val(S; var x: Kiểu_x; var Code: Integer);}
 	Chuyển xâu S dạng kí tự chữ số thành số x ( Kiểu số ) , code là giá trị 	thông báo lỗi khi chuyển đổi ở vị trí nào đó trong xâu S . 
 Một số ví dụ :
Xử dụng hàm Pos
Thi du :
 	Var S: String;
 	Begin
 	S := ' 123.5 ';
 	{ Chuyển kí tự trống thành chữ số 0 }
 	While Pos(' ', S) > 0 do S[Pos(' ', S)] := '0';
 	End.
Xử dụng hàm Copy
	Uses Crt;
	Var S: String;
	Begin
 	S := 'ABCDEF';
 	Writeln('S = ',S);
 	Writeln('Copy(S, 2, 3) thi S --> ',Copy(S, 2, 3)); { 'BCD' }
 	Readln
	End.
Xử dụng hàm Concat
	Var	S : String;
 	Begin
 	S := Concat('ABC', 'DEF'); { 'ABCDE' }
 	End.
Xử dụng thủ tục STR
	Uses Crt;
	Var S : String;
	BEGIN
 	Str(-53.22:10:4,S);
 	Writeln(-5.322,' ',S);
	Readln;
	END.
{Trên màn hình :
-5.3220000000E+00 -53.2200}
Xử dụng thủ tục Val
	Uses 	Crt;
	Var 	Code: Integer;
 	x : real;
	Begin
	 	Val('-5.322E+03', x, Code);
	 	If code 0 then Writeln('Lỗi tại vị trí : ', Code)
 	Else Writeln('x = ',x:4:0);
 	Readln;
	End.
{Trên màn hình : x = -5322}
{Nếu khai báo x : Integer ; thì trên màn hình sẽ thông báo : Lỗi tại vị trí : 3 }
Xử dụng thủ tục Delete
 	Var s : string;
 	Begin
 	s := 'Honest Abe Lincoln';
 	Delete(s,8,4);
 	Writeln(s); { 'Honest Lincoln' }
 	End.
Xử dụng thủ tục Insert
	Var S: String;
 	Begin
 	S := 'Honest Lincoln';
 	Insert('Abe ', S, 8); { 'Honest Abe Lincoln' }
 	End.
* Một số bài tập
Bài 1 : Xây dựng lại 4 hàm : 
	+ Tính độ dài của xâu S
	+ Nối xâu S1 liên tiếp với xâu S2
	+ Tìm vị trí đầu tiên của xâu S1 trong xâu S2 ( tìm từ trái qua phải và tìm từ phải qua trái ) . Trong cả hai trường hợp , vị trí âều tính từ trái qua phải
	+ Sao chép xâu con của xâu S , bắt đầu từ vị trí i , lấy liên tiếp n kí tự
Chương trình tham khảo:
Bài 1 
Uses 	Crt;
Var 	S1,S2,S : String;
	L1,L2,i,j,vt,d: Byte;
Procedure BonPhepCoBan;
	 Function Dodai(S : String) : Byte;
	 Begin
	 Dodai := Ord(S[0]);
	 End;
	 Function Noi(S1,S2 : String): String;
	 Var i : Byte;
	 S : String;
	 Begin
	S := '';
	For i:=1 to Dodai(S1) do S := S+S1[i];
	For i:=1 to Dodai(S2) do S := S+S2[i];
	Noi := S;
	 End;
	 Function VitriT(S1,S2 : String) : Byte;
	 Var i,j,p,L1,L2 : Byte;
	 Begin
	L1 := Dodai(S1);
	L2 := Dodai(S2);
	p := 1;
	i	:= 1;
	j	:= 1;
	While (i<=L1) and (j<=L2) do
	 Begin
	 If S1[i]=S2[j] then
	Begin
	 Inc(i);
	 Inc(j);
	End
	 Else
	Begin
	 Inc(p);
	 j := p;
	 i := 1;
	End;
	 If i>L1 then VitriT := p Else VitriT := 0;
	End;
	End;
	 Function VitriP(S1,S2 : String) : Byte;
	Var i,j,p,L1,L2 : Byte;
	 Begin
	L1 	:= Dodai(S1);
	L2 	:= Dodai(S2);
	p 	:= L2;
	i	:= L1;
	j	:= L2;
	While (i>=1) and (j>=1) do
	 Begin
	If S1[i]=S2[j] then
	Begin
	 	Dec(i);
	Dec(j);
	End
	Else
	Begin
	 Dec(p);
	 j := p;
	 i := L1;
	End;
	If i<1 then VitriP := p-L1+1	 Else VitriP := 0;
	End;
	End;
	 Function Saochep(S : String;vitri,dodai : Byte) : String;
	Var S1 : String;
	Begin
	S1 := '';
	For i:=1 to dodai do
	S1 := S1 + S[vitri+i-1];
	Saochep := S1;
	 End;
	 Begin
	 Clrscr;
	 S2 := 'LOP 10 CHUYEN TIN HOC TIN HOC';
	 S1 := 'TIN';
	 Writeln(S1,' : ',dodai(S1));
	 Writeln(S2,' : ',dodai(S2));
	 S := Noi(S1,S2);
	 Writeln(S, ' : ',dodai(S));
	 Writeln('Vi tri cua "',S1,'" trong "',S2,'" trai --> phai la ',vitriT(S1,S2));
	 Writeln('Vi tri cua "',S1,'" trong "',S2,'" phai --> trai la ',vitriP(S1,S2));
	 Vt := 8;
	 D := 6;
	 Writeln('Copy mot xau con cua "',S2,'" tu vi tri ',vt,' voi do dai ',d);
	 Writeln( 'duoc ',Saochep(S2,Vt,D));
	 End;
BEGIN
	 Clrscr;
	 BonPhepCoBan;
	 Readln;
END.
Bài 2: Lập trình thể hiện thuật toán Knuth-Moris-Pratt để tìm vị trí đầu tiên của xâu S1 trong xâu S2 ( tìm từ trái qua phải ) 
Chương trình tham khảo:
Uses 	Crt;
Const 	N 	= 75;
	M	= 10;
Var	S,S1 : String;
	L,L1	: Byte;
	A	: Array[0..255] of Byte;
Procedure NhapNgNh;
	Var i,j : Byte;
	Begin
	Randomize;
	S	:= '';
	S1	:= '';
	For i:=1 to N do
	Begin
	j := Random(5);
	S:=S+Char(65+j);
	End;
	For i:=1 to M do
	Begin
	j := Random(5);
	S1:= S1+Char(65+j);
	End;
	Writeln('S = ',S);
	Writeln('S1 = ',S1);
	 End;
Procedure Next;
 	Var k,j 	: Byte;
	Ngung 	: Boolean;
	 Begin
	L1 	:= Length(S1);
	L	:= Length(S);
	A[1] 	:= 0;
	k	:= 0;
	j	:= 1;
	While j<L1 do
	Begin
	Ngung := False;
	While (k>0) and (Not Ngung) do
	 	If S1[k] S1 [j] then k := A[k] Else Ngung := True;
	Inc(k);
	Inc(j);
	If S1[k]=S1[j] then A[j] := A[k] Else A[j] := k;
	End;
	For j:=1 to L1 do Write(A[j]:4);
	 End;
Function Vt : Byte;
	 Var p,i,j : Byte;
	 Begin
	p 	:= 1;
	i	:= 1;
	j	:= 1;
	While (i<=L1) and (j<=L) do
	Begin
	 If S1[i]=S[j] then
	 Begin Inc(i);Inc(j);	 End
	 Else
	 Begin
	Inc(p,i-A[i]);
	If A[i] >0 then i := A[i]
	Else
	Begin
	i := 1;
	Inc(j);
	End;
	 End;
	If i>m then Vt := p Else vt := 0;
	End;
	 End;
BEGIN
	 Clrscr;
	 S := 'AABCBABCAABCAABABCBA';
	 S1 := 'ABCAABABC';
	 Writeln(S);
	 Writeln(S1);
{ NhapNgNh;}
	 Next;
	 Writeln;
	 Writeln(Vt);
	 Readln;
END.
Bài 3: Nhập từ bàn phím xâu kí tự S . Thông báo có bao nhiêu loại kí tự chữ cái ‘a’ ..’z’ , ‘A’..’Z’ chứa trong xâu S và số lượng của mỗi loại .
Chương trình tham khảo:
Uses Crt;
Var	 D : Array['0'..'z'] of Integer;
	 tong_tu,demtu : Integer;
	 tunhap : String;
Procedure Doc_Dem;
	 Const Fi = 'demkitu.txt';
	 Var F	: Text;
	 S,tu	: String;
	 i,k,t	: Byte;
	 j	: Char;
	 tt 	: Boolean;
	 Begin
	 Demtu := 0;
	 Write('Nhap tu can dem : ');
	 Readln(tunhap);
	 Writeln('File da cho la : ');
	 FillChar(D,Sizeof(D),0);
	 Assign(F,Fi);
	 {$I-} Reset(F); {$I+}
	 If IoResult0 then
	 Begin
	Writeln('Loi File ');
	Readln;
	Halt;
	 End;
	 While not SeekEof(F) do
	 Begin
	Readln(F,S);
	Writeln(S);
	{ Dem tung ki tu }
	For i:=1 to length(S) do
	 For j:='0' to 'z' do
	 If (S[i]= j) then Inc(D[j]);
	{ Dem tu }
	S :=' '+S;
	For i:=1 to length(S)-1 do
	If (S[i]=' ') and (S[i+1]' ') then
	 Begin
	 Inc(tong_tu);
	 { Dem tu da nhap }
	 k := i+1;
	 t := 1;
	 tt := True;
	 While (t<=length(Tunhap)) and tt do
	 If S[k]=Tunhap[t] then
	Begin
	Inc(k);Inc(t);
	End
	 Else tt := False;
	 If t>Length(tunhap) then Inc(demtu);
	 End;
	End;
	Close(F);
	 End;
Procedure Hien_so_luong_ki_tu;
	 Var i : Char;
	 Begin
	For i:='0' to 'z' do
	If (i in ['0'..'9']) or (i in ['A'..'Z']) or (i in ['a'..'z']) then
	If (D[i]>0) then Write(i:2,' :',D[i]:2,' ');
	 End;
BEGIN
	 Clrscr;
	 Doc_Dem;
	 Writeln('Ket qua ');
	 Hien_so_luong_ki_tu;
	 Writeln;
	 Writeln('Tong so tu la : ',tong_tu);
	 Writeln('So tu " ',tunhap,'" trong File la : ',demtu);
	 Readln;
END.
Bài 4 :
Một xâu kí tự được gọi là đối xứng (Palindrome) nếu nó không thay đổi khi ta đảo ngược thứ tự các kí tự của xâu . Thí dụ ‘able was I ere I saw elba’. Nhập từ bàn phím một xâu, thông báo nó có phải là xâu Palindrome hay không.
Chương trình tham khảo:
Uses 	Crt;
Var 	S 	: String;
	i,L,N 	: Integer;
	TT 	: Boolean;
Begin
	 Clrscr;
	 Writeln('Nhap mot xau ki tu ');
	 Readln(S);
	 i:=1 ;
	 TT := True;
	 L := Length(S) ;
	 N := L div 2;
	 While TT and (i<=N) do
	Begin
	 If S[i]=S[L-i+1] then Inc(i)
	 Else TT := False;
	End;
	 If i>N then Writeln('Xau ',S,' la doi xung ')
	 Else Writeln('Xau ',S,' khong doi xung ');
	 Readln;
END.
C. HIỆU QUẢ MỚI
 Với việc giáo viên giới thiệu thêm một số bài toán có sử dụng kiểu dữ liệu kiểu xâu và hướng dẫn các em chạy chương trình bằng ngôn ngữ lập trình thì sau tiết học bài tập, học sinh có thể vận dụng kiến thức vào các bài toán tương tự, các em có thể viết chương trình và hiểu bài sâu hơn. Tiết học làm cho học sinh hứng thú hơn trong học tập, hăng say phát biểu bài, tiếp thu kiến thức tốt hơn, nắm vững kiến thức cơ bản, phát huy tính tích cực, tự giác của học sinh.
Kết quả cụ thể sau khi học xong bài kiểu xâu, tiết bài tập và tiến hành kiểm tra năng lực của học sinh 2 lớp 11A1, 11A2 năm học 2016-2017 có kết quả như sau:
Năm học
Sĩ số
Giỏi
Khá
Trung bình
Yếu
Kém
2016 -2017
95
SL
Tỉ lệ
SL
Tỉ lệ
SL
Tỉ lệ
SL
Tỉ lệ
SL
Tỉ lệ
20
21%
40
42.1%
30
31.5%
9
5.4%
0
0%
3. KẾT LUẬN VÀ KIẾN NGHỊ
- Kết luận:
Tin học là bộ môn khoa học tự nhiên đòi hỏi tính tư duy trừu tượng cao, do đó việc giảng dạy để khơi gợi tính tích cực sáng tạo của học sinh không có cách nào khác là bằng hình ảnh trực quan sinh động. Việc ứng dụng công nghệ thông tin để tạo ra các đồ dùng dạy học cho phù hợp sẽ tạo hiệu quả cao cho tiết học và gây hứng thú cho người học.
Sử dụng đồ dùng dạy học phù hợp còn rèn luyện trí thông minh sáng tạo giúp học sinh ôn luyện, củng cố khắc sâu kiến thức đã học một cách chủ động, tự giác trong giờ học.
- Kiến nghị:
Ban giám hiệu, tổ nhóm chuyên môn:
- BGH cần có kế hoạch bảo trì phòng máy tốt hơn để giúp học sinh có điều kiện được thực hành.
- Tổ cho học chuyên đề, hội thảo ứng dụng công nghệ thông tin vào dạy học.
Trên đây là những kinh nghiệm “Một số bài toán về kiểu xâu giúp học sinh lớp 11 trường THPT Lê Lợi học tốt hơn ”, Qua sáng kiến kinh nghiệm này mong được sự góp ý của ban giám hiệu và các đồng nghiệp để tôi viết thiết thực hơn, sâu sắc hơn.
Tài liệu tham khảo:
1. Một số trang web:
2. Sách giáo khoa Tin học 11.
3. Sách bài tập Tin học 11
4. Sách giáo viên Tin học 11
5. Tài liệu bồi dưỡng giáo viên Tin học 11
Danh mục các sáng 

Tài liệu đính kèm:

  • docskkn_mot_so_bai_toan_ve_kieu_xau_giup_hoc_sinh_lop_11_truong.doc