SKKN Lựa chọn một số dạng bài tập kiểu xâu kí tự để bồi dưỡng cho học sinh đội tuyển môn Tin học ở trường THPT Hoằng Hóa 3

SKKN Lựa chọn một số dạng bài tập kiểu xâu kí tự để bồi dưỡng cho học sinh đội tuyển môn Tin học ở trường THPT Hoằng Hóa 3

Trong quá trình giảng dạy, tôi được nhà trường tin tưởng giao cho giảng dạy và thành lập được đổi tuyển HSG môn Tin học của Nhà trường, đối tượng được lựa chọn chủ yếu là học sinh khá, giỏi môn Tin học. Chính vì vậy ngoài việc giúp các em nắm chắc kiến thức cơ bản tôi còn phải bồi dưỡng các em tham gia kỳ thi học sinh giỏi cấp tỉnh. Một vấn đề gặp phải khi lựa chọn và bồi dưỡng đội tuyển đó là điểm tuyển sinh đầu vào của học sinh lớp 10 thấp so với các trường trong huyện, đa số các em có tư duy toán học tốt thì đều nằm trong đội tuyển các môn Toán, Lý, Hóa, Sinh nên việc tìm kiếm và lựa chọn rất khó khăn, do đó các học sinh có lựa chọn được vào đội tuyển môn tin học thì chủ yếu là các học sinh có kiến thức và tư duy toán học ở mức trung bình khá và khá, hiếm hoi lắm mới chọn lựa được một em có mức độ tư duy toán học trên khá một tí, vì vậy công tác bồi dưỡng cũng gặp không ít khó khăn. Chính vì vậy để có thể có được giải trong kỳ thi thì khi bồi dưỡng giáo viên cần phải lựa chọn được những dạng bài tập vừa sức với tư duy các em, từ đó có thể phát triển thêm cho các em để các em rèn luyện và nâng cao tư duy lập trình cho bản thân thì mới hy vọng được.

