1. Trang chủ
  2. » Giáo án - Bài giảng

skkn một số phương pháp sắp xếp trong chương trình tin học phổ thông

21 298 0

Đ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

Định dạng
Số trang 21
Dung lượng 159 KB

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

Nội dung

TRƯỜNG THPT HOẰNG HÓA 2SÁNG KIẾN KINH NGHIỆM TÊN ĐỀ TÀI MỘT SỐ PHƯƠNG PHÁP SẮP XẾP TRONG CHƯƠNG TRÌNH TIN HOC PHỔ THÔNG Người thực hiện: TRƯƠNG THỊ QUÝ Chức vụ: Giáo viên Đơn vị công tác

Trang 1

TRƯỜNG THPT HOẰNG HÓA 2

SÁNG KIẾN KINH NGHIỆM

TÊN ĐỀ TÀI MỘT SỐ PHƯƠNG PHÁP SẮP XẾP TRONG CHƯƠNG

TRÌNH TIN HOC PHỔ THÔNG

Người thực hiện: TRƯƠNG THỊ QUÝ Chức vụ: Giáo viên

Đơn vị công tác: Trường THPT HOẰNG HÓA2 SKKN thuộc môn: Tin học

THANH HOÁ NĂM 2016

Trang 2

MỤC LỤC

A PHẦN MỞ ĐẦU……… ………….2

I LÝ DO CHỌN ĐỀ TÀI 2

II MỤC ĐÍCH NGHIÊN CỨU 2

III ĐỐI TƯỢNG VÀ PHẠM VI NGHIÊN CỨU 2

1.Đối tượng 2

2 Phạm vi 3

IV NHIỆM VỤ VÀ PHƯƠNG PHÁP NGHIÊN CỨU: 3

B PHẦN NỘI DUNG 4

I CƠ SỞ LÝ LUẬN 4

1 Đánh giá thực trạng 4

II TỔNG QUAN 4

II.1.THỜI GIAN THỰC HIỆN CHƯƠNG TRÌNH 4

II.1.1 Ðơn vị đo thời gian thực hiện……… 4

II.1.2 Thời gian thực hiện trong trường hợp xấu nhất………5

III CÁC PHƯƠNG PHÁP SẮP XẾP ĐƠN GIẢN……… 6

III.1 Sắp xếp chọn (SelectionSort)……….6

III.2 Sắp xếp chèn (InsertionSort)……… 7

III.3 Sắp xếp nổi bọt (Bubble Sort)……….8

III.4 Sắp xếp nhanh (QUICKSORT)………9

III.5 Sắp xếp bằng đếm phân phối (Distribution Counting)……… 13

IV MỘT SỐ VÍ DỤ VỀ THUẬT TOÁN SẮP SẾP………14

V HIỆU QUẢ CỦA ĐỀ TÀI:……… 18

PHẦN C: KẾT LUẬN……… 19

I KẾT LUẬN ……… 19

II NHỮNG KIẾN NGHỊ LÀM TĂNG TÍNH KHẢ THI CỦA ĐỀ TÀI……….19

III Tài liệu tham khảo: ……….20

Trang 3

A PHẦN MỞ ĐẦU

I LÝ DO CHỌN ĐỀ TÀI:

Năm học 2015 -2016 là năm tôi được tổ chuyên môn phân công dạy Tin học

11 và đứng ôn đội tuyển học sinh giỏi môn Tin học Đứng trước nhiệm vụ của nămhọc này, tôi đã lên kế hoạch và mục tiêu dạy học cho mình nhằm đạt hiệu quả dạyhọc được tôt nhất cũng như sẽ đạt được chỉ tiêu đăng kí Và khi ôn thi học sinh giỏithì tôi và học sinh thấy có rất nhiều thuật toán sắp sếp vậy thì nên sử dụng thuậttoán nào đây và thuật toán nào là tối ưu và phù hợp nhất với bài toán của mình

Trong quá trình giảng dạy, tôi nhận thấy việc lựa chọn các thuật toán về sắpxếp ở học sinh còn lúng túng chưa để ý đến thời gian và bộ nhớ khi thực hiệnchương trình Mặt khác việc giới thiệu các thuật toán sắp xếp trong sách giáo khoaTin học 11 còn hạn chế về việc thể hiện và nhấn mạnh các thuật toán về sắp xếp

