Đề tài thực hiện được phân thành 2 giai đoạn, mỗi giai đoạn là 1 năm thực hiện với các đối tượng học sinh tương ứng.
Giai đoạn 1: Trong năm học 2011-2012 là năm học mà bản thân tôi đã áp dụng đối với lớp học 11A3 là lớp có học sinh học tốt hơn về các môn khoa học tự nhiên, lớp 11A6 là lớp học kém hơn lớp 11A3. Cả 2 lớp trên sử dụng phương pháp dạy học thông thường.
Giai đoạn 2: Được áp dụng phương pháp dạy học gợi động cơ học tập như đã nêu ở trên đối với lớp 11B3 theo ban KHTN và lớp 11B1 theo ban xã hội.
Khả năng tiếp thu kiến thức của lớp 11A3 tương đương với 11B3, 11A6 tương đương với 11B1. Kết quả thu được như sau:
Lớp Năm học Số học sinh đạt điểm trên 8
11A3 2011 - 2012 22/50 (44%) 11A6 10/38 (26,3%) 11B3 2012 - 2013 41/50 (82%) 11B1 31/43 (72%) D. KẾT LUẬN VÀ ĐỀ XUẤT I. Kết luận:
Sau một thời gian tiến hành giảng dạy và kiểm nghiệm giữa phương pháp mới tôi nhận thấy phương pháp gợi động cơ nhằm cuốn hút học sinh yêu thích học môn tin học và tư duy lập trình tốt về phần chương trình con thật sự là có hiệu quả.
Đối với giáo viên:
+ Tạo ra được các tình huống có vấn đề, dẫn dắt vấn đề và giải quyết vấn đề một cách triệt để và có hiệu quả.
+ Phương pháp giảng dạy rất phù hợp với xu hướng lấy học sinh làm trung tâm, bởi giáo viên chỉ hướng dẫn cho các em giải quyết vấn đề.
Đối với học sinh:
+ Tích cực tham gia học tập, phát huy tối đa tính chủ động sáng tạo, học tập của học sinh. Học sinh vừa học, vừa kết hợp tìm hiểu các kiến thức liên quan đến bài học.
+ Trong tiết học học sinh chủ động tìm tòi các kiến thức có liên quan tới bài học để giải quyết nhằm đạt được mục tiêu đề ra, theo đó tinh thần học tập của các em ngày được nâng cao.
II. Đề xuất:
Trong quá trình lên lớp và thực hiện đề tài trong 2 năm học 2011 – 2012 và 2012 – 2013 tôi có một số đề xuất như sau:
- Nhà trường cần tăng cường cơ sở vật chất của trường học, đặc biệt là máy tính thực hành của học sinh. Không thể nói rằng học sinh sẽ hứng thú học tập nếu cơ sở vật chất không đủ để đáp ứng.
- Nhà trường cũng như các cơ quan ban ngành có liên quan tạo điều kiện về vật chất, tinh thần, thời gian để có thể tổ chức các buổi học tập kinh nghiệm cho giáo viên.
Do thời gian nghiên cứu, cũng như quá trình công tác giảng dạy mới chỉ là một thời gian ngắn, điều kiện cơ sở vật chất của nhà trường còn chưa đảm bảo, nên trong quá trình nghiên cứu nhiều vấn đề còn chưa rõ ràng nên tôi rất mong quý bạn đọc cũng như các đồng nghiệp có những ý kiến đóng góp tích cực nhằm phát triển cho đề tài ngày càng hoàn thiện hơn.
PHỤ LỤC
Một số bài tập áp dụng đã được thực nghiệm sư phạm theo chuyên đề:
A. DẠNG CHƯƠNG TRÌNH CON CƠ BẢN 1. Viết một chương trình bằng cách thực hiện lần lượt các công việc sau:
a) Lập thủ tục nhập ba số thực dương a, b, c từ bàn phím.
b) Lập thủ tục kiểm tra xem ba số trên có lập thành ba cạnh của tam giác hay không. c) Viết thủ tục tính diện tích tam giác theo công thức: 1 sin
2
S= ab C
d) Viết thủ tục tính các trung tuyến của tam giác:
2. Nhập n, m là các số nguyên dương, liệt kê các số nguyên tố nằm trong khoảng từ n đến m. (n < m).
3. Viết chương trình con sử dụng hàm tính giai thừa của a và tính an.
var n:longint;
Function GiaiThua(n1:integer):longint; Var i,gt:longint;
Begin
gt:=1;
For i:=1 To n Do gt:=gt*i; GiaiThua:=gt;
End; BEGIN
write('nhap so n= '); readln(n);
writeln('giai thua cua ',n:2 ,' la: ',giaithua(n)); readln
END.
4. Tối giản phân số a/b.
Var tu,mau,c,d:Integer;
Function UCLN(a,b:Integer):Integer; Begin
While a<>b do
if a>b then a:=a-b else b:=b-a; UCLN:=a;
end; BEGIN
Write('Nhap tu so va mau so:'); Readln(tu,mau); c:=tu div UCLN(tu,mau);
d:=mau div UCLN(tu,mau); Writeln('Phan so toi gian=',c,'/',d); Readln;
END.
5. Nhập tử và mẫu số của 2 phân số (a, b) và (c, d). Thực hiện phép toán @ (có thể là +, -, *, /) và in kết quả là phân số tối giản: a@c p
b d = q
VAR tu1,mau1,tu2,mau2,tu,mau:integer; Procedure tg(var t,m:integer);
var u,v:integer; begin
u:=t; v:=m;
while u<>v do
if u>v then u:=u-v else v:=v-u; t:=t div u;
m:=m div u; end;
BEGIN
write('nhap tu va mau so cho phan so 1: '); readln(tu1,mau1); write('nhap tu va mau so cho phan so 2: '); readln(tu2,mau2); tg(tu1,mau1);
tg(tu2,mau2);
tu:=tu1*mau2 + tu2*mau1; mau:=mau1*mau2;
tg(tu,mau);
writeln('ket qua tong 2 phan so: ',tu,'/',mau); readln
END.
1. Nhập n phần tử là các số nguyên dương và số k và thực hiện các công việc sau: a) Đếm xem trong dãy có bao nhiêu số bằng k?
b) Đếm xem trong dãy có bao nhiêu số lớn hơn k? c) Đếm xem trong dãy có bao nhiêu số nhỏ hơn k? const max=100;
type mang=array[1..max] of integer; var a:mang; i,n,k : integer;
Procedure timkiem(k,n: integer); var i,dem:integer; begin i:=0; dem:=0; while (i<=n) do begin i:=i+1;
if a[i]=k then inc(dem); end;
writeln('co ',dem,' so ',k); end;
BEGIN
write('N = '); readln(n);
writeln('nhap gia tri cho mang'); for i:=1 to N do begin write('a[',i,']= '); readln(a[i]); end; write('nhap k= '); readln(k); timkiem(k,n); readln END.
2. Nhập dãy số nguyên a gồm n chữ số. Kiểm tra xem trong dãy có bao nhiêu số nguyên tố hay cả dãy là nguyên tố?
const max=100;
type mang=array[1..max] of integer; var i,d,n: integer; a:mang;
29
Câu b) và c) chỉ thay đổi câu lệnh: If - Then: b) if a[i]>k then inc(dem);
c) if a[i]<k then inc(dem);
Cách 2: Trong Hàm chỉ cần mã lệnh dưới đây mà ko cần phương pháp bẩy biến.
For i:=1 to N do Begin
D:=1;
For j:=2 to trunc(sqrt(A[i])) do If A[i] mod j = 0 then inc(d); If d:=1 then write(‘So NT’, A[i]);
function ktnt(k:integer):boolean; var i:integer;
begin
ktnt:=false; if k<1 then exit;
for i:=2 to k-1 do if k mod i = 0 then exit; ktnt:=true;
end; BEGIN
write('nhap so phan tu n= ');readln(n); writeln('nhap gia tri cho mang:');
for i:=1 to n do begin write('a[',i,']= '); readln(a[i]); end; d:=0;
for i:=1 to n do if KTNT(a[i]) then inc(d);
if (d>0) and (d < n) then write('co',d:2,' so nguyen to'); if d=n then writeln('a la day so nguyen to');
if d=0 then write('khong co so nguyen to'); readln
END.
3. Nhập dãy số thực a, hãy thực hiện công việc sau: các phần tử trùng nhau chỉ giữ lại một. VD: a = 1, 4, 4, 5, 6, 6 => a = 1, 4, 5, 6
const max=100;
type mang=array[1..max] of real; var i,n,k: integer;
a:mang; x:real;
procedure them(x:real); var i:integer;
begin
for i:=1 to k do if a[i]=x then exit; inc(k);
a[k]:=x; end; begin
write('nhap so phan tu n= ');readln(n); writeln('nhap gia tri cho mang:'); k:=0; for i:=1 to n do begin write('a[',i,']= '); readln(x); them(x); end; readln;
for i:=1 to k do writeln(a[i]:8:1); readln
end.
4. Nhập dãy số thực a. Nhập số x.
a) Sắp xếp lại dãy a thành dãy giảm.
b) Kiểm tra có phần tử nào bằng x cho trước không? Nếu không có hãy bổ sung x vào dãy sao cho không phá vỡ tính chất giảm của dãy.
const max=100;
type mang=array[0..max] of real;
Var i,n,k: integer; a:mang; x:real;
Procedure inra(n:integer); var i:integer;
begin
for i:=1 to n do write(a[i]:8:1); writeln;
end;
BEGIN
write('nhap so phan tu n= '); readln(n); writeln('nhap gia tri cho mang:'); for i:=1 to n do
begin write('a[',i,']= '); readln(a[i]); end; for i:=1 to n-1 do
for k:=i+1 to n do
inra(n); write('nhap x= ');readln(x); i:=n; a[0]:=x+1; while a[i]<x do begin a[i+1]:=a[i]; dec(i); end;
if a[i]=x then writeln('so ',x:2:1 ,' da co trong day') else begin a[i+1]:=x; inra(n+1); end; readln END.
5. Nhập dãy số thực a. Xét xem có thể sắp xếp dãy a thành dãy cấp số cộng không? const max=100;
type mang=array[1..max] of real;
var i,n,k: integer; a:mang; x:real; function ktsc:boolean; var i:integer; d:real; begin ktsc:=false; d:=a[2]-a[1]; for i:=1 to n-1 do
if a[i+1]-a[i]<>d then exit; ktsc:=true;
end;
begin
write('nhap so phan tu n= '); readln(n); writeln('nhap gia tri cho mang:');
for i:=1 to n do begin write('a[',i,']= '); readln(a[i]); end; for i:=1 to n-1 do for k:=i+1 to n do if a[i]>a[k] then begin x:=a[i]; a[i]:=a[k]; a[k]:=x; end;
if ktsc then writeln('co the sap xep thanh cap so cong') else writeln('khong the sap xep thanh cap so cong'); readln
end.
C. DẠNG CHƯƠNG TRÌNH CON KIỂU DỮ LIỆU XÂU VÀ TỆP
1. Nhập một số nguyên và số k, hãy xóa đi k chữ số trong số nguyên đó sao cho số nguyên mới có giá trị bé nhất. VD: n = 13450 => kq: 10 Var s,s1:string; i,n,k,k1:integer; Function chon(i:integer):integer; var j,c:integer; min:char; begin min:=s[k1]; c:=k1; for j:=k1+1 to n-k+i do if min>s[j] then begin min:=s[j]; c:=j; end;
s1:=s1+s[c]; chon:=c;
end; BEGIN
write('nhap so: '); readln(s);
write('nhap so chu can xoa: '); readln(k); n:=length(s);
if (k<1) or (k>=n) then begin
write('so nhap khong hop le'); exit; end;
s1:=' '; k:=n-k; k1:=1;
for i:=1 to k do k1:=chon(i)+1;
write('so con lai sau khi xoa co gia tri dat MIN: ',s1); readln
end.
2. Viết chương trình nhập một xâu ký tự. Thực hiện xóa các ký tự là chữ số. VAR s:string; FUNCTION posnum(s:string):byte; var ok:boolean; i:integer; begin ok:=false; i:=1;
while (i<=length(s))and(not ok) do if s[i] in ['0'..'9'] then ok:=true else i:=i+1;
if ok then posnum := i else posnum:=0; end;
BEGIN
writeln('nhap xau s: ');readln(s);
while posnum(s)<>0 do delete(s,posnum(s),1); writeln('xau moi la: ',s);
readln
END.
3. Nhập một xâu ký tự.
a) Xét xem trong xâu có k ký tự vừa kề nhau vừa giống nhau hay không? b) In ra xâu mới loại bỏ tất cả các ký tự kề nhau chỉ để lại một.
var s:string; i,d,d1,n,k:integer; Function xoa:boolean; var i:integer; begin xoa:=false;
for i:=1 to length(s)-1 do if s[i]=s[i+1] then begin delete(s,i,1); xoa:=true; exit; end; end; BEGIN
write('nhap chuoi ky tu: '); readln(s); write('nhap so k= '); readln(k); n:=length(s); d:=0; d1:=0; for i:=1 to n-1 do begin
if s[i]=s[i+1] then inc(d1) else d1:=0; if d1+1>=k then inc(d)
end;
if d1+1>=k then writeln('co ',k,' bo ky tu va co ',d1,' kt ke giong nhau') else writeln('khong co ',d,' ky tu ke giong nhau');
writeln('---'); while xoa do;
write('in lai xau moi '); writeln(s); readln
END.
4. Nhập 2 xâu ký tự. Đếm số lần xuất hiện của xâu này trong xâu kia?
const trang=' '; var s,s1,s2:string; k,d:integer; begin
write('nhap xau s1: ');readln(s1); write('nhap xau s2: ');readln(s2); s:=s2; d:=0; k:=pos(s1,s2); while k>0 do begin inc(d); delete(s2,1,k); k:=pos(s1,s2); end;
writeln('so lan ',s1,' co mat trong ',s,' la: ',d); readln
end.
5. Nhập xâu ký tự và tách xâu đó thành 2 xâu với vị trí và số lượng ký tự cần tách được nhập từ bàn phím: VD: Nhập xâu s1 = “HOANG NGOC QUE” , cần tách 4 kí tự lưu tại xâu s2 tại vị trí thứ 7 => kq: s1= ‘HOANG QUE’ và s2 = “NGOC”.
var s1,s2:string; pos, num:integer; procedure tachxau; begin
write('nhap vi tri can tach: '); readln(pos); write('nhap so ky tu can tach: '); readln(num); s2:=copy(s1,pos,num);
delete(s1,pos,num); writeln('xau s1= ',s1);
writeln('xau s2= ',s2); end;
begin
write('nhap xau s1: '); readln(s1); tachxau;
readln end.
6. Nhập một xâu ký tự và thực hiện:
a) Xóa tất cả các kí tự trắng dư thừa trong một xâu ký tự: (kí tự trắng dư thừa là kí tự trắng xuất hiện ở đầu xâu, cuối xâu và có từ 2 KT trắng trở lên ở giữa các từ).
b) Từ xâu đã chuẩn hóa ở câu a, hãy đếm xem trong xâu có bao nhiêu từ.
VAR s:string; i,tu:integer;
Procedure xoa;
begin
while s[1]=#32 do delete(s,1,1);
while s[length(s)]=#32 do delete(s,length(s),1); while pos(#32#32,s)>0 do delete(s,pos(#32#32,s),1); end;
procedure demtu;
begin tu:=0;
if s[1]<>#32 then inc(tu);
for i:=1 to length(s) do if (s[i]=#32) and (s[i+1]<>#32) then inc(tu); end;
BEGIN
write('nhap xau s= '); readln(s);
xoa; writeln('chuoi sau khi dinh dang la: ',s); demtu; write('trong xau co ',tu:3,' tu'); readln
END.
7. Giả sử có tệp VB.txt trên ổ đĩa D. Thực hiện các công việc sau:
b) Đếm số kí tự là chữ số, chữ cái trong xâu. {For i:=1 to length(a) do if a[i] in [‘a’ .. ‘z’] then}
c) In ra xâu chữ hoa.
8. Giả sử có tệp VB.txt trên ổ đĩa D. Thực hiện các công việc sau:
a) Nhập và ghi xâu văn bản vào tệp VB.txt. b) Đọc và in ra xâu văn bản đó.
c) Nhập một kí tự K (K là kí tự bất kỳ), đếm xem có bao nhiêu kí tự K xuất hiện trong xâu. VAR f:text;
s:string;
PROCEDURE NHAP; begin
assign(f,'D:\vb.txt'); rewrite(f); write('Nhap xau KT: '); readln(s); writeln(f,s); close(f); end; PROCEDURE DOC_IN; begin assign(f,'d:\vb.txt'); reset(f); while not eof(f) do
begin
readln(f,s);
writeln('xau trong tep la: ',s); end; close(f); end; PROCEDURE DEMK; var ik,demk:integer; k:char; begin assign(f,'d:\vb.txt'); reset(f); write('nhap k= '); readln(k); demk:=0;
if s[ik] = k then inc(demk); writeln('co ',demk,' phan tu la ',k); close(f);
end;
PROCEDURE DEMDONG; var dong: integer;
id: byte; begin
Assign(f,'d:\vb.txt'); reset(f); dong:=0;
while not EOF(f) do begin
readln(f,s); inc(dong); end;
writeln('so dong ',dong:2); close(f); end; BEGIN clrscr; nhap; doc_in; demk; demdong; readln END.
MỤC LỤC
A. PHẦN MỞ ĐẦU...1
I. Lý do chọn đề tài:...1
II. Mục đích nghiên cứu...2
III. Đối tượng và phạm vi nghiên cứu...2
IV. Nhiệm vụ nghiên cứu...2
V. Phương pháp nghiên cứu...3
1. Nghiên cứu lý thuyết:...3
2. Thực nghiệm sư phạm:...3
B. PHẦN NỘI DUNG...4
I. Cơ sở lý luận của đề tài...4
1. Nghiên cứu lý luận...4
2. Nghiên cứu thông qua phương pháp quan sát - điều tra:...4
3. Tổng kết kinh nghiệm:...4
II. Thực trạng của vấn đề nghiên cứu:...5
III. Các giải pháp và quá trình thực hiện:...5
1. Gợi động cơ mở đầu:...5
a) Xóa bỏ các hạn chế khi lập trình giải toán:...6
b) Phân tích các khái niệm:...8
c) Sự tiện lợi và hợp lý khi sử dụng chương trình con:...9
d) Xây dựng hệ thống chi tiết chương trình con:...11
e. Khai thác bài toán:...12
f. Xét tính tương tự giữa các bài toán: ...13
g. Tổng quát bài toán: ...13
h. Liên hệ và hướng tới cách giải quyết bài toán...15
2. Gợi động cơ trung gian...15
a. Hướng đích:...15
b. Tổng hợp, xem xét các bài toán thành các dạng quen thuộc:...15
c. Xét tính tương tự giữa các bài toán: ...16
3. Gợi động cơ kết thúc:...17
C. KẾT QUẢ KIỂM NGHIỆM ĐỀ TÀI:...18
I. Kết luận:...19 II. Đề xuất:...19
PHỤ LỤC...20
XÁC NHẬN CỦA HIỆU TRƯỞNG Thanh Hóa, ngày 20 tháng 5 năm 2013
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.
(Ký và ghi rõ họ tên)