SÁNG KIẾN KINH NGHIỆM MỘT SỐ PHƯƠNG PHÁP GIÚP HỌC
SINH GIẢI BÀI TẬP VỀ KIỂU XÂU
A- PHẦN MỞ ĐẦU
I/ LÝ DO CHỌN ĐỀ TÀI
Ngày nay, trên thế giới đang diễn ra quá trình tin học hoá trên nhiều lĩnh vực hoạt
động của xã hội loài người và đem lại nhiều hiệu quả to lớn. Việc sử dụng máy tính
không còn chỉ bó hẹp trong viện nghiên cứu, các trường đại học, các trung tâm máy tính
mà còn mở rộng ra mọi cơ quan, tổ chức kinh tế, và trong các gia đình. Song song với
quá trình trên, việc giảng dạy Tin học trong các trường đại học, THPT cũng được đẩy
triển các phương pháp tích cực đòi hỏi một số điều kiện, trong đó quan trọng nhất là bản
thân mỗi giáo viên cần có một sự nỗ lực để tìm tòi, sáng tạo trong công tác giảng dạy
của mình.
Đổi mới phương pháp dạy học là một vấn đề hết sức quan trọng, nhất là với bộ
môn Tin học hiện đang được đưa vào giảng dạy ở các trường phổ thông. Là một giáo
viên giảng dạy bộ môn này, theo tôi không phải cứ tìm được nhiều bài toán khó, bài
toán hay để giảng dạy cho học sinh. Mà vấn đề đặt ra là chúng ta cần phải tích cực tìm
tòi, sáng tạo trong việc đưa ra những bài toán đó để giúp cho học sinh có sự hứng thú,
tìm tòi sáng tạo trong quá trình giài quyết học tập, từ đó biết vận dụng linh hoạt trong
các tình huống cụ thể ngoài thực tế.
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 Thanh Bình 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
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? II- THỰC TRẠNG CỦA VẤN ĐỀ NGHIÊN CỨU
1/Tình trạng thực tế khi chưa thực hiện đề tài
Trước đây khi chưa áp dụng phương pháp giảng dạy bằng giáo án điện tử, lấy ví
dụ từ thực tế… học sinh luôn phản ánh với giáo viên rằng: “Những bài tập về kiểu xâu”
này khó hiểu và trừu tượng. Khi kiểm tra với mức độ đề tương đương với một vài ví dụ
trong sách giáo khoa, các em vẫn mơ hồ và đạt kết quả chưa cao.
2/ Khảo sát thực tế
Giáo viên đưa ra đề kiểm tra 1 tiết đối với lớp 11A3 có 45 học sinh như sau:
Bài 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ụ : Input: ‘abcdAbcD’
Output: ‘ABCDABCD’
Bài 2: Viết chương trình nhập vào một chuỗi, tách và in ra từ cuối cùng trong chuỗi.
Kết quả kiểm tra như sau:
Điểm Số học sinh Tỉ lệ
3 3 6,67%
4 7 15,56%
5 13 28,88%
6 10 22,22%
7 8 17,77%
8 3 6,67%
9 1 2,22%
B- NỘI DUNG
I/ CHUẨN BỊ
1/ Về phương pháp:
- Giáo viên soạn trước một vài ví dụ trên máy tính bằng phần mềm PowerPoint.
Sử dụng phương pháp thuyết trình kết hợp pháp vấn.
- Đư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. Hình thành ở học sinh kỹ năng phân tích, xử 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.
Chạy chương trình để học sinh theo dõi kết quả thực hiện.
Chương tình bài tập 1:
Program inhoa;
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 rình nhập vào một chuỗi tách và in ra từ cuối cùng trong chuỗi:
Giáo viên gợi ý:
Khi nhập vào một chuỗi bất kỳ, có thể có khoảng trống sau từ cuối chuỗi. để xác
định từ cuối của chuỗi, trước tiên phải cắt bỏ các khoảng trống ở cuối chuỗi. sau đó xác
định vị trí (vitri) khoảng trống đầu tiên tính từ cuối trở về đầu. Từ cuối cùng chính là:
các ký tự bắt đầu từ vị trí (vitri+1) đến cuối chuỗi. Ví dụ: s=’N Thanh Huong ’, length(s) trả về giá trị 16, Sau khi cắt khoảng trống
cuối s=’N Thanh Huong’, length(s) trả về giá trị 13. vị trí khoảng trống tìm thấy đầu tiên
trong chuỗi tính từ cuối lên là vitri = 8. Vậy ký tự từ vị trí đến cuối chuỗi tạo thành từ
cuối là Huong.
Chương trình bài tập 2
Program BT2;
Uses crt;
Var s: String;
i, vitri: byte;
Begin
→ tiếp tục lặp
Sau lệnh {2}, s = ‘N Thanh Huong’ , length(s)=13, s[13]= ‘g’<>#32 → thoát lặp
{3}
→{9}: Bắt đầu vòng lặp, b
iến xác định vị trí tìm thấy khoảng trống đầu tiên
bằng 0. Vòng lặp {4} lần lượt duyệt từ vị trí cuối đến vị trí đầu của chuỗi s. nếu ký tự i
khác trống thì giảm i để xét ký tự trước nó, nếu là khoảng trống {5}, thí cất vị trí này
vào biến vitri{7} và kết thúc ngay vòng lặp for {4} mà không cần đợi i giảm đến 1.
Trường hợp chuỗi s chỉ có một từ, không có khoảng trống (ví dụ: ‘Xuan’) thì
vòng lặp for sẽ kết thúc khi i giảm tới 1 và vị trí vẫn dữ nguyên giá trị 0 gán ở câu
lệnh{3}. Khi đó từ cuối bắt đầu bằng các ký tự (vitri+1) = 0+1=1 đến cuối chuỗi s.
{11} Vòng lặp for in các ký tự trong chuỗi s từ vị trí sau khoảng trống tìm được
(vitri+1) đến cuối chuỗi. Với length(s) trả về số ký tự thực có trong chuỗi s sau khi đã
cắt bỏ những khoảng trống ở cuối chuỗi.
Bài tập 3: Nhập 1 xâu St từ bàn phím (St<=80), đưa ra màn hình xâu đảo ngược của xâu
đó (viết theo chiều ngược lại).
VD: Input: ‘Hello’
Output: ‘olleH’
Giáo viên: Làm thế nào để chúng ta có thể viết ngược lại xâu nhập vào?
Học sinh: Trả lời
Giáo viên: Để duyệt lần lượt các kí tự trong xâu St từ 1 đến hết (phần tử cuối cùng có
chỉ số trùng với độ dài của xâu) ở các ví dụ và bài tập 1 chúng ta sử dụng vòng lặp biết
trước for i:=1 to length(st) do …Vậy nếu chúng ta sử dụng vòng lặp lùi for i:=length(s)
downto 1 do …thì có thể giải quyết được yêu cầu của bài toán không? Nếu được, em
nào có thể viết được chương trình?
Học sinh: Trả lời,
Giáo viên: Gọi học sinh lên bảng viết CT, sau đó nhận xét và chạy thử chương trình học
sinh viết, học sinh quan sát kết quả thực hiện chương trình trên màn hình máy chiếu.
Chương trình bài tập 3:
Chương trình bài tập 4:
Program baitap3;
Uses Crt;
Var St: String[25]; i:Byte;
Begin
Write(‘Nhap xau St: ‘); Readln(St);
Write(‘ket qua la: ‘);
For i:=1 to length(St) do writeln(St[i]:15);
Readln;
End.
Bài tập 5: Nhập 1 xâu St từ bàn phím (St<=25), đưa ra màn hình xâu st nhưng mỗi kí tự
viết trên 1 dòng ngược lại với xâu St
VD: Input: ‘Hello’
Output: o
l
l
e
H
Khi tôi nêu bài toán và hỏi học sinh: bạn nào xung phong lên bảng viết chương trình thì
đã có khá nhiều cách tay giơ lên.
Chương trình mà em học sinh đã sửa như sau:
Program baitap5;
Uses Crt;
Var St: String[25];
Giáo viên: giới thiệu cho học sinh về nhà tham khảo bài 19 “Thư viện chương trình con
chuẩn” – phần kiến thức giảm tải và nêu thêm 1 số yêu cầu coi như bài tập ở nhà.
Giáo viên: Vậy làm thế nào để chúng ta có thể tạo ra được các dòng chữ chạy trên các
biển hiệu quảng cáo, hoặc khi các em không sử dụng máy tính vài phút thì trên màn
hình hiện ra các dòng chữ chuyển động từ trái sang hoặc từ trên xuống, kiểu chữ, màu
chữ… trông rất đẹp.
Khi nêu bài tập 5, tôi đã đặt câu hỏi như trên sau đó tôi mới nêu bài toán:
Bài tập 6: Nhập 1 xâu từ bàn phím, đưa xâu đó ra giữa màn hình, chuyển động dần về
bên trái, các ký tự đầu xâu sẽ lần lượt mất đi nhưng lại xuất hiện lần lượt ở cuối xâu. Tô
màu cho xâu xuất hiện trên màn hình. Giáo viên: Chạy thử chương trình cho học sinh quan sát kết quả thực hiện, sau đó GV
hướng dẫn học sinh viết chương trình có sử dụng 2 thủ tục chữ chay và cắt dán ở bài tập
và thực hành số 6, giải thích các câu lệnh trong 2 thủ tục.
procedure catdan(s1:st79; var s2:st79);
begin
s2:=copy(s1,2,length(s1)-1)+s1[1];
end;
procedure cangiua(var s:st79);
var i,n:integer;
begin
n:=length(s);
n:=(80-n) div 2;
for i:=1 to n do s:=s+ ‘ ‘;
end;
Chương trình giải bài toán này như sau (giáo viên đã cài sẵn trên máy)
program chuchay;
uses Crt;
type st79=string[79];
end.
Bài tập 7: Viết chương trình nhập vào một chuỗi, đổi các ký tự chữ hoa trong chuỗi
thành ký tự chữ thường, và các ký tự chữ thường trong chuỗi thành ký tự hoa
Ví dụ: Nhập ‘tHAO 12a3’ đổi thành ‘Thảo 12A3’
Giáo viên đặt vấn đề: Ta biết ký tự ‘A’ có số thứ tự trong bảng mã ASCII bằng 65, ‘a’
bằng 97, nghĩa là ORD(‘A’)+32 = 65 + 32 = 97. Tương tự với các ký tự chữ cái còn lại.
- Nêu để đổi một ký tự chữ thường ra hoa ta dùng công thức ORD(kytu)-32.
- Nêu để đổi một ký tự chữ hoa ra thường ta dùng công thức ORD(kytu)+32.
Giáo viên gơi ý và yêu cầu học sinh thảo luận và viết chương trình.
Chương trình đổi chữ hoa ra chữ thường và ngược lại.
Program BT7;
Uses CRT;
Var s: String;
i: integer;
Begin
Clrscr;
Writeln(‘Chuong trinh doi chu hoa ra thuong va nguoc lai’);
Write (‘Nhap vao chuoi s=’);
Readln(s);
For i:= 1 to length(s) do
If(s[i]<=’Z’) and (s[i]>=’A’) then S[i]:= CHR(ord(s[i])+32);
Else
If(s[i]<=’z’) and (s[i]>=’a’) then
S[i]:= CHR(ord(s[i])-32);
Writeln(‘Chuoi da doi s=’,s);
Readln;
End. C. KẾT LUẬN
Trong quá trình trao đổi, thảo luận, trình bày học sinh được thể hiện khả năng
vận dụng, hiểu biết của mình nên các em tỏ ra hăng hái trong việc giơ tay phát biểu
tranh luận. Đồng thời tiết học trở nên sinh động hơn và giáo viên không đóng vai trò là
người xây dựng lý luận mà học sinh là người chủ động để giải quyết các vấn đề.
So sánh, đối chứng tỉ lệ % kết quả của học sinh trước và sau khi thực hiện đề tài
ta thấy rõ ràng kết quả của học sinh sau khi được học bằng giáo án điện tử trên máy
chiếu kết hợp mô phỏng trực quan, lấy dẫn chứng thực tế …cao hơn hẳn so với khi chưa
thực hiện đề tài.
Cụ thể kết quả thực tế đối với lớp 11a8 có 45 học sinh (với đề kiểm tra giống lớp
11A3 ở trên) sau khi thực hiện đề tài như sau:
Điểm Số học sinh Tỉ lệ
3 0 0%
4 0 0%
5 7 15,56%
6 10 33,33%
7 15 40%
8 5 11,11%
9 5 11,11%
10 3 6,67%
Ngôn ngữ lập trình nói chung đóng vai trò rất quan trọng trong việc xây dựng các
chương trình ứng dụng để phục vụ cho cuộc sống. Nhờ sự phát triển của tin học trong đó các nhà lập trình chuyên nghiệp đóng vai trò không nhỏ mà hiện nay hầu hết các lĩnh
E. TÀI LIỆU THAM KHẢO
1.Sách giáo khoa tin học 11 Hồ Sĩ Đàm chủ biên
2. Sách giáo viên tin học 11 Hồ Sĩ Đàm chủ biên
3. Lý thuyết và Bài tập lập trình Pascal 5.5-6.0 Nguyễn Thị Kiều Duyên
4. Lý thuyết và bài tập Pascal Hạnh Nguyên.
5. Một số sáng kiến kinh nghiệm và ý kiến của đồng nghiệp.
6. Một số bài tập tham khảo trên Internet.