Nội dung sáng kiến kinh nghiệm
Cơ sở lý luận của sáng kiến kinh nghiệm
Để giải quyết hiệu quả các bài toán liên quan đến mảng, học sinh cần hiểu rõ khái niệm về mảng một chiều và các thuật toán phổ biến Họ cũng phải phát triển kỹ năng nhận diện bài toán khi được trình bày dưới nhiều dạng khác nhau và lựa chọn thuật toán phù hợp để giải quyết vấn đề Kiến thức này là nền tảng giúp học sinh áp dụng vào các bài toán phức tạp hơn, đặc biệt khi làm việc với dữ liệu lớn.
Hiện nay, bài tập trong các tài liệu về ngôn ngữ lập trình rất phong phú và đa dạng Việc hệ thống hóa và phân loại các bài tập theo mức độ khó giúp học sinh dễ dàng tiếp thu kiến thức, đồng thời phát triển tư duy ngôn ngữ lập trình Điều này không chỉ nâng cao kỹ năng mà còn hình thành năng lực tích cực và thiết thực cho các em Xây dựng nền tảng lý thuyết vững chắc kết hợp với thực hành sẽ mang lại hiệu quả cao cho cả người học và người dạy.
2.2 Thực trạng của vấn đề trước khi áp dụng sáng kiến kinh nghiệm.
Hầu hết học sinh trong huyện chưa được tiếp cận với lập trình ở cấp hai, vì môn Tin Học vẫn là môn tự chọn cho khối 7, 8, 9 Điều này dẫn đến việc các em gặp khó khăn trong việc lựa chọn thuật toán và diễn đạt các câu lệnh, cú pháp khi viết chương trình.
Tài liệu bồi dưỡng học sinh giỏi môn Tin học, đặc biệt về C++, rất hạn chế và chủ yếu bằng tiếng Anh, khiến việc tìm kiếm tài liệu giảng dạy phù hợp với trình độ học sinh trở nên khó khăn.
Tại trường THPT Ba Đình, các em học sinh thể hiện sự nhận thức rõ ràng về vai trò quan trọng của công nghệ thông tin trong “Cách mạng công nghiệp 4.0” Các em hứng thú và tích cực phát triển ý tưởng để giải quyết các bài toán trên máy tính Sự quan tâm đến quy trình sản xuất phần mềm mà các em đang sử dụng đã kích thích niềm đam mê học lập trình Tin Học của các em.
Tôi đã quyết định áp dụng đề tài "Phân bậc hệ thống bài tập dạng toán sắp xếp và tìm kiếm trên mảng một chiều bằng ngôn ngữ lập trình C++".
2.3 Giải pháp và tổ chức thực hiện
2.3.1 Kiến thức cơ bản về mảng một chiều
- Mảng là một dãy hữu hạn các phần tử cùng kiểu dữ liệu.
Khi nói đến mảng ta cần xác định :
+ Kiểu dữ liệu của các phần tử mảng
+ Số phần tử của mảng.
* Khai báo không có khởi tạo:
[Số phần tử];
* Khai báo có khởi tạo:
[Số phần tử] = {dãy giá trị};
Hoặc: [ ] = {dãy giá trị} ;
(Lưu ý: Trong trường hợp không khai báo số phần tử mảng thì mảng vừa đủ lớn để lưu giữ các giá trị được khởi tạo)
-Tên kiểu dữ liệu: là các kiểu dữ liệu cơ bản hoặc kiểu dữ liệu có cấu trúc
- Tên biến mảng: do người dùng đặt theo quy tắc đặt tên
- Số phần tử: kích thước mảng Ví dụ: float x[5]={3,5,7,2,1} int a[ ] = {0, 2, 4, 6, 8};
* Số phần tử của mảng
Phải xác định cụ thể số phần tử ngay lúc khai báo, không được sử dụng biến hoặc hằng thường
Ví dụ: int n1 = 10; int a[n1]; const int n2 = 20; int b[n2];
Nên sử dụng chỉ thị tiền xử lý #define để định nghĩa số phần tử mảng
#define n2 20 int a[n1]; // int a[10]; int b[n1][n2]; // int b[10][20];
*Khởi tạo giá trị cho mảng lúc khai báo : Gồm các cách sau
Khởi tạo giá trị cho mọi phần tử của mảng: int a[4] = {2912, 1706, 1506, 1904}; a
Khởi tạo giá trị cho một số phần tử đầu mảng: int a[4] = {2912, 1706}; a
Khởi tạo giá trị 0 cho mọi phần tử của mảng: int a[4] = {0}; a
Tự động xác định số lượng phần tử: int a[] = {2912, 1706, 1506, 1904}; a
2.3.1.3 Cách truy xuất đến phần tử của mảng
[Chỉ số]
Lưu ý: -Mảng trong C++ được đánh số bắt đầu từ 0
-Khi khai báo mảng cần khai báo số phần tử thừa ra.
• Không hợp lệ: a[-1], a[5], a[6], … => Cho kết quả thường không như mong muốn!
2.3.1.4 Gán dữ liệu kiểu mảng
Không được sử dụng phép gán thông thường mà phải gán trực tiếp giữa các phần tử tương ứng:
= ; // sai
[] = ;
Cách 1: Biết số phần tử của mảng cin>>n; for (int i = 0 ; i < n; i++) cin>>a[i];
Cách 2: Chưa biết số phần tử của mảng int x, n = 0; while (cin >> x)
* Xuất mảng: for (int i=1 ; i