Từ thực tế đó tôi mạnh dạn chon đề tài “ Một số phương pháp sắp xếp

trong chương trình Tin học phổ thông”

II MỤC ĐÍCH NGHIÊN CỨU:

Đề tài xây dựng các phương pháp sắp xếp thành một hệ thống để cho họcsinh biết cách nhận biết và lựa chọn phương pháp một cách tổng quát thông qua cáctiêu chí cơ bản Từ đó áp dụng giải nhanh các bài tập ôn tập và vận dụng để giảicác bài toán trong kiểm tra đánh giá, ôn thi học sinh giỏi

Nhằm nâng cao nghiệp vụ công tác của bản thân và nâng cao chất lượng củahọc sinh, giúp học sinh có hứng thú hơn trong quá trình học tập và ôn thi học sinhgiỏi

III ĐỐI TƯỢNG VÀ PHẠM VI NGHIÊN CỨU:

1 Đối tượng

Đối tượng nghiên cứu là học sinh lớp 11 và các học sinh trong đội tuyển họcsinh giỏi

Trang 4

2 Phạm vi

Phạm vi nghiên cứu nội dung bài 4 – Bài toán và thuật toán, một số bài toánsắp xếp, thuật toán sắp xếp trong chương trình Tin học 10 để nắm vững hơn kiếnthức cho các em học sinh lớp 11 trong kiểm tra đánh giá và ôn thi học sinh giỏi

IV NHIỆM VỤ VÀ PHƯƠNG PHÁP NGHIÊN CỨU:

Để tìm hiểu cách dạy học đạt kết quả cao trong việc giới thiệu một sốphương pháp sắp xếp, bản thân tôi vận dụng sáng tạo cơ sở lí luận với thực tiễn dạyhọc Các kiến thức và kinh nghiệm dạy học được tôi trực tiếp tiến hành giảng dạytrên lớp, ôn luyện thi học sinh giỏi từ năm 2009 tới nay

Sáng kiến kinh nghiệm đang trình bày của tôi dựa theo các luận cứ khoa họchướng đối tượng, cụ thể: thuyết trình, quan sát, điều tra cơ bản, phân tích kết quảthực nghiệm sư phạm,v.v… phù hợp với bài học và môn học thuộc lĩnh vực cấutrúc dữ liệu

Trang 5

- Do vậy nên đề tài đưa ra các thuật toán sắp xếp để học sinh nắm được và sử dụnglinh hoạt đồng thời cho học sinh thấy được thời gian chạy của từng chương trình

mà áp dụng với các bài toán có số liệu lớn, nhỏ khác nhau

II TỔNG QUAN

II.1.THỜI GIAN THỰC HIỆN CHƯƠNG TRÌNH

Thời gian thực hiện một chương trình là một hàm của kích thước dữ liệu vào,

ký hiệu T(n) trong đó n là kích thước (độ lớn) của dữ liệu vào

Ví dụ 1-1: Chương trình tính tổng của n số có thời gian thực hiện là T(n) = cn

trong đó c là một hằng số.

Thời gian thực hiện chương trình là một hàm không âm, tức là

T(n) ≥ 0,  n ≥ 0

II.1.1 Ðơn vị đo thời gian thực hiện.

Ðơn vị của T(n) không phải là đơn vị đo thời gian bình thường như giờ, phútgiây mà thường được xác định bởi số các lệnh được thực hiện trong một máy tính

lý tưởng

Ví dụ 1-2: Khi ta nói thời gian thực hiện của một chương trình là T(n) = Cn thì

có nghĩa là chương trình ấy cần Cn chỉ thị thực thi

Trang 6

II.1.2 Thời gian thực hiện trong trường hợp xấu nhất.

Nói chung thì thời gian thực hiện chương trình không chỉ phụ thuộc vào kíchthước mà còn phụ thuộc vào tính chất của dữ liệu vào Nghĩa là dữ liệu vào có cùngkích thước nhưng thời gian thực hiện chương trình có thể khác nhau Chẳng hạnchương trình sắp xếp dãy số nguyên tăng dần, khi ta cho vào dãy có thứ tự thì thờigian thực hiện khác với khi ta cho vào dãy chưa có thứ tự, hoặc khi ta cho vào mộtdãy đã có thứ tự tăng thì thời gian thực hiện cũng khác so với khi ta cho vào mộtdãy đã có thứ tự giảm

