1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Skkn cấp tỉnh Đề tài Ứng dụng lớp bài toán kiểu dữ liệu danh sách trong bồi dưỡng học sinh giỏi

36 1 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Ứng Dụng Lớp Bài Toán Kiểu Dữ Liệu Danh Sách Trong Bồi Dưỡng Học Sinh Giỏi
Tác giả Châu Đức Vinh
Trường học Trường THPT Thái Hòa
Chuyên ngành Tin học
Thể loại Đề tài
Năm xuất bản 2024
Thành phố Nghệ An
Định dạng
Số trang 36
Dung lượng 1,09 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Cấu trúc

  • PHẦN I. ĐẶT VẤN ĐỀ (4)
    • 1. ý do chọn đề tài (0)
    • 2. ục đích nghiên cứu (0)
    • 3. Nhiệm vụ và phạm vi nghiên cứu (5)
      • 3.1. Nhiệm vụ nghiên cứu (5)
      • 3.2. Phạm vi nghiên cứu (5)
    • 4. Đối tượng nghiên cứu (5)
    • 5. Phương pháp nghiên cứu (5)
      • 5.1. Nhóm phương pháp nghiên cứu lý luận (5)
      • 5.2. Nhóm phương pháp nghiên cứu thực tiễn (6)
      • 5.3. Phương pháp thực nghiệm (6)
    • 6. Tính mới và đóng góp của đề tài (6)
  • PHẦN II. NỘI DUNG (6)
    • 1. Cơ sở lý luận (6)
      • 1.1. Lý luận về chương trình phổ thông mới (0)
      • 1.2. Lý luận dạy học về dạy học lập trình Python (0)
    • 2. Cơ sở thực tiễn (8)
    • 3. Giải pháp thực hiện (9)
      • 3.1. Một số kiến thức cơ bản về kiểu dữ liệu danh sách (0)
      • 3.2. Sự giống và khác nhau kiểu dữ liệu danh sách trong Python và kiểu mảng (12)
      • 3.3. Các dạng bài toán (13)
      • 3.4. Lớp các bài tập về kiểu dữ liệu danh sách (0)
    • 4. hảo sát sự cấp thiết và tính khả thi của giải pháp đề xuất (0)
      • 4.1. Mục đích khảo sát (0)
      • 4.2. Nội dung và phương pháp khảo sát (30)
      • 4.3. Đối tượng khảo sát (30)
      • 4.4. Kết quả khảo sát về tính cấp thiết và tính khả thi của các giải pháp đã đề xuất (0)
    • 5. ết quả đạt được (0)
      • 5.1. Đối với học sinh (35)
      • 5.2. Đối với giáo viên (35)
      • 5.3. Khả năng mang lại lợi ích thiết thực của sáng kiến (0)
    • PHẦN 3: ẾT UẬN (0)
      • 1. ết luận (0)
      • 2. Đề xuất phạm vi (36)

Nội dung

Đối bậc trung học phổ thông là giai đoạn giáo dục hướng nghề nghiệp nên ngay từ lớp 10 đã đưa vào Chủ đề F: “Giải quyết vấn đề với sự trợ giúp của máy tính” trong đó có đưa ngôn ngữ lập

NỘI DUNG

Cơ sở lý luận

1.1 ý luận về chương trình phổ thông mới

Chương trình môn Tin học ở cấp trung học phổ thông nhằm củng cố và nâng cao năng lực tin học của học sinh, phát triển từ giai đoạn giáo dục cơ bản Đồng thời, chương trình cũng cung cấp kiến thức định hướng nghề nghiệp trong lĩnh vực tin học và ứng dụng tin học cho học sinh.

Bài viết nhằm giúp học sinh nắm vững kiến thức cơ bản về hệ thống máy tính, các kỹ thuật thiết kế thuật toán, tổ chức dữ liệu và lập trình Qua đó, học sinh sẽ củng cố và phát triển tư duy giải quyết vấn đề, khả năng đưa ra ý tưởng và giao nhiệm vụ cho máy tính thực hiện một cách hiệu quả.