doc 21 trang thuychi01 9614
Bạn đang xem 20 trang mẫu của tài liệu "SKKN Lựa chọn một số dạng bài tập kiểu xâu kí tự để bồi dưỡng cho học sinh đội tuyển môn Tin học ở trường THPT Hoằng Hóa 3", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
MỤC LỤC
Trang
1. Mở đầu
Lý do chọn đề tài
Trong quá trình giảng dạy, tôi được nhà trường tin tưởng giao cho giảng dạy và thành lập được đổi tuyển HSG môn Tin học của Nhà trường, đối tượng được lựa chọn chủ yếu là học sinh khá, giỏi môn Tin học. Chính vì vậy ngoài việc giúp các em nắm chắc kiến thức cơ bản tôi còn phải bồi dưỡng các em tham gia kỳ thi học sinh giỏi cấp tỉnh. Một vấn đề gặp phải khi lựa chọn và bồi dưỡng đội tuyển đó là điểm tuyển sinh đầu vào của học sinh lớp 10 thấp so với các trường trong huyện, đa số các em có tư duy toán học tốt thì đều nằm trong đội tuyển các môn Toán, Lý, Hóa, Sinh nên việc tìm kiếm và lựa chọn rất khó khăn, do đó các học sinh có lựa chọn được vào đội tuyển môn tin học thì chủ yếu là các học sinh có kiến thức và tư duy toán học ở mức trung bình khá và khá, hiếm hoi lắm mới chọn lựa được một em có mức độ tư duy toán học trên khá một tí, vì vậy công tác bồi dưỡng cũng gặp không ít khó khăn. Chính vì vậy để có thể có được giải trong kỳ thi thì khi bồi dưỡng giáo viên cần phải lựa chọn được những dạng bài tập vừa sức với tư duy các em, từ đó có thể phát triển thêm cho các em để các em rèn luyện và nâng cao tư duy lập trình cho bản thân thì mới hy vọng được.
Trong kỳ thi HSG môn tin học ở hầu khắp các tỉnh thành thì các bài tập phần kiểu xâu kí tự có vai trò quan trọng. Kiểu dữ liệu xâu kí tự là phần rất nhiều vấn đề và rất nhiều bài tập phong phú, nếu giáo viên không lựa chọn mà cứ dạy tràn lan hoặc lựa chọn những bài khó vượt quá mức độ tư duy của các em ngay từ đầu thì với các em có mức độ tư duy trung bình khá hoặc khá sẽ khó có thể hiểu và học tốt được, dễ dẫn đến việc các em chán nãn. Với chất lượng đầu vào của học sinh thấp như ở trường tôi thì việc lựa chọn và xây dựng các dạng bài tập để giúp học sinh ôn tập hiệu quả các bài tập liên quan đến kiểu dữ liệu xâu kí tự là một vấn đề cần phải suy nghĩ và tính toán, bởi vì việc lựa chọn các dạng bài tập đó phải thỏa mãn phù hợp với năng lực của các em đồng thời phải thuận tiện để các em ôn tập khi ở nhà vì thời gian mà các em dành cho môn học này là khiêm tốn.
Từ thực tiễn giảng dạy và bồi dưỡng học sinh giỏi, cùng với kinh nghiệm trong quá trình giảng dạy, bồi dưỡng học sinh. Tôi đã tổng hợp, khai thác để xây dựng đề tài: ‘‘Lựa chọn một số dạng bài tập kiểu xâu kí tự để bồi dưỡng cho học sinh đội tuyển môn Tin học ở trường THPT Hoằng Hóa 3’’.
Qua nội dung đề tài này tôi mong muốn cung cấp cho học sinh một số dạng bài toán cơ bản về kiểu dữ liệu xâu kí tự, phương pháp và các kỹ năng cơ bản để học sinh có thể giải quyết chúng, tránh tình trạng khi các em gặp phải các bài toán tương tự hoặc bài toán đảo của bài toán đã làm liên quan đến kiểu dữ liệu xâu lại suy diễn, thường làm phức tạp vấn đề hay không giải được. Và trên cơ sở đó với tinh thần tự học một cách nghiêm túc thì các em có thể phát triển thêm tư duy của mình. Hy vọng kinh nghiệm nhỏ này sẽ giúp các học sinh có cái nhìn linh hoạt và chủ động khi gặp một số dạng bài toán liên quan đến kiểu xâu kí tự.
Mục đích nghiên cứu
Nghiên cứu một số vấn đề lý thuyết và thực tiễn việc rèn luyện cho học sinh các kỹ năng giải một số dạng bài toán về kiểu dữ liệu xâu kí tự nhằm bồi dưỡng năng lực tư duy cũng như kỹ năng lập trình cho các học sinh đội tuyển môn tin học ở một trường có điểm thi đầu vào thấp và có mức độ tư duy trung bình khá và khá, góp phần nâng cao chất lượng bồi dưỡng học sinh giỏi môn Tin học ở trường phổ thông Hoằng Hóa 3. 
Đối tượng nghiên cứu
Đối tượng nghiên cứu: một số dạng bài tập về kiểu dữ liệu xâu kí tự trong môn tin học 11 của học sinh THPT.
Khách thể nghiên cứu: Học sinh thuộc đội tuyển học sinh giỏi môn Tin học của trường THPT Hoằng Hóa 3
Phương pháp nghiên cứu
- Phương pháp nghiên cứu lý luận: Nghiên cứu các tài liệu, sách báo trên mạng Internet.
- Phương pháp điều tra thực tiễn: Quan sát việc học của học sinh trong quá trình khai thác các bài tập sách giáo khoa, sách bài tập và các đề thi học sinh giỏi.
- Phương pháp thực nghiệm sư phạm.
2. Nội dung sáng kiến kinh nghiệm
2.1. Cơ sở lí luận của sáng kiến kinh nghiệm
- Cơ sở tâm lý học:
+ Đặc điểm nhận thức của học sinh đối với môn Tin học:
Phần lớn học sinh coi bộ môn Tin học là môn học phụ, không quan tâm cho lắm, môn Tin học lớp 11 là môn học khó, trừu tượng, lại phải nhớ các từ khóa tiếng anh, tuy nhiên với sự nhiệt tình giảng dạy của giáo viên thì vẫn còn có một vài học sinh có hứng thú với môn Tin học. Từ số lượng ít ỏi đó vẫn có cơ hội để người giáo viên tìm ra các học sinh cho đội tuyển học sinh giỏi của mình.
+ Tư duy của học sinh:
Thông thường những học sinh có kỹ năng lập trình khá, giỏi là những em có tư duy và kiến thức Toán học trên khá hoặc giỏi. Nhưng thông thường những học sinh này môn tin không chọn được vì các em đã nằm trong đội tuyển các môn Toán, Lý, Hóa, Sinh. Vì vậy ở một trường mà đầu vào thấp như trường tôi thì phần lớn các em nằm trong đội tuyển môn Tin là những em có tư duy và kiến thức trung bình khá và khá về toán học. Do đó điều mà giáo viên được giao trách nhiệm bồi dưỡng mong muốn đó là niềm đam mê ở các em đối với môn Tin học cùng với đó là người thầy phải xây dựng được hệ thông bài tập vừa sức với tư duy của các em, để từ đó bồi dưỡng và rèn luyện tư duy lập trình cho các em.
2.2. Thực trạng vấn đề trước khi áp dụng sáng kiến kinh nghiệm
- Thực trạng công tác bồi dưỡng học sinh giỏi môn Tin học hiện nay.
Thực tế một số học sinh có thể tự làm hoặc tham khảo thuật toán và code trong sách giáo khoa, sách bài tập, cũng như tài liệu trên mạng cũng có thể vận dụng, tự làm được một số bài tập cơ bản về kiểu dữ liệu xâu kí tự, nhưng đôi khi cách hiểu và vận dụng của các em còn hình thức và máy móc, dẫn đến khi gặp lại dạng bài đó ở đề thi khác đã được thay đổi ít nhiều về ngữ cảnh hoặc bài toán ngược của bài đã làm thì các em lại lúng túng, nhìn chung các em chưa có thể tổng hợp và khái quát hóa để có cái nhìn hệ thống hơn về các dạng bài tập về kiểu xâu kí tự. Trong các đề thi học sinh giỏi thì gần như đề nào ít nhiều cũng có bài tập liên quan đến kiểu dữ liệu xâu kí tự và để viết được chương trình thì học sinh có thể phải kết hợp một vài thuật toán hoặc mở rộng thuật toán từ các bài toán quen thuộc đã được làm, vì vậy việc trang bị cho ác em một số dạng bài tập kiểu xâu cơ bản sẽ giúp các em rèn luyện được kỹ năng lập trình và tư duy thuật toán khi viết chương trình cho một số dạng bài toán cơ bản về kiểu xâu.
 Qua những năm gần đây khi bồi dưỡng học sinh giỏi môn Tin học tôi nhận thấy mảng kiến thức về kiểu dữ liệu xâu kí tự có rất nhiều vấn dề, các dạng bài tập phong phú, đa dạng và là loại bài tập khá thú vị. Do đó tôi lựa chọn đề tài này để nghiên cứu và trình bày. Bởi việc giúp các em hệ thống thành các dạng bài tập giúp các em rất tốt trong quá trình học và rèn luyện kỹ năng lập trình, đặc biệt là các em có tư duy toán học trung bình khá như ở trường tôi.
