SKKN Một số biện pháp nhằm nâng cao hiệu quả giảng dạy kiểu dữ liệu mảng, Tin học 11 ở trường THPT Lam Kinh

SKKN Một số biện pháp nhằm nâng cao hiệu quả giảng dạy kiểu dữ liệu mảng, Tin học 11 ở trường THPT Lam Kinh

Trong thời đại hiện nay, công nghệ thông tin đã thực sự bùng nổ và tác động to lớn đến mọi đời sống, kinh tế, xã hội và văn hóa loài người. Chính vì tầm quan trọng đó, tin học đã được đưa vào giảng dạy ở các trường đại học, cao đẳng, trung học và các trường phổ thông nhằm nâng cao trình độ dân trí về tin học, đào tạo nguồn nhân lực đáp ứng yêu cầu công nghiệp hóa, hiện đại hóa đất nước. Ở cấp trung học phổ thông, môn Tin học đã trang bị cho các em một cách tương đối có hệ thống các kiến thức phổ thông về tin học, hình thành và phát triển khả năng tư duy thuật toán, năng lực sử dụng các thành tựu của tin học trong học tập và trong các lĩnh vực hoạt động của các em sau này, đã bước đầu hình thành niềm đam mê cho các em trong quá trình định hướng nghề nghiệp về sau. Tuy nhiên, qua thực tế nhiều năm giảng dạy môn Tin học tôi nhận thấy đa số các em chỉ hứng thú khi học các nội dung về tin học ứng dụng như: Soạn thảo văn bản, hệ quản trị cơ sở dữ liệu.mà không thích học lập trình thuộc chương trình tin học lớp 11, bởi lí do chính là các em cảm thấy khó và ít ứng dụng vào thực tiễn. Tôi thấy rằng, ban đầu khi mới bắt đầu tiếp cận với lập trình và ngôn ngữ lập trình đa số các em đều hứng thú, tiếp thu tốt, có thể sử dụng cấu trúc rẽ nhánh và vòng lặp để giải các bài toán đơn giản. Nhưng học đến kiểu dữ liệu có cấu trúc, các em bắt đầu lúng túng, không hiểu bản chất của vấn đề dẫn đến nhiều em không viết được chương trình hoàn chỉnh đơn giản, từ đó chán nản, lơ là với môn học và tiếp thu kém các nội dung về sau. Chính vì thế tôi cho rằng khi giảng dạy kiểu dữ liệu có cấu trúc bắt đầu từ kiểu mảng, giáo viên cần đặc biệt chú trọng cả về nội dung lẫn phương pháp giảng dạy để giúp các em nắm vững lý thuyết, nâng cao kĩ năng lập trình từ đó tạo được niềm đam mê lập trình cho các em. Đó cũng là lí do tôi chọn đề tài “Một số biện pháp nhằm nâng cao hiệu quả giảng dạy kiểu dữ liệu mảng, tin học 11 ở trường THPT Lam Kinh”