Học sinh sẽ được trang bị kỹ năng ứng dụng tin học, giúp tạo ra các sản phẩm số phục vụ cộng đồng và nâng cao hiệu quả công việc Bên cạnh đó, các em còn có khả năng lựa chọn, sử dụng và kết nối các thiết bị số, dịch vụ mạng, truyền thông, phần mềm và các tài nguyên số khác.

Giúp học sinh phát triển khả năng hòa nhập và thích ứng với xã hội số bằng cách ứng dụng công nghệ thông tin và truyền thông trong học tập và tự học Học sinh cần biết cách tìm kiếm và trao đổi thông tin một cách phù hợp, tuân thủ pháp luật, có đạo đức, ứng xử văn hóa và có trách nhiệm Đồng thời, việc trang bị kiến thức về các ngành nghề liên quan cũng rất quan trọng để học sinh có cái nhìn tổng quát hơn về thị trường lao động.

5 vực tin học, chủ động và tự tin trong việc định hướng nghề nghiệp tương lai của bản thân

1.2 ý luận dạy học về dạy học lập trình Python

Python là một ngôn ngữ lập trình kịch bản do Guido van Rossum phát triển, với phiên bản đầu tiên ra mắt vào năm 1991 và hiện tại đã có các phiên bản 3.x.x Được biết đến là một ngôn ngữ lập trình cấp cao và linh hoạt, Python có khả năng chạy trên nhiều nền tảng như Windows, Mac OS, Linux và Raspberry Pi Những tính năng nổi bật của Python đã góp phần làm cho ngôn ngữ này trở nên phổ biến trong cộng đồng lập trình.

Cú pháp Python rất đơn giản, điều này khiến nó dễ sử dụng cho người mới bắt đầu Nhiều người cho rằng cách hiệu quả nhất để học Python cơ bản là bắt tay vào việc viết chương trình ngay lập tức Hầu hết cú pháp của Python mang tính logic cao, giúp người học nhanh chóng phát triển chương trình của riêng mình.

Python được nhiều lập trình viên coi là ngôn ngữ lập trình dễ học nhất, và hiện nay nó đang được giảng dạy rộng rãi trong các trường học trên toàn cầu.

Những tính năng trên đã khiến Python trở nên phổ biến trên toàn thế giới

Nó được sử dụng trong nhiều lĩnh vực khác nhau như:

 Phát triển trang web Back-end

 Khoa học dữ liệu và phân tích

 Phát triển ứng dụng di động

 Robot và AI (Trí tuệ nhân tạo)

Cùng với một số ưu điểm thì Python có một số hạn chế trong lĩnh vực hiệu suất Sau đây là một một số nhược điểm của Python:

Python là một ngôn ngữ lập trình thông dịch, điều này khiến cho tốc độ thực thi của nó chậm hơn so với các ngôn ngữ biên dịch như C, C++ và Java.

Python tiêu thụ bộ nhớ lớn do các cấu trúc của nó yêu cầu nhiều không gian lưu trữ hơn Vì vậy, ngôn ngữ này không phù hợp cho việc phát triển trong môi trường có hạn chế về bộ nhớ.

Kiểm tra mã Python gặp khó khăn do ngôn ngữ này dựa trên trình thông dịch, khiến các lỗi chỉ xuất hiện trong thời gian chạy Điều này làm cho việc kiểm tra các đoạn mã viết bằng Python trở nên phức tạp hơn.

Cơ sở thực tiễn

Thực trạng chung: a, Đối với học sinh

Cấu trúc đề thi học sinh giỏi môn Tin học hiện nay được thiết kế để phù hợp với kỳ thi tốt nghiệp trung học phổ thông Quốc gia, cho phép học sinh lựa chọn môn thi Theo đề thi minh họa của Bộ Giáo dục và Đào tạo, phần I bao gồm các câu hỏi trắc nghiệm và phần II có câu hỏi đúng sai, giúp đánh giá toàn diện kiến thức của học sinh.