- Những thuận lợi và khó khăn:
* Thuận lợi:
- Công tác bồi dưỡng học sinh giỏi hiện nay đối với môn Tin học đã được nhà trường quan tâm chỉ đạo sát sao đặc biệt là đã có những phần thưởng có tính khích lệ đối với giáo viên và học sinh hơn trước.
* Khó khăn:
- Học sinh tuyển sinh có đầu vào thấp lại chỉ được chọn sau khi các môn khác chọn xong, nên môn tin học ít có cơ hội chọn được học sinh tốt nhất.
- Phụ huynh không thích cho con em mình vào đội tuyển mon Tin học sợ ảnh hưởng đến việc học và ôn thi tốt nghiệp và Đại học.
2.3. Các giải pháp đã sử dụng để giải quyết vấn đề
2.3.1 Xác định tiêu chí để xây dựng dạng bài tập phù hợp với năng lực học sinh của trường THPT Hoằng Hóa 3
Để xây dựng các dạng bài tập về kiểu xâu nhằm giúp học sinh ôn tập hiệu quả thì tôi đưa ra tiêu chí lựa chọn các bài tập để xếp vào cùng một dạng như sau:
- Chọn các bài toán có cùng đặc điểm nhưng ngữ cảnh có thể khác nhau, hoặc bài toán đảo ngược của nó, hoặc cùng có sử dụng chung một thuật toán nào đó trong thuật toán để giải quyết bài toán. 
- Lựa chọn thuật toán phù hợp, dễ hiểu, dễ cài đặt so với tư duy của học sinh.
- Chỉ hướng dẫn học sinh viết chương trình hoàn chỉnh 1 bài trong mỗi dạng, các bài còn lại học sinh vận dụng thuật toán tương tự, có thể bổ sung hoặc sửa đổi ít nhiều để viết và hoàn thành chương trình, trường hợp cần thiết thì giáo viên mới đưa ra các gợi ý để học sinh hoàn thành việc viết chương trình của mình, có như thế học sinh mới nắm chắc được kiến thức.
- Mỗi dạng bài tập chỉ đưa ra 3 đến 5 bài để học sinh rèn luyện. Việc này giúp các em đỡ nhàm chán khi ôn tập, cũng như giảm bớt căng thẳng và áp lực khi các em nhìn thấy bài tập giáo viên ra nhiều quá.
2.3.2 Lựa chọn một số dạng bài tập phù hợp với năng lực học sinh đội tuyển môn Tin học ở trường THPT Hoằng Hóa 3
Qua tìm hiểu các đề thi, nghiên cứu các tài liệu tham khảo về kiểu dữ liệu xâu kí tự, tôi thấy có một số dạng bài tập về kiểu xâu thường gặp trong các đề thi học sinh giỏi, do giới hạn của sang kiến về số trang nên ở đây tôi xin trình bày 4 dạng bài tập kiểu xâu kí tự cơ bản nhất, thường gặp và có các phương pháp giải vừa sức với mức độ tư duy của học sinh trường tôi như sau:
 DẠNG 1: BÀI TOÁN SẮP XẾP TRONG XÂU