doc 12 trang thuychi01 6401
Bạn đang xem tài liệu "SKKN Một số biện pháp nhằm nâng cao hiệu quả giảng dạy kiểu dữ liệu mảng, Tin học 11 ở trường THPT Lam Kinh", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
I. MỞ ĐẦU
1. Lí do chọn đề tài
	Trong thời đại hiện nay, công nghệ thông tin đã thực sự bùng nổ và tác động to lớn đến mọi đời sống, kinh tế, xã hội và văn hóa loài người. Chính vì tầm quan trọng đó, tin học đã được đưa vào giảng dạy ở các trường đại học, cao đẳng, trung học và các trường phổ thông nhằm nâng cao trình độ dân trí về tin học, đào tạo nguồn nhân lực đáp ứng yêu cầu công nghiệp hóa, hiện đại hóa đất nước. Ở cấp trung học phổ thông, môn Tin học đã trang bị cho các em một cách tương đối có hệ thống các kiến thức phổ thông về tin học, hình thành và phát triển khả năng tư duy thuật toán, năng lực sử dụng các thành tựu của tin học trong học tập và trong các lĩnh vực hoạt động của các em sau này, đã bước đầu hình thành niềm đam mê cho các em trong quá trình định hướng nghề nghiệp về sau. Tuy nhiên, qua thực tế nhiều năm giảng dạy môn Tin học tôi nhận thấy đa số các em chỉ hứng thú khi học các nội dung về tin học ứng dụng như: Soạn thảo văn bản, hệ quản trị cơ sở dữ liệu...mà không thích học lập trình thuộc chương trình tin học lớp 11, bởi lí do chính là các em cảm thấy khó và ít ứng dụng vào thực tiễn. Tôi thấy rằng, ban đầu khi mới bắt đầu tiếp cận với lập trình và ngôn ngữ lập trình đa số các em đều hứng thú, tiếp thu tốt, có thể sử dụng cấu trúc rẽ nhánh và vòng lặp để giải các bài toán đơn giản. Nhưng học đến kiểu dữ liệu có cấu trúc, các em bắt đầu lúng túng, không hiểu bản chất của vấn đề dẫn đến nhiều em không viết được chương trình hoàn chỉnh đơn giản, từ đó chán nản, lơ là với môn học và tiếp thu kém các nội dung về sau. Chính vì thế tôi cho rằng khi giảng dạy kiểu dữ liệu có cấu trúc bắt đầu từ kiểu mảng, giáo viên cần đặc biệt chú trọng cả về nội dung lẫn phương pháp giảng dạy để giúp các em nắm vững lý thuyết, nâng cao kĩ năng lập trình từ đó tạo được niềm đam mê lập trình cho các em. Đó cũng là lí do tôi chọn đề tài “Một số biện pháp nhằm nâng cao hiệu quả giảng dạy kiểu dữ liệu mảng, tin học 11 ở trường THPT Lam Kinh”
2. Mục đích nghiên cứu.
	Đề ra một số biện pháp giảng dạy bài kiểu mảng, chương trình tin học lớp 11 nhằm nâng cao chất lượng bộ môn.
3. Đối tượng nghiên cứu
	Học sinh một số lớp 11 trường THPT Lam Kinh, gồm có: ban KHTN (11B1), cơ bản C(11B5), cơ bản D (11B6)
	Trong mỗi lớp còn được chia ra từng nhóm đối tượng (giỏi, khá, trung bình, yếu)
4. Phương pháp nghiên cứu
	- Phỏng vấn học sinh khối lớp 11.
	- Dự giờ, thăm lớp.
	- Kiểm tra đánh giá trong và sau giờ học.
II. NỘI DUNG SÁNG KIẾN KINH NGHIỆM
1. Cơ sở lí luận của sáng kiến kinh nghiệm
	Thứ nhất là ý nghĩa của kiểu dữ liệu mảng trong ngôn ngữ lập trình Pascal. Các khái niệm cũng như các thao tác cơ bản đối với kiểu mảng 1 chiều.
	Mảng một chiều là một dãy hữu hạn các phần tử cùng kiểu.
Thứ 2, Trên cơ sở nghiên cứu Nghị Quyết 40/2000/QH10 và chỉ thị 14/2001/CT-TTg ngày 11/06/2001 về việc đổi mới chương trình giáo dục phổ thông: Đổi mới phương pháp dạy và học, phát huy tư duy sáng tạo và năng lực tự học của học sinh.
2. Thực trạng vấn đề trước khi áp dụng sáng kiến kinh nghiệm
	Trường THPT Lam Kinh có 25 lớp, trong đó có 8 lớp 11 thuộc 5 ban: Ban Khoa học tự nhiên (KHTN) có 3 lớp, ban cơ bản A có 1 lớp, ban cơ bản C có 1 lớp, ban cơ bản D có 1 lớp và ban cơ bản có 2 lớp. Trong vài năm gần đây, điểm đầu vào của trường không cao, chất lượng không đồng đều giữa các lớp, chất lượng mũi nhọn tập trung ở ban KHTN, ở các ban còn lại học lực trung bình của các em còn thấp, trên 50% học sinh có học lực trung bình và dưới trung bình. Chính vì vậy, khả năng tiếp thu của các em còn hạn chế đặc biệt là các môn KHTN và môn tin học. Hơn nữa, chương trình tin học lớp 11 rất mới mẻ và khó tiếp thu đối với các em, nó đòi hỏi khả năng tư duy cao, cộng thêm những kỹ năng khác như kỹ năng phát hiện, giải quyết vấn đề, kỹ năng phát hiện, sửa lỗi trong lập trình... cho nên để học sinh hứng thú và tiếp thu tốt mỗi bài học là nhiệm vụ tương đối khó khăn đối với mỗi giáo viên giảng dạy môn tin học lớp 11.
	Kết quả khảo sát chất lượng môn tin học lớp 11 ở nhà trường trong một số năm gần đây còn thấp nhất là ở các lớp ban cơ bản:
	Kết quả năm học 2015-2016 môn tin học ở một số lớp 11 như sau:
Lớp
Sĩ số
Giỏi
Khá
Trung bình
Yếu – Kém
SL
%
SL
%
SL
%
SL
%
11A1
46
18
20
8
11A5
47
0
17
28
2
11A6
46
0
20
23
3
Tổng
	Kết quả năm học 2014-2015 môn tin học ở một số lớp 11 như sau:
Lớp
Sĩ số
Giỏi
Khá
Trung bình
Yếu – Kém
SL
%
SL
%
SL
%
SL
%
11C1
43
16
20
7
11C5
41
0
19
20
2
11C6
40
0
16
20
4
Tổng
	Thống kê trên cho thấy, tỉ lệ học sinh khá giỏi ở các lớp nói chung còn thấp, học sinh có học lực yếu còn nhiều. Do đó, giáo viên cần chú trọng về nội dung và kết hợp tốt các phương pháp dạy học để đạt được hiệu quả tốt nhất.
	3. Các biện pháp đã sử dụng để giải quyết vấn đề	
	3.1 Thay đổi bố cục của bài học.
	Như đã nói ở trên, do trình độ nhận thức của các em chênh lệch còn khá nhiều, chất lượng đầu vào không cao, nên ở các lớp ban cơ bản tôi đã thay đổi bố cục của bài học so với hướng dẫn của sách giáo khoa để các em dể tiếp thu và vận dụng kiến thức để giải các bài tập, cụ thể như sau:
	Vào bài, tôi đưa ra ví dụ: Tính nhiệt độ trung bình của 7 ngày trong tuần. Yêu cầu học sinh giải bài toán bằng những kiến thức đã học. Từ đó phân tích để học sinh thấy được sự cần thiết phải có 1 kiểu dữ liệu mới để mô tả 1 dãy hữu hạn các phần tử có cùng kiểu. Từ đó, đưa ra khái niệm về mảng 1 chiều.
	Mảng 1 chiều là một dãy hữu hạn các phần tử cùng kiểu. 
	Sau khi tìm hiểu khái niệm mảng 1 chiều, tôi hướng dẫn học sinh tìm hiểu các nội dung theo bố cục sau:
a) Khai báo
	Ở lớp ban KHTN tôi yêu cầu học sinh tìm hiểu 2 cách khai báo, nhưng ở ban KHXH và ban cơ bản tôi chỉ yêu cầu học sinh tìm hiểu kĩ cách khai báo thứ nhất (khai báo trực tiếp)
Cách 1: Khai báo trực tiếp
Cú pháp: Var :array[kiểu chỉ số] of ;
Cách 2: Khai báo gián tiếp
Cú pháp:
	Type =array[kiểu chỉ số] of ;
	Var :;
b) Tham chiếu đến phần tử của mảng
	Tham chiếu đến phần tử mảng 1 chiều, được viết: 
	[chỉ số]