Vì vậy thường ta coi T(n) là thời gian thực hiện chương trình trong trường hợpxấu nhất trên dữ liệu vào có kích thước n, tức là: T(n) là thời gian lớn nhất để thựchiện chương trình đối với mọi dữ liệu vào có cùng kích thước n

II.2 CÁCH SẮP XẾP DỮ LIỆU VÀ NGÔN NGỮ SỬ DỤNG

Danh sách các đối tượng cần được sắp xếp là một mảng lưu trữ các kiểu dữliệu có quan hệ thứ tự (như kiểu số nguyên, số thực, …)

Mục đích của việc sắp xếp là tổ chức lại các phần tử trong mảng sao chochúng được sắp thứ tự tương ứng với quy luật sắp xếp

Ðể trình bày các ví dụ minh họa chúng ta sẽ dùng PASCAL làm ngôn ngữ thểhiện và sử dụng khai báo sau:

CONST N = 10;

Var a: array[1 N]of integer;

Procedure hd(var x,y:integer);

Trang 7

III CÁC PHƯƠNG PHÁP SẮP XẾP ĐƠN GIẢN.

III.1 Sắp xếp chọn (SelectionSort)

a) Phương pháp:

Ðây là phương pháp sắp xếp đơn giản nhất được tiến hành như sau:

 Ðầu tiên chọn phần tử có giá trị nhỏ nhất trong n phần tử từ a[1] đến a[n] vàhoán vị nó với phần tử a[1]

 Chọn phần tử có giá trị nhỏ nhất trong n-1phần tử từ a[2] đến a[n] và hoán vị

nó với a[2]

 Tổng quát ở bước thứ i, chọn phần tử có giá trị nhỏ nhất trong n-i+1 phần

tử từ a[i] đến a[n] và hoán vị nó với a[i]

 Sau n-1 bước này thì mảng đã được sắp xếp

Phương pháp này được gọi là phương pháp chọn bởi vì nó lặp lại quá trìnhchọn phần tử nhỏ nhất trong số các phần tử chưa được sắp

{3} FOR j := i+1 TO n DO {4} IF a[j] < T THEN

BEGIN {5} T := a[j];

Trước hết ta có thủ tục hd một hằng thời gian như đã nói ở mục trên.

Các lệnh {2} lấy O(1) thời gian Vòng lặp for {3} – {6} thực hiện n-i lần, vì

Trang 8

j chạy từ i+1 đến n, mỗi lần lấy O(1), nên lấy O(n-i) thời gian Do đó thời gian tổngcộng là:

T(n) = tức là O(n 2 ).

III.2 Sắp xếp chèn (InsertionSort)

a) Phương pháp:

Trước hết ta xem phần tử a[1] là một dãy đã có thứ tự

Bước 1, xen phần tử a[2] vào danh sách đã có thứ tự a[1] sao cho a[1], a[2]

là một danh sách có thứ tự

 Bước 2, xen phần tử a[3] vào danh sách đã có thứ tự a[1], a[2] sao cho

a[1], a[2], a[3] là một danh sách có thứ tự

Tổng quát, bước i, xen phần tử a[i+1] vào danh sách đã có thứ tựa[1],a[2], a[i] sao cho a[1], a[2], a[i+1] là một danh sách có thứ tự

 Phần tử đang xét a[j] sẽ được xen vào vị trí thích hợp trong danh sách cácphần tử đã được sắp trước đó a[1],a[2], a[j-1] bằng cách so sánh giá trị của a[j] vớigiá trị của a[j-1] đứng ngay trước nó Nếu giá trị của a[j] nhỏ hơn giá trị của a[j-1]thì hoán đổi a[j-1] và a[j] cho nhau và tiếp tục so sánh giá trị của a[j-1] (lúc này a[j-1] chứa nội dung của a[j]) với giá trị của a[j-2] đứng ngay trước nó

n

Trang 9

Ta thấy các lệnh {4} và {5} đều lấy O(1) Vòng lặp {3} chạy nhiều nhất i-1lần, mỗi lần tốn O(1) nên {3} lấy i-1 thời gian Lệnh {2} và {3} là hai lệnh nối tiếpnhau, lệnh {2} lấy O(1) nên cả hai lệnh này lấy i-1 Vòng lặp {1} có i chạy từ 2 đến