Phương pháp chung cơ bản để giải quyết các bài toán dạng này là:
Tách các xâu kí tự hoặc xâu kí tự số là xâu con của xâu đầu vào rồi đưa vào mảng xâu (nếu có);
Thực hiên việc sắp xếp mảng các xâu kí tự hoặc xâu kí tự số đó theo yêu cầu đề bài.
Bài 1. Sắp xếp xâu.	
Người ta định nghĩa: Từ là một nhóm ký tự đứng liền nhau.
Cho một xâu St gồm các ký tự lấy từ tập ‘a’ .. ‘z’ và dấu cách. Xâu không quá 20 từ, mỗi từ dài không quá 10 ký tự.
Yêu cầu: Sắp xếp các từ của xâu ký tự theo thứ tự không giảm của độ dài các từ trong xâu St.
Dữ liệu vào: Cho trong file văn bản SAPXAU.INP, có cấu trúc:
- Dòng 1: Ghi một xâu ký tự St (có ít nhất 1 từ). 
Dữ liệu ra: Ghi ra file văn bản SAPXAU.OUT, theo cấu trúc:
- Dòng 1: Ghi các từ của xâu ký tự sau khi được sắp xếp. Các từ được ghi cách nhau đúng một dấu cách. [1]
Ví dụ:
SAPXAU.INP
SAPXAU.OUT
acb abcde abcd abc
acb abc abcd abcde
Sau khi đã hướng dẫn phương pháp chung, học sinh có thể hình dung ra các bước làm bài này như sau:
Bước 1. Đọc và tách các xâu kí tự con từ xâu ban đầu vào mảng lưu các xâu con
Bước 2. Thực hiện việc sắp xếp các xâu con tăng dần theo độ dài của các xâu.
Chương trình tham khảo:
PROGRAM bai1d1;
const fi='sapxau.inp'; fo='sapxau.out';
 nmax=10000;
