SỞ GIÁO DỤC VÀ ĐÀO TẠO THANH HOÁ
TRƯỜNG THPT HẬU LỘC I
SÁNG KIẾN KINH NGHIỆM
MỘT SỐ KINH NGHIỆM ĐỂ NÂNG CAO CHẤT LƯỢNG
HỌC TIN HỌC CHO HỌC SINH YẾU KÉM LỚP 11
KHI HỌC CHƯƠNG IV-KIỂU DỮ LIỆU CÓ CẤU TRÚC
Người thực hiện: Nguyễn Thị Ninh Giang
Chức vụ:
Giáo viên
Đơn vị công tác: Trường THPT Hậu Lộc I
SKKN thuộc lĩnh mực: Tin học
THANH HOÁ NĂM 2016
1
MỤC LỤC
Trang
PHẦN I: MỞ ĐẦU ………………………………………………………... 4
I. LÝ DO CHỌN ĐỀ TÀI ……………………………………………..... 4
II. MỤC ĐÍCH NGHIÊN CỨU ………………………………………… 4
III. ĐỐI TƯỢNG NGHIÊN CỨU ……………………………………… 4
IV. PHƯƠNG PHÁP NGHIÊN CỨU …………………………………… 4
PHẦN II: NỘI DUNG SÁNG KIẾN KINH NGHIỆM …………………. 5
I. CƠ SỞ LÝ LUẬN CỦA SÁNG KIẾN KINH NGHIỆM ……………... 5
II. THỰC TRẠNG CỦA VẤN ĐỀ ……………………………………… 5
III. CÁC GIẢI PHÁP ĐÃ SỬ DỤNG ĐỂ GIẢI QUYẾT VẤN ĐỀ ……. 6
1. GIẢI PHÁP ĐỐI VỚI BÀI 11- KIỂU MẢNG …………………….. 6
2. GIẢI PHÁP ĐỐI VỚI BÀI 12- KIỂU XÂU ……………………….. 12
IV. HIỆU QUẢ CỦA SÁNG KIẾN KINH NGHIỆM VỚI HĐGD ………18
PHẦN III: KẾT LUẬN VÀ KIẾN NGHỊ …………………………………21
TÀI LIỆU THAM KHẢO …………………………………………………….22
2
DANH MỤC CÁC KÝ HIỆU VIẾT TẮT SỬ DỤNG TRONG SÁNG KIẾN KINH NGHIỆM
STT
1
2
3
4
5
6
7
Tên viết tắt
THPT
SGK
GV
HS
HSG
SKKN
NXB
Giải thích
Trung học phổ thông
Sách giáo khoa
Giáo viên
Học sinh
Học sinh giỏi
Sáng kiến kinh nghiệm
Nhà xuất bản
3
PHẦN I. MỞ ĐẦU
I. LÝ DO CHỌN ĐỀ TÀI
Trong chương trình dạy Tin học ở bậc THPT, có thể nói chương trình Tin
Học lớp 11 là khó hơn cả. Khó ở chỗ các em không phải học thao tác trên một số
phần mềm ứng dụng có sẵn mà các em phải học để hiểu một ngôn ngữ lập trình
bậc cao ( PASCAL) để từ đó có thể lựa chọn hoặc thiết kế thuật toán và viết được
chương trình hoàn chỉnh để thực hiện được thuật toán giải quyết được lớp bài toán
cụ thể. Đó quả là công việc khó đối với đa số học sinh khối 11 và đặc biệt khó đối
với học sinh yếu kém. Khi các em không hiểu sẽ dẫn đến thái độ học tập của các
em buồn chán, thờ ơ, thụ động … và điều đó sẽ ảnh hưởng rất lớn đến kết quả của
quá trình dạy học.
Bản thân tôi đã băn khoăn, trăn trở làm thế nào để nâng cao được chất lượng
cho đối tượng là học sinh yếu kém để từ đó phát triển được động cơ học tập và gây
được hứng thú học môn Tin học của tất cả các em khi học lập trình trong chương
trình Tin học 11.
Xuất phát từ thực tế đó và qua nhiều năm trực tiếp giảng dạy Tin Học cho
khối 11, trong khuôn khổ sáng kiến kinh nghiệm của mình tôi xin trình bày “Một số
kinh nghiệm để nâng cao chất lượng học Tin Học cho học sinh yếu kém lớp 11 khi
học chương IV- Kiểu dữ liệu có cấu trúc”.
II. MỤC ĐÍCH NGHIÊN CỨU
- Tìm ra giải pháp nâng cao chất lượng học bộ môn Tin học 11 cho học sinh yếu
kém khi học chương IV.
III. ĐỐI TƯỢNG NGHIÊN CỨU
- Học sinh yếu kém lớp 11 qua các năm.
- Nghiên cứu chương IV- Kiểu dữ liệu có cấu trúc.
IV. PHƯƠNG PHÁP NGHIÊN CỨU.
- Phương pháp điều tra, quan sát.
- Phương pháp tổng kết kinh nghiệm.
- Phương pháp thực nghiệm sư phạm.
- Phương pháp dùng phương tiện trực quan.
- Phương pháp rèn luyện tư duy theo lối mòn.
- Phương pháp gợi mở vấn đề.
4
PHẦN II: NỘI DUNG SÁNG KIẾN KINH NGHIỆM
I. CƠ SỞ LÝ LUẬN CỦA SÁNG KIẾN KINH NGHIỆM
- Kiểu dữ liệu có cấu trúc giúp người lập trình thể hiện ( mô phỏng ) được dữ
liệu thực tế. Từ đó, có khả năng giải quyết được những bài toán đặt ra trên thực tế.
- Mỗi kiểu dữ liệu có cấu trúc được xây dựng từ những kiểu dữ liệu cơ sở theo
một số cách thức tạo kiểu do ngôn ngữ lập trình quy định.
- Mỗi kiểu dữ liệu có cấu trúc thường hữu ích trong việc giải quyết một số bài
toán thường gặp.
- Trong ngôn ngữ lập trình Pascal, dùng mô tả kiểu dữ liệu mới với từ khóa
Type có thể tránh được sự lặp lại khi mô tả trực tiếp kiểu dữ liệu mới với từ khóa
Var ( cho nhiều biến cùng kiểu này).
- Đối với mỗi kiểu dữ liệu có cấu trúc, học sinh phải biết cách khai báo, biết
thao tác trên từng thành phần cơ sở, sử dụng các phép toán trên các thành phần cơ
sở tùy theo kiểu của thành phần cơ sở, điều này khác biệt với các kiểu dữ liệu đơn
giản.
II. THỰC TRẠNG CỦA VẤN ĐỀ
Chương IV- Kiểu dữ liệu có cấu trúc là một chương quan trọng trong chương
trình Tin Học 11. Trong chương này sau giảm tải các em học sinh khối 11 sẽ được
học hai bài là: Bài 11- Kiểu Mảng và Bài 12 – Kiểu Xâu.
Để viết được chương trình có sử dụng hai kiểu dữ liệu này quả thật là khó khăn đối
với đối tượng học sinh yếu kém. Phần lớn các bài tập hay trên thực tế đều sử dụng
các kiểu dữ liệu này. Tuy nhiên, các em chưa nắm được cách khai báo, cách nhập
dữ liệu, cách truy cập đến từng phần tử cũng như là các thao tác tính toán của các
kiểu dữ liệu này nên việc viết chương trình tỷ lệ thành công chưa cao dẫn đến các
em dễ chán nản và không mấy hứng thú với môn học. Từ chỗ đó các em ngồi học
không tập trung, nói chuyện, làm việc riêng … để giáo viên phải nhắc nhở nhiều
dẫn đến ảnh hưởng cả một tập thể.
Qua điều tra, quan sát, tổng kết kinh nghiệm tôi nhận thấy nguyên nhân sâu
xa của thực trạng trên là các em học sinh yếu kém chưa tự xác định được kiểu dữ
liệu thích hợp khi viết chương trình giải quyết bài toán là gì, chưa nhớ chính xác
được các từ khóa, cách khai báo cho các kiểu dữ liệu, cú pháp của các câu lệnh…
( sử dụng ngôn ngữ Tiếng Anh), chưa nắm được cách truy cập đến từng phần tử của
mỗi kiểu dữ liệu, chưa nhớ chính xác được các phép toán, các hàm, thủ tục khi làm
việc với kiểu dữ liệu này…
Mặt khác, do đặc điểm tâm lý của học sinh yếu kém là thường tự ti, mặc
cảm, không tin tưởng vào khả năng của bản thân mình.
Bên cạnh đó, việc dành thời gian quan tâm, hướng dẫn chi li, chi tiết của
giáo viên chưa nhiều cho đối tượng học sinh này.
5
III. CÁC GIẢI PHÁP ĐÃ SỬ DỤNG ĐỂ GIẢI QUYẾT VẤN ĐỀ
Để nâng cao chất lượng học Tin học cho học sinh yếu kém tôi xin đưa ra các
giải pháp và cách thực hiện như sau:
1. ĐỐI VỚI BÀI HỌC: §11- KIỂU MẢNG
Tôi tiến hành qua các bước sau:
Bước 1: Giới thiệu và yêu cầu học sinh phải hiểu khái niệm mảng một chiều là dãy
hữu hạn các phần tử cùng kiểu. Mảng được đặt tên và mỗi phần tử của nó có một
chỉ số. Để mô tả mảng một chiều cần xác định kiểu của các phần tử và cách đánh số
các phần tử của mảng cũng như cách tham chiếu tới phần tử của mảng… Yêu cầu
các em phải học thuộc các từ khóa, các tên chuẩn, các hàm, thủ tục, các câu lệnh đã
được học của Ngôn ngữ lập trình Pascal.
Bước 2: Sau khi giới thiệu và cho học sinh đầy đủ các khái niệm đề ra của đơn vị
bài học, tôi tiến hành lấy ví dụ rất nôm na để minh họa cho khái niệm mảng một
chiều. Giúp các em khắc sâu và có cái nhìn trực quan, sinh động nhất về kiểu dữ
liệu này.
Ví dụ: Dãy phòng học 1 tầng gồm 5 phòng học. Có thể coi là 1 mảng một chiều
A
1
2
3
4
5
Nhìn vào dãy phòng minh họa trên tôi sẽ đặt câu hỏi cho HS :
- Dãy phòng được đặt tên là gì ?
- Kiểu của các phòng ?
- Cách đánh số phòng ?
- Cách gọi tên phòng ?
Lúc đó, đa số các em sẽ trả lời được
- Dãy phòng tên là A.
- Kiểu của các phòng đều là phòng học ( giải thích thêm cho HS hiểu
nghĩa là cùng cấu trúc).
- Cách đánh số phòng từ 1, 2, 3, 4, 5.
- Cách gọi tên phòng là tên của dãy[chỉ số]. Ví dụ: A[2].
Đến đây , tôi nhấn mạnh đây cũng chính là cách tham chiếu tới phần tử của mảng.
Bước 3: Tôi tiến hành cho học sinh nghiên cứu ví dụ bài toán nhiệt độ trong SGK
và đặt ra hệ thống câu hỏi cho các em suy nghĩ trả lời.
Chương trình như sau:
Program Nhietdo_tuan;
Var t1, t2, t3, t4, t5, t6, t7, tb: Real;
Dem: integer;
Begin
Write(‘ Nhap vao nhiet do cua 7 ngay : ’);
Readln(t1,t2,t3,t4,t5,t6,t7);
Tb:= (t1+t2+t3+t4+t5+t6+ t7);
6
Dem:= 0;
If t1> tb dem := dem +1;
If t2> tb dem := dem +1;
If t3> tb dem := dem +1;
If t4> tb dem := dem +1;
If t5> tb dem := dem +1;
If t6> tb dem := dem +1;
If t7> tb dem := dem +1;
Writeln( ‘Nhiet do trung binh cua tuan: ’,tb:8:2);
Writeln(‘ So ngay nhiet do cao hon nhiet do trung bình la ;
’,dem);
Readln
End.
Hệ thống câu hỏi tôi đưa ra là:
- Em nhận thấy gì ở phần khai báo biến?
- Nhận xét về các biến t1, t2, t3, t4, t5, t6, t7 ?
- So sánh các câu lệnh IF .. THEN trong chương trình ?
- Nếu bài toán là nhiệt độ của cả năm thì điều phiền phức nào sẽ xảy ra?
Cùng với các câu hỏi gợi mở cùa mình tôi hướng cho học sinh có thể trả lời các câu
hỏi và nếu là bài toán là nhiệt độ của cả năm thì phải khai báo hơn 365 biến để cho
nhiệt độ của từng ngày và 365 câu lệnh IF .. THEN để so sánh với nhiệt độ trung
bình của năm. Điều này tốn nhiều bộ nhớ cho các biến và mất nhiều thời gian để
khai báo nhiều biến giống nhau chỉ khác mỗi chỉ số, lặp đi lặp lại câu lệnh IF…
THEN gần như giống nhau chỉ khác mỗi tên biến chứa nhiệt độ của từng ngày.
Nhấn mạnh thêm , các biến t1, t3, …, t7,… đều là các biến nhiệt độ của ngày chỉ
khác mỗi số ngày ( cụ thể ở đây ngày được kí hiệu từ 1, 2, …,7, … ). Nói cách
khác, về cấu trúc các biến này giống nhau. Tại sao chúng ta không sử dụng mảng
một chiều? Vì đây gồm nhiều phần tử cùng kiểu.
Bước 4: Đến lúc này tôi giới thiệu 2 cách khai báo mảng một chiều đến các học
sinh và yêu cầu các em học thuộc các cách khai báo.
Cách 1: Khai báo trực tiếp biến mảng một chiều.
Var <tên biến mảng > : array[kiểu chỉ số] of <kiểu phần tử >;
Cách 2: Khai báo gián tiếp biến mảng qua kiểu mảng một chiều.
Type <tên kiểu mảng > = array[kiểu chỉ số] of kiểu phần tử;
Var <tên biến mảng> : <tên kiểu mảng>;
Bước 5: Vì đối tượng là học sinh yếu kém nên tôi tiến hành lấy các ví dụ rất cơ
bản, tôi trực tiếp thực hiện trên máy chiếu, giải thích cặn kẽ từng câu lệnh và chạy
chương trình cho các em xem kết quả.
Ví dụ 1: Viết chương trình nhập từ bàn phím một mảng một chiều không quá 10 số
nguyên. Đưa ra màn hình các phần tử của mảng vừa nhập.
Chương trình như sau:
7
Program Vd1;
Uses crt;
Var a: array[1..10] of integer;
n, i : byte;
Begin
Write(‘Nhập số phần tử của mảng ’);
Readln(n);
For i:= 1 to n do
Begin
Writeln(‘ Nhập phần tử thứ ‘,i,’ = ’ );
Readln(a[i]);
End;
For i:= 1 to n do Writeln(a[i]);
Readln;
End.
Ví dụ 2: Viết chương trình nhập từ bàn phím dãy các số thực không quá 50 phần
tử. Đưa ra màn hình dãy số vừa nhập.
Chương trình như sau:
Program Vd2;
Uses crt;
Var a: array[1..50] of real;
n, i : byte;
Begin
Write(‘Nhập số phần tử của mảng ’);
Readln(n);
For i:= 1 to n do
Begin
Writeln(‘ Nhập phần tử thứ ‘,i,’ = ’ );
Readln(a[i]);
End;
For i:= 1 to n do Writeln(a[i]: 6:1);
Readln;
End.
Ví dụ 3: Sử dụng kiểu mảng một chiều để giải bài toán nhiệt độ ban đầu với N ngày
( N khá lớn ).
- Tôi yêu cầu các em nghiên cứu SGK cùng hiểu chương trình. Tôi gõ, giải thích
từng câu lệnh và thực hiện trên máy chiếu để các em quan sát khi chạy chương
trình.
- Từ đó tôi chỉ ra để các em phải nhận thấy được đối với bài toán này sử dụng kiểu
mảng một chiều để làm việc là tối ưu hơn cách làm cũ. Số biến khai báo chứa nhiệt
8
độ cho từng ngày chỉ còn 1 biến mảng Nhietdo và chỉ còn lại 1 câu lệnh IF .. THEN
để so sánh nhiệt độ từng ngày với nhiệt độ trung bình. Vì vậy chương trình trở nên
ngắn gọn, dễ đọc, dễ hiểu và tiết kiệm được thời gian viết chương trình hơn.
Chương trình như sau:
Program VD3;
Uses crt;
Var Nhietdo: array[1..366] of Real;
Dem, i, n: integer;
Tong, tb: real;
Begin
Write(‘Nhap so ngay ’);
Readln(N);
Tong:= 0;
For i:= 1 to N do
Begin
Write(‘ Nhap nhiet do ngay ’, i ,’ = ’);
Readln(Nhietdo[i]);
Tong:= tong + Nhietdo[i];
End;
Dem:=0;
Tb:=tong/n;
For i:= 1 to N do
If Nhietdo[i] > tb then dem:= dem+1;
Writeln( ‘ Nhiet do trung binh ‘,N, ‘ ngay: ’, tb: 8:2);
Writeln( ‘ So ngay nhiet do cao hon trung binh: ’, dem );
Readln
End.
Sau 3 ví dụ trên, tôi đưa ra so sánh đề bài và cách khai báo của 3 ví dụ.
- Ở vd 1, mảng không quá 10 phần tử kiểu nguyên nên khi khai báo biến mảng thì
kiểu chỉ số là [1..10], kiểu phần tử là kiểu số nguyên Integer;
- Ở vd 2, dãy số không quá 50 phần tử kiểu thực nên khi khai báo biến mảng thì
kiểu chỉ số là [1..50], kiểu phần tử là kiểu số thực Real;
- Ở vd 3, mảng chứa nhiệt độ các ngày trong năm nên kiểu chỉ số [1..366], kiểu
phần tử là kiểu số thực Real.
Nhấn mạnh:
+ Tùy theo đề bài cho mà các em lựa chọn, kiểu dữ liệu, kiểu chỉ số cho phù hợp và
tối ưu.
+ Trong chương trình có sử dụng biến kiểu mảng thường chứa câu lệnh lặp với số
lần biết trước FOR .. DO để duyệt các phần tử của mảng. Với số lần biết trước là số
phần tử của mảng ( thường được nhập từ bàn phím).
9
+ Qua ba ví dụ tôi làm trên máy chiếu, nhấn mạnh với các em là ví dụ 1 và ví dụ 2
chính là chương trình cơ bản nhất để nhập mảng một chiều với N phần tử , N được
nhập từ bàn phím.
+ Tôi bắt buộc các em phải học thuộc ví dụ này vì nhập mảng là 1 công đoạn đầu
tiên trước khi thực hiện các thao tác khác khi làm việc với kiểu mảng một chiều.
+ Sau khi nhập mảng một chiều xong, tùy theo yêu cầu của bài toán đề ra mà ta có
những câu lệnh thể hiện các thao tác tiếp theo. Đây chính là cách rèn luyện tư duy
theo lối mòn cho nhóm đối tượng học sinh này.
Bước 6: Tôi ra một số bài tập cho học sinh áp dụng với mức độ nhẹ nhàng hơn
SGK và tăng dần độ khó lên để các em có thể tự làm được. Từ đó các em thấy hứng
thú, tích cực học tập bộ môn hơn.
Hệ thống bài tập áp dụng tôi đưa ra cho đối tượng học sinh này là:
Bài tập 1: Nhập một mảng một chiều gồm N số nguyên (N<=100). Đưa ra màn
hình các số hạng là số chẵn.
Bài tập 2: Nhập một dãy số nguyên không quá 50 phần tử. Đưa ra vị trí mà tại đó
có số hạng chia hết cho 5.
Bài tập 3: Nhập một dãy số thực không quá 200 phần tử. Đếm xem dãy số vừa
nhập có bao nhiêu số âm.
- Sau khi đưa ra đề bài, tôi sẽ chia nhóm theo khả năng của các em để làm
việc theo nhóm. Các nhóm sẽ thảo luận, làm việc và hoàn thành cả 3 bài tập trên.
Tôi yêu cầu tất cả các thành viên trong nhóm đều phải tích cực làm việc, cùng nhau
xây dựng chương trình và mọi thành viên trong nhóm đều phải được hiểu bài làm.
Sau đó, mời đại diện các nhóm lần lượt lên trình bày trực tiếp trên máy chiếu. Tôi
sẽ cho điểm để động viên khích lệ để các em ngày càng tự tin vào khả năng của
mình, tôi tiến hành chỉnh sửa các lỗi có trong bài làm, hoàn thiện chương trình
cho các em.
- Sau đó, cho tất cả các em thực hành trực tiếp trên máy để Test trên nhiều bộ
Input khác nhau.
Chương trình hoàn chỉnh của các bài tập trên như sau:
Bài tập 1:
Program Bt1;
Uses crt;
Var a: array[1..100] of Integer;
N, i : byte;
Begin
Writeln(‘ Nhap so phan tu cua mang : ’);
Readln(N);
For i:= 1 to N do
Begin
Write(‘ Phan tu thu ’, i , ‘ = ’);
Readln(a[i]);
10
End;
For i:= 1 to N do
If (a[i] mod 2 ) = 0 then Write(a[i]: 6);
Readln;
End.
Bài tập 2:
Program Bt2;
Uses crt;
Var a: array[1..50] of Integer;
N, i : byte;
Begin
Writeln(‘ Nhap so phan tu cua day : ’);
Readln(N);
For i:= 1 to N do
Begin
Write(‘ Phan tu thu ’, i , ‘ = ’);
Readln(a[i]);
End;
For i:= 1 to N do
If (a[i] mod 5 ) = 0 then
Writeln(‘ Tại vị trí ’, i , ‘ có so hang chia het cho 5
’ );
Readln;
End.
Bài tập 3:
Program Bt3;
Uses crt;
Var a: array[1..200] of Real;
N, i, dem : byte;
Begin
Writeln(‘ Nhap so phan tu cua day : ’);
Readln(N);
For i:= 1 to N do
Begin
Write(‘ Phan tu thu ’, i , ‘ = ’);
Readln(a[i]);
End;
Dem:=0;
For i:= 1 to N do
If (a[i] < 0 ) then dem := dem +1;
11
Write(‘ Day so co ‘, dem , ‘ so hang co gia tri am ’);
Readln;
End.
Bước 7: Tôi yêu cầu các em nghiên cứu trước để hiểu ít nhiều về các chương trình
của các ví dụ có mức độ khó hơn trong SGK đã đưa ra. Chỗ nào không hiểu yêu
cầu các em gạch chân để cô giải thích. Sau cùng tôi giải thích chi tiết từng câu lệnh
một và chạy chương trình để minh họa để các em hiểu rõ hơn.
2. ĐỐI VỚI BÀI HỌC: §12- KIỂU XÂU
Tôi tiến hành qua các bước sau:
Bước 1: Giới thiệu và yêu cầu học sinh phải hiểu được xâu là dãy các kí tự trong
bộ mã ASCII. Mỗi kí tự trong xâu được gọi là một phần tử của xâu.Số lượng kí tự
trong xâu được gọi là độ dài xâu. Các kí tự của xâu được đánh số thứ tự, thường bắt
đầu từ 1. Tham chiếu đến phần tử của xâu được xác định bởi tên biến xâu và chỉ số
đặt trong cặp dấu [ ].
Yêu cầu các em phải học thuộc các từ khóa, các tên chuẩn, các hàm, thủ tục, các
câu lệnh liên quan đã được học của Ngôn ngữ lập trình Pascal.
Bước 2: Sau khi giới thiệu và cho học sinh đầy đủ các khái niệm đề ra của đơn vị
bài học, tôi tiến hành lấy ví dụ để minh họa cho khái niệm kiểu xâu. Giúp các em
khắc sâu và có cái nhìn trực quan, sinh động nhất về kiểu dữ liệu này.
Có thể xem xâu là mảng một chiều mà mỗi phần tử là một kí tự
Ví dụ minh họa kiểu xâu như hình vẽ sau:
S
T
I
N
H
O
C
1
2
3
4
5
6
7
Nhìn vào hình trên trên các em dễ dàng thấy kiểu xâu giống kiểu mảng một chiều,
chỉ khác là mỗi phần tử của xâu là 1 kí tự.
- Cách gọi tên phòng là tên của dãy[chỉ số]. Ví dụ: A[2].
Đến đây , tôi nhấn mạnh đây cũng chính là cách tham chiếu tới phần tử của mảng.
Bước 3:
- Tôi giới thiệu cách khai báo dữ liệu kiểu xâu và yêu cầu các em học thuộc các
cách khai báo. Cụ thể như sau:
Var <tên biến xâu > : string[độ dài lớn nhất của xâu];
Trong đó: String là tên dành riêng để khai báo dữ liệu kiểu xâu.
Độ dài lớn nhất của xâu không vượt quá 255.
Ví dụ: Var s: string[8];
- Giới thiệu và lấy ví dụ minh họa giải thích cho từng thao tác xử lí xâu mà SGK
đưa ra. Rồi hướng dẫn cho các em tự đưa ra kết quả.
12
+ Phép ghép xâu, kí hiệu là dấu (+), được sử dụng để ghép nhiều xâu thành một.
VD: ‘ Tin ’ + ‘ Hoc’ cho ra kết quả là ‘Tin Hoc’
+ Các phép so sánh =, >, <, <=, >= , <> có thứ tự ưu tiên thực hiện thấp hơn phép
ghép xâu và thực hiện việc so sánh hai xâu theo quy tắc sau:
Xâu A là lớn hơn xâu B nếu như kí tự đầu tiên khác nhau giữa chúng kể từ
trái sang trong xâu A có mã ASCII lớn hơn.
Nếu A và B là các xâu có độ dài khác nhau và A là đoạn đầu của B thì A là
nhỏ hơn B
VD: ‘ Tin Hoc 11’ > ‘Tin Hoc’
‘HOA HONG’ < ‘HOA MAI’
+ Thủ tục Delete(st,vt,n) thực hiện việc xóa n kí tự của biến xâu st bắt đầu từ vị trí
vt. VD: Delete(‘Tin hoc’,5,3) thì cho ra kết quả là ‘Tin’.
+Thủ tục Insert(s1,s2,vt) chèn xâu s1 vào xâu s2, bắt đầu từ vị trí vt.
VD: Insert(‘11’,’Tin Hoc ’,8) thì cho ra kết quả là ‘Tin Hoc 11’
+ Hàm Copy(s, vt, n ) : tạo xâu gồm n kí tự liên tiếp bắt đầu từ vị trí vt của xâu s.
VD: Copy(‘Tin Hoc’,5,3): cho ra kết quả là ‘Hoc’.
+ Hàm length(s) cho ra giá trị là độ dài xâu s.
VD: length(‘Tin Hoc’) cho ra kết quả là 7.
+ Hàm Pos(s1,s2) cho ra vị trí xuất hiện đầu tiên của xâu s1 trong xâu s2.
VD: Pos(‘hoc’,’Tin hoc’) có giá trị là 5.
+ Hàm Upcase(ch) cho ra chữ cái in hoa ứng với chữ cái trong ch.
VD: Upcase(‘a’) cho ra giá trị là ‘A’.
Bước 4: Vì đối tượng là học sinh yếu kém nên GV phải kiên nhẫn giảng giải từng
ví dụ. Đối với bài này, các ví dụ trong SGK đưa ra cơ bản. Tôi trực tiếp thực hiện
trên máy chiếu, giải thích cặn kẽ từng câu lệnh và chạy chương trình cho các em
xem kết quả.
Ví dụ 1: Viết chương trình nhập họ tên của hai người vào hai biến xâu và đưa ra
màn hình xâu dài hơn, nếu bằng nhau thì đưa ra xâu nhập sau.
Chương trình như sau:
Program Vd1;
Uses crt;
Var a, b: string;
Begin
Write(‘Nhap ho ten thu nhat: ’); Readln(a);
Write(‘Nhap ho ten thu hai: ’); Readln(b);
If length(a) > length(b) then Write(a) else write(b);
Readln;
End.
13
Ví dụ 2: Viết chương trình nhập hai xâu từ bàn phím và kiểm tra kí tự đầu tiên của
xâu thứ nhất có trùng với kí tự cuối cùng của xâu thứ hai không.
Chương trình như sau:
Program Vd2;
Uses crt;
Var x: byte;
a, b : string;
Begin
Write(‘Nhap xau thu nhat: ’);
Readln(a);
Write(‘Nhap xau thu hai: ’);
Readln(b);
X:= length(b);
If a[1] = b[x] then write(‘ Trung nhau ’)
Else write( ‘ Khac nhau ’);
Readln.
End.
Ví dụ 3: Viết chương trình nhập một xâu vào từ bàn phím và đưa ra màn hình xâu
đó nhưng được viết theo thứ tự ngược lại .
Chương trình như sau:
Program VD3;
Uses crt;
Var i, k: byte;
a: string ;
Begin
Write(‘Nhap xau: ’);
Readln(a);
K:= length(a);
For i:= k downto 1 do write(a[i]);
Readln;
End.
Ví dụ 4: Viết chương trình nhập một xâu vào từ bàn phím và đưa ra màn hình xâu
thu được từ nó sau khi loại bỏ các dấu cách nếu có.
Chương trình như sau:
Program VD4;
Uses crt;
Var i, k: byte;
a, b: string ;
Begin
Write(‘Nhap xau: ’);
14
Readln(a);
K:= length(a);
b:= ‘’;
For i:= 1 to k do
If a[i]<> ‘ ’ then b:= b+a[i];
Writeln(‘ Ket qua : ’, b);
Readln;
End.
Ví dụ 5: Viết chương trình nhập vào từ bàn phím xâu kí tự s1, tạo xâu s2 gồm tất
cả các chữ số có trong s1 ( giữ nguyên thứ tự xuất hiện của chúng ) và đưa kết quả
ra màn hình.
Chương trình như sau:
Program VD4;
Uses crt;
Var i, k: byte;
S1, s2b: string ;
Begin
Write(‘Nhap xau s1 : ’);
Readln(s1);
K:= length(s1);
S2:= ‘’;
For i:= 1 to k do
If (‘0’ <=s1[i]) and (s1[i]<= ‘9’) then s2:= s2+s1[i];
Writeln(‘ Ket qua : ’, s2);
Readln;
End.
Bước 5: Tôi ra hệ thống một số bài tập từ đơn giản rồi tăng dần độ khó cho các em
làm. Đề bài các bài tập như sau:
Bài tập 1: Viết chương trình nhập 2 xâu s1 và s2 từ bàn phím. Đưa ra màn hình kết
quả xâu được ghép bởi xâu s1 và xâu s2.
Bài tập 2: Viết chương trình nhập từ bàn phím một xâu kí tự S. Đếm xem có bao
nhiêu kí tự ‘h’ xuất hiện trong xâu.
Bài tập 3: Viết chương trình nhập từ bàn phím một xâu kí tự S. Xóa kí tự đầu tiên
và kí tự cuối cùng của xâu S.
Bài tập 4: Viết chương trình nhập từ bàn phím một xâu kí tự S. Kiểm tra xem xâu
đó có phải là xâu đối xứng hay không. Xâu đối xứng có tính chất: đọc nó từ phải
sang trái cũng thu được kết quả giống như đọc từ trái sang phải.
15
Bài tập 5: Viết chương trình nhập từ bàn phím hai xâu kí tự. Tìm xem xâu thứ nhất
xuất hiện bao nhiêu lần trong xâu thứ hai.
- Sau khi đưa ra đề bài, tôi sẽ chia nhóm theo khả năng của các em để làm
việc theo nhóm. Các nhóm sẽ thảo luận, làm việc và hoàn thành cả 5 bài tập trên.
Tôi yêu cầu tất cả các thành viên trong nhóm đều phải tích cực làm việc, cùng nhau
xây dựng chương trình và mọi thành viên trong nhóm đều phải được hiểu bài làm.
Sau đó, mời đại diện các nhóm lần lượt lên trình bày trực tiếp trên máy chiếu. Tôi
sẽ cho điểm để động viên khích lệ để các em ngày càng tự tin vào khả năng của
mình, tôi tiến hành chỉnh sửa các lỗi có trong bài làm, hoàn thiện chương trình
cho các em.
- Tiếp theo, tôi cho tất cả các em thực hành trực tiếp trên máy để Test trên
nhiều bộ Input khác nhau.
- Riêng đối với Bài tập 5 mức độ khó hơn cả nên tôi hướng dẫn và giải thích
thuật giải kĩ càng hơn. Cụ thể:
Thuật giải:
- Bắt đầu
- Nhập vào 2 xâu s1, s2 từ bàn phím.
- Khởi động solan = 0.
- Vòng lặp For với biến i chạy từ 1 đến length(s2) trong đó nếu s1=
copy(s2,i, length(s1)) thì solan:= solan +1
- In kết quả là giá trị của solan ra màn hình.
Chương trình hoàn chỉnh của 5 bài tập trên như sau:
Bài tập 1:
Program Bt1;
Uses crt;
Var s1, s2, s3: string ;
Begin
Writeln(‘ Nhập xâu s1: ’);
Readln(s1);
Writeln(‘ Nhập xâu s2: ’);
Readln(s2);
S3:= s1 + s2;
Write(‘ Xau ’, s1, ‘ghep vơi xau ’, s2 , ‘ được xau ’,s3 );
Readln
End.
Bài tập 2:
Program Bt2;
Uses crt;
Var s: string[50];
16
k, i, dem : byte;
Begin
Writeln(‘ Nhap vao xau : ’);
Readln(s);
Dem := 0;
K:= length(s);
For i:= 1 to k do
If s[i] = ‘h’ then dem := dem +1;
Writeln(‘ So ki tu h co trong xau la : ‘, dem);
Readln;
End.
Bài tập 3:
Program Bt3;
Uses crt;
Var s: string;
k, i : byte;
Begin
Writeln(‘ Nhap vao xau : ’);
Readln(s);
K:= length(s);
Delete(s,1,1);
Delete(s, k,1);
Write(‘Xau sau khi xoa ki tu dau tien và ki tu cuoi cung cua xau
la ’, s );
Readln
End.
Bài tập 4:
Program Bt4;
Uses crt;
Var a,p: string;
x, i : byte;
Begin
Writeln(‘ Nhap vao xau : ’);
Readln(a);
x:= length(a);
p:=’’;
for i:= x downto 1 do
p:= p+a[i];
If a= p then Write(‘ Xau la xau doi xung ’ )
Else Write(‘Xau khong la xau doi xung ’;
17
Readln;
End.
Bài tập 5:
Program Bt5;
Uses crt;
Var s1, s2: string;
i, solan: integer;
Begin
Write(‘ Nhap xau thu nhat : ’);
Readln(s1);
Write(‘ Nhap xau thu hai : ’);
Readln(s2);
Solan:= 0;
For i:= 1 to length(s2) do
If s1= copy(s2,i,length(s1)) then
Solan:= solan +1;
Write(‘So lan = ’, solan);
Readln;
End.
Bước 6: Cuối cùng tôi giao nhiệm vụ cho các em là phải học và làm được các ví
dụ và bài tập nêu trên. Tôi sẽ kiểm tra từng em trong nhóm học yếu kém này để kịp
thời bổ sung, lấp chỗ hổng kiến thức cho các em.
IV. HIỆU QUẢ CỦA SÁNG KIẾN KINH NGHIỆM ĐỐI VỚI HOẠT ĐỘNG
GIÁO DỤC.
Trước khi thực hiện những ý tưởng trên, bản thân tôi mặc dù đã trải qua
nhiều năm dạy Tin học vẫn còn cảm thấy băn khoăn khi chưa làm được gì nhiều để
nâng cao chất lượng và phát huy tính tích cực cho đối tượng học sinh yếu kém khi
học lập trình ở chương IV này. Dù giảng nhiều nhưng đối tượng học sinh này vẫn
khó hiểu, dễ quên. Trong giờ học, các em chỉ thụ động ghi chép.
Những năm gần đây, bản thân tôi đã trăn trở làm thế nào nâng cao chất lượng
học Tin học cho nhóm đối tượng học sinh này, giúp hoạt động dạy học cho tập thể
các đối tượng học sinh trong cả lớp được thành công.
Từ năm học 2013 – 2014 đến nay, áp dụng sáng kiến trên, bản thân tôi đã
giúp được các em học sinh yếu kém tiếp thu các kiến thức cơ bản, hiểu được các
bài tập mà giáo viên lấy ví dụ minh họa và tự làm được các bài tập áp dụng mà giáo
viên yêu cầu. Đa số các em không còn cảm thấy thờ ơ, chán nản và thụ động khi
học các giờ Tin học.
Kết quả bộ môn Tin học 11 của học sinh yếu kém ở các lớp mà tôi trực tiếp
giảng dạy từ các năm học 2013 – 2014, 2014 – 2015, 2015 – 2016 đã đạt được hiệu
18
quả rõ rệt. Từ đó kéo cả chất lượng của cả khối 11 lên theo. Đây là một tín hiệu
đáng mừng.
Cụ thể:
* Sau khi học xong chương IV, theo phân phối chương trình Tin học 11 các
em có một bài kiểm tra 1 tiết (tiết 30), kết quả bài kiểm tra 1 tiết như sau:
- Trước khi áp dụng sáng kiến kinh nghiệm.
Năm học 2012 – 2013
Không đạt
yêu cầu
1
A4
45
80%
20%
2
A5
41
78%
22%
3
A6
49
75%
25%
- Sau khi áp dụng sáng kiến trên, kết quả của bài kiểm tra 1 tiết như sau:
STT
Lớp
Sĩ số
Đạt yêu cầu
Năm học 2013 - 2014
STT
Lớp
Sĩ số
Đạt yêu cầu
1
2
3
4
A4
A5
A6
A7
47
46
43
46
88%
83%
86%
84.8%
Không đạt
yêu cầu
12%
17%
14%
15.2%
Năm học 2014 - 2015
STT
Lớp
Sĩ số
Đạt yêu cầu
1
2
3
A4
A6
A7
46
48
47
93.5%
91.7%
91.5%
Không đạt
yêu cầu
6.5%
8.3%
8.5%
Năm học 2015 - 2016
STT
Lớp
Sĩ số
Đạt yêu cầu
1
2
3
A5
A6
A7
45
47
49
96%
95.8%
95.9%
Không đạt
yêu cầu
4%
4.2%
4.1%
* Đối với chất lượng môn Tin Học khối 11 cụ thể như sau:
19
- Trước khi áp dụng sáng kiến trên, chất lượng môn Tin học của các lớp 11 như sau:
Năm học 2012 – 2013
Yếu
Kém
STT
Lớp
Sĩ số
SL
%
SL
%
1
A4
45
4
8.89%
1
2.22%
2
A5
41
6
15%
2
4.87%
3
A6
49
5
10.2%
2
4.08%
- Sau khi áp dụng sáng kiến trên, chất lượng môn Tin học của các lớp 11 như sau:
Năm học 2013 - 2014
Yếu
Kém
STT
Lớp
Sĩ số
SL
%
SL
%
1
A4
47
3
6.38%
1
2.13%
2
A5
46
2
4.35%
1
2.17%
3
A6
43
1
2.32%
1
2.32%
4
A7
46
3
6.52%
2
4.35%
STT
Lớp
1
2
3
A4
A6
A7
STT
Lớp
1
2
3
A5
A6
A7
Năm học 2014 - 2015
Yếu
Sĩ số
SL
%
46
2
4.35%
48
1
2.08%
47
1
2.13%
Năm học 2015 - 2016
Yếu
Sĩ số
SL
%
45
1
2.22%
47
1
2.13%
49
0
0%
Kém
SL
0
1
0
%
0%
2.08
0%
Kém
SL
0
0
0
%
0%
0%
0%
PHẦN III: KẾT LUẬN VÀ KIẾN NGHỊ
20
Sau nhiều năm giảng dạy bộ môn Tin học ở bậc THPT, tôi nhận thấy bên
cạnh công tác dạy học đại trà, dạy bồi dưỡng cho HSG thì công tác dạy học, phụ
đạo cho học sinh yếu kém cũng không kém phần quan trọng và khó khăn. Khó ở
chỗ, đa số các em này còn lười học, kiến thức hổng, học một cách thụ động, chậm
hiểu và tiếp thu bài… Trong số đó có không ít các em nghịch ngợm và cá biệt.
Vì vậy, dạy học cho đối tượng học sinh yếu kém đòi hỏi người GV phải nhiệt
tâm, nhiệt tình, kiên nhẫn với các em. Bản thân tôi luôn tâm niệm, là người GV
phải vực được HS lên, nếu để học sinh tuột dốc thì coi như người GV đã thất bại.
Nên trong quá trình dạy học của mình, tôi vừa dạy lại vừa dỗ, động viên, khích lệ
các em để các em tự tin vào bản thân mình hơn.
Với sáng kiến kinh nghiệm nhỏ của mình, qua một số năm áp dụng tôi nhận
thấy đã đạt được hiệu quả rõ rệt.
Qua đề tài này, tôi hy vọng sẽ giúp cải thiện được rất nhiều chất lượng học
lập trình cho học sinh yếu kém ở trường THPT Hậu Lộc 1 khi học chương trình Tin
học 11 nói chung, ở Chương IV- Kiểu dữ liệu có cấu trúc nói riêng.
Bài viết này, chỉ là một số kinh nghiệm ít ỏi của bản thân rút ra trong quá
trình giảng dạy. Bài viết chắc hẳn còn nhiều thiếu xót và hạn chế. Rất mong được
sự góp ý, chỉ bảo của quý Thầy cô, các đồng nghiệp cùng chuyên môn để đề tài của
tôi được hoàn thiện thêm, để tôi ngày một vững vàng hơn trong chuyên môn,
nghiệp vụ của mình.
Tôi xin chân thành cảm ơn!
XÁC NHẬN CỦA THỦ TRƯỞNG ĐƠN VỊ
Thanh Hóa, ngày 19 tháng 5 năm 2016
Tôi xin cam đoan đây là SKKN của
mình viết, không sao chép nội dung của
người khác.
Người viết SKKN
Nguyễn Thị Ninh Giang
21
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. Học tốt Tin học 11
Trần Doãn Vinh
Chủ biên
4. Hướng dẫn tự học cơ sở lập trình
NXB Thành Phố Hồ Chí Minh năm 1997
5. Lý thuyết và bài tập Pascal
Đinh Xuân Lâm (VN – GUIDE)
22