c) Nhập/ Hiển thị biến mảng
	- Nhập dữ liệu từ bàn phím cho biến mảng
	Tôi yêu cầu học sinh nhắc lại cách nhập dữ liệu cho các biến đơn, từ đó phát biểu cách nhập dữ liệu từ bàn phím cho biến mảng (đối với các lớp KHTN các em có thể tự rút ra cách nhập dữ liệu cho biến mảng)
	Kết luận: Để nhập dữ liệu từ bàn phím cho biến mảng chúng ta phải nhập dữ liệu cho từng phần tử của mảng
	Ví dụ: Nhập nhiệt độ của 7 ngày trong tuần, tính và hiển thị nhiệt độ trung bình của tuần đó.
	Để nhập dữ liệu cho mảng các phần tử là nhiệt độ của 7 ngày trong tuần, chúng ta có thể sử dụng vòng lặp for sau:
	For i:=1 to 7 do
	Readln(a[i]);
	- Hiển thị dữ liệu ra màn hình
	Tưng tự, tôi yêu cầu học sinh nhắc lại cách hiển thị dữ liệu ra màn hình đối với các biến đơn, từ đó các em có thể rút ra được cách hiển thị dữ liêụ của biến mảng ra màn hình: Để hiển thị dữ liệu ra màn hình cho cả mảng ta cần hiển thị ra màn hình từng phần tử của mảng.
Ví dụ: Để hiển thị các giá trị của mảng a vừa nhập ở trên trên cùng 1 dòng, chúng ta dùng vòng lặp for sau:
	For i:=1 to 7 do
	Write(a[i],’ ‘);
	Ở phần ví dụ minh họa, trước hết tôi yêu cầu học sinh hoàn thiện ví dụ tính nhiệt độ trung bình đã đặt ra, sau đó tôi chọn 1 ví dụ đơn giản, tương tự ví dụ vừa thực hiện, phân tích bài toán và yêu cầu học sinh thực hiện các bước theo các nội dung đã được học.
	Ví dụ: Hãy nhập điểm tổng kết của n học sinh trong một lớp, đếm xem có bao nhiêu bạn đạt học lực khá, giỏi (điểm tổng kết >= 6.5).
	Sau khi tìm hiểu đề bài, phân tích thuật toán, tôi chia lớp thành các nhóm nhỏ, mỗi nhóm thực hiện một trong các công việc sau bằng NNLT Pascal:
	- Khai báo mảng a
	- Nhập mảng a.
	- Đếm số lượng học sinh đạt học lực khá, giỏi.
d) Một số ví dụ
	Phần này tôi đưa ra cho các em tìm hiểu một số ví dụ theo hướng mở rộng dần bài toán cơ bản và được trình bày kĩ ở phần 3.2
3.2 Mở rộng bài toán cơ bản
	Để rèn luyện kỹ năng lập trình cho các em, tôi đưa ra các bài toán ở mức độ từ dể đến khó, từ bài toán cơ bản, mở rộng đến các bài toán khó hơn. Với thời lượng 4 tiết lý thuyết, 5 tiết bài tập và thực hành, tôi thực hiện giảng dạy mỗi tiết 1 dạng bài toán với phương châm: Dạy kỹ bài toán cơ bản, mở rộng bài toán cơ bản và ra bài tập về nhà. Ở các bài giảng trên lớp tôi thường chỉ mở rộng ở mức độ 1 tức là chỉ cần chạy được chương trình mà chưa quan tâm đến các yếu tố như: Độ phức tạp của thuật toán, phạm vi giá trị của các biến....và 1 phần ở mức độ 2 cho các lớp ban KHTN, như: Phạm vi giá trị của biến, đánh giá thời gian thực hiện chương trình.
	Trong quá trình giảng dạy, để giảm thiểu sự khô khan, nhàm chán cho các em, các bài toán tương tự tôi thường đưa ra dưới dạng đọc hiểu, nhận biết chương trình, cũng là để củng cố lại các kiến thức các em vừa tiếp thu.
	Sau đây là các dạng bài toán tôi đã áp dụng để giảng dạy cho các em:
3.2.1 Bài toán 1: Tìm giá trị lớn nhất của 1 dãy số nguyên.
Bài toán cơ bản: Cho dãy số nguyên a1, a2, ..., an. Tìm giá trị lớn nhất của dãy số.
	Bài toán này các em đã được tìm hiểu thuật toán khi học phần bài toán và thuật toán, tin học 10 nhưng đa số các em không còn nhớ thuật toán để giải, do đó tôi vẫn phân tích kỹ thuật toán, yêu cầu các em xác định kết quả từng lần lặp trong thuật toán đối với 1 input cụ thể (trình bày trong phần 3.3.1), sau đó tùy từng lớp mà yêu cầu học sinh viết chương trình hoặc chỉ cần trình chiếu chương trình đã cài đặt sẵn trên ngôn ngữ lập trình Pascal.
Bài toán tương tự: Tìm giá trị nhỏ nhất của 1 dãy số nguyên a1, a2, ..., an
	Nhận xét: Bài toán này khá đơn giản, giáo viên chỉ cần chỉ ra điểm khác so với bài toán cơ bản mà không cần giải chi tiết, hoặc ngược lại như sau:
	Cho chương trình sau:
	program bai1;
	var a:array[1..100] of integer;
	 m,i:integerr;
	BEGIN
	Write(‘Nhap n:’); readln(n);
	For i:=1 to n do
	Readln(a[i]);
	m:=0;
	For i:=1 to n do
	if a[i]<m then m:=a[i];
	write(‘gia tri cua m:’,m);
	readln
	END.
	Giả sử, các giá trị được nhập vào từ bàn phím là:
	N=5; a[1]=5; a[2]=8; a[3]=2; a[4]=15; a[5]=10; 
	Hỏi sau khi thực hiện chương trình trên, giá trị của m bằng bao nhiêu?
	A) 15	B) 5	C) 2	D) 0
	Học sinh sẽ phải đọc kĩ và hiểu rõ ý nghĩa từng câu lệnh. Đối với bài này có thể nhiều học sinh sẽ chọn nhầm đáp án C), giáo viên cần nhắc học sinh chú ý về cách gán biến khởi tạo cho m.
Bài toán mở rộng 1 (dành cho các lớp ban cơ bản): Cho n và dãy số nguyên a1, a2, ..., an. Hãy tìm giá trị lớn nhất của dãy số và chỉ số của phần tử tìm được, nếu có nhiều phần tử có cùng giá trị lớn nhất, hãy đưa ra màn hình giá trị và chỉ số của phần tử có chỉ số lớn nhất.
	Nhận xét: Ở bài toán cơ bản các em đã biết dùng biến (max) để lưu giá trị lớn nhất tìm được sau khi xét lần lượt các phần tử của mảng, ở bài toán này giáo viên chỉ cần đặt ra các câu hỏi:
	1, Chỉ số của phần tử tìm được được lưu trữ như thế nào?
	2, Nếu có nhiều phần tử có cùng giá trị lớn nhất, làm thế nào để tìm được phần tử có chỉ số lớn nhất?
	Các em trả lời được 2 câu hỏi trên sẽ viết được chương trình hoàn chỉnh.
Bài toán mở rộng 2 (dành cho các lớp ban KHTN): Cho n và dãy số nguyên a1, a2, ..., an. Hãy tìm giá trị nguyên âm lớn nhất trong dãy.
	Nhận xét: Đối với bài toán này, chỉ cần các em trả lời được câu hỏi “giá trị khởi tạo cho biến max là bao nhiêu?”
Bài tập về nhà: 
	Bài 1: Cho dãy số nguyên a1, a2, ..., an.. Hãy tìm giá trị lớn nhất của dãy và cho biết có bao nhiêu phần tử có cùng giá trị lớn nhất đó.
	Bài 2: Cho dãy số nguyên a1, a2, ..., an. Hãy sắp xếp dãy số theo thứ tự tăng dần bằng cách vận dụng thuật toán tìm giá trị lớn nhất.
