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: Chuyên đề xử lý mảng một chiều trên ngôn ngữ lập trình Python và C++

Chia sẻ: Hương Hoa Cỏ Mới | Ngày: | Loại File: PDF | Số trang:43

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

Mục tiêu nghiên cứu của sáng kiến kinh nghiệm là tìm tòi về cách sử dụng ngôn ngữ lập trình C++ và Python để giải quyết các bài toán về dãy số trong tin học. Nhằm giúp học sinh: Biết sử dụng mảng một chiều một cách linh hoạt trên C++ và Python Chuyên đề xử lý mảng một chiều trên ngôn ngữ lập trình Python và C++. Hiểu và vận dụng linh hoạt một số hàm có sãn trong ngôn ngữ lập trình. Giúp học sinh tiếp cận dễ dàng hơn với C++ và Python. Cũng qua đề tài, tôi muốn cùng đồng nghiệp trao đổi, trau dồi chuyên môn nhằm góp phần nâng cao trình độ chuyên môn nghiệp vụ và khả năng mở rộng kiến thức.

Chủ đề:
Lưu

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

  1. Chuyên đề xử lý mảng một chiều trên ngôn ngữ lập trình Python và 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 giữa các hệ thống ảo và thực thể, vạn vật kết nối internet - đang thách thức ý niệm của chúng ta về vai trò thực sự của con người, trong đó có người thầy.Vai trò của người thầy trong thế kỉ XXI trở nên phức tạp ở một thế giới thay đổi nhanh chóng, nơi mà tri thức hầu như vô tận. Dạy học phân hóa là quan điểm phải được quan tâm đặc biệt. Người thầy phải quan tâm đến từng người, nhu cầu họ rất khác nhau trong lớp học không đồng nhất, nhiệm vụ chính của người thầy là tạo môi trường học tập, tạo điều kiện để họ có cơ hội học tập theo phương pháp tích cực và sáng tạo. Vai trò của người thầy sẽ là gì để giúp cho học sinh điều chỉnh những 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 như một cơ hội đồng thời cũng là 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 là đối tượng người học ngày nay rất khác trước, với động cơ tình cảm và sự quan tâm rộng hơn về cả không gian lẫn thời gian. Nếu trước đây học để tham gia một vài lĩnh vực thì ngày nay, người học quan tâm đến rất nhiều lĩnh vực nếu không nói là tất cả -chính sự khôn ngoan này giúp họ tồn tại trong 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à một giáo viên Tin học, tôi nhận thấy chương trình giáo dục phổ thông mới đã thay đổi để đáp ứng nhu cầu của thời đại mới. Giáo viên Tin học ngoài việc dạy kiến thức phổ thông về tin học ứng dụng thì việc dạy học lập trình cũng hết sức quan trọng; trách nhiệm của người giáo viên Tin học là giúp học sinh hiểu hơn về sự hoạt động của máy tính, am hiểu về khoa học kỹ thuật, góp phần định hướng những học sinh có năng lực và đam mê Tin học vào đội ngũ nhân lực CNTT chất lượng cao của đất nước. Tuy nhiên, theo tôi thấy hiện nay dạy lập trình chủ yếu người ta dùng ngôn ngữ lập trình C++ và gần đây là ngôn ngữ lập trình Python mà hầu hết giáo viên phổ thông đang dạy học trên ngôn ngữ lập trình Pascal. Trong quá trình tự học ngôn ngữ lập trình C++ và Python , tôi nhận thấy những khó khăn gặp phải khi tiếp cận với ngôn ngữ này. Chính vì vậy, để giúp giáo viên và học sinh tiếp cận được ngôn ngữ Python và C++ một cách dễ dàng nhất. Tôi xin đưa ra SKKN “Chuyên đề xử lý mảng một chiều trên ngôn ngữ lập trình Python và C++”. II. MỤC ĐÍCH NGHIÊN CỨU - Trong phạm vi đề tài của mình, tôi muốn nghiên cứu, tìm tòi về cách sử dụng ngôn ngữ lập trình C++ và Python để giải quyết các bài toán về dãy số trong tin học. Nhằm giúp học sinh: + Biết sử dụng mảng một chiều một cách linh hoạt trên C++ và Python 1
  2. Chuyên đề xử lý mảng một chiều trên ngôn ngữ lập trình Python và C++ + Hiểu và vận dụng linh hoạt một số hàm có sãn trong ngôn ngữ lập trình. + Giúp học sinh tiếp cận dễ dàng hơn với C++ và Python - Cũng qua đề tài, tôi muốn cùng đồng nghiệp trao đổi, trau dồi chuyên môn nhằm góp phần nâng cao trình độ chuyên môn nghiệp vụ và khả năng 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 về mảng một chiều trong ngôn ngữ Python và C++ cho học sinh từ trung bình trở lên. * Thời gian nghiên cứu: Sáng kiến được thực hiện từ tháng 8 năm 2020 đến tháng 3 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 quyết 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 đề trong các lần họp tổ chuyên môn để cùng đồng nghiệp bổ sung những thiếu sót của đề tài. Giao lưu học hỏi, trao đổi kinh nghiệm với các đồng môn ở các trường lân cận. - Thực nghiệm dạy học: Ở trường THPT tôi đang công tác từ năm học 2020- 2021 đánh giá hiệu quả của đề tài. - Hướng dẫn học sinh nghiêm túc nghiên cứu và thực hiện đề tài trong quá trình học tập nhằm nâng cao và phát triển khả năng lập trình của bản thân. 2
  3. Chuyên đề xử lý mảng một chiều trên ngôn ngữ lập trình Python và C++ PHẦN II. NỘI DUNG NGHIÊN CỨU I. CƠ SỞ LÝ LUẬN: Để giải quyết các bài toán về mảng một cách tối ưu, học sinh phải biết khái niệm về mảng một chiều, các thuật toán thông dụng trên mả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. II. THỰC TRẠNG CỦA VẤN ĐỀ: Môn Tin học khá mới, việc tổ chức thi HSG tỉnh cho các trường THPT không chuyên khoảng mười lăm năm trở lại đây. Nên đối với 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 rất nhiều khó khăn. Hầu hết, đội ngũ giáo viên của các trường không chuyên đều 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 + + và Python bởi vì không quen và chương trình mắc lỗi không biết khắc phục. Vì vậy, trong quá trình tập huấn về ngôn ngữ lập trình C++ của sở Giáo dục Nghệ An, tự nghiên cứu về ngôn ngữ lập trình Python tôi luôn trăn trở và tích cực trao đổi kinh nghiệm, thảo luận về nội dung, phương pháp, kỹ thuật với đồng nghiệp cùng trường và một số ở trường khác trong khu vực. Chúng tôi đều có nhận xét về những khó khăn khi dạy học và bồi dưỡng học sinh giỏi bộ môn Tin học như sau: - Tài liệu viết về C++, Python rất nhiều nhưng khi đi vào giải quyết những bài toán cụ thể thường hay mắc lỗi và không biết cách xử lý. - Cú pháp câu lệnh và hàm trong C++ , Python khác so với Pascal. - Chưa hiểu hết các thư viện trong C++, Python. - Tài liệu về bộ môn Tin học để bồi dưỡng HSG không nhiều, đặc biệt chương trình chuẩn về C++ , Python rất hiếm cho nên việc tìm kiếm tài liệu dạy học phù hợp trình độ học sinh rất vất vả. - Hệ thống bài tập ít ỏi, rời rạc nê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ụ dạy học mất rất nhiều thời gian. - Các đề thi Tin học thường không có đáp án. Giáo viên và học sinh muốn trao đổi với các bạn trường chuyên thì gặp trở ngại về ngôn ngữ lập trình. Thực tế, qua các kỳ thi HSG tỉnh Nghệ An đã có rất nhiều học sinh, giáo viên khó hiểu khi bài thi làm đúng nhưng điểm thi vẫn rất thấp và sự khó hiểu đó vẫn cứ kéo dài do đáp án tham khảo và test chấm không được công bố. III. GIẢI QUYẾT VẤN ĐỀ: 1. Khái quát về ngôn ngữ lập trình Python và C++ 1.1. Khái quát về ngôn ngữ lập trình Python Hiện nay với những đặc điểm, tính năng vượt trội thì đa phần lập trình viên lựa chọn Python là ngôn ngữ lập trình. Vậy Python là gì? Là một ngôn ngữ lập 3
  4. Chuyên đề xử lý mảng một chiều trên ngôn ngữ lập trình Python và C++ trình mã nguồn mở đa mục đích, một loại ngôn ngữ bậc cao, thông dịch và hướng đối. Điều gì đặc biệt ở Python ? Đó là cú pháp của python khá dễ hiểu, dễ học và trong việc phát triển ứng dụng thì ngôn ngữ này cũng rất 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 và mệnh lệnh hoặc là các phong cách lập trình theo thủ tục. Python không chỉ làm việc trên lĩnh vực đặc biệt như lập trình web mà còn sử dụng với web, 3D CAD,.. Và nó là ngôn ngữ lập trình động nên bạn không cần sử dụng các kiểu dữ liệu khai báo. Python giúp cho việc phát triển ứng dụng và debug trở nên nhanh chóng hơn. Là một 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 có thể tạo ra những chương trình từ những script siêu nhỏ tới những phần mềm cực lớn như Biender 3D. 1.2 . Khái quát về ngôn ngữ lập trình C++ C ++ là một ngôn ngữ lập trình đa năng thường tham gia vào việc phát triển các hệ thống lớn và phức tạp. Ngôn ngữ này là ngôn ngữ di động nhất trong toàn bộ vòng tròn của các ngôn ngữ lập trình. Khi so sánh Python và C ++, Python tuân theo quy tắc “viết một lần, chạy ở bất kỳ đâu”, có nghĩa là một mã sẽ hoạt động trên tất cả các hệ điều hành. Tuy nhiên, mã C ++ cần được biên dịch trên mỗi hệ điều hành trước khi nó có thể thực thi. Sự khác biệt lớn nhất trong cuộc thảo luận về Python với C ++ là mã nguồn C ++ cần trở thành mã máy. Python tuân theo một chiến thuật khác khi nó được diễn giải. Tuy nhiên, việc giải mã thường chậm hơn so với chạy mã trực tiếp trên phần cứng. 2. Kiểu mảng một chiều trên ngôn ngữ lập trình Python Trong Python, mảng là một loại dữ liệu đặc biệt, nó gồm nhiều phần tử và mỗi phần tử là một dữ liệu riêng biệt. Mảng một chiều còn gọi là List hoặc danh sách 2.1. Khái niệm List một chiều List một chiều là dãy hữu hạn các phần tử cùng kiểu. List được đặt tên và mỗi phần tử của nó có một chỉ số. Để mô tả List một chiều cần xác định kiểu của các phần tử và cách đánh số các phần tử của nó. Để người lập trình có thể xây dựng và sử dụng kiểu List một chiều, các 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 một chiều; • Số lượng phần tử; 4
  5. Chuyên đề xử lý mảng một chiều trên ngôn ngữ lập trình Python và C++ • Kiểu dữ liệu của 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 một chiều có dạng: = [] # khai báo List rỗng = [, ,,,…,] # khai báo List có giá trị Trong đó: : là tên do người lập trình đặt, tuân theo quy tắc đặt tên; [, ,,,…,] : là một dãy giá trị được viết cách nhau bởi dấu phẩy và bao hàm trong dấu ngoặc vuông []. = [0]*10 # khai báo List có 10 giá trị bằng 0 = [0.5]*10 # khai báo List có 10 giá trị bằng 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ả năng chứa các kiểu dữ liệu khác nhau bao gồm cả chính nó. 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ử bắt đầu từ 0 bằng 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ừ 0 đến 19 >>> A 5
  6. Chuyên đề xử lý mảng một chiều trên ngôn ngữ lập trình Python và 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] và n nhận các giá trị 1,2, 3 >>> 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] và n nhận các giá trị 0,1, 2 >>> 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 bởi cặp ngoặc vuông [] - Các phần tử cách nhau bởi dấu phẩy - List có khả năng chứa các kiểu dữ liệu khác nhau bao gồm cả chính nó. 2.3. Cách tham chiếu đến phần tử. Tham chiếu tới phần tử của List một chiều được xác định bởi tên List cùng với chỉ số, được viết trong cặp ngoặc [ và ]. • Cách truy cập phần tử mảng của danh sách A với chỉ số k như sau: A[k] Ví dụ 1: Các phần tử của một danh sách có thể có các kiểu dữ liệu khác nhau >>>A=[5, 'Nghệ An', True, 3.14] >>> A[0] 5 >>> A[2] True >>> A[1] 'Nghệ An' >>> A[-1] # Chỉ số -1 đưa ra giá trị phần tử cuối cùng của danh sách 3.14 6
  7. Chuyên đề xử lý mảng một chiều trên ngôn ngữ lập trình Python và 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 0 1 2 3 4 5 6 7 8 9 Chỉ số âm -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 2.4. Nhập và xuất dữ liệu cho mảng một chiều • Đối với nhập dữ liệu chúng ta có thể dùng lệnh append hoặc phép cộng(+) • Đối với in mảng chúng ta dùng lệnh: print( Ví dụ: Cách 1: Sử dụng phép(+) 7
  8. Chuyên đề xử lý mảng một chiều trên ngôn ngữ lập trình Python và C++ Cách 2: Dùng hàm append 2.5. Các phép toán và phương thức của 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 nhau. 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 chính là phép cộng nhiều lần một 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 8
  9. Chuyên đề xử lý mảng một chiều trên ngôn ngữ lập trình Python và C++ [6, 6, 6, 6, 6, 6, 6, 6, 6, 6] b. Một số hàm thường dùng trong List *) Hàm tính độ dài danh sách Cú pháp: len() Ý nghĩa: Cho giá trị là kích thước của 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 đó: có thể là hằng số, biến hoặc là một List… Ý nghĩa:Bổ sung vào cuối danh sách như một phần tử Ví dụ: Với là hằng số >>> A=[1, 2, 3, "Việt Nam",99] >>> A.append(100) >>> A [1, 2, 3, 'Việt Nam', 99, 100] +) Với là một 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 9
  10. Chuyên đề xử lý mảng một chiều trên ngôn ngữ lập trình Python và C++ [1, 2, 3, 500, 'Việt Nam', 99, 100] *) Xóa một giá trị đầu tiên có trong List Cú pháp: .remove() Ví dụ: Xóa giá trị 22 đầu tiên trong 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ử tại [vị trí] bất kỳ trong List Ví dụ 1: Xóa phần tử có chỉ số 4 trong A A = [2,5,6,8,100000,11,9,12,45,32] print ("Danh sách trước khi xóa la ", A) del A[4] print ("Danh sách sau khi xóa là ", A) Kết quả: Danh sách sau khi xóa là [2, 5, 6, 8, 11, 9, 12, 45, 32] Chú ý: Nếu như muốn xóa nhiều vị trí ta dùng câu lệnh : Ví dụ 2: Xóa phần tử 1 và 2 khỏi danh sách A A = [2,5,6,8,9,11,9,12,45,32] print ("Danh sách trước khi xóa la ", A) del A[1:3] print ("Danh sách sau khi xóa là ", A) Kết quả: Danh sách sau khi xóa là [2, 8, 9, 11, 9, 12, 45, 32] *) Hàm đảo các phần tử trong List Cú pháp: .reverse() Ý nghĩa: Hàm cho giá trị đảo ngược của mảng đã cho Ví dụ: Cho danh sách A, in ra danh sách đảo ngược của A A = [1,2,3,4,5,6,7,8,9] print ("Danh sách trước khi đảo là ", A) A.reverse() 10
  11. Chuyên đề xử lý mảng một chiều trên ngôn ngữ lập trình Python và C++ print ("Danh sách sau khi đảo là ", A) Kết quả: Danh sách trước khi đảo là [1, 2, 3, 4, 5, 6, 7, 8, 9] Danh sách sau khi đảo là [9, 8, 7, 6, 5, 4, 3, 2, 1] *) Hàm sort: Cú pháp: .sort() Ý nghĩa: Sắp xếp lại danh sách theo thứ tự tăng dần của giá trị các phần tử. Ví dụ: *) Hàm count: Cú pháp: .count() Ý nghĩa: đếm tần số xuất hiện trong danh sách Ví dụ: Đếm tần số xuất hiện 6 trong mảng A 2.6 . Bài toán áp dụng Bài toán 1: Viết chương trình thực hiện công việc sau: • Nhập từ bàn phím số tự nhiên N(1
  12. Chuyên đề xử lý mảng một chiều trên ngôn ngữ lập trình Python và C++ - Viết hàm kiểm tra nguyên tố rồi lọc sang danh sách B. *) Chương trình tham khảo Kết quả: Dãy đã nhập là: [59, 1, 3, 8, 11] Dãy nguyên tố là: [59, 3, 11] Bài toán 2: Cho trước 2 dãy A,B. Dãy C được tạo ra bằng cách lần lượt lấy các phần tử từ A,B và đưa vào C. *)Phân tích và ý tưởng giải quyết bài toán. - Tìm kích thước nhỏ nhất p=min(len(A),len(B)) - Đổ cả 2 mảng vào với số phần tử là p for k in range(p): C.append(A[k]) C.append(B[k]) 12
  13. Chuyên đề xử lý mảng một chiều trên ngôn ngữ lập trình Python và C++ -Tìm phần còn lại của mảng có kích thước lớn hơn đổ vào C. *) Chương trình tham khảo Kết quả: Dãy C là: [1, 14, 7, -7, 8, 9, 9, 8, 15, 56, 17, 6, 59] Bài toán 3: Cho trước dãy A. Dãy B được thiết lập bằng cách tách các phần tử là số (số nguyên hoặc số thực ) từ dãy A. Ví dụ: A= [ 1.2 , “ one ” , 0.15 , “ A ” , “B ”, “ C ” , 1 , 50 , 4.56 , “ C ” ]. Khi đó dãy B sẽ là : B= [ 1.2 , 0 , 15 ,1 , 50 , 4.56 ] *)Phân tích và ý tưởng giải quyết bài toán. - Viết một hàm số với tham số đầu vào là dãy A và kết quả trả lại dãy B.Kiểm tra nếu gặp phần tử giá trị số thì đưa vào B. Dùng hàm: def tachso(A): B=[] for s in A: if str(type(s))!="": B.append(s) return B 13
  14. Chuyên đề xử lý mảng một chiều trên ngôn ngữ lập trình Python và C++ *) Chương trình tham khảo Kết quả: Dãy đã nhập là: [1, 1.3, 'mot', 2, 'one', 3, 'A', 5] Dãy kết quả là: [1, 1.3, 2, 3, 5] Bài toán 4: Viết các hàm số với đầu vào là dãy A ( bao gồm số và xâu kí tự ). a. Tính tổng các phần tử là số trong dãy. b. Đếm số các phần tử là xâu kí tự từ dãy A c. Đưa ra kết quả là 2 dãy B, C. Dãy B bao gồm các phần tử là số của A, dãy C bao gồm các phần tử là xâu kí tự của A *)Phân tích và ý tưởng giải quyết bài toán. - Viết hàm tính tổng các phần tử số. Kiểm tra điều kiện str(type(s))!="" nếu đúng đó là phần tử số tiến hành tính tổng sum. Xây dựng hàm tính tổng như sau: def tinhtongcacso(A): sum=0 for s in A: if str(type(s))!="": sum=sum+s return sum - Viết hàm đếm phần tử là xâu Nếu là phần tử xâu thì tăng biến dem lên 1 đơn vị bằng cách kiểm tra biểu thức điều kiện str(type(s))=="" 14
  15. Chuyên đề xử lý mảng một chiều trên ngôn ngữ lập trình Python và C++ def demkytu(A): dem=0 for s in A: if str(type(s))=="": dem=dem++1 return dem - Viết hàm tách phần tử số vào B và phần tử xâu vào C: Kiểm tra điều kiện str(type(s))=="" nếu đúng bổ sung vào C, ngược lại bổ sung vào B. def xuly(A): B=[] C=[] for s in A: if str(type(s))=="": C.append(s) else: B.append(s) return B,C *) Chương trình tham khảo 15
  16. Chuyên đề xử lý mảng một chiều trên ngôn ngữ lập trình Python và C++ Chương trình cho kết quả Dãy đã nhập là: [1, 1.3, 'one', 'two', 7, 8, 'Nghệ An'] Tổng các số có trong A là: 17.3 Số phần tử là xâu kí tự của A là: 3 Dãy phần tử kiểu số của A là: [1, 1.3, 7, 8] Dãy phần tử kiểu xâu của A là: ['one', 'two', 'Nghệ An'] 3. Kiểu mảng một chiều trên ngôn ngữ lập trình C++ Chúng ta chỉ xét hai kiểu mảng thông dụng với nhiều ngôn ngữ lập trình là kiểu mảng một chiều và kiểu mảng hai chiều. 3.1. Khái niệm mảng một chiều Mảng một chiều là dãy hữu hạn các phần tử cùng kiểu. Mảng được đặt tên và mỗi phần tử của nó có một chỉ số. Để mô tả mảng một chiều cần xác định kiểu của các phần tử và cách đánh số các phần tử của nó. Để người lập trình có thể xây dựng và sử dụng kiểu mảng một chiều, các 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 mảng một chiều; • Số lượng phần tử; • Kiểu dữ liệu của phần tử; • Cách khai báo biến; • Cách tham chiếu đến phần tử. 16
  17. Chuyên đề xử lý mảng một chiều trên ngôn ngữ lập trình Python và C++ 3.2. Khai báo mảng một chiều Tổng quát, khai báo biến mảng một chiều có dạng: [kích thước tối đa]; Ví dụ . Các khai báo kiểu mảng một chiều sau đây là hợp lệ: float A[365]; Khai báo mảng A có 365 phần tử kiểu số thực có chỉ số từ 0 đến 364 int B[100]; Khai báo mảng B có 100 phần tử kiểu số nguyên có chỉ số từ 0 đến 99 3.3. Cách tham chiếu đến phần tử. Tham chiếu tới phần tử của mảng một chiều được xác định bởi tên mảng cùng với chỉ số, được viết trong cặp ngoặc [ và ]. Cú pháp: biến mảng[chỉ số] • Cách truy cập phần tử mảng A với chỉ số k như sau: A[k] Ví dụ 1: Chỉ số phần tử →: 0 1 2 3 4 5 … 364 Mảng A → 3.5 7.0 6.8 7.5 6.0 9.5 - Tham chiếu tới phần tử thứ 5 của mảng A ta viết: A[5] 3.4. Nhập và xuất mảng một chiều trong C++ *) Nhập dữ liệu mảng một chiều trong C++: - Nhập dữ liệu cho mảng A gồm n phần tử Cách 1: int i,n, a[1000]; cin>>n; for (int i=1; i>a[i]; Cách 2: int x,a[1000], n=0; while (cin>>x) { n++; a[n]=x; } *) Xuất dữ liệu mảng một chiều trong C++: - Xuất dữ liệu cho mảng A gồm n phần tử 17
  18. Chuyên đề xử lý mảng một chiều trên ngôn ngữ lập trình Python và C++ int i,n,a[1000]; for (int i=1; i
  19. Chuyên đề xử lý mảng một chiều trên ngôn ngữ lập trình Python và C++ if(d != A[i+1]-A[i]) kt = false; if(kt) cout
  20. Chuyên đề xử lý mảng một chiều trên ngôn ngữ lập trình Python và C++ Yêu cầu: Hãy cho biết thời gian của bài thi được trao thưởng và có bao nhiêu bài thi được trao thưởng. Dữ liệu vào: - Dòng 1 chứa số nguyên dương N (N < 100). - Dòng 2 chứa N số nguyên a1, ..., an (0 < ai < 100). Dữ liệu ra: - Dòng thứ nhất chứa một số nguyên là thời gian ít nhất tìm được - Dòng thứ hai chứa một số nguyên là số bài thi cùng đạt thời gian ít nhất. Ví dụ. Dữ liệu vào Dữ liệu ra 5 8 10 8 12 8 11 2 *) Phân tích và ý tưởng giải quyết bài toán. - Bản chất bài toán là tìm giá trị nhỏ nhất và số lượng giá trị nhỏ nhất. Phạm vi dữ liệu nhập vào nhỏ nên không cần coi trọng vấn đề cải tiến cải tiến chương trình. Ý tưởng giải quyết bài toán như sau: Sử dụng kỹ thuật dùng mảng để đánh dấu. - Sử dụng mảng A với kiểu chỉ số [0..100], khởi tạo toàn bộ các phần tử bằng 0. Dùng lệnh: memset(a,0,sizeof(a)); - Đọc các giá trị từ tệp vào biến x. Tính tần suất xuất hiện số x bằng lệnh { cin>>x; a[x]++; } - Duyệt các chỉ số i của mảng từ nhỏ đến lớn, khi gặp phần tử đầu tiên khác 0 thì kết thúc việc duyệt. Lúc đó, chỉ số i chính là thời gian ngắn nhất cần tìm, a[i] chính là số lượng bài có thời gian ngắn nhất. *) Chương trình tham khảo: #include using namespace std; long i,n,x,a[10000]; void doc() { cin>>n; memset(a,0,sizeof(a)); 20
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

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