II Như vậy khi các em cần nắm vững kiến thức các chủ đề để làm tốt bài thi Cùng với đó Sở giáo dục đào tạo Nghệ An cũng có dự thảo về phương án cấu trúc đề thi học sinh giỏi tỉnh theo cấu trúc mới gồm 3 phần: Phần I ( Câu hỏi nhiều lựa chọn); phần II ( Lựa chọn đúng/ sai); phần III ( Tự luận) Trong đó bài toán về số và dãy số được ứng dụng nhiều Vì vậy học sinh cần hiểu rõ được thuật toán đồng thời cần nắm vững cấu trúc của câu lệnh với các kiểu dữ liệu phù hợp Tuy nhiên đa số học sinh ở cấp THCS biết đến với ngôn ngữ lập trình nâng cao C++ Trong đó dữ liệu cấu trúc bên C++ khác với Python, nhất là dữ liệu kiểu danh sách

Trong chương trình học cấp THCS, nhiều học sinh vẫn theo chương trình cũ và chỉ một số trường dạy tin học cho lớp 8 và lớp 9 với ngôn ngữ lập trình Pascal hoặc C++ Tuy nhiên, do cơ sở vật chất hạn chế, nhiều học sinh không có cơ hội tiếp cận môn tin học, dẫn đến việc không biết đến ngôn ngữ lập trình bậc cao Trong khi đó, học sinh lớp 10 và 11 học chương trình mới đã làm quen với ngôn ngữ Python Những học sinh đã biết Pascal hay C++ thường đặt câu hỏi về cách xử lý dữ liệu trong Python, liệu chúng có dễ viết và dễ sử dụng hay không Đối với học sinh đội tuyển, họ băn khoăn về việc liệu Python có hỗ trợ kiểu dữ liệu mảng như C++ để giải quyết các bài toán dạng dãy có cùng giá trị, và cách xử lý khi dãy không có các giá trị cùng kiểu.

Nhiều học sinh thường cho rằng môn tin lập trình là khó khăn, vì yêu cầu không chỉ nắm vững ngôn ngữ lập trình mà còn phải hiểu rõ các khái niệm toán học cơ bản Họ cũng cần phải tìm ra thuật toán tối ưu để giải quyết các bài toán một cách hiệu quả.

Giáo viên dạy đội tuyển cơ bản đã nỗ lực tìm tòi và đầu tư thời gian, tuy nhiên, họ vẫn gặp khó khăn trong việc tiếp cận ngôn ngữ lập trình Python do kinh nghiệm còn hạn chế.

Cấu trúc đề thi học sinh giỏi cấp huyện và cấp tỉnh yêu cầu giáo viên bồi dưỡng nhiều chuyên đề cho học sinh Trong đó, chuyên đề về dãy các giá trị cùng kiểu hoặc khác kiểu là một trong những nội dung thường gặp trong các đề thi học sinh giỏi môn Tin học Đây là loại bài toán dạng danh sách, rất quan trọng để học sinh nắm vững kiến thức và kỹ năng cần thiết.

- Tài liệu về ôn thi đội tuyển thật sự rất khó tìm để phù hợp cả học sinh và giáo viên

Chương trình giáo dục phổ thông mới đã chọn ngôn ngữ lập trình Python làm công cụ giảng dạy lập trình Điều này giúp giáo viên có cơ hội tiếp cận và làm quen với ngôn ngữ này Tuy nhiên, trong quá trình giảng dạy, giáo viên chủ yếu vẫn phải tự tìm hiểu và khám phá ngôn ngữ Python.

Kiểu dữ liệu danh sách trong Python cho phép lưu trữ các giá trị có cùng hoặc khác kiểu dữ liệu Do đó, khi làm việc với các giá trị khác kiểu, người dùng cần hiểu rõ các phép toán tương ứng để xử lý hiệu quả Điều này thường là thách thức đối với cả giáo viên và học sinh.

Môn tin học lần đầu tiên được đưa vào lựa chọn thi tốt nghiệp và đại học, gây không ít bỡ ngỡ cho cả học sinh và giáo viên do thiếu kinh nghiệm trong việc tổ chức và chuẩn bị cho kỳ thi này.