var a:array[1..nmax] of ansistring;
 i,j,dem,code:longint;
 n:int64;
 s,s1,s2,tam:ansistring;
 f1,f2:text;
BEGIN
 assign(f1,fi);
 reset(f1);
 assign(f2,fo);
 rewrite(f2);
 readln(f1,s);
 while s[1]=' ' do delete(s,1,1);
 while s[length(s)] =' ' do delete(s,length(s),1);
 while pos(' ',s)0 do delete(s,pos(' ',s),1);
 n:=0;
 s:=s+' ';
 while s'' do
 begin
 n:=n+1;
 a[n]:=copy(s,1,pos(' ',s)-1);
 delete(s,1,pos(' ',s));
 end;
 for i:=1 to n-1 do
 for j:=i+1 to n do
 if length(a[i])>length(a[j]) then
 begin
 tam:=a[i];
 a[i]:=a[j];
 a[j]:=tam;
 end;
 for i:=1 to n do write(f2,a[i],' ');
 close(f1);
 close(f2);
END.
Nhận xét: Sau khi viết và chạy được chương trình giáo viên cần lấy thêm một số test khác để kiểm tra xem học sinh tách đúng các từ cần sắp xếp hay không.
Bài 2 Viết chương trình đọc dữ liệu từ tệp SXX.INP gồm một dòng duy nhất chứa xâu kí tự S không vượt quá 255 kí tự bao gồm số và các kí tự “a”. 
Yêu cầu: Ghi ra tệp SXX.OUT xâu S sau khi đã sắp xếp các số trong xâu theo thứ tự tăng dần còn vị trí các kí tự chữ cái vẫn giữ nguyên. [2]
Ví dụ:
SXX.INP
SXX.OUT
aaa6aaa776aaaaa2823aaaa95aaa
aaa6aaa95aaaaa776aaaa2823aaa
Sau khi đã làm bài 1 ở trên, khi làm bài này học sinh nhận ngay ra là cần phải tách lấy các số trong xâu, sắp xếp lại các số theo thứ tự tăng dần rồi chèn lại các số đã sắp xếp vào vị trí các số đã cho trong xâu ban đầu. Tuy nhiên học sinh có thể sẽ làm như sau:
- Học sinh sẽ thực hiện tách cả xâu con số và tách cả các xâu con kí tự xen kẽ và đưa vào 2 mảng là mảng số và mảng xâu kí tự;
- Thực hiện việc sắp xếp tăng dần đối với xâu số;
- Đổi các số trong mảng số thành xâu và thực hiện việc ghép 2 mảng lại với nhau để thu được kết quả
Nhận xét: Học sinh sẽ gặp phải các tình huống đó là ghi nhớ xâu số tách trước hay xâu kí tự tách trước, dẫn đến học sinh phải đi tìm cách biện luận cho 2 trường hợp này;
Để học sinh đỡ lúng túng, khỏi phải mất công biện luận giáo viên có thể hướng dẫn học sinh như sau:
- Thực hiện tách các xâu số, đổi xâu số đó thành số rồi đưa vào mảng số, tại mỗi vị trí tách lấy số ta chèn dấu ‘*’ vào vị trí đó để thuận tiện cho việc chèn lại sau đó;
- Thực hiện việc sắp xếp tăng dần đối với xâu số;
- Đổi các số trong mảng số thành xâu và thực hiện việc chèn các số đã sắp xếp vào vị trí dấu ‘*’ để thu được kết quả.
Sau đó giáo viên để cho học sinh tự viết chương trình.
Chương trình tham khảo có thể như sau:
program bai2d1;
const Nmax=10000;
 fi='xepxau.inp';
 fo='xepxau.out';
