Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 43 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
43
Dung lượng
768,56 KB
Nội dung
Chuyên đề xử lý mảng chiều ngôn ngữ lập trình Python C++ PHẦN I ĐẶT VẤN ĐỀ I LÝ DO CHỌN ĐỀ TÀI: Trong thời đại 4.0 - xu hướng kết hợp hệ thống ảo thực thể, vạn vật kết nối internet - thách thức ý niệm vai trò thực người, có người thầy.Vai trò người thầy kỉ XXI trở nên phức tạp giới thay đổi nhanh chóng, nơi mà tri thức vô tận Dạy học phân hóa quan điểm phải quan tâm đặc biệt Người thầy phải quan tâm đến người, nhu cầu họ khác lớp học không đồng nhất, nhiệm vụ người thầy tạo mơi trường học tập, tạo điều kiện để họ có hội học tập theo phương pháp tích cực sáng tạo Vai trị người thầy để giúp cho học sinh điều chỉnh thay đổi xã hội? Người thầy phải làm cho học sinh chủ động, hào hứng đón nhận hội đồng thời thách thức phải vượt qua Người thầy xác định vấn đề cần quan tâm, đặc biệt đối tượng người học ngày khác trước, với động tình cảm quan tâm rộng không gian lẫn thời gian Nếu trước học để tham gia vài lĩnh vực ngày nay, người học quan tâm đến nhiều lĩnh vực khơng nói tất -chính khơn ngoan giúp họ tồn xã hội thay đổi Do vậy, phải có cách tiếp cận khác, khơng giống cách cũ Là giáo viên Tin học, nhận thấy chương trình giáo dục phổ thơng thay đổi để đáp ứng nhu cầu thời đại Giáo viên Tin học ngồi việc dạy kiến thức phổ thơng tin học ứng dụng việc dạy học lập trình quan trọng; trách nhiệm người giáo viên Tin học giúp học sinh hiểu hoạt động máy tính, am hiểu khoa học kỹ thuật, góp phần định hướng học sinh có lực đam mê Tin học vào đội ngũ nhân lực CNTT chất lượng cao đất nước Tuy nhiên, theo thấy dạy lập trình chủ yếu người ta dùng ngơn ngữ lập trình C++ gần ngơn ngữ lập trình Python mà hầu hết giáo viên phổ thông dạy học ngơn ngữ lập trình Pascal Trong q trình tự học ngơn ngữ lập trình C++ Python , tơi nhận thấy khó khăn gặp phải tiếp cận với ngơn ngữ Chính vậy, để giúp giáo viên học sinh tiếp cận ngôn ngữ Python C++ cách dễ dàng Tôi xin đưa SKKN “Chuyên đề xử lý mảng chiều ngơn ngữ lập trình Python C++” II MỤC ĐÍCH NGHIÊN CỨU - Trong phạm vi đề tài mình, tơi muốn nghiên cứu, tìm tịi cách sử dụng ngơn ngữ lập trình C++ Python để giải toán dãy số tin học Nhằm giúp học sinh: + Biết sử dụng mảng chiều cách linh hoạt C++ Python Chuyên đề xử lý mảng chiều ngôn ngữ lập trình Python C++ + Hiểu vận dụng linh hoạt số hàm có sãn ngơn ngữ lập trình + Giúp học sinh tiếp cận dễ dàng với C++ Python - Cũng qua đề tài, muốn đồng nghiệp trao đổi, trau dồi chuyên môn nhằm góp phần nâng cao trình độ chun mơn nghiệp vụ khả mở rộng kiến thức III ĐỐI TƯỢNG, THỜI GIAN NGHIÊN CỨU: * Đối tượng nghiên cứu: Nghiên cứu mảng chiều ngôn ngữ Python C++ cho học sinh từ trung bình trở lên * Thời gian nghiên cứu: Sáng kiến thực từ tháng năm 2020 đến tháng năm 2021 IV PHƯƠNG PHÁP VÀ NHIỆM VỤ NGHIÊN CỨU: * Phương pháp nghiên cứu: Phương pháp Đặt vấn đề - giải vấn đề Phương pháp phân tích tổng hợp Phương pháp thực nghiệm, so sánh đối chiếu * Nhiệm vụ nghiên cứu: - Giáo viên hoàn thành nội dung đề tài, báo cáo thành chuyên đề lần họp tổ chuyên môn để đồng nghiệp bổ sung thiếu sót đề tài Giao lưu học hỏi, trao đổi kinh nghiệm với đồng môn trường lân cận - Thực nghiệm dạy học: Ở trường THPT công tác từ năm học 20202021 đánh giá hiệu đề tài - Hướng dẫn học sinh nghiêm túc nghiên cứu thực đề tài trình học tập nhằm nâng cao phát triển khả lập trình thân Chuyên đề xử lý mảng chiều ngơn ngữ lập trình Python C++ PHẦN II NỘI DUNG NGHIÊN CỨU I CƠ SỞ LÝ LUẬN: Để giải toán mảng cách tối ưu, học sinh phải biết khái niệm mảng chiều, thuật tốn thơng dụng mảng; Học sinh phải có kỹ nhận dạng toán phát biểu nhiều dạng khác lựa chọn thuật tốn thích hợp để giải II THỰC TRẠNG CỦA VẤN ĐỀ: Môn Tin học mới, việc tổ chức thi HSG tỉnh cho trường THPT không chuyên khoảng mười lăm năm trở lại Nên giáo viên việc tìm tịi, học tập, nghiên cứu để nâng cao trình độ gặp nhiều khó khăn Hầu hết, đội ngũ giáo viên trường không chuyên quen với ngôn ngữ lập trình Pascal, chưa mạnh dạn chuyển sang dạy ngơn ngữ C + + Python khơng quen chương trình mắc lỗi khơng biết khắc phục Vì vậy, q trình tập huấn ngơn ngữ lập trình C++ sở Giáo dục Nghệ An, tự nghiên cứu ngơn ngữ lập trình Python tơi ln trăn trở tích cực trao đổi kinh nghiệm, thảo luận nội dung, phương pháp, kỹ thuật với đồng nghiệp trường số trường khác khu vực Chúng tơi có nhận xét khó khăn dạy học bồi dưỡng học sinh giỏi môn Tin học sau: - Tài liệu viết C++, Python nhiều vào giải toán cụ thể thường hay mắc lỗi cách xử lý - Cú pháp câu lệnh hàm C++ , Python khác so với Pascal - Chưa hiểu hết thư viện C++, Python - Tài liệu môn Tin học để bồi dưỡng HSG khơng nhiều, đặc biệt chương trình chuẩn C++ , Python việc tìm kiếm tài liệu dạy học phù hợp trình độ học sinh vất vả - Hệ thống tập ỏi, rời rạc nên việc tổng hợp tập đề thi thành dạng tập phục vụ dạy học nhiều thời gian - Các đề thi Tin học thường khơng có đáp án Giáo viên học sinh muốn trao đổi với bạn trường chuyên gặp trở ngại ngơn ngữ lập trình Thực tế, qua kỳ thi HSG tỉnh Nghệ An có nhiều học sinh, giáo viên khó hiểu thi làm điểm thi thấp khó hiểu kéo dài đáp án tham khảo test chấm không công bố III GIẢI QUYẾT VẤN ĐỀ: Khái quát ngơn ngữ lập trình Python C++ 1.1 Khái qt ngơn ngữ lập trình Python Hiện với đặc điểm, tính vượt trội đa phần lập trình viên lựa chọn Python ngơn ngữ lập trình Vậy Python gì? Là ngơn ngữ lập Chuyên đề xử lý mảng chiều ngôn ngữ lập trình Python C++ trình mã nguồn mở đa mục đích, loại ngơn ngữ bậc cao, thơng dịch hướng đối Điều đặc biệt Python ? Đó cú pháp python dễ hiểu, dễ học việc phát triển ứng dụng ngơn ngữ linh hoạt Python hỗ trợ mẫu đa lập trình, bao gồm lập trình hướng đối tượng, lập trình hàm mệnh lệnh phong cách lập trình theo thủ tục Python khơng làm việc lĩnh vực đặc biệt lập trình web mà cịn sử dụng với web, 3D CAD, Và ngơn ngữ lập trình động nên bạn khơng cần sử dụng kiểu liệu khai báo Python giúp cho việc phát triển ứng dụng debug trở nên nhanh chóng Là ngơn ngữ có hình thức sáng sủa, cấu trúc rõ ràng, cú pháp ngắn gọn Python với tốc độ xử lý cực nhanh, python tạo chương trình từ script siêu nhỏ tới phần mềm cực lớn Biender 3D 1.2 Khái qt ngơn ngữ lập trình C++ C ++ ngơn ngữ lập trình đa thường tham gia vào việc phát triển hệ thống lớn phức tạp Ngôn ngữ ngôn ngữ di động tồn vịng trịn ngơn ngữ lập trình Khi so sánh Python C ++, Python tuân theo quy tắc “viết lần, chạy đâu”, có nghĩa mã hoạt động tất hệ điều hành Tuy nhiên, mã C ++ cần biên dịch hệ điều hành trước thực thi Sự khác biệt lớn thảo luận Python với C ++ mã nguồn C ++ cần trở thành mã máy Python tuân theo chiến thuật khác diễn giải Tuy nhiên, việc giải mã thường chậm so với chạy mã trực tiếp phần cứng Kiểu mảng chiều ngôn ngữ lập trình Python Trong Python, mảng loại liệu đặc biệt, gồm nhiều phần tử phần tử liệu riêng biệt Mảng chiều gọi List danh sách 2.1 Khái niệm List chiều List chiều dãy hữu hạn phần tử kiểu List đặt tên phần tử có số Để mô tả List chiều cần xác định kiểu phần tử cách đánh số phần tử Để người lập trình xây dựng sử dụng kiểu List chiều, ngơn ngữ lập trình có quy tắc cách thức cho phép xác định: • Tên kiểu List chiều; • Số lượng phần tử; Chuyên đề xử lý mảng chiều ngơn ngữ lập trình Python C++ • Kiểu liệu phần tử; • Cách khai báo biến; • Cách tham chiếu đến phần tử 2.2 Khai báo kiểu List Tổng quát, khai báo biến List chiều có dạng: = [] # khai báo List rỗng = [, ,,,…,] # khai báo List có giá trị Trong đó: : tên người lập trình đặt, tuân theo quy tắc đặt tên; [, ,,,…,] : dãy giá trị viết cách dấu phẩy bao hàm dấu ngoặc vuông [] = [0]*10 # khai báo List có 10 giá trị = [0.5]*10 # khai báo List có 10 giá trị 0.5 Ví dụ: >>> A=[] #Tạo list rỗng >>> B=[1,2,6,7,8] # Tạo List số nguyên >>> C=[2.3,5.6,7.8] #Tạo List số thực >>> D=[1,"ONE",4,5.7,"TWO"] #Tạo List hỗn hợp *) List có khả chứa kiểu liệu khác bao gồm Ví dụ 1: >>> x=20; y="Nghệ An";z=True; >>> E=[x,y,z,3.14,90] >>> E [20, 'Nghệ An', True, 3.14, 90] Ví dụ 2: >>> A=[1,2,[24,56,7],"Nghệ An"] >>> A [1, 2, [24, 56, 7], 'Nghệ An'] *) Tạo List có giá trị liên tục gồm n phần tử cấu trúc lặp for Ví dụ: >>> A=[i for i in range(20)] # Tạo List có giá trị liên tục từ đến 19 >>> A Chuyên đề xử lý mảng chiều ngơn ngữ lập trình Python C++ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] *) Tạo list dựa vào cơng thức chung Ví dụ 1: Cơng thức chung tạo list [n,n*2,n*3] n nhận giá trị 1,2, >>> A=[[n,n*2,n*3] for n in range(1,4)] >>> A [[1, 2, 3], [2, 4, 6], [3, 6, 9]] Ví dụ 2: Công thức chung tạo list [n,n*2,n*3] n nhận giá trị 0,1, >>> A=[[n,n*2,n*3] for n in range(3)] >>> A [[0, 0, 0], [1, 2, 3], [2, 4, 6]] >>> Như vậy: - List giới hạn cặp ngoặc vuông [] - Các phần tử cách dấu phẩy - List có khả chứa kiểu liệu khác bao gồm 2.3 Cách tham chiếu đến phần tử Tham chiếu tới phần tử List chiều xác định tên List với số, viết cặp ngoặc [ ] • Cách truy cập phần tử mảng danh sách A với số k sau: A[k] Ví dụ 1: Các phần tử danh sách có kiểu liệu khác >>>A=[5, 'Nghệ An', True, 3.14] >>> A[0] >>> A[2] True >>> A[1] 'Nghệ An' >>> A[-1] # Chỉ số -1 đưa giá trị phần tử cuối danh sách 3.14 Chuyên đề xử lý mảng chiều ngơn ngữ lập trình Python C++ Ví dụ 2: A=['H', 'Ọ', 'C', ' ', 'P', 'Y', 'T', 'H', 'O', 'N'] Mảng A H Ọ C P Y T H O N Chỉ số dương Chỉ số âm -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 2.4 Nhập xuất liệu cho mảng chiều • Đối với nhập liệu dùng lệnh append phép cộng(+) • Đối với in mảng dùng lệnh: print( Ví dụ: Cách 1: Sử dụng phép(+) Chuyên đề xử lý mảng chiều ngơn ngữ lập trình Python C++ Cách 2: Dùng hàm append 2.5 Các phép toán phương thức List a Các phép toán *) Phép cộng (+): Phép + dùng để ghép nối tự nhiên nhiều List với Ví dụ: >>> A=[1,3,5] >>> B=[4,"Python",10,"Nghệ An"] >>> C=A+B >>> C [1, 3, 5, 4, 'Python', 10, 'Nghệ An'] *) Phép nhân (*): Phép nhân List với số tự nhiên phép cộng nhiều lần danh sách Ví dụ: >>> A=[1,3,5] >>> B=A*3 >>> B [1, 3, 5, 1, 3, 5, 1, 3, 5] >>> G=[6]*10 >>> G Chuyên đề xử lý mảng chiều ngơn ngữ lập trình Python C++ [6, 6, 6, 6, 6, 6, 6, 6, 6, 6] b Một số hàm thường dùng List *) Hàm tính độ dài danh sách Cú pháp: len() Ý nghĩa: Cho giá trị kích thước mảng Ví dụ: >>> A=[4,5,6,4,3,5,6,7,8,9] >>> len(A) 10 *) Hàm bổ sung phần tử append: Cú pháp: .append() Trong đó: số, biến List… Ý nghĩa:Bổ sung vào cuối danh sách phần tử Ví dụ: Với số >>> A=[1, 2, 3, "Việt Nam",99] >>> A.append(100) >>> A [1, 2, 3, 'Việt Nam', 99, 100] +) Với List >>> A=[1,2,3,"Việt Nam"] >>> B=[4,5,6] >>> A.append(B) >>> A [1, 2, 3, 'Việt Nam', [4, 5, 6]] *) Hàm insert: Cú pháp: .insert(,) Ý nghĩa: chèn vào danh sách trước Ví dụ: >>> A=[1, 2, 3, 'Việt Nam', 99, 100] >>> A.insert(3,500) >>> A Chuyên đề xử lý mảng chiều ngơn ngữ lập trình Python C++ [1, 2, 3, 500, 'Việt Nam', 99, 100] *) Xóa giá trị có List Cú pháp: .remove() Ví dụ: Xóa giá trị 22 A >>> A=[1, 22, 3,22, 99, 100] >>> A.remove(22) [1, 3, 22, 99, 100] *) Hàm del: Cú pháp: del [vị trí] Ý nghĩa: Xóa phần tử [vị trí] List Ví dụ 1: Xóa phần tử có số A A = [2,5,6,8,100000,11,9,12,45,32] print ("Danh sách trước xóa la ", A) del A[4] print ("Danh sách sau xóa ", A) Kết quả: Danh sách sau xóa [2, 5, 6, 8, 11, 9, 12, 45, 32] Chú ý: Nếu muốn xóa nhiều vị trí ta dùng câu lệnh : Ví dụ 2: Xóa phần tử khỏi danh sách A A = [2,5,6,8,9,11,9,12,45,32] print ("Danh sách trước xóa la ", A) del A[1:3] print ("Danh sách sau xóa ", A) Kết quả: Danh sách sau xóa [2, 8, 9, 11, 9, 12, 45, 32] *) Hàm đảo phần tử List Cú pháp: .reverse() Ý nghĩa: Hàm cho giá trị đảo ngược mảng cho Ví dụ: Cho danh sách A, in danh sách đảo ngược A A = [1,2,3,4,5,6,7,8,9] print ("Danh sách trước đảo ", A) A.reverse() 10 Chuyên đề xử lý mảng chiều ngơn ngữ lập trình Python C++ Bài tốn 2:Tìm giá trị lớn thứ Viết chương trình nhập số nguyên dương N (N 250) dãy N số nguyên dương a1, a2 , , aN, số khơng vượt q 1000 u cầu: Tìm giá trị lớn thứ dãy A Dữ liệu vào: - Dòng chứa số tự nhiên N (N < 250) - N dòng tiếp theo, dòng chứa số tự nhiên phần tử dãy A Dữ liệu ra: - Dòng 1: Ghi giá trị lớn hai dãy A Ví dụ: Dữ liệu vào Dữ liệu 10 7476985968 *) Phân tích ý tưởng giải toán: Gọi số lớn mảng max1, số lớn thứ hai mảng max2 i) So sánh phần tử thứ A[0] với phần tử thứ hai A[1] mảng A Phần tử có giá trị lớn max1, phần tử lại max2 ii) Từ phần tử thứ trở Với A[i] (i từ đến n) xảy trường hợp sau: * TH1: max2