Để đạt kết quả cao trong các kỳ thi học sinh giỏi cấp tỉnh và huyện, giáo viên cần trang bị kiến thức lý thuyết đầy đủ cho tất cả các chủ đề và biết vận dụng để giải quyết bài toán thực tiễn trong phần tự

Giải pháp thực hiện

3.1 ột số kiến thức cơ bản về kiểu dữ liệu danh sách

3.1.1.Kiểu dữ liệu danh sách

Python cung cấp các cấu trúc dữ liệu đặc biệt gọi là cấu trúc tuần tự, cho phép lưu trữ nhiều phần tử được đánh số thứ tự, giúp việc truy xuất trở nên dễ dàng hơn.

- Danh sách là một trong những kiểu dữ liệu tuần tự được sử dụng phổ biến nhất của Python

- Danh sách (list) là một kiểu dữ liệu đa năng trong python có thể chứa một danh sách các phần tử ( Có thể khác kiểu)

3.1.2 Các thao tác trong kiểu dữ liệu danh sách (list) a hởi tạo danh sách ( list) a.1 Dạng liệt kê:

= [, ,…,]

Ví dụ: Tạo xâu r ng s1 s1 = “”

Tạo xâu s2 s2 = “Viet Nam” Có s2[0] = “V”, s2[1] = “i”, …., s2[7] = “m”

- Duyệt qua từng phần tử của xâu: s = “Ha Noi Viet Nam” for i in s: print(i,end=“ “)

Xuất ra màn hình dòng chữ: H a N o i V i e t N a m

– Hàm len() trả về số phần tử của danh sách

+ Nối danh sách: +

Ví dụ: list = A +C thì list gồm 8 phần tử

+ Nhân bản phần tử: *

Ví dụ: lits1 = A * 3 thì list1 gồm 12 phần tử a.2 Dạng mô tả (list comprehension):

[ for in ] ưu ý: ở đây có thể là list, range hoặc str

- Tạo danh sách A gồm 4 phần tử và A[0] = 1, A[1] =2, A[2] = 3, A[3] = 4

- Tạo danh sách D gồm 4 phần tử, D[0] = 2, D[1] = 4, D[2] = 9, D[3] = 16

Ví dụ 3: s = “2 3 5 8 10” c = [int(x) for x in s.split()]

-Tạo danh sách c gồm 5 phần tử, có giá trị là 2, 3, 5, 8, 10

Ví dụ 4: d = [x for x in range(0,11,2)]

-Tạo danh sách d gồm 6 phần tử, có giá trị lần lượt là 0, 2, 4, 6, 8, 10

Ví dụ 5: s = "12345" e = [int(x) for x in s]

Tạo danh sách e gồm 5 phần tử, có giá trị lần lượt là 1, 2, 3, 4, 5

Ví dụ 6: s = “2 3 5 8 10” d = list(map(int,s.split()))

Để tạo danh sách d gồm 5 phần tử với các giá trị 2, 3, 5, 8, 10, bạn có thể nhập dữ liệu từ bàn phím Phương pháp nhập dữ liệu từng phần tử thường áp dụng khi bạn đã biết trước số lượng phần tử của mảng.

Ví dụ: Nhập dữ liệu vào danh sách số nguyên a gồm có n phần tử từ bàn phím

- Nhập số phần tử của danh sách n = int(input(“Mời nhập số phần tử: “));

-Khởi tạo danh sách r ng a = []

- Xuất dòng thông báo for i in range(0,n): print(“Phần tử thứ”,i+1,”là:”,end=“ “)

- Lấy giá trị nhập vào và chuyển sang kiểu số nguyên temp = int(input())

Để thêm phần tử vào cuối danh sách trong Python, bạn có thể sử dụng phương thức a.append(temp) Điều này cho phép bạn nhập toàn bộ phần tử vào danh sách, ngay cả khi số lượng phần tử chưa được xác định trước.

Nhập dữ liệu vào danh sách số nguyên a từ bàn phím bằng cách sử dụng câu lệnh: a = list(map(int, input("Mời nhập các phần tử của danh sách: ").split())) Các số trong danh sách được phân cách bởi dấu cách.

3.1.3 Một số lệnh làm việc kiểu danh sách

