intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Sáng kiến kinh nghiệm THPT: Những bài tập và code xử lý mảng một chiều bằng ngôn ngữ lập trình C++

Chia sẻ: _ _ | Ngày: | Loại File: PDF | Số trang:23

29
lượt xem
5
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Mục đích nghiên cứu sáng kiến "Những bài tập và code xử lý mảng một chiều bằng ngôn ngữ lập trình C++" nhằm giúp học sinh khối 11 giải được một số bài toán đơn giản trên máy tính bằng cách vận dụng được các kiến thức về thuật toán, cấu trúc dữ liệu, và ngôn ngữ lập trình cụ thể (C++) để giải các bài toán liên quan đến mảng một chiều.

Chủ đề:
Lưu

Nội dung Text: Sáng kiến kinh nghiệm THPT: Những bài tập và code xử lý mảng một chiều bằng ngôn ngữ lập trình C++

  1. SÁNG KIẾN KINH NGHIỆM Đề tài: “NHỮNG BÀI TẬP VÀ CODE XỬ LÝ MẢNG MỘT CHIỀU BẰNG NNLT C++” Môn: Tin học Giáo viên: Nguyễn Quang Hùng – Trường THPT Kim Liên Năm học: 2021-2022 Số điện thoại: 097348411
  2. MỤC LỤC A. ĐẶT VẤN ĐỀ: ……………………………………………………………2 I. Lý do chọn đề tài: ……………………………………………………2 II. Tính cấp thiết của đề tài: ……………………………………………3 III. Tính mới của đề tài: ………………………………………………..3 IV. Khả năng ứng dụng và triển khai đề tài: ………………………… .3 V. Đối tượng và phạm vi nghiên cứu: …………………………………3 B. NỘI DUNG: ……………………………………………………………….4 I. Cơ sở lý luận: ………………………………………………………..4 II. Thực trạng của vấn đề: ……………………………………………...5 III. Giải quyết vấn đề: …………………………………………………5 3.1. Dạng các bài toán tìm phần tử trong mảng: ……………….5 3.2. Dạng các bài toán sắp xếp trong mảng một chiều: ………..13 3.3 – Bài tập áp dụng:………………………………………….15 IV. Đánh giá và kết quả thực hiện: …………………………………..18 C. KẾT LUẬN: …………………………………………………………… . 19 D. TÀI LIỆU THAM KHẢO: ……………………………………………. .20 1
  3. A. ĐẶT VẤN ĐỀ I. Lý do chọn đề tài Chúng ta đang từng bước triển khai Chương trình giáo dục phổ thông mới, trong đó môn Tin học ngày càng khẳng định vai trò chủ đạo trong việc trang bị cho người học khả năng tìm kiếm, tiếp nhận, mở rộng tri thức và sáng tạo trong thời đại cách mạng công nghiệp lần thứ tư và toàn cầu hóa. Pascal là ngôn ngữ lập trình thuộc dạng mệnh lệnh và thủ tục. Ngôn ngử này đã đáp ứng được các yêu cầu cơ bản trong chương trình tin học bậc THPT như cung cấp kiến thức cơ bản về thuật toán, cấu trúc dữ liệu, vận dụng kiến thức để giải được một số bài toán đơn giản trên máy tính bằng lập trình. Vì vậy, những ưu điểm của ngôn ngữ này đối với tin học là rất lớn. Tuy nhiên, Pascal cũng có rất nhiều nhược điểm như rườm rà, phức tạp và lỗi thời…. Những ngôn ngữ ra đời sau đã có những bước cải tiến, trong đó có ngôn ngữ lập trình C++. Đây là một ngôn ngữ lập trình hướng đối tượng, học các môn học về cấu trúc dữ liệu và giải thuật,..mặc dù Pascal vẫn có những ưu điểm nhất định và vẫn có thể cung cấp kiến thức cơ bản cho những người học lập trình cơ bản nhưng mức độ vận dụng cũng như phát triển mở rộng của nó vẫn còn nhiều hạn chế. Thay đổi Pascal bằng ngôn ngữ khác như C++ sẽ giúp bồi dưỡng và phát triển tư duy lập trình cũng như tư duy ứng dụng cho học sinh. Qua nhiều đợt tập huấn về ngôn ngữ lập trình C++. Từ năm học 2020-2021 tôi đã sử dụng và giảng dạy cho học sinh lớp 11 tại trường THPT Kim Liên bằng ngôn ngữ lập trình C++ Trong quá trình giảng dạy tôi đã dành nhiều thời gian để nghiên cứu, tìm kiếm, sưu tầm, phân loại được một số bài tập về mảng một chiều. Nên tôi viết đề tài “NHỮNG BÀI TẬP VÀ CODE XỬ LÝ MẢNG MỘT CHIỀU BẰNG NNLT C++” nhằm hệ thống hóa toàn bộ kiến thức về mảng một chiều để giúp giáo viên và học sinh sử dụng trong việc dạy và học. Khi trao đổi với đồng nghiệp cùng trường và một số giáo viên ở trường khác trong khu vực, tôi nhận thấy còn nhiều giáo viên khi dạy về vấn đề mảng một chiều còn khó khăn khi đưa ra các bài tập và code viết bằng NNLT C++, cho nên tôi mạnh dạn trao đổi kinh nghiệm của mình. Rất mong các đồng nghiệp nhận xét, góp ý để đề tài của tôi ngày càng hoàn thiện và ứng dụng rộng rãi trong thực tiễn. Các bài toán và code mà tôi đưa ra chỉ nhằm giới thiệu cho học sinh cách viết chứ chưa hẳn là một phương án tối ưu để giải quyết bài toán cụ thể đó. II. Tính cấp thiết của đề tài Các bài toán về mảng là rất quan trọng khi bắt đầu làm quen với lập trình, nó thường gây ra khó khăn cho Học sinh khi mới bắt đầu làm quen và Giáo viên khi 2
  4. mới bắt đầu viết C++. Vì vậy việc đưa ra nhiều bài toán và code của nó là rất cần thiết. - Giúp học sinh khối 11 giải được một số bài toán đơn giản trên máy tính bằng cách vận dụng được các kiến thức về thuật toán, cấu trúc dữ liệu, và ngôn ngữ lập trình cụ thể (C++) để giải các bài toán liên quan đến mảng một chiều. - Đưa ra nội dung mục 1: Mảng một chiều, bài 11: Kiểu mảng, sách Tin học 11 để hướng dẫn học sinh nghiên cứu, thảo luận qua đó nắm vững kiến thức về kiểu mảng một chiều như khai báo, xử lý mảng một chiều … Từ đó hình thành ở học sinh khả năng phân tích, xử lý các vấn đề liên quan đến mảng một chiều trong việc lập trình giải các bài toán đơn giản. III. Tính mới của đề tài - Đưa ra được nhiều bài tập mới về mảng một chiều và code viết bằng NNLT C++ - Đưa ra một số định hướng để giải bài toán về mảng một chiều trong NNLT C++ IV. Khả năng ứng dụng và triển khai đề tài Đề tài có thể là tài liệu tham khảo bổ ích cho Học sinh, Giáo viên THPT đặc biệt là Học sinh khá, giỏi. V. Đối tượng và phạm vi nghiên cứu 5.1. Đối tượng nghiên cứu - Học sinh THPT. - Giáo viên trường THPT. - Các bài toán về mảng một chiều. 5.2. Nội dung nghiên cứu - Đề tài nghiên cứu hệ thống lớp các bài toán về mảng một chiều và code bằng ngôn ngữ lập trình c++. 5.3. Phạm vi nghiên cứu - Bám sát nội dung chương trình Tin học THPT. - Mở rộng phù hợp với nội dung thi Học sinh giỏi Tỉnh 6. Phương pháp và nhiệm vụ nghiên cứu 6.1. Phương pháp nghiên cứu - Kiểm tra đôn đốc việc học tập của học sinh. - Kiểm tra thường xuyên, định kỳ. - Hướng dẫn nghiên cứu, thảo luận nội dung đưa ra - Tham khảo các tài liệu về Ngôn ngữ lập trình C++ 6.2. Nhiệm vụ nghiên cứu Rút ra một số kinh nghiệm để giải các bài toán về mảng một chiều khi dạy tin học lớp 11 chương trình Tin học THPT. 3
  5. B. NỘI DUNG I– CƠ SỞ LÝ LUẬN: Để giải quyết các bài toán về mảng một chiều một cách tối ưu, học sinh phải biết khái niệm mảng, các thuật toán thông dụng ; Học sinh phải có kỹ năng nhận dạng bài toán khi được phát biểu dưới nhiều dạng khác nhau và lựa chọn thuật toán thích hợp để giải quyết. 1.1. Khái niệm: Mảng một chiều là một tập hợp các phần tử cùng kiểu. Mảng được đặt tên, mỗi phần tử có một chỉ số. 1.2. Cách khái báo [Số lượng phần tử] ; Ví dụ: int a [100]; 1.3. Cách truy nhập đến phần tử mảng [chỉ số] Ví dụ: a[5] 1.4. Cách nhập xuất phần tử mảng +) Nhập phần tử mảng - Khi biết trước số lượng phần tử mảng cin>>n; For(int i=0; i>a[i]; - Nhập khi chưa biết số lượng phần tử mảng int i, n=0; while (cin>>i) { n++; a[n]=i; } +) xuất mảng for(int i=0; i
  6. 1.5. Một số dạng bài toán thường gặp: Dạng 1: Tìm phần tử Dạng 2: Sắp xếp phần tử mảng II – THỰC TRẠNG CỦA VẤN ĐỀ: Dạy học lập trình bằng NNLT C++ còn khá mới, nên đối với một số giáo viên việc tìm tòi tài liệu, bài tập phù hợp với trình độ học sinh đã gặp rất nhiều khó khăn, việc tổng hợp bài tập và đề thi thành các dạng bài tập phục vụ giảng dạy mất rất nhiều thời gian. III – GIẢI QUYẾT VẤN ĐỀ: Giáo viên lần lượt đưa ra từng dạng bài toán, phân tích đặc điểm bài toán, ý tưởng thuật toán và ví dụ minh họa cho mỗi dạng. Sau đó cho học sinh soạn thảo chương trình rồi tiến hành chấm bài tự động bằng phần mềm Themis của thầy Lê Minh Hoàng để thấy được hiệu quả của các phương pháp. 3.1. Dạng các bài toán tìm phần tử trong mảng */ Các bài toán tìm giá trị nhỏ nhất, lớn nhất Giá trị lẻ nhỏ nhất Viết chương trình nhập vào n(0
  7. void nhap(long long a[],long long &n) { cin>>n; for(long long i=0;i>a[i]; } int main() { long long a[nmax],n,i; nhap(a,n); long long minn; for(i=0;i
  8. } Giá trị nhỏ nhất đến vị trí k Viết chương trình nhập vào n(0n; 7
  9. for(int i=0;i>a[i]; cin>>t; for(int i=1;i>k; for(int j=0;j
  10. void nhap(long long a[],long long &n) { cin>>n; for(long long i=0;i>a[i]; } int main() { long long a[nmax],n,i; nhap(a,n); long long maxx; for(i=0;i
  11. if(a[i]
  12. ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); long long a[105];long long n; cin>>n; for(long long i=0;i>a[i]; } long long maxk=-1e9; long long t; for (long long i=0;i
  13. 5 13241 output 2 Code #include using namespace std; void nhap(int a[],int &n) { cin>>n; for(int i=0;i>a[i]; } int dem(int a[],int n, int m) { int d=0; for(int i=0;i
  14. } return maxx; } int main() { int a[100],b[100],n,i; nhap(a,n); for(i=0;i
  15. void swap(int &a, int &b){ int temp =a; a=b; b=temp; } // Ham sap xep tang void sortArrTang(int a[], int n){ for(int i=0;i
  16. // Ham xuat mang void printArr(int a[], int n){ for(int i=0;i
  17. Ví dụ • input 53 -1 3 2 -3 8 output -1 3 -3 8 2. Tổng mảng đến phần tử thứ K Viết chương trình nhập vào một dãy số a1,a2,..,an . Tính tổng các phần tử của dãy từ phần tử thứ 1 đến phần tử thứ k nào đó của dãy. Dữ liệu: - Dòng 1 ghi số nguyên dương n (n
  18. đang mở để mở hộp quà khác. Nếu hai người cùng bắt đầu mở 1 hộp quà, Bình sẽ nhường cho An. Yêu cầu: • Cho biết thời gian cần thiết để mở xong các hộp quà. Các bạn hãy tính xem khi tất cả các hộp quà đã mở xong, An và Bình, mỗi người mở được tất cả bao nhiêu hộp quà? Dữ liệu: • Dòng đầu tiên ghi số nguyên không âm n (1≤ n ≤ 105) – là số hộp quà có trên bàn. • Dòng 2 ghi n số nguyên t1, t2, …, tn cách nhau một dấu cách trống (1≤ ti ≤ 1000), với ti tính theo giây, là thời gian cần thiết để mở hộp quà thứ i, theo thứ tự từ trái sang phải. Kết quả: • In ra 2 giá trị là số hộp quà An và Bình đã mở được. Ví dụ • input 5 10 10 7 6 9 output 23 4. Dãy đối xứng Yêu cầu: Cho dãy số gồm n số nguyên a1, a2, ..., an là các số nguyên có giá trị tuyệt đối không vượt quá 104. Hãy tìm dãy con liên tiếp đối xứng dài nhất của dãy số nguyên trên (dãy con được quy ước là dãy có từ 2 phần tử trở lên). Dữ liệu: - Dòng đầu tiên ghi số nguyên không âm n (n
  19. Yêu cầu: Viết chương trình nhập vào một mảng và số nguyên X. Đếm số lượng cặp (i,j) sao cho 0
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
3=>0