3.2.2 Bài toán 2: Sắp xếp dãy số bằng thuật toán tráo đổi
Bài toán cơ bản: Cho n (n<=250) và dãy số nguyên a1, a2, ..., an. Hãy sắp xếp các phần tử của dãy theo thứ tự tăng dần.
	Bài toán này không khó đối với các lớp KHTN nhưng cũng không dể dàng với các lớp còn lại, nếu giáo viên kiểm tra bài cũ và phân tích kĩ bài tập về nhà 2 ở trên thì học sinh dể tiếp cận cách giải hơn. Đối với bài toán này, giáo viên cần phân tích kỹ thuật toán và chỉ ra sự khác nhau về ý nghĩa của 2 vòng lặp for. Trong tiết dạy, tôi thường yêu cầu học sinh xác định giá trị của mảng sau từng bước lặp ra giấy để các em hiểu rõ về thuật toán (nội dung này tôi trình bày kỹ ở phần 3.3.1)
Bài toán tương tự: Cho n (n<=250) và dãy số nguyên a1, a2, ..., an. Hãy sắp xếp các phần tử của dãy theo thứ tự giảm dần.
	Nhận xét: Nếu học sinh đã hiểu bài toán cơ bản thì sẽ làm được bài toán này trong thời gian rất ngắn, tôi thường đưa ra bài toán dưới dạng đọc hiểu chương trình như sau:
	Hãy sửa lỗi cú pháp trong chương trình sau và cho biết chương trình trên thực hiện công việc gì?
	 program bai2;
	var a:array[0250] of integer;
	 I, j, tg : integerr;
	BEGIN
	Write(‘Nhap n va mang a:’); 
	readln(n);
	Readln(a);
	For i:= 1 to n-1 do
	For j:=i+1 to n do
	If a[i]<a[j] then
	Begin
	Tg:=a[i];
	A[i]:=a[j];
	A[j]:=tg;
	End;
	Writeln(‘day so sau khi sap xep la:’);
	For i:=1 to n do
	Write(a[i]:8:4);
Readln
End.
	Bài toán trên, trước hết giáo viên cần chỉ ra các lỗi (3 lỗi), yêu cầu học sinh sửa lại cho đúng, sau đó cần chốt lại ý nghĩa của 2 vòng lặp for trong chương trình.
Bài toán mở rộng 1: (dành cho ban cơ bản) Cho dãy số nguyên a1, a2, ..., an. đôi một có giá trị khác nhau. Hãy sắp xếp dãy số sao cho giá trị tuyệt đối của chúng tăng dần, nếu có 2 số có cùng giá trị tuyệt đối hãy sắp xếp sao cho số âm ở trước số dương.
	Nhận xét: Bài toán này giáo viên chỉ cần đưa ra 2 vấn đề:
	Thứ nhất, tiêu chí sắp xếp các phần tử là gì?
	Thứ hai, nếu 2 phần tử có cùng giá trị tuyệt đối thì làm thế nào để sắp xếp chúng theo yêu cầu của đề?
	Chương trình:
Bài toán mở rộng 2: (dành cho ban KHTN) Cho dãy số nguyên a1, a2, ..., an. Hãy sắp xếp các phần tử của mảng theo thứ tự tăng dần của số dương, giảm dần các số âm và số âm ở trước số dương.
	Nhận xét: Đa số học sinh đã biết cách sắp xếp theo thứ tự tăng dần hoặc giảm dần1 dãy số, nhưng khi đứng trước bài toán này mới đầu đa số học sinh sẽ lúng túng khi tìm thuật toán để giải, giáo viên có thể gợi ý cho học sinh, chẳng hạn:
Bài tập về nhà:
	Cho dãy số nguyên a1, a2, ..., an., đôi một có giá trị khác nhau. Hãy sắp xếp dãy số sao cho phần dư của các phần tử cho 10 theo thứ tự tăng dần, nếu có nhiều phần tử có cùng giá trị này thì phần tử có giá trị nhỏ hơn đứng trước phần tử có giá trị lớn hơn.