Hàm append dùng để bổ sung đối tượng vào cuối danh sách, ví dụ: a.append() Hàm clear giúp xóa dữ liệu trong danh sách, biến danh sách a thành rỗng với cú pháp a.clear() Hàm copy cho phép trả về một danh sách mới có giá trị giống danh sách a, được sử dụng với cú pháp a.copy().

Hàm `extend(a)` cho phép mở rộng danh sách `a` bằng cách thêm một đối tượng vào cuối danh sách Hàm `index(a)` sẽ trả về chỉ số đầu tiên của giá trị trong danh sách `a` Cuối cùng, hàm `insert(a)` cho phép chèn một đối tượng vào danh sách `a` tại vị trí chỉ định.

Chèn vào danh sách ở trước vị trí index remove a.remove() Xóa đi phần tử đầu tiên có giá trị bằng

Hàm `reverse()` trong Python được sử dụng để đảo ngược thứ tự các phần tử trong danh sách `a` Trong khi đó, hàm `sort()` cho phép sắp xếp danh sách `a` theo thứ tự tăng dần hoặc giảm dần, tùy thuộc vào tham số `reverse`, với giá trị `True` cho sắp xếp giảm và `False` cho sắp xếp tăng.

3.2 Sự giống và khác nhau kiểu dữ liệu danh sách trong Python và kiểu mảng trong C++

- ưu trữ nhiều phần tử: Cả hai đều được sử dụng để lưu trữ nhiều phần tử trong một cấu trúc dữ liệu duy nhất

- Truy cập phần tử: Cả hai đều cho phép truy cập vào các phần tử trong danh sách/mảng thông qua chỉ số

- Phép toán cơ bản: Cả hai h trợ các phép toán cơ bản như thêm, xóa, cập nhật phần tử

- iểu dữ liệu phần tử:

+ Python: Danh sách trong Python có thể chứa các phần tử với các kiểu dữ liệu khác nhau, kể cả các danh sách khác

Trong C++, mảng thường chỉ chứa các phần tử cùng kiểu dữ liệu Người dùng có thể sử dụng mảng 2 chiều để mô phỏng cấu trúc dữ liệu tương tự như danh sách trong Python, mặc dù điều này không phải là mặc định.

+ Python: Danh sách trong Python có thể thay đổi kích thước linh hoạt theo nhu cầu mà không cần khai báo trước kích thước

+ C++: Mảng trong C++ cần phải khai báo kích thước tĩnh hoặc sử dụng các cấu trúc dữ liệu động như std::vector để có thể thay đổi kích thước

+ Python: Danh sách trong Python h trợ các phương thức như append, remove, pop, để điều chỉnh nội dung của danh sách một cách linh hoạt

Trong C++, việc quản lý mảng thường yêu cầu triển khai các hàm riêng để thêm và xóa phần tử Mặc dù có thể sử dụng các cấu trúc dữ liệu như std::vector, nhưng vẫn cần sự hỗ trợ từ thư viện chuẩn để thực hiện các thao tác này hiệu quả.

3.3.1 Các bài toán về kiểu dữ liệu danh sách cùng kiểu dữ liệu

Trong lập trình, có nhiều bài toán và thuật toán liên quan đến kiểu dữ liệu danh sách, còn được gọi là mảng hoặc vector Dưới đây là một số ví dụ minh họa cho các ứng dụng của kiểu dữ liệu này.

Trong bài toán này, bạn cần xác định xem trong một dãy số nguyên gồm N phần tử có tồn tại phần tử nào có giá trị bằng số nguyên k hay không Nếu tìm thấy, hãy trả về vị trí của phần tử đó; nếu không, hãy trả về -1.

Hàm linear_search thực hiện việc tìm kiếm giá trị k trong mảng arr bằng phương pháp tuần tự Khi giá trị được tìm thấy, hàm sẽ trả về chỉ số của phần tử tương ứng Ngược lại, nếu không tìm thấy, hàm sẽ trả về -1.

Trong hàm main, người dùng nhập vào một dãy số nguyên cùng với giá trị k Sau đó, hàm linear_search được gọi để tìm kiếm giá trị k trong dãy số Kết quả của quá trình tìm kiếm sẽ được hiển thị trên màn hình.

