Sáng kiến kinh nghiệm Phương pháp giải các bài toán về ước chung lớn nhất và bội chung nhỏ nhất trong bồi dưỡng học sinh giỏi Tin học Lớp 8, 9

pdf 21 trang binhlieuqn2 08/03/2022 4831
Bạn đang xem 20 trang mẫu của tài liệu "Sáng kiến kinh nghiệm Phương pháp giải các bài toán về ước chung lớn nhất và bội chung nhỏ nhất trong bồi dưỡng học sinh giỏi Tin học Lớp 8, 9", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfsang_kien_kinh_nghiem_phuong_phap_giai_cac_bai_toan_ve_uoc_c.pdf

Nội dung tóm tắt: Sáng kiến kinh nghiệm Phương pháp giải các bài toán về ước chung lớn nhất và bội chung nhỏ nhất trong bồi dưỡng học sinh giỏi Tin học Lớp 8, 9

  1. + Nhược điểm: Nếu a hoặc b là số 0 thì đoạn lệnh trên sẽ gây lặp vô hạn lần, đồng nghĩa là không tìm được ước chung lớn nhất; ngoài ra thuật toán này thực hiện còn khá nhiều lần (lâu) nếu a và b chênh lệch giá trị lớn. + Phương án khắc phục: Kiểm tra các số a và b phải lớn hơn 0 trước khi tìm ước chung lớn nhất. - Thuật toán 2: Phương pháp chia lấy số dư While b 0 do begin r := x mod y ; x := y; y := r ; end; Ucln := x; {Ước chung lớn nhất là x} Bcnn := a*b div ucln ; Lưu ý rằng cần kiểm tra các số a và b phải nguyên dương trước bởi vì nếu a hoặc b là số 0 thì không tìm được bội chung nhỏ nhất bởi theo định nghĩa số 0 không có bội. 2.2.4. Thuật toán tìm ước chung lớn nhất và bội chung nhỏ nhất của nhiều số 7
  2. Để làm việc trên một dãy số hoặc nhiều số, ta lưu các số đó vào mảng một chiều sau đó sử dụng công thức truy hồi để tìm ước chung lớn nhất và bội chung nhỏ nhất theo cách sau: UCLN(a,b,c) = UCLN(UCLN(a,b),c) BCNN(a,b,c) = BCNN(BCNN(a,b),c) Cụ thể, dùng câu lệnh lặp và viết một hàm tìm ước chung lớn nhất của hai số và hàm tìm bội chung nhỏ nhất của hai số, sau đó dùng công thức truy hồi như sau: Function ucln(a,b: integer): integer; begin x := a; y := b ; While y <> 0 do begin r := x mod y ; x := y; y := r ; end; Ucln := x; {Ước chung lớn nhất là x} end; function bcnn(a,b : integer):integer; begin Bcnn := a*b div ucln(a,b) ; end; Ucmax := a[1]; bcmax:=a[1]; For i:=2 to N do begin ucmax := ucln(ucmax,a[i]); bcmax:=bcnn(bcmax,a[i]); end; 2.3. Ví dụ về kết hợp câu lệnh lặp và mảng một chiều để giải một số bài toán về Ước chung lớn nhất và Bội chung nhỏ nhất Việc kết hợp câu lệnh có cấu trúc là câu lệnh lặp và kiểu dữ liệu mảng một chiều xảy ra khi bài toán tìm ước chung lớn nhất và bội chung nhỏ nhất của một dãy số hoặc dãy phân số, phân thức cho trước. Sử dụng mảng một chiều để lưu các số vào mảng và dùng câu lệnh lặp để duyệt mảng mới xử lý. Để sử dụng mảng ta khai báo mảng ở phần khai báo, nếu bài toán là dãy số thì chỉ cần khai báo một mảng chứa dãy số, nếu bài toán là dãy phân số thì cần khai báo hai mảng để chứa tử và mẫu của các phân số. Cú pháp khai báo mảng như sau: 8
  3. Var tên mảng : array[ ] of ; Ví dụ: Var a : array[1 200] of integer; Tu, mau : array[1 200] of longint ; Đối với câu lệnh lặp, thông thường sử dụng câu lệnh lặp với số lần biết trước bởi vì các bài toán thường cho biết trước số phần tử của dãy số, dãy phân số. Có hai dạng câu lệnh lặp với số lần biết trước, đó là: For := to do ; For := downto do ; Việc sử dụng câu lệnh lặp dùng để nhập số lượng phần tử hoặc dựa vào quy luật của dãy số mà đưa các số, tử hoặc mẫu của các phân số lưu vào mảng sau đó tìm ước chung lớn nhất và bội chung nhỏ nhất theo yêu cầu của bài. 1 3 5 2n 1 Ví dụ bài toán: Cho S với n là số nguyên dương được 2 4 6 2n nhập vào từ bàn phím và 0< n ≤200. Yêu cầu: Tính và rút gọn S thành phân số dạng tối giản A với A và B là B hai số nguyên. Phân tích bài toán: Các phân số trong phép toán trên có quy luật chung, tử số luôn là các số lẻ đại diện bằng công thức 2n-1 và mẫu luôn là các số chẵn, đại diện bằng công thức là 2n. Dãy số có n phân số nên ta sẽ lặp lại n phép cộng các phân số với nhau nên trong chương trình sẽ dùng câu lệnh lặp với số lần biết trước để viết đoạn lệnh tính toán. Trong toán học, các bước để tính toán và rút gọn tổng các phân số được thực hiện như sau: + Bước 1: Tìm mẫu chung của các mẫu số. + Bước 2: Lấy mẫu chung chia cho các tử riêng để lấy nhân tử phụ, sau đó lấy nhân tử phụ nhân với tử riêng tạo thành tử mới của mỗi phân số + Bước 3: Tính tổng các tử và giữ nguyên mẫu + Bước 4: Tìm ước chung lớn nhất của tử và mẫu + Bước 5: Rút gọn cả tử và mẫu bằng cách cùng chia cho ước chung lớn nhất ta có phân số tối giản cần tìm. Áp dụng phương pháp đó để giải bài toán này trong lập trình, trình tự các bước vẫn giữ nguyên. Việc tìm mẫu chung chính là tìm bội chung nhỏ nhất của các mẫu, để tìm bội chung nhỏ nhấ ta phải tìm ước chung lớn nhất các mẫu, trong trường hợp này để tránh viết nhiều đoạn lệnh tìm ước chung lớn nhất và bội chung nhỏ nhất ta nên viết chương trình con tìm ước chung lớn nhất để sử dụng cho gọn trong chương trình. Hơn nữa, ta cần lưu các tử và mẫu phân số lại để tính toán thực hiện ở các bước 1 đến bước 3 nên ta dùng mảng để lưu các tử và mẫu theo từng cặp chỉ số thứ tự ở hai mảng khác nhau có cùng số lượng phần tử. 9
  4. Chương trình như sau: (Turbo Pascal) Program Rut_gon_day_so ; Var tu, mau : array[1 200] of integer ; i, N: byte ;tem, A, B : longint; function tim_ucln(x, y : integer): integer; var r : longint ; begin while y <>0 do begin r := x mod y ; x := y; y := r; end; Tim_ucln := x; end; function bcnn(a,b: integer): longint; begin bcnn := a ; bcnn:= bcnn*b div ucln(a,b); end; Begin Write(‘ nhap vao so N: ‘); readln(N); { Đưa tất cả các tử và mẫu vào hai mảng Tu và Mau} For i:= 1 to N do begin tu[i]:= 2*i-1 ; mau[i] := 2*i ; end; {Tìm mẫu chung của các phân số} B := mau[1] ; For i:= 2 to N do B := bcnn(B ,mau[i]); A := 0; For i:=1 to N do begin tu[i] := (B div mau[i])*tu[i] ; A := A + tu[i]; end; tem:= ucln(A, B); A := A div tem; B := B div tem ; Writeln(‘Tong phan so duoc rut gon toi gian la:: ‘, A,’/’,B); End. 2.4. Áp dụng giải một số bài toán tìm ước chung, ước chung lớn nhất, bội chung nhỏ nhất Bài toán 1: Vườn trường hình chữ nhật có chiều dài D mét, rộng R mét (R, D là các số nguyên dương). Nhà trường định trồng cây xung quanh vườn (mỗi góc có 1 cây) sao cho khoảng cách giữa 2 cây một bằng nhau. Yêu cầu: Nhập vào D và R là các số nguyên dương từ bàn phím (0<R<D<32768). Tìm khoảng cách lớn nhất giữa 2 cây tính theo đơn vị m (mét)? Khi ấy tổng số cây trồng là bao nhiêu? Phân tích bài toán: Vì chiều dài và rộng sân trường có kích thước khác nhau nên để chia được khoảng cách lớn nhất giữa hai cây bằng nhau trên đường viền bao quanh trường ta cần tìm một số lớn nhất mà khi lấy chiều dài chia cho số đó được một số nguyên, lấy chiều rộng chia số đó cũng là một số nguyên, hai 10
  5. số này bằng nhau. Đây rõ ràng là số ước chung lớn nhất của chiều dài và rộng. Từ đây ta quy về bài toán tìm ước chung lớn nhất của hai số nguyên R và D. Đoạn chương trình sau cho phép tìm ra khoảng cách lớn nhất của hai cây cần tìm: Program Tim_khoang_cach ; Var R, D, kc : integer ; Begin Write(‘Nhap vao chieu dai D: ‘); readln(D); Write(‘Nhap vao chieu rong R: ‘); readln(R); While R 0 do begin A := X mod Y; X := Y; Y := A ; end; Writeln(‘Do dai lon nhat cua hinh vuong la: ‘ , X, ‘ cm’); Writeln(‘So hinh vuong thu duoc la: ‘, (tg1 div X)*(tg2 div X)); End. Bài toán 3: Cho dãy N số nguyên Ai {A1, A2, An} với 0 < N < 30, 0 < Ai <100. Yêu cầu: Nhập vào dãy số Ai. Tìm ước chung lớn nhất và bội chung nhỏ nhất của dãy số đó Phân tích bài toán: Khi ta nhập vào dãy số Ai thì cần lưu dãy số này lại nên ta sử dung một mảng một chiều để lưu. Tiếp theo dùng câu lệnh lặp kết hợp 11
  6. dùng thuật toán Euclid để tìm ước chung lớn nhất dãy số và bội chung nhỏ nhất dãy số. Ta thấy rằng: ước chung lớn nhất của dãy số là ước của một số tiếp theo trong dãy với ước chung lớn nhất của hai số đã tìm trước đó; bội chung nhỏ nhất của dãy là bội chung của số tiếp theo trong dãy với số là bội chung nhỏ nhất của hai số trước đó. Chương trình tham khảo sau tìm ước chung lớn nhất và bội chung nhỏ nhất dãy số: Program UCLN_BCNN_day_so ; Var a : array[1 30] of integer ; N, i, Umax, Bmax : integer; bcnn : longint; function ucln(a,b: integer): integer; var r : integer; begin while b <> 0 do begin r:= a mod b; a:=b ; b:= r; end ucln := a; end; function bcnn(a,b: integer): longint; begin bcnn := a ; bcnn:= bcnn*b div ucln(a,b); end; Begin Write(‘ Cho biet so N: ‘); readln(N); For i := 1 to N do begin write(‘a[‘,i,’]=’); readln(a[i]); end; Umax :=a[1] ; Bmax := a[1] ; For i:= 2 to n do Begin Umax := ucln(Umax, a[i]); Bmax := bcnn(Bmax,a[i]); End; Writeln(‘Uoc chung lon nhat cua day so la: ‘, umax); Writeln(‘Boi chung nho nhat cua day so la: ‘, bmax); End. Bài toán 4: Một trường học có XY nam, XX nữ (XY và XX là các số nguyên dương, 0< XX, XY < 65000). Người ta muốn chia đều số nam và nữ vào các lớp học sao cho mỗi lớp đều có ít nhất một nam và một nữ đồng thời số nam và nữ các lớp bằng nhau, số lớp ít nhất là một. 12
  7. Yêu cầu: Nhập vào số nam và nữ từ bàn phím, tìm số cách chia số nam và nữ vào các lớp đều nhau? Với cách chia nào thì mỗi lớp có số học sinh là ít nhất? Phân tích bài toán: Việc chia học sinh thành các lớp sao cho số học sinh các lớp giống nhau, số nam bằng nhau, nữ bằng nhau chính là tìm các ước chung của nam và nữ, tổng số các ước chung của nam và nữ chính là tổng số cách chia lớp. Cách chia để số học sinh ít nhất trong mỗi lớp chính là chia số học sinh thành nhiều lớp nhất có thể. Số học sinh nhiều nhất trong mỗi lớp chính là ước chung lớn nhất của số học sinh nam và số học sinh nữ. Từ đây ta chỉ việc đếm số ước chung của số nam, nữ và tìm ước chung lớn nhất của nam và nữ. Chương trình tham khảo: Program chia_lop_nam_nu ; Var Xy, XX, dem, min : word ; Function ucln (a,b : word): word ; Var tem : word ; Begin While b XX then min := XX else min := XY; Dem := 0; For i:= 1 to (min div 2) do If ((XX mod i = 0) and (XY mod i = 0)) then inc(dem); Writeln(‘so cach chia lop la: ‘, dem); Writeln(‘so hoc sinh nu trong lop it nhat co the la: ‘,XX div dem); Writeln(‘so hoc sinh nam trong lop it nhat co the la: ‘,XY div dem); End. x 1 x 3 x 5 x 2n 1 Bài toán 5: Cho S với n, x là số nguyên 2 4 6 2n dương và 0<N≤100, 0<x≤3200. Yêu cầu: Tính và rút gọn S thành phân số dạng tối giản A với A và b là B hai số nguyên. Phân tích bài toán: Trước hết là ta phải tính toán lại giá trị của tử và mẫu thành các số và lưu vào hai mảng riêng, các tử và mẫu từng phân số có chung chỉ số ở hai mảng. Sau đó ta thực hiện quy trình 5 bước sau: + Bước 1: Tìm mẫu chung của các mẫu số. + Bước 2: Lấy mẫu chung chia cho các tử riêng để lấy nhân tử phụ, sau đó lấy nhân tử phụ nhân với tử riêng tạo thành tử mới của mỗi phân số 13
  8. + Bước 3: Tính tổng các tử và giữ nguyên mẫu + Bước 4: Tìm ước chung lớn nhất của tử và mẫu + Bước 5: Rút gọn cả tử và mẫu bằng cách cùng chia cho ước chung lớn nhất ta có phân số tối giản cần tìm. Ta có chương trình tham khảo sau: Program tong_cac_phan_so ; Var tu, mau : array[1 100] of integer ; i, x, umax, N : integer; Bmax, tong, tem : longint ; function ucln(a,b: integer): integer; var r : integer; begin while b <> 0 do begin r:= a mod b; a:=b ; b:= r; end ucln := a; end; function bcnn(a,b: integer): longint; begin bcnn := a ; bcnn:= bcnn*b div ucln(a,b); end; Begin Write(‘ Cho biet so N: ‘); readln(N); Write(‘ Cho biet so x: ‘); readln(x); For i := 1 to N do begin tu[i] := x+i ; mau[i] := 2*i ; end; Bmax := mau[1] ; For i:= 2 to N do Bmax := bcnn(Bmax,mau[i]); Tong := 0; For i:=1 to N do begin tu[i] := (Bmax div mau[i])*tu[i] ; tong := tong + tu[i]; end; tem:= ucln(tong, Bmax); tong := tong div tem; Bmax := Bmax div tem ; Writeln(‘Phan so rut gon la: ‘, tong,’/’, Bmax); End. 2.5. Hiệu quả của đề tài: Sau khi tôi áp dụng sáng kiến trên vào dạy học, chất lượng dạy học bồi dưỡng học sinh giỏi môn Tin học 8, 9 tăng lên rõ rệt. Giáo viên có thể hoàn thành chuyên đề dạy học nhanh chóng mà không phải giải thích nhiều lần, dành nhiều tiết để giải quyết chuyên đề như trước. Đối với học sinh, có thể nắm được 14
  9. kiến thức lý thuyết vừa vận dụng làm bài tập chuyên đề ước chung lớn nhất và bội chung nhỏ nhất thành thạo. Không những thế, học sinh hiểu biết cách vận dụng kiến thức tổng hợp để giải một bài toán từ cơ bản đến nâng cao. Minh chứng cho điều đó, tôi đã kiểm tra đội tuyển HSG lớp 8 sau khi dạy xong chuyên đề trong năm học 2016 – 2017 như sau: Đề bài: Hãy sử dụng ngôn ngữ lập trình Pascal để viết chương trình giải các bài toán sau: Câu 1 (4 điểm): Cho một dãy N số nguyên dương Ai bao gồm các số nguyên chẵn và lẽ Ai (0 0 do begin r:= a mod b; a:=b ; b:= r; end ucln := a; end; BEGIN Write(‘ Cho biet so N: ‘); readln(N); p:=0; q:=0; For i:=1 to N do begin write(‘ nhap vao so: ‘); readln(so); If so mod 2 = 0 then begin inc(p); chan[p] := so end else begin inc(q) ; le[q] := so; end; end; Umaxchan :=chan[1] ; Umaxle := le[1] ; For i:= 2 to p do Umaxchan := ucln(Umaxchan, chan[i]); For i:= 2 to q do Umaxle := ucln(Umaxle,le[i]); Writeln(‘Uoc chung lon nhat cua cac so le la: ‘, Umaxle); Writeln(‘Boi chung nho nhat cua cac so chan la: ‘, Umaxchan); END. 15
  10. Câu 2: Program tong_cac_phan_so ; Var tu, mau : array[1 100] of integer ; i, x, umax, N : integer; Bmax, tong, tem : longint ; function ucln(a,b: integer): integer; var r : integer; begin while b <> 0 do begin r:= a mod b; a:=b ; b:= r; end ucln := a; end; function bcnn(a,b: integer): longint; begin bcnn := a ; bcnn:= bcnn*b div ucln(a,b); end; Begin Write(‘ Cho biet so N: ‘); readln(N); Write(‘ Cho biet so x: ‘); readln(x); Tu[1]:=1; For i := 2 to N do begin tu[i] := tu[i-1]+i ; mau[i] := i*i + x ; end; Bmax := mau[1] ; For i:= 2 to N do Bmax := bcnn(Bmax,mau[i]); Tong := 0; For i:=1 to N do begin tu[i] := (Bmax div mau[i])*tu[i] ; tong := tong + tu[i]; end; tong := tong+2017*Bmax tem:= ucln(tong, Bmax); tong := tong div tem; Bmax := Bmax div tem ; Writeln(‘Phan so rut gon la, Q=: ‘, tong,’/’, Bmax); End. Kết quả các bài kiểm tra như sau: Giỏi Khá TB Yếu Đối SLHS tượng SL % SL % SL % SL % HSG 8 6 3 50.0 3 50.0 0 0 0 0 Qua kết quả kiểm tra cho thấy, tất cả học sinh đã nhận biết được dạng bài, viết được chương trình tìm ước chung lớn nhất, bội chung nhỏ nhất của hai hay 16
  11. nhiều số, nhận biết dãy số có quy luật, cách tổng hợp thành công thức chung dãy số. Đối với học sinh đạt kết quả khá thì kết quả làm được câu 1, câu hai viết được chương trình nhưng chỉ chạy được với các bộ test nhỏ, thuật toán chưa tối giản, thời gian giải bài toán lâu, các câu lệnh trình bày rối rắm. Đối với học sinh đạt kết quả giỏi thể hiện được trọn vẹn bài làm, chương trình trình bày rõ ràng, ngắn gọn và thời gian thực hiện đáp ứng được yêu cầu của bài toán. Như vậy, từ những kỹ năng thực hành giải bài tập về dạng tìm ước chung lớn nhất, bội chung nhỏ nhất và các bài toán dãy số có quy luật cho trước ban đầu còn hạn chế, sau khi được áp dụng những giải pháp trên chất lượng học tập của học sinh cải thiện vượt bậc. Chứng tỏ những phương pháp trên đã có hiệu quả và không những thế, minh chứng là sự hứng thú trong học tập và chủ động tích cực trong các tiết học lập trình Tin học. KẾT LUẬN 1. Ý nghĩa của thuật toán tìm UCLN, BCNN Mặc dù mới được nghiên cứu và áp dụng nhưng từ những kết quả đạt được cho thấy hướng nghiên cứu là khả dụng. Sử dụng một dạng bài vừa giải quyết các kiến thức riêng vừa kết nối các kiến thức để cho học sinh có thể giải các bài toán từ đơn giản đến phức tạp. Đồng thời tăng cường kỹ năng phân tích bài toán, tổng hợp được mấu chốt bài toán và đưa ra các phương án giải quyết hợp lý nhờ đó kiến thức và kĩ năng giải lập trình ngày càng tăng lên, tốt hơn giúp các em có thể học được các kiến thức cao hơn sau này. Để có được phương pháp dạy học phù hợp với kiểu bài, với tư duy của học sinh, giáo viên phải có một quá trình tìm tòi, suy ngẫm về đổi mới phương pháp và thử nghiệm trên lớp mới có thể định hình được phương pháp tối ưu cho đối tượng học sinh mình giảng dạy. Từ một bài học đơn giản đến phức tạp, giáo viên cần có phương pháp dẫn dắt hữu hiệu, phù hợp với đối tượng thì học sinh mới tiếp thu và vận dụng. Tránh tình trạng áp đặt suy nghĩ là kiến thức làm cho học sinh không thấy được sự đa dạng trong cách giải, sự hạn chế của thuật toán và gây nhàm chán, nặng nề cho học sinh. Trong quá trình dạy học, việc hình thành ý tưởng và tìm hiểu cách giải bài toán là vô cùng quan trọng. Vì thế, khi củng cố bài học giáo viên cần phải khắc sâu kiến thức đã học cũng như hướng dẫn các em chuẩn bị bài học ở nhà thật chu đáo. Đồng thời trong quá trình học, giáo viên khuyến khích các em tự tìm tòi sáng tạo các cách giải khác nhau cũng như việc tham khảo cách giải của người khác để qua đó tích lũy được kinh nghiệm viết chương trình và có được kết quả cao trong học tập. 17
  12. 2. Kiến nghị. 2.1. Giáo viên: Tại đơn vị, đa số học sinh đều có hoàn cảnh kinh tế gia đình khó khăn, việc tiếp cận với máy tính và học Tin học còn hạn chế, chủ yếu là từ Nhà trường. Vậy nên giáo viên trực tiếp giảng dạy cần có kế hoạch dạy học sát đối tượng học sinh và đồng thời áp dụng nhiều phương pháp dạy học sáng tạo đổi mới để qua đó kích thích tính tự học, tự sáng tạo của học sinh thông qua các bài giảng có ví dụ thực tiễn, hình ảnh minh họa, tính liên hệ, so sánh, và thực hành kiểm chứng, Giáo viên cần tìm tòi hiểu sâu từng nội dung bài học để qua đó đưa ra được những hướng dẫn mang tính kích thích sự tìm tòi, tiếp cận bài học của học sinh để phát huy được tính sáng tạo, khám phá của học sinh; đồng thời cần tăng cường dự giờ trao đổi kinh nghiệm giảng dạy để học hỏi phương pháp từ đồng nghiệp và nâng cao năng lực tự học, tự nghiên cứu để tích lũy trau dồi thêm kiến thức chuyên môn của mình. 2.2. Nhà trường: Tổ chuyên môn và Nhà trường tăng cường dự giờ thăm lớp và góp ý, bồi dưỡng thêm các giáo viên trẻ về kiến thức cũng như phương pháp dạy học để nâng cao năng lực dạy học cho giáo viên. Bổ sung hằng năm các tài liệu, sách phục vụ dạy học môn Tin học bởi vì hiện tại các sách và tài liệu liên quan môn Tin học ở thư viện các trường còn khá hạn chế 2.3. Phòng giáo dục và cấp trên: Hội đồng bộ môn các cấp định kỳ hằng năm tập huấn bồi dưỡng chuyên môn cho giáo viên nhằm nâng cao kiến thức, kĩ năng, phương pháp dạy học để áp dụng vào dạy học ở đơn vị, nâng cao chất lượng dạy học môn Tin học nói riêng và dạy học nói chung. Trên đây là một vài kinh nghiệm nhỏ của tôi trong việc giảng dạy bộ môn Tin học lớp 8 và bồi dưỡng học sinh giỏi Tin học 8, 9 mà qua mấy năm giảng dạy tôi đã tìm tòi, suy nghĩ và viết ra. Chắc chắn rằng vẫn còn nhiêu thiếu sót trong lập luận, trong phương pháp giảng dạy bộ môn và cách trình bày. Tôi rất mong được sự góp ý của đồng nghiệp, bạn bè, các thầy, các cô để bản sáng kiến được hoàn thiện hơn! Tôi xin chân thành cảm ơn! 18
  13. TÀI LIỆU THAM KHẢO - Cấu trúc dữ liệu và giải thuật – Lê Minh Hoàng - Một số phương pháp giải bài toán trong tin học – Lê Thủy Thạch - Giáo trình ngôn ngữ Pascal – Nhà xuất bản giáo dục - Cấu trúc dữ liệu và giải thuật – Đỗ Xuân Lôi - Ngôn ngữ lập trình Turbo Pascal – Quách Tuấn Ngọc - Tài liệu tập huấn đổi mới phương pháp dạy học Tin học – Phòng GD&ĐT Lệ Thủy - Mạng Internet. 19