3.2.3 Bài toán 3: Tìm các phần tử của dãy số thõa mãn điều kiện cho trước bằng phương pháp tìm kiếm tuần tự.
Bài toán cơ bản: Cho dãy số nguyên a1, a2, ..., an.. Hãy tính tổng các số chia hết cho 2 trong dãy.
	Nhận xét: Bài toán này rất đơn giản, giáo viên chỉ cần hỏi 1 vài câu hỏi nhỏ, chẳng hạn: Biểu thức điều kiện để kiểm tra 1 số có chia hết cho 2 không? Câu lệnh gán để tính tổng các số chia hết cho 2 là gì?... là đa số học sinh có thể viết được chương trình hoàn chỉnh.
Bài toán tương tự: Các phần tử của mảng có thể là:
+ Là số âm	
+ Là số dương	
+ Là số chia hết cho một số K	
+ ...
Bài toán mở rộng 1: Cho dãy số nguyên a1, a2, ..., an.. Hãy đếm số lượng các số hoàn hảo trong dãy.
	Nhận xét:
Bài toán mở rộng 2: Cho dãy số nguyên a1, a2, ..., an.. Hãy hiển thị các số chính phương trong dãy và số lượng của chúng.
	Nhận xét:
	3.3 Tăng cường hoạt động nhóm.
	Khi giảng dạy tin học 11 nói chung và giảng dạy kiểu mảng 1 chiều nói riêng, tôi luôn chú trọng đến sự hợp tác trong các nhóm nhỏ, nhằm tăng tính tương trợ lẫn nhau giữa các em. Khi dạy bài kiểu mảng, tôi thường tổ chức hoạt động nhóm ở các nội dung sau:
	3.3.1 Xác định kết quả thực hiện của thuật toán
	Sau khi đã hình thành ý tưởng, phác thảo được cách giải bằng thuật toán hoặc chương trình, tôi yêu cầu học sinh phải xác định được kết quả thực hiện của thuật toán theo từng bước đối với mỗi input cụ thể qua các phiếu học tập. Điều này khá đơn giản đối với học sinh khá, giỏi nhưng cũng rất cần thiết cho các em học sinh có học lực trung bình và dưới trung bình, bởi nó sẽ giúp các em hiểu rõ thuật toán và bản chất của kiểu dữ liệu mảng từ đó viết được chương trình hoàn chỉnh. Trong các tiết học, tôi chia lớp thành các nhóm nhỏ (theo từng bàn, khoảng từ 2 đến 3 em lập thành 1 nhóm) và phát các phiếu học tập, yêu cầu các em xác định kết quả thực hiện của bài toán theo từng bước của thuật toán ở trong phiếu. Để hoàn thành phiếu học tập này phải mất khoảng 5 đến 7 phút, do đó tôi chỉ yêu cầu học sinh thực hiện đối với các bài toán cơ bản, và các bài toán có thuật toán tương đối phước tạp đối với các em.
	Bài toán 1: Tìm giá trị lớn nhất của dãy số nguyên a1, a2, ..., an.
	Ý tưởng: - Gán max:=a1; 
	 - Kiểm tra tất các các phần tử ai (i = 2..n), nếu ai > max thì max:=ai. 
Xác định kết quả: Với n=7, mảng a có các giá trị được nhập vào như sau:
6
15
9
2
20
25
10
Yêu cầu học sinh xác định max theo từng bước của vòng lặp từ đó xác định output của bài toán, cụ thể: 
Khởi tạo: max=6.
Các bước lặp: 
Max=15
Max=15
Max=15
Max=20
Max=25
	 i =2 	 i =3	 i = 4 i = 5	 i = 6 i = 7
Output: Max=25.
PHIẾU HỌC TẬP 
Input: Cho n = 7, mảng a gồm n phần tử có các giá trị như sau:
6
15
9
2
20
25
10
Dựa vào thuật toán, hãy xác định:
Số lần lặp của vòng lặp?
Với mỗi lần lặp hãy xác định:
Max= ?
Max= ?
Max= ?
Max= ?
Max=? 
Max= ?
	 i =2 i =3	 i = 4 i = 5	 i = 6 i = 7