The provided program implements a linear search algorithm in Python It defines a function called `linear_search` that takes an array and a target value `k` as inputs The function iterates through the array to find the index of the target value, returning its position if found, or -1 if not The user is prompted to input a sequence of integers and a target value, and the program then calls the `linear_search` function If the target value is found, it outputs the index; otherwise, it notifies the user that the value is not present in the array.

Bài toán yêu cầu viết chương trình để nhập vào từ bàn phím một danh sách số nguyên Chương trình sẽ đếm và hiển thị số lượng phần tử lớn hơn phần tử đứng ngay trước và ngay sau nó Để thực hiện, người dùng sẽ nhập một dãy số nguyên, và chương trình sẽ sử dụng vòng lặp để kiểm tra các điều kiện cần thiết.

ết quả đạt được

Đánh giá Tính khả thi của các giải pháp đã đề xuất

1 - Sử dụng chuyên đề số trong bồi dưỡng học sinh giỏi

2 - Giải quyết bài toán lập trình bằng việc lựa chọn ngôn ngữ phù hợp khi tìm hiểu về C++ và Python 33.8 Khả thi

Kết quả khảo sát cho thấy cả học sinh và giáo viên đều đánh giá đề tài này rất khả thi với điểm trung bình đạt 3.24 Điều này chứng minh rằng đề tài sẽ trở thành tài liệu hữu ích trong việc dạy học, ôn thi và bồi dưỡng học sinh giỏi.

Học sinh lớp 10 và 11 không chỉ tìm hiểu ngôn ngữ lập trình Python mà còn nhận biết được những điểm mạnh của nó Các em được tiếp cận với các bài toán từ cơ bản đến nâng cao, đặc biệt là các ứng dụng liên quan đến kiểu dữ liệu danh sách Trong năm học 2023-2024, trường tôi đã có 2 học sinh tham gia thi và đạt thành tích đáng tự hào với 1 giải nhì và 1 giải ba.

Giáo viên có tài liệu trong bồi dưỡng học sinh giỏi, có tài liệu về chuyên đề dữ liệu danh sách trong ngôn ngữ lập trình Python

5.3 hả năng mang lại lợi ích thiết thực của sáng kiến

Là tài liệu cho học sinh và giáo viên trong việc ôn thi và bồi dưỡng học sinh giỏi cấp trường, huyện, tỉnh

Đề tài này tập hợp các bài toán sử dụng kiểu dữ liệu danh sách trong Python, giúp giáo viên nhận diện ưu nhược điểm của ngôn ngữ này Đã được áp dụng trong giảng dạy bồi dưỡng học sinh giỏi tại trường THPT Thái Hòa và chia sẻ với giáo viên các trường THPT Nghệ An, đề tài đã mang lại kết quả tích cực Học sinh nắm vững các bài toán vận dụng kiểu dữ liệu danh sách, từ đó cải thiện kỹ năng lập trình và thành tích trong các kỳ thi học sinh giỏi.

Ngày đăng: 09/03/2025, 21:14

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
1. Sách Python cơ bản – Tác giả Võ Duy Tuấn Sách, tạp chí
Tiêu đề: Sách Python cơ bản
Tác giả: Võ Duy Tuấn
2. Think Pyhton 2nd Edition- Tác giả Allen B. Downey 3. A Byte of Python – Tác giả CodeGym Sách, tạp chí
Tiêu đề: Think Python 2nd Edition
Tác giả: Allen B. Downey
4. Dive into Python 3 – Tác giả Mark Pilgrim Sách, tạp chí
Tiêu đề: Dive into Python 3
Tác giả: Mark Pilgrim
5. Đường vào lập trình Python – Nhà xuất bản Đại học Quốc Gia Hà Nội Sách, tạp chí
Tiêu đề: Đường vào lập trình Python
Nhà XB: Nhà xuất bản Đại học Quốc Gia Hà Nội
6. Tuyển tập bộ đề thi học sinh giỏi THPT môn tin học – Nhà xuất bản Dân Trí Khác

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w