var A:array[1..Nmax] of longint;
 f1,f2:text;
 s,s1:string;
 i,k,j,t,m,code,tg:integer;
begin
 assign(f1,fi);reset(f1);
 assign(f2,fo);rewrite(f2);
 readln(f1,s);
 close(f1);
 j:=1;i:=1; k:=0;
 while (j<=length(s)) do
 begin
 while (i<=length(s)) and (s[i]='a') do inc(i);
 j:=i;
 while (i='0') and (s[i]<='9') do inc(i);
 s1:=copy(s,j,i-j);
 if s1'' then
 begin
 inc(k);
 val(s1,m,code);
 A[k]:=m;	delete(s,j,i-j);	insert('*',s,j);
 i:=j+1;
 end;
 end;
 for i:=1 to k-1 do
 for j:=i+1 to k do
 if a[i]>a[j] then
 begin
 tg:=a[i];
 a[i]:=a[j];
 a[j]:=tg;
 end;
 for i:=1 to k do
 begin
 t:=pos('*',s);
 delete(s,t,1);
 str(a[i],s1);
 insert(s1,s,t)
 end;
 writeln(f2,s);
 close(f2);
end.
Bài 3. Xâu kí tự
Cho xâu kí tự S có độ dài không vượt quá 1000 kí tự bao gồm các chữ cái và chữ số. Một dãy các chữ số liên tiếp nhau trong xâu tạo thanh một “số nguyên”.
Yêu cầu: Hãy sắp xếp lại các “số nguyên” trong xâu S theo thứ tự tăng dần và giữ nguyên thứ tự các kí tự khác chữ số. Khi sắp xếp, nếu “số nguyên” bắt đầu bằng chữ số 0 thì loại bỏ các chữ số 0 đó đi, ví dụ nếu gặp “số nguyên” 025 thì số cần sắp là 25. Nếu số nguyên đó chỉ là một dãy gồm một hoặc nhiều chữ số 0 thiò chỉ giữ lại một chữ số 0, ví dụ nếu gặp “số nguyên” 00000 hoặc 0 thì số cần sắp lại là 0.
Dữ liệu vào: cho từ tệp văn bản XAU.INP gồm một dòng ghi xâu kí tự S.
Kết quả: Ghi ra tệp văn bản XAU.OUT gồm một dòng ghi xâu S sau khi đã sắp xếp các “số nguyên” có trong xâu. [3]
Ví dụ:
XAU.INP
XAU.OUT
ast025xyz4ghi20mn0pqr00000xyz
ast0xyz0ghi4mn20pqr25xyz
Nhận xét: Ở bài này ta thấy đề cho rõ ràng hơn, nhưng do đã làm bài trên nên bài này học sinh có thể chỉ cần sửa lại điều kiện khi tách ở chương trình bài 2 ở trên để được chương trình bài này, còn khi dùng hàm đổi xâu thành số thì trường hợp xâu ‘0000’ sẽ thành số 0, ‘025’ sẽ thành 25.
Bài 4 SortString	
	Mỗi xâu kí tự St được lấy từ tập các ký tự ’a’...’z’, ’0’...’9’ và có độ dài tối đa là 255 kí tự. Cho N xâu kí tự St1, St2... StN (0 < N ≤ 200). 