Output: Max=?
Bài toán 2: Sắp xếp dãy số bằng thuật toán tráo đổi
Tương tự bài toán trên, sau khi tìm hiểu cách giải, tôi yêu cầu học sinh xác định kết quả từng bước bằng cách hoàn thành phiếu học tập sau:
PHIẾU HỌC TẬP 
Input: Cho n = 5, mảng a gồm n phần tử có các giá trị như sau:
15
9
10
6
8
Dựa vào thuật toán, hãy xác định:
Số lần thực hiện câu lệnh if – then (số lần lặp của 2 vòng lặp)?
Mảng A sau từng bước của vòng lặp đầu tiên vào bảng sau:
J = 5
J = 4
J = 3
J = 2
A
A
A
A
	Sau khi hoàn thành các phiếu học tập, tôi gọi các em lên trình bày kết quả và thông thường việc trình bày sẽ do các em có học lực thấp hơn đảm nhiệm.
	Ngoài các bài toán cơ bản 
3.3.2 Hoạt động nhóm trong các giờ thực hành
	Trong các giờ thực hành tôi phân công 2 em đến 3 em vào 1 máy tính, dựa trên khả năng tiếp thu của các em sao cho các em trong một nhóm ít chênh lệch nhau nhất. Đối với mỗi nhiệm vụ đặt ra các em sẽ hợp tác, cùng nhau thực hiện. Sau 1 khoảng thời gian, nhóm hoàn thành trước sẽ cùng với giáo viên hỗ trợ những nhóm còn lại để đa số có thể hoàn thành được công việc đặt ra. Sự hỗ trợ giữa các em học tốt hơn đối với các nhóm còn lại rất cần thiết, bởi vì các lỗi cơ bản như các lỗi về cú pháp thông thường trong 1 lớp sẽ có một vài nhóm học sinh có thể phát hiện được, các em này vừa có thể hỗ trợ cho các nhóm khác, đẩy nhanh hiệu quả của tiết học, mặt khác cũng nâng cao kỹ năng lập trình, từ đó thúc đẩy niềm đam mê cho chính các em.
	Trong 1 tiết học thực hành tôi thường thực hiện theo trình tự các bước như sau:
	Bước 1: Tập trung học sinh, gọi học sinh vào phòng thực hành theo sơ đồ đã phân công, ổn định lớp.
	Bước 2: Nêu nhiệm vụ, yêu câù của tiết học.
	Bước 3: Học sinh thực hành theo yêu cầu của giáo viên, trong quá trình thực hiện giáo viên quan sát, có thể gợi ý, vấn đáp hoặc có thể gọi lên bảng để học sinh trong lớp hiểu được thuật toán hoặc cách giải.
	Bước 4: Sau một khoảng thời gian, nhóm nào xong trước, cùng với giáo viên đi đến các nhóm khác để hướng dẫn các nhóm này.
	Bước 5: Nhận xét, đánh giá các nhóm trong quá trình thực hành, có thể kết hợp cho điểm nhằm động viên, khuyến khích các em. Kết luận về bài học và ra nhiệm vụ về nhà.
3.3.3 Một số nội dung khác
	Ngoài 2 nội dung trên, trong quá trình giảng dạy tôi thường xem kẽ hoạt động nhóm với hoạt động cá nhân riêng lẻ trong quá trình giảng dạy lý thuyết cũng như trong tiết làm bài tập.
	Chẳng hạn, khi tìm hiểu cách nhập/hiển thị biến mảng, đối với các lớp ban KHTN tôi yêu cầu học sinh tự rút ra cách nhập/hiển thị biến mảng bằng cách chia lớp thành các nhóm nhỏ (2 đến 3 em), sau đó các em thảo luận và ghi kết quả thảo luận vào phiếu học tập sau:
PHIẾU HỌC TẬP 
Cho biến x là biến thuộc kiểu số thực, mảng a là mảng gồm 5

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

  • docskkn_mot_so_bien_phap_nham_nang_cao_hieu_qua_giang_day_kieu.doc