n nên nếu gọi T(n) là thời gian để sắp n phần tử thì ta có:

 Bước 1: Xét các phần tử từ a[n] đến a[2], với mỗi phần tử a[j], so sánh giá trịcủa nó với giá trị của phần tử a[j-1] đứng ngay trước nó Nếu giá trị của a[j] nhỏhơn giá trị của a[j-1] thì hoán đổi a[j] và a[j-1] cho nhau

 Bước 2: Xét các phần tử từ a[n] đến a[3], và làm tương tự như trên

{2} FOR j := n DOWNTO i+1 DO

{3} IF a[j] < a[j-1] THEN

{4} hd(a[j],a[j-1]);

END;

2

) 1 ( n

n

Trang 10

if a[i]>a[j] then hd(a[i],a[j]) end;

III.4 Sắp xếp nhanh (QUICKSORT).

a Phương pháp:

Chúng ta vẫn xét mảng a các phần tử a[1] a[n] Giả sử v là 1 giá trị mà ta gọi

là chốt (pivot) Ta phân hoạch dãy a[1] a[n] thành hai mảng con "bên trái" và "bên

phải" Mảng con "bên trái" bao gồm các phần tử có giá trị nhỏ hơn chốt, mảng con

"bên phải" bao gồm các phần tử có giá trị lớn hơn hoặc bằng chốt.

Sắp xếp mảng con “bên trái” và mảng con “bên phải” thì mảng đã cho sẽ đượcsắp bởi vì tất cả các giá trị trong mảng con “bên trái“ đều nhỏ hơn các giá trị trongmảngcon “bên phải”

Việc sắp xếp các mảng con “bên trái” và “bên phải” cũng được tiến hành bằngphương pháp nói trên

Một mảng chỉ gồm một phần tử hoặc gồm nhiều phần tử có giá trị bằng nhauthì đã có thứ tự

Chọn giá trị lớn nhất trong hai phần tử có giá trị khác nhau đầu tiên kể từ trái

n

Trang 11

từ bên phải, ta cho L chạy sang phải cho tới khi gặp phần tử có giá trị ≥ chốt và cho

R chạy sang trái cho tới khi gặp phần tử có giá trị < chốt Tại chỗ dừng của L và Rnếu L < R thì hoán vị a[L], a[R] Lặp lại quá trình dịch sang phải, sang trái của 2

"con nháy" L và R cho đến khi L > R Khi đó L sẽ là điểm phân hoạch, cụ thể làa[L] là phần tử đầu tiên của mảng con “bên phải”

ELSE Findch := i;

END;

Trong hàm Findch các lệnh {1}, {2}, {3} và {4} nối tiếp nhau, trong đó chỉ cólệnh WHILE là tốn nhiều thời gian nhất do đó thời gian thực hiện của hàm Findchphụ thuộc vào thời gian thực hiện của lệnh này Trong trường hợp xấu nhất (khôngtìm thấy chốt) thì k chạy từ i+1 đến j, tức là vòng lặp thực hiện j-i lần, mỗi lần O(1)

do đó tốn j-i thời gian Đặc biệt khi i=1 và j=n, thì thời gian thực hiện là n-1 hayT(n) = O(n)

Hàm Phanhoach nhận vào ba tham số i, j và chốt để thực hiện việc phân hoạchmảng a[i] a[j] theo chốt và trả về giá trị L là chỉ số đầu tiên của mảng “bên phải”.Hai con nháy L, R sẽ được sử dụng để thực hiện việc phân hoạch như đã trình bày.FUNCTION Phanhoach(i,j,c:integer):integer ;

VAR L,R : integer;

Trang 12

{1} L := i; {Ðặt con nháy L ở cực trái}

{2} R := j; {Ðặt con nháy R ở cực phải}

đó là j-i Đặc biệt khi i=1 và j=n ta có T(n) = O(n)

Bây giờ chúng ta trình bày thủ tục cuối cùng có tên là QuickSort và chú ý rằng đểsắp xếp mảng A gồm n phần tử ta chỉ cần gọi QuickSort(1,n)

Trang 13

Giả sử các giá trị của mảng khác nhau nên hàm Findch luôn tìm được chốt và

đệ quy chỉ dừng khi kích thước bài toán bằng 1

Gọi T(n) là thời gian thức hiện việc QuickSort mảng có n phần tử

Thời gian để tìm chốt và phân hoạch mảng như đã phân tích đều là O(n) = n.Khi n = 1, thủ tục QuickSort chỉ làm một nhiệm vụ duy nhất là gọi hàmFindch với kích thước bằng 1, hàm này tốn thời gian O(1) =1

Trong trường hợp xấu nhất là ta luôn chọn phải phần tử có giá trị lớn nhất làmchốt, lúc bấy giờ việc phân hoạch bị lệch tức là mảng bên phải chỉ gồm một phần

tử chốt, còn mảng bên trái gồm n-1 phần tử còn lại Khi đó ta có thể thành lậpphương trình đệ quy như sau:

1 nêu n = 1 T(n - 1) + T(1) + n nêu n > 1Giải phương trình này bằng phương pháp truy hồi T(n) =O(n2)

Có trường hợp thực thi cỡ O(nlogn) trong ttrường hợp trung bình

c) Kết luận:

Nếu chương trình ít gọi tới thủ tục sắp xếp và chỉ trên tập dữ liệu nhỏ, thìviệc sủ dụng một thuật toán phức tạp (tuy có hiệu quả) là không cần thiết, khi đó cóthể sử dụng thuật toán đơn giản có độ phức tạp O(N2), dễ cài đặt Tuy nhiên vì độphức tạp là O(N2) nên thời gian thực hiện tăng lên 4 lần khi số lượng phần tử tănglên gấp đôi Do đó, trong trường hợp sắp xếp với dữ liệu lớn thì nên sử dụng thuậttoán sắp xếp nhanh

III.5 Sắp xếp bằng đếm phân phối (Distribution Counting)

a) Phương pháp:

Trong trường hợp khoá các phần tử a[1],a[2], … ,a[n] là các số nguyêntrong nằm trong khoảng từ 0 tới k ta có thuật toán đơn giản và hiệu quả như sau:

T(n)=

Trang 14

Xây dựng dãy C[0], C[1], C[2],…,C[k] trong đó C[v] là số lần xuất hiện của khoá

V trong dãy

for V := 0 to K do c[V] := 0;{Khởi tạo dãy c}

for i := 1 to n do c[a[i].key] := c[a[i].key] + 1;

Như vậy sau khi sắp sếp

Các phần tử có khoá bằng 0 đứng trong đoạn từ vị trí 1 đến vị trí C[0]

Các phần tử có khoá bằng 1 đứng trong đoạn từ vị trí C[0]+1 đến vị trí C[0] +C[1] Các phần tử có khoá bằng 2 đứng trong đoạn từ vị trí C[0] +C[1] +1 đến vị tríC[0]+ C[1] +C[2]

Độ phức tạp của thuật toán là: T(n)= O(Max(N,K))

Với thuật toán này rất phù hợp với những dạng bài tập liên quan tới tìm tần suất

số lần xuất hiện của các phần tử trong mảng hoặc trong xâu……

Trang 15

IV MỘT SỐ VÍ DỤ VỀ THUẬT TOÁN SẮP SẾP

VD1: Cho dãy a1, a2, a3, .,an, cá c đôi một khác nhau và số nguyên dươngk(1<=k<=n) Hãy đưa ra giá trị nhỏ thứ k trong dãy

Giải:

- Nếu n<= 5000 ta có thể sử dụng thuật toán sắp xếp nổi bọt có độ phức tạp O(n2)

- nếu n >=5000 ta nên sử dụng thuật toán QUICKSORT

Ta có thể tìm được giá trị nhỏ thứ k hiệu quả hơn cụ thể như sau:

Sử dụng thuật toán nổi bọt và chỉ sắp xếp đến phần tử thứ k

For i:=1 to k do

For j:=n downto i+1 do

If a[j-1] >a[j] then

Trang 16

Dữ liệu vào: Vào từ file PHANSO.INP chứa duy nhất số N.

Dữ liệu ra: Ghi ra file PHANSO.OUT chứa một dòng là dãy phân số đã được sắp

Trang 17

- Khi nhìn vào bài toán ta thấy rằng đây ta có thể sử dụng thuật toán sắp xếp tương

tự thật toán sắp xếp nổi bọt và cùng có độ phức tạp la O(n2) Vì do N nhỏ nênchúng ta không nhất thiết phải sử dụng QUICKSORT.

- Xét các phần tử của dãy ta thấy phần tử của dãy gồm phức hợp của 3 giá trị : Tử

số, mẫu số và thương nên ta sử dụng mảng một chiều kiểu bản ghi để lưu các giá trị

assign(input, fi); reset(input);

assign(output, fo); rewrite(output);

while (a<>0) and(b<>0) do

if a>b then a:= a mod b

Trang 18

for j:= i+1 to n do a[i div ucln(i,j), j div ucln(i,j)]:= true;

Trang 19

- Số nhỏ nhất không xuất hiện trong dãy sẽ nằm trong đoạn [0,n] Do đó, ta sử dụngphương pháp sắp xếp bằng đếm phân phối : sử dụng mảng c : array[0 30000] oflongint ; với C[X] là số lần xuất hiện của X trong dãy, nếu C[X]=0 thì X là khôngxuất hiện trong dãy.

V HIỆU QUẢ CỦA ĐỀ TÀI:

1.Từ thực tế giảng dạy trên lớp và qua quá trình bồi dưỡng học sinh giỏi tôirút ra một vài kinh nghiệm nhỏ trong việc giải bài toán có sử dụng thuật toán sắpxếp Phải cho học sinh nắm vững các phương pháp sắp xếp cơ bản và có thể vậndụng vào các bài toán cụ thể nào đó sao cho ta có thể thu được kết quả đúng và vớithời gian cho phép

2 Đối với giáo viên: Trong quá trình dạy về phương pháp sắp xếp nên nhấnmạnh ưu điểm của từng phương pháp và thời gian thực hiện cho học sinh

Trang 20

3 Đối với học sinh: Qua đây có thể phân biệt được rõ hơn về các phương phápsắp xếp để có thể sử dụng thiết kế thuật toán cho hợp lí.

PHẦN C: KẾT LUẬN

I KẾT LUẬN :

Sau khi việc thực hiện áp dụng phương pháp vào việc giảng dạy môn tin học

ở chương trình phổ thông tôi đã thu được nhiều thành công vượt trội hơn hẳn Họcsinh dễ dàng nhận dạng và thể hiện các bài toán tin học sau khi hiểu và vận dụngphương pháp thì chất lượng đã tăng lên rõ rệt Điều này đã chứng minh tính đúngđắn của phương pháp, chứng minh kết quả trong phương pháp dạy học trongtrường phổ thông đối với bộ môn Tin So sánh tỉ lệ học sinh hiểu được thuật toánbằng phương pháp này trên những đối tượng học sinh ta hoàn toàn tin tưởng vàokết quả thu được về khả năng nhận dạng và thể hiện bài toán Thực tế tôi đã theodõi trên các lớp đã dạy thì tỉ lệ năm bắt được các bài toán và thuật toán đã tăng lên

từ 25-30% so với khi chưa áp dụng

II NHỮNG KIẾN NGHỊ LÀM TĂNG TÍNH KHẢ THI CỦA ĐỀ TÀI.

a Đối với trường.

- Có thể dành cho giáo viên có áp dụng phương pháp này nhằm làm tăng chấtlượng giảng dạy và kết quả học tập của học sinh Không chỉ đối với giáo viên giảngdạy môn Tin học mà có thể áp dụng phương pháp này cho những bộ môn khoa họckhác, đặc biệt là các bộ môn khoa học tự nhiên như Toán, Lý, Hoá, Sinh

b Đối với các Phòng GD-ĐT và Sở GD-ĐT.

- Có thể triển khai những phương pháp mới giúp cho giáo viên có thể vậndụng kết hợp được nhiều phương pháp giảng dạy giúp làm tăng kết quả giảng dạycho giáo viên và kết quả học tập của học sinh, phát huy hết được tinh tư duy sángtạo trong học tập

Trong quá trình thực hiện viết sáng kiến còn có nhiều hạn chế, không tránhkhỏi những thiếu sót, rất mong sự đóng góp ý kiến để SKKN được hoàn thiện hơn

Ngày đăng: 17/10/2017, 09:32

TỪ KHÓA LIÊN QUAN

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