Chính vì điều đó mà việc giáo viên phải tìm ra phương pháp dạy phù hợp, giúp HS tiếp cận được kiến thức, giải được các bài toán đơn giản thì mới mang lại hứng thú học tập cho HS, từ đó g
Trang 11 Mở đầu
1.1 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 mạnh đi đôi với việc tăng cường trang bị máy vi tính Đảng và Nhà nước ta đã nhận thấy được tầm quan trọng của ngành Tin học và đã đưa môn học này vào trường phổ thông như những môn học khác
Chính vì vậy, đối với mỗi giáo viên giảng dạy môn Tin học ở các trường phổ thông, việc tìm hiểu, nghiên cứu các vấn đề về Tin học, cùng với việc tìm các biện pháp giảng dạy Tin học trong nhà trường phổ thông là một công việc cần phải làm thường xuyên, nhằm đáp ứng với sự đòi hỏi ngày càng cao của xã hội
Trong bối cảnh toàn ngành Giáo dục và Đào tạo đang nỗ lực đổi mới phương pháp dạy học theo hướng phát huy tính tích cực chủ động của học sinh trong hoạt động học tập Điều 24.2 của Luật giáo dục đã nêu rõ: “Phương pháp giáo dục phổ thông phải phát huy tính tích cực, tự giác, chủ động, sáng tạo của học sinh, phù hợp với đặc điểm của từng lớp học, môn học; bồi dưỡng phương pháp tự học, rèn luyện kỹ năng vận dụng kiến thức vào thực tiễn, tác động đến tình cảm, đem lại niềm vui, hứng thú học tập cho học sinh” Chính vì điều đó mà việc giáo viên phải tìm ra phương pháp dạy phù hợp, giúp HS tiếp cận được kiến thức, giải được các bài toán đơn giản thì mới mang lại hứng thú học tập cho HS, từ đó giúp các em yêu môn học hơn
Xuất phát từ thực tiễn giảng dạy nhiều năm môn Tin học lớp 11 của mì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 tượng học sinh Để qua mỗi phần học, tiết học học sinh thích thú với kiến thức mới, qua đó hiểu được kiến thức đã học trên lớp, đồng thời học sinh thấy được tầm quan trọng của vấn đề và việc ứng dụng của kiến thức trước hết
để đáp ứng những yêu cầu của môn học, sau đó là việc ứng dụng của nó vào các công việc thực tiễn trong đời sống xã hội
Trong thời đại thông tin bùng nổ ngày nay, việc lập được các chương trình
tự hoạt động cho máy tính, máy gia dụng là cần thiết Và để làm được việc đó cần
có một quá trình nghiên cứu, học tập về ngôn ngữ lập trình lâu dài, qua đó người lập trình có thể chọn một ngôn ngữ lập trình thích hợp Tuy nhiên mọi thứ điều có điểm khởi đầu của nó, với học sinh việc học lập trình giúp các em hình dung được
sự ra đời, cấu tạo, hoạt động cũng như ích lợi của các chương trình hoạt động trong
Trang 2máy tính, các máy tự động…Qua đó giúp các em có thêm một định hướng, một niềm đam mê về tin học, về nghề nghiệp mà các em chọn sau này
Tuy nhiên, trong các môn học ở bậc học THPT thì môn Tin học lớp
11 được các em học sinh cho là môn học “khó nhai” nhất trong các môn học Từ việc các em chỉ là người sử dụng các phần mềm sẵn có như: hệ điều hành, soạn thảo văn bản Word, bảng tính Excel, các phần mềm học tập, nghe nhạc hay chơi game… thì các em lại là người phải tìm ra lời giải cho các bài toán, chỉ ra các bước cho máy tính thực hiện và viết chương trình để tạo ra các sản phẩm phần mềm cho người khác sử dụng mặc dù mới chỉ là bước khởi đầu, cơ bản
Các em học sinh phải làm quen với nhiều kiểu dữ liệu mới mà trong các môn học khác không có, nhiều học sinh còn bỡ ngỡ không hiểu vì sao cùng là kiểu số nguyên mà lại chia làm nhiều kiểu khác nhau mà trong toán học chỉ gồm số nguyên âm và nguyên dương Hoặc các loại thông tin như hình ảnh, âm thanh… được 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?
Để khắc phục được điều đó, theo tôi chúng ta cần phải tìm tòi, nghiên cứu tìm ra những bài toán phù hợp, kích thích được sự độc lập, tích cực của học sinh trong học tập Học sinh có thể tự mình tìm ra được những ý tưởng sáng tạo vận dụng thiết thực vào cuộc sống thực tế khi nhu cầu nảy sinh, khi đó các em có thể tự mình hoàn thành được ý tưởng đó
Trên cơ sở những gì mà học sinh được học tập về lập trình, để giúp cho học sinh nhìn nhận vấn đề một cách tích cực hơn, sáng tạo hơn và nhất là giúp cho các
em có thể yêu thích lập trình nhiều hơn Hơn thế nữa, để các em thực sự hứng thú môn học này thì bản thân các em phải tự lập trình được những bài toán đơn giản, những bài toán đó phải được chạy đúng và cho kết quả cụ thể, có như thế mới kích thích được các em cố gắng
Xuất phát từ thực tế giảng dạy môn Tin học lớp 11 nhiều năm ở trường THPT Tĩnh Gia 4 của mình, tôi nhận thấy khả năng lập trình của đa số các em còn rất yếu, đặc biệt đối với phần đông HS không học khối A, B Nếu các em không làm được bài tập, sẽ dẫn đến chán nản, động lực học tập sẽ giảm sút Vì vậy trăn trở lớn nhất của những giáo viên dạy học như tôi là làm sao để giúp các em học yếu có thể lập trình giải được những bài toán đơn giản, làm được bài kiểm tra và những bài tập cơ bản cô giao trên lớp, chỉ như vậy thôi là các em đã nhen nhóm đam mê, khi làm được bài tập dễ rồi thì ắt sẽ có ý định lập trình những bài toán phức tạp hơn Đấy là thành công thực sự của bản thân tôi khi áp dụng cách phân loại bài tập mảng một chiều trong dạy học môn Tin học 11 ở trường THPT Tĩnh Gia 4
Tác giả viết SKKN “Sử dụng phương pháp phân loại các bài tập kiểu mảng một chiều nhằm nâng cao chất lượng giảng dạy học sinh yếu môn Tin học lớp
Trang 311 ở trường THPT Tĩnh Gia 4 ” dựa trên thực tế giảng dạy tại trường THPT Tĩnh
Gia 4, với những mong muốn có thể giúp được phần nào cho các đồng nghiệp, các
em HS hoặc các độc giả quan tâm đến vấn đề này thấy dễ dàng hơn khi gặp một bài toán dạng mảng một chiều trong nội dung chương trình Tin học lớp 11 của bộ giáo dục và hướng dẫn thực hiện phân phối chương trình của sở giáo dục và đào tạo Thanh Hóa
1.2 Mục đích nghiên cứu.
Xuất phát từ nhu cầu thực tế giảng dạy Tin học lớp 11 nhiều năm ở trường THPT Tĩnh Gia 4, tôi nhận thấy bản thân cần phải xây dựng những giáo án với các phương pháp dạy học khác nhau để phù hợp với các đối tượng học sinh ở các lớp sao cho đa số các em đều có thể hiểu bài, đặc biệt là có thể lập trình để giải quyết những bài toán đơn giản trong sách giáo khoa và sách bài tập nhằm nâng cao hiệu quả học tập của HS Đó chính là mục đích nghiên cứu đề tài này của bản thân tôi
1.3 Đối tượng nghiên cứu
Đối tượng nghiên cứu của đề tài này là học sinh yếu môn Tin học ở các lớp
11 của trường THPT Tĩnh Gia 4
1.4 Phương pháp nghiên cứu.
Đề tài nghiên cứu dựa trên các phương pháp nghiên cứu xây dựng cơ sở lí thuyết, phương pháp điều tra khảo sát thực tế, phương pháp nêu và giải quyết vấn
đề, phương pháp thu thập thông tin
Trang 42 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
- Khi học sinh học Bài 11 “Kiểu mảng”, việc học sinh tiếp cận được với ngôn ngữ lập trình có cấu trúc một việc không đơn giản, hơn nữa bài tập kiểu mảng lại nhiều, đa dạng nên học sinh gặp khó khăn trong lập trình nếu không biết phân loại bài tập để giải quyết chúng
- Ở bài kiểu mảng giáo viên có thể tạo sự hứng thú cho học sinh bằng các ví
dụ cụ thể, có thể làm được các công việc mà các em đã gặp trong thực tế cuộc sống như các bài toán đếm, các bài toán tính tổng,
- Việc lập trình giải quyết các bài toán bằng 1 ngôn ngữ lập trình cụ thể các
em đã được làm quen từ đầu năm đến giờ nên đa số học sinh sẽ dễ bắt nhịp khi lập trình giải các bài toán kiểu mảng
2.2 Thực trạng vấn đề trước khi áp dụng sáng kiến kinh nghiệm
Khi bắt đầu vào dạy học phần mảng một chiều ở chương trình Tin học lớp 11 thì tôi nhận thấy những khó khăn sau:
- Đây là bài đầu tiên về kiểu dữ liệu có cấu trúc nên kiến thức HS tiếp cận còn mới
- Bài tập về kiểu mảng một chiều từ dễ đến khó rất nhiều, phức tạp, nhiều dạng nên việc phân loại để giải đối với HS yếu khá vất vả
Do những khó khăn nói trên, nếu giáo viên không tìm được phương pháp dạy học phù hợp với các đối tượng HS khác nhau thì sẽ dẫn đến phần lớn HS yếu không làm được bài tập, khi đó các em sẽ cảm thấy chán nản, không hứng thú với môn học, không nắm vững kiến thức về phần mảng một chiều và ảnh hưởng lớn đến kết quả học tập những phần sau Chính vì vậy, việc giáo viên giảng dạy phải có phương pháp để phân loại các dạng bài tập đơn giản giúp nâng cao hứng thú lập trình của HS yếu là vấn đề cốt lõi, nếu làm được điều đó mới kích thích được các
em học tốt lập trình, có ý thức lập trình và chất lượng học tập của HS cũng sẽ được nâng lên Thực tế áp dụng phương pháp phân loại các bài tập cơ bản về mảng một chiều của bản thân trong giảng dạy Tin học 11 nhiều lớp, nhiều năm ở trường THPT Tĩnh Gia 4 tôi thấy kết quả học tập nâng lên rõ rệt, hầu hết HS đều có khả năng lập trình những bài toán cơ bản về mảng một chiều, kết quả các bài kiểm tra
và bài thi hết học kỳ 1 được tăng lên so với trước, và đó cũng là động lực để giúp một bộ phận không nhỏ HS tìm tòi để lập trình những bài toán khó hơn, phức tạp hơn
2.3 Các giải pháp đã sử dụng để giải quyết vấn đề
2.3.1 Dạng 1 Các bài toán tính tổng các phần tử của mảng một chiều thỏa mãn điều kiện nào đó
Trang 5(Gồm tổng các phần tử chẵn, lẻ, âm, dương, bội của 1 số k )
a Phương pháp tiến hành
Khi gặp những bài toán như trên thì cần:
a1 Xác định bài toán: Gồm 2 phần:
- Input: Số nguyên N, các phần tử từ a1,a2, ,an.
- Output: Tính tổng các phần tử thỏa mãn điều kiện nào đó.
a2 Thuật toán:
- Nhập số phần tử (n) của mảng 1 chiều (nếu có)
- Nhập giá trị các phần tử của mảng 1 chiều (a[i])
- S=0;
- Duyệt từ đầu đến cuối mảng, nếu thõa mãn điều kiện thì S=S+a[i];
- Đưa tổng S ra màn hình
a3 Cài đặt chương trình:
Dùng các câu lệnh ngôn ngữ lập trình C++ để lập trình giải quyết bài toán
b Ví dụ áp dụng
Ví dụ 1: Lập trình nhập vào từ bàn phím mảng một chiều gồm 10 phần tử nguyên, tính tổng các phần tử chẵn rồi đưa kết quả ra màn hình?
VD: Các phần tử của mảng 1 chiều gồm: 1 -2 4 6 5 19 12 -7 87 7
Kết quả S=20
Cách làm:
b1 Xác định bài toán:
- Input: Các phần tử từ a1,a2, ,a10
- Output: Tính tổng các phần tử chẵn của mảng.
b2 Thuật toán:
- Nhập giá trị của 10 phần tử mảng 1 chiều
- s=0;
- Duyệt từ phần tử thứ 1 đến 10, nếu phần tử nào chẵn thì s=s+a[i]
- Đưa s ra màn hình
b3 Chương trình:
#include <bits/stdc+.h>
#define N 1000
using namespace std;
Trang 6int a[N+1];
int main()
{
for (int i=1; i<=10; i++)
cin>>a[i];
int s=0;
for (int i=1; i<=10; i++)
if ((a[i]%2) == 0) s=s+a[i];
cout<<s;
return 0;
}
Ví dụ 2: Lập trình nhập vào từ bàn phím mảng một chiều gồm n phần tử nguyên, tính tổng các phần tử dương rồi đưa kết quả ra màn hình?
VD: n=8 gồm các phần tử: 4 -3 -5 -8 6 5 -8 -9
Kết quả S = 15
Cách làm:
b1 Xác định bài toán:
- Input: Số nguyên n, dãy số từ a1,a2, ,an.
- Output: Tính tổng các phần tử dương của mảng.
b2 Thuật toán:
- Nhập n
- Nhập giá trị của n phần tử mảng 1 chiều
- s=0;
- Duyệt từ phần tử thứ 1 đến n, nếu phần tử nào >0 thì s=s+a[i]
- Đưa s ra màn hình
b3 Chương trình:
#include <bits/stdc+.h>
#define N 1000
using namespace std;
Trang 7int a[N+1];
int i,s,n;
int main()
{
cin >>n;
for (int i=1; i<=n; i++)
cin>>a[i];
s=0;
for (int i=1; i<=n; i++)
if (a[i]>0) s=s+a[i];
cout<<s;
return 0;
}
2.3.2 Dạng 2: Các bài toán đếm các phần tử của mảng một chiều thõa mãn điều kiện nào đó
(Gồm đếm các phần tử chẵn, lẻ, âm, dương, bội của 1 số k )
a Phương pháp tiến hành
Khi gặp những bài toán như trên thì cần:
a1 Xác định bài toán: Gồm 2 phần:
- Input: Số nguyên n, các pt từ a1,a2, ,an.
- Output: Đếm các phần tử thõa mãn điều kiện nào đó.
a2 Thuật toán:
- Nhập số phần tử (n) của mảng 1 chiều (nếu có)
- Nhập giá trị các phần tử của mảng 1 chiều (a[i])
- d=0;
- Duyệt từ đầu đến cuối mảng, nếu thõa mãn điều kiện thì d=d+1;
- Đưa d ra màn hình
a3 Cài đặt chương trình:
Dùng các câu lệnh C++ để lập trình giải quyết bài toán
Trang 8b Ví dụ áp dụng
Ví dụ 1: Lập trình nhập vào từ bàn phím mảng một chiều gồm 10 phần tử nguyên, đếm các phần tử lẻ rồi đưa kết quả ra màn hình?
VD: Các phần tử của mảng gồm: 1 -3 2 -5 4 3 6 9 12 14
Kết quả d=5
Cách làm:
b1 Xác định bài toán:
- Input: Các pt từ a1,a2, ,a10
- Output: Đếm các phần tử lẻ của mảng.
b2 Thuật toán:
- Nhập giá trị của 10 phần tử mảng 1 chiều
- d=0;
- Duyệt từ phần tử thứ 1 đến 10, nếu phần tử nào lẻ thì d=d+1;
- Đưa d ra màn hình
b3 Chương trình:
#include <bits/stdc+.h>
#define N 1000
using namespace std;
int a[N+1];
int d;
int main()
{
for (int i=1; i<=10; i++)
cin>>a[i];
d=0;
for (int i=1; i<=10; i++)
if (a[i]%2!=0) d=d+1;
cout<<d;
return 0;
}
Trang 9Ví dụ 2: Lập trình nhập vào từ bàn phím mảng một chiều gồm n phần tử nguyên, đếm các phần tử âm rồi đưa kết quả ra màn hình?
VD: cho n=7 gồm các phần tử: -1 3 -6 -4 3 7
Kết quả d=3
Cách làm:
b1 Xác định bài toán:
- Input: Số nguyên n, dãy số từ a1,a2, ,an.
- Output: Đếm các phần tử âm của mảng.
b2 Thuật toán:
- Nhập n
- Nhập giá trị của n phần tử mảng 1 chiều
- d=0;
- Duyệt từ phần tử thứ 1 đến n, nếu phần tử nào <0 thì d=d+1;
- Đưa d ra màn hình
b3 Chương trình:
#include <bits/stdc+.h>
#define N 1000
using namespace std;
int a[N+1];
int d,n;
int main()
{
cin>>n;
for (int i=1; i<=n; i++)
cin>>a[i];
d=0;
for (int i=1; i<=n; i++)
if (a[i] <0) d=d+1;
cout<<d;
Trang 10return 0;
}
2.3.3 Dạng 3: Các bài toán in vị trí hoặc giá trị các phần tử của mảng một chiều thõa mãn điều kiện nào đó (cũng có thể in cả vị trí và giá trị các phần tử)
(Gồm in vị trí hoặc giá trị các phần tử chẵn, lẻ, âm, dương, bội của 1 số k )
a Phương pháp tiến hành
Khi gặp những bài toán như trên thì cần:
a1 Xác định bài toán: Gồm 2 phần:
- Input: Số nguyên N, các phần tử từ a1,a2, ,an.
- Output: In vị trí hoặc các phần tử thõa mãn điều kiện nào đó.
a2 Thuật toán:
- Nhập số phần tử (n) của mảng 1 chiều (nếu có)
- Nhập giá trị các phần tử của mảng 1 chiều (a[i])
- Duyệt từ đầu đến cuối mảng, nếu thõa mãn điều kiện thì
- Đưa chỉ số i hoặc đưa ra các giá trị a[i] ra màn hình
a3 Cài đặt chương trình:
Dùng các câu lệnh ngôn ngữ C++ để lập trình giải quyết bài toán
b Ví dụ áp dụng
Ví dụ 1: Lập trình nhập vào từ bàn phím mảng một chiều gồm 10 phần tử nguyên, in ra màn hình vị trí các phần tử là bội của 3.
VD: Mảng có 10 phần tử gồm: 1 3 -6 5 8 9 12 34 69 22
Kết quả: 2 3 6 7 9
Cách làm:
b1 Xác định bài toán:
- Input: Các pt từ a1,a2, ,a10
- Output: In ra màn hình vị trí các phần tử là bội của 3 trong mảng.
b2 Thuật toán:
- Nhập giá trị của 10 phần tử mảng 1 chiều
- Duyệt từ phần tử thứ 1 đến 10, nếu phần tử nào chia hết cho 3 thì đưa i ra màn hình
b3 Chương trình:
Trang 11#include <bits/stdc+.h>
#define N 1000
using namespace std;
int a[N+1];
int main()
{ for (int i=1; i<=10; i++)
cin>>a[i];
for (int i=1; i<=10; i++)
if (a[i]%3==0) cout <<i<<“ ”;
return 0;
}
Ví dụ 2: Lập trình nhập vào từ bàn phím mảng một chiều gồm n phần tử nguyên, đưa ra màn hình các giá trị là bội của 5?
VD: n=8 gồm các giá trị: 2 -5 4 10 8 15 -4 20
Kết quả là : -5 10 15 20
Cách làm:
b1 Xác định bài toán:
- Input: Số nguyên n, dãy số từ a1,a2, ,an.
- Output: Đưa ra màn hình các phần tử là bội của 5 trong mảng.
b2 Thuật toán:
- Nhập n
- Nhập giá trị của n phần tử mảng 1 chiều
- Duyệt từ phần tử thứ 1 đến n, nếu phần tử nào chia hết cho 5 thì đưa phần tử
đó ra màn hình
b3 Chương trình:
#include <bits/stdc+.h>
#define N 1000
using namespace std;
int a[N+1];
int n;