Yêu cầu: Thực hiện sắp xếp N xâu kí tự St theo thứ thự không giảm của số lượng các kí tự chữ số có trong mỗi xâu St.
Dữ liệu vào: Cho trong file văn bản BAI2.INP có cấu trúc như sau:
- Dòng 1: Ghi số nguyên N.
- N dòng tiếp theo: Mỗi dòng ghi một xâu St.
Kết quả: Ghi ra file văn bản BAI2.OUT theo cấu trúc như sau:
- Ghi N dòng: Mỗi dòng ghi một xâu St, các xâu được ghi theo thứ tự đã sắp xếp. [4]
Ví dụ:
BAI2.INP
BAI2.OUT
3
abc1x2y3z
cb1
1cd7hd
cb1
1cd7hd
abc1x2y3z
Nhận xét: Bài này thì ngữ cảnh khác so với các bài trước là không phải tách các xâu con từ xâu ban đầu mà là đọc từng xâu ở mỗi hàng đã cho vào mảng xâu, mục đích đưa ra bài này ra để xem học sinh có vận dụng linh hoạt cách làm của dạng này hay không, từ cách làm các bài trên thì học sinh sẽ tìm được cách làm cho bài này một cách nhanh chóng và nhận thấy bài nay cách làm còn đơn giản hơn các bài trước, học sinh sẽ hình dung ra các bước cần làm như sau:
Bước 1: Đọc từng xâu ở mỗi hàng vào mảng xâu;
Bước 2: Viết một hàm đếm số lượng chữ số có trong một xâu để sử dụng;
Bước 3: Dùng hàm đã viết để thực hiện việc sắp xếp xâu;
Bước 4: Ghi kết quả sau khi sắp xếp vào tệp.
Và từ đó học sinh sẽ tự mình hoàn thiện được chương trình.
DẠNG 2: BÀI TOÁN VỀ TẦN XUẤT CỦA KÍ TỰ
Phương pháp chung cơ bản để giải quyết các bài toán loại này:
+ Dùng mảng đếm để lưu số lần xuất hiện của các kí tự chữ cái hoặc chữ số
+ Xử lý và ghi kết quả theo yêu cầu của đề bài
Bài 1. Liệt kê chữ cái
Cho một văn bản chứa trong một text file. Bạn hãy viết chương trình liệt kê các chữ cái chỉ có mặt trong văn bản đúng một lần theo thứ tự của bảng chữ cái (không phân biệt chữ hoa và chữ thường).
Dữ liệu vào: file DEM_CHU.INP gồm nhiều dòng chứa các kí tự trong file.
Dữ liệu ra: file DEM_CHU.OUT mỗi dòng ghi các kí tự chỉ xuất hiện đúng một lần trong file theo yêu cầu đề ra. [5]
Ví dụ: 
DEM_CHU.INP
DEM_CHU.OUT
NAMMOIHANHPHUC
C
I
O
P
U
Nhận xét: Từ hướng dẫn chung, khi gặp bài này học sinh sẽ nghĩ ngay đến việc dùng mảng đếm để đếm tần số xuất hiện của các kí tự, sau đó in ra các kí trự có tần số là 1.
Chương trình tham khảo:
PROGRAM bai1d2;
const fi='dem_chu.inp'; fo='dem_chu.out';
 nmax=10000;
var dd:array['A'..'Z'] of longint;
 n,i,dem:longint; s:ansistring;
 j:char; f1,f2:text;
BEGIN
 assign(f1,fi);
 reset(f1);
 assign(f2,fo);
 rewrite(f2);
 for j:='A' to 'Z' do dd[j]:=0;
 While not eof(f1) do
 begin
 readln(f1,s);
 for I:=1 to length(s) do
 for j:='A' to 'Z' do
 if upcase(s[i])=j then dd[j]:=dd[j]+1;
 end;
 for j:='A' to 'Z' do if dd[j]=1 then writeln(f2,j);
 close(f1); close(f2);
END.
Bài 2. Tỷ lệ nguyên âm
Cho một văn bản chứa trong một text file. Bạn hãy viết chương trình tính tỷ lệ các nguyên âm có mặt trong văn bản theo thứ tự của bảng chữ cái.
Định nghĩa các nguyên âm là: A, E, I, O, U, Y
Dữ liệu vào: file NGUYENAM.INP gồm nhiều dòng chứa các kí tự của file văn bản.
Dữ liệu ra: file NGUYENAM.OUT
Mỗi dòng ghi ký tự và tỷ lệ (lấy đên 4 chữ số thập phân) của các nguyên âm. [6]
Ví dụ:
NGUYENAM.INP
NGUYENAM.OUT
ANHEMHOATHUANTHUONGYEUNAMMOIMAYMAN
A: 17.6471 %
E: 5.8824 %
I: 2.9412 %
O: 8.8235 %
U: 5.8235 %
Y: 5.8824 %
Nhận xét: Khi gặp bài này học sinh sẽ nghĩ ngay đến việc dùng mảng đếm tần số xuất hiện của các kí tự, sau đó in ra tần số của 6 kí trự nguyên âm theo yêu cầu cảu đề bài, tuy nhiên phải yêu học sinh ghi cho chính xác kết quả (đây là lỗi mà đa số học sinh hay sai).
Chương trình tham khảo:
PROGRAM bai2d2;
const fi='nguyenam.inp';
 fo='nguyenam.out';
 nmax=100000;
var a:array[1..nmax] of char;
 dd:array['A'..'Z'] of longint;
 n,i,dem:longint; S:ansistring;
 j:char;
 f1,f2:text;
BEGIN
 assign(f1,fi);
 reset(f1);
 assign(f2,fo);
 rewrite(f2);
 for j:='A' to 'Z' do dd[j]:=0;
 While not eof(f1) do
 begin
 readln(f1,s);
 for I:=1 to length(s) do
 for j:='A' to 'Z' do
 if upcase(s[i])=j then dd[j]:=dd[j]+1;
 end;
 n :=0;
 for j:= 'A' to 'Z' do n:=n+dd[j];
 writeln(f2,'A: ',dd['A']/n*100:0:4,' %');
 writeln(f2,'E: ',dd['E']/n*100:0:4,' %');
 writeln(f2,'I: ',dd['I']/n*100:0:4,' %');
 writeln(f2,'O: ',dd['O']/n*100:0:4,' %');
 writeln(f2,'U: ',dd['U']/n*100:0:4,' %');
 writeln(f2,'Y: ',dd['Y']/n*100:0:4,' %');
 close(f1);
 close(f2);
END.
Bài 3:  Kí tự khác nhau
Cho xâu S chỉ gồm các kí tự là chữ cái tiếng anh và các chữ số (có phân biệt chữ in hoa, in thường).
Yêu cầu: Hãy xác định số kí tự khác nhau trong xâu S và mỗi kí tự xuất hiện bao nhiêu lần.
Dữ liệu vào: Vào từ file  văn bản BAI2.INP gồm 1 dòng duy nhất là xâu kí tự S (có độ dài không quá 255).
Kết quả: Kết quả ghi ra file văn bản BAI2.OUT gồm:
- Dòng đầu ghi số kí tự khác nhau.
- Các dòng tiếp theo, mỗi dòng ghi một kí tự xuất hiện trong xâu S và số lần xuất hiện của nó. Các kí tự đưa ra theo thứ tự chữ cái in hoa, in thường, chữ số. Các chữ cái, chữ số đưa ra theo thứ tự từ điển. [7]
Ví dụ:
BAI2.INP
BAI2.OUT
ACC9C1A9Bz
6
A 2
B 1
C 3
z 1
1 1
9 2
Nhận xét: So với các bài trước thì ngữ cảnh của bài này đã thay đổi, tuy vậy học sinh sẽ đưa ra cách làm cơ bản là vẫn dùng 3 mảng đếm của 3 loại kí tự là ch

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

  • docskkn_lua_chon_mot_so_dang_bai_tap_kieu_xau_ki_tu_de_boi_duon.doc