Sáng kiến – Kinh nghiệm Người thực hiện: Nguyễn Thị Khuyên Phần 1: ĐẶT VẤN ĐỀ Kính thưa quý thầy cô giáo! Nếu quý thầy cô đã và đang dạy bộ môn Tin học 10 thì hẳn thầy cô sẽ có nhận xét ngay rằng: Trong học kỳ I, bài số 4 – Bài toán và thuật toán là một bài khó dạy và học sinh khó có thể hiểu được các ví dụ mà sách giáo khoa (SGK) đã đưa ra. Với thời lượng là 6 tiết (5 tiết lý thuyết + 1 tiết bài tập), giáo viên rất khó để truyền tải được toàn bộ các thuật toán ở trong SGK. Vậy thì có thể bỏ bớt một vài thuật toán hay không? Tất nhiên là có thể, bởi vì bản thân người viết sách cũng không yêu cầu phải truyền đạt hết tất cả những gì có trong sách. Tuy nhiên, theo nhận định của cá nhân tác giả thì những thuật toán mà những người viết sách đưa ra là rất hay, vấn đề còn lại là làm thế nào để học sinh có thể hiểu được các thuật toán này? Có lẽ là quý thầy cô sẽ có cùng ý kiến với tác giả là: Hãy minh họa thuật toán với thật nhiều bộ Test. Và ở trong SGK cũng đã thực hiện theo cách này, nhưng chỉ với một vài bộ Test. Còn nếu thầy cô minh họa trên bảng thì sẽ rất tốn thời gian. Ví dụ như ở thuật toán sắp xếp bằng tráo đổi, ở mỗi bước, nếu có sự tráo đổi các phần tử thì ta cần phải viết lại dãy số để thấy được sự tráo đổi này. Vậy thì đâu là giải pháp? Xuất phát từ thực tế giảng dạy và từ trong nội dung chương trình Tin học phổ thông: Toàn bộ chương trình Tin học 11 đều nghiên cứu về lập trình, là kiến thức có liên quan mật thiết với các thuật toán, và sử dụng ngôn ngữ lập trình (NNLT) Pascal để minh họa, bản thân tác giả nhận thấy rằng: chúng ta hoàn toàn có thể sử dụng NNLT Pascal để xây dựng những chương trình minh họa cho các thuật toán này. Đó cũng chính là lý do để tác giả viết đề tài “Sử dụng ngôn ngữ lập trình Pascal để xây dựng chương trình minh họa cho các thuật toán trong sách giáo khoa Tin học 10”. Sử dụng ngôn ngữ lập trình Pascal … Trang 1 / 27 Sáng kiến – Kinh nghiệm Người thực hiện: Nguyễn Thị Khuyên Ở đây, tác giả muốn đưa thêm một cách minh họa (mô phỏng) bộ Test trực tiếp trên sơ đồ khối thuật toán Tìm giá trị lớn nhất của một dãy số nguyên để thầy cô tham khảo. Tác giả rất mong được sự góp ý của quý thầy cô để đề tài ngày càng được hoàn thiện hơn. Xin chân thành cảm ơn! Phần 2: NHỮNG BIỆN PHÁP GIẢI QUYẾT VẤN ĐỀ Như ở phần 1 của đề tài này, tác giả đã trình bày giải pháp của mình để minh họa cho các thuật toán được nêu ra trong SGK Tin học 10. Có thể thầy cô sẽ đặt ra câu hỏi: Có thể minh họa như thế nào để đạt được hiệu quả cao nhất? Theo tác giả thì để có thể sử dụng cách minh họa này một cách hiệu quả, điều cần thiết là phải có máy chiếu để học sinh có thể tiện theo dõi phần minh họa. Kế tiếp là giáo viên cần phải có hình ảnh minh họa sơ đồ khối của thuật toán (trên giấy khổ lớn hoặc trên bảng phụ), và cách minh họa để có hiệu quả cao nhất là giáo viên cho chạy chương trình trên máy tính (học sinh theo dõi trên màn chiếu), tại mỗi bước của chương trình cần chỉ rõ là chương trình đang minh họa bước nào trên sơ đồ khối, và cần hỏi học sinh theo sơ đồ khối thì kết quả của bước kế tiếp sẽ là gì? Sự tác động qua lại này sẽ giúp cho tiết học sinh động hơn, và quan trọng là học sinh sẽ hiểu các thuật toán một cách dễ dàng hơn. Với hướng giải quyết này, tác giả đã xây dựng các chương trình minh họa cho các thuật toán. Mỗi bài toán, tác giả trình bày qua 5 bước: 1. Xác định bài toán. 2. Mô tả thuật toán (bằng sơ đồ khối). 3. Viết chương trình chuẩn minh họa thuật toán. Với chương trình này, khi chạy, ta chỉ có thể thấy được Output của bài toán mà không thấy được từng bước của thuật toán. Sử dụng ngôn ngữ lập trình Pascal … Trang 2 / 27 Sáng kiến – Kinh nghiệm Người thực hiện: Nguyễn Thị Khuyên 4. Giới thiệu chương trình minh họa chi tiết cho thuật toán. Đây chính là chương trình tác giả sẽ dùng để minh họa, khi chạy, ta sẽ thấy từng bước của thuật toán. 5. Minh họa chương trình khi chạy bằng một vài hình ảnh. Qua đây, chúng ta có thể biết chương trình sẽ minh họa thuật toán như thế nào. Trong thuật toán Tìm giá trị lớn nhất của một dãy số nguyên, tác giả đưa thêm một cách mô phỏng thuật toán trên sơ đồ khối. * Một số vấn đề cần lưu ý khi xây dựng chương trình minh họa: 1. Để minh họa thuật toán với nhiều bộ Test khác nhau, tác giả đã sử dụng vòng lặp Repeat–Until để lặp lại quá trình sử dụng chương trình. Chỉ khi nào người dùng nhấn phím ESC (sau mỗi lần minh họa với 1 bộ Test) thì chương trình mới đóng lại (thể hiện ở điều kiện Readkey = #27). 2. Trong các chương trình minh họa chi tiết, bắt đầu chương trình luôn là lệnh Textmode(C40); đây là lệnh chuyển chế độ hiển thị văn bản trên màn hình (cần sử dụng thư viện DOS), mục đích của lệnh này là để cho văn bản hiển thị với cỡ chữ lớn hơn (để phù hợp với việc minh họa trên máy chiếu). 3. Trong các chương trình minh họa chi tiết, thầy cô sẽ thấy thủ tục TextColor() xuất hiện rất nhiều lần. Thủ tục này dùng để tô màu chữ (cần sử dụng thư viện CRT) và được sử dụng để làm nổi bật các chi tiết quan trọng của bước hiện tại trong thuật toán. Sau đây là một số chương trình mà tác giả đã xây dựng để minh họa các thuật toán trong SGK Tin học 10: I. BÀI TOÁN THỨ NHẤT: TÌM GIÁ TRỊ LỚN NHẤT CỦA MỘT DÃY SỐ NGUYÊN 1. Xác định bài toán - Input: Số nguyên dương N và dãy N số nguyên a1, a2, ..., aN. - Output: Giá trị lớn nhất Max của dãy số. Sử dụng ngôn ngữ lập trình Pascal … Trang 3 / 27 Sáng kiến – Kinh nghiệm Người thực hiện: Nguyễn Thị Khuyên 2. Sơ đồ khối mô tả thuật toán Nhập N và dãy a1, a2, ..., aN Max ← a1; i← 2 i > N? Đúng Đưa ra Max rồi kết thúc Sai ai > Max? Sai Đúng Max ← ai i←i+1 3. Chương trình chuẩn tương ứng với thuật toán Với sơ đồ khối trên, chương trình chuẩn cài đặt thuật toán trên ngôn ngữ lập trình Pascal sẽ là: Program Tim_Max; Const NMax = 200; Var a: Array[1..NMax] of Integer; N, i: Byte; Max: Integer; Begin Write(' Nhap so nguyen duong N: '); Readln(N); For i:=1 to N do Begin Write(' Nhap so hang thu ',i,': '); Readln(a[i]); End; Max:=a[1]; For i:= 2 to N do If a[i]>Max then Max:=a[i]; Writeln(' So lon nhat trong day vua nhap la: ',Max); Readln End. 4. Chương trình minh họa chi tiết Chúng ta có thể thấy với chương trình trên thì sau khi chạy, trên màn hình chỉ xuất hiện kết quả là số lớn nhất trong dãy mà không đi chi tiết từng Sử dụng ngôn ngữ lập trình Pascal … Trang 4 / 27 Sáng kiến – Kinh nghiệm Người thực hiện: Nguyễn Thị Khuyên bước trong thuật toán. Như vậy, học sinh sẽ không thấy rõ được từng bước trong thuật toán. Chương trình sau sẽ khắc phục được điều này: Program Tim_Max; Uses Crt, Dos; Const NMax = 200; Var a: Array[1..NMax] of Integer; N, i: Byte; Max: Integer; Procedure Xuat; Var j: Integer; Begin For j:=1 to N do Begin If j=i then Textcolor(Yellow) Else Textcolor(White); Write(a[j]:4); Textcolor(White); End; Readln; End; Begin Textmode(C40); Repeat TextColor(White); Clrscr; Write(' Nhap so nguyen duong N: '); Readln(N); For i:=1 to N do Begin Write(' Nhap so hang thu ',i,': '); Readln(a[i]); End; i:=N+1; Writeln(' Day so vua nhap:'); Xuat; Max:=a[1]; TextColor(LightGreen); Writeln(' Khoi tao: Max = a[1] = ',Max); For i:= 2 to N do Begin TextColor(White); Writeln; Writeln(' i = ',i,':'); Xuat; Write(' a[',i,'] = ',a[i]); If a[i]>Max then Begin Writeln(' > Max (= ',Max,')'); TextColor(LightGreen); Max:=a[i]; Writeln(' ==> Max = ',Max); End Else If a[i]=Max then Writeln(' = Max (= ',Max,')') Sử dụng ngôn ngữ lập trình Pascal … Trang 5 / 27 Sáng kiến – Kinh nghiệm Người thực hiện: Nguyễn Thị Khuyên Else Writeln(' < Max (= ',Max,')'); End; Writeln; TextColor(LightGreen); Writeln(' Ket luan: Max = ',Max); TextColor(LightCyan); Writeln('Phim bat ky = Tiep tuc. ESC = Ket thuc'); Until Readkey = #27; End. 5. Minh họa chương trình khi chạy Dưới đây là hình ảnh minh họa chương trình khi chạy: 6. Mô phỏng thuật toán trên sơ đồ khối Sử dụng ngôn ngữ lập trình Pascal … Trang 6 / 27 Sáng kiến – Kinh nghiệm Sử dụng ngôn ngữ lập trình Pascal … Người thực hiện: Nguyễn Thị Khuyên Trang 7 / 27 Sáng kiến – Kinh nghiệm Sử dụng ngôn ngữ lập trình Pascal … Người thực hiện: Nguyễn Thị Khuyên Trang 8 / 27 Sáng kiến – Kinh nghiệm Người thực hiện: Nguyễn Thị Khuyên II. BÀI TOÁN THỨ HAI: KIỂM TRA TÍNH NGUYÊN TỐ 1. Xác định bài toán - Input: Số nguyên dương N. - Output: Kết luận: “N là số nguyên tố” hoặc “N không là số nguyên tố”. 2. Sơ đồ khối mô tả thuật toán Nhập N Đúng N=1? Sai N M? Sai Tráo đổi ai và ai+1 Đúng ai > ai+1? Sai 3. Chương trình chuẩn tương ứng với thuật toán Program Sap_Xep; Uses Crt; Const Max = 50; Type M1C = Array[1..Max] of Integer; Var a: M1C; Tam, M: Integer; N, i: Byte; Procedure Xuat; Var j: Integer; Begin For j:=1 to N do Write(a[j]:4); Readln; End; Begin Clrscr; Write(' Nhap so phan tu N = '); Readln(N); For i:=1 to N do Begin Write(' Nhap phan tu thu ',i,': '); Readln(a[i]); End; Writeln(' Day vua nhap:'); Xuat; M:= N; While M>=2 do Sử dụng ngôn ngữ lập trình Pascal … Trang 12 / 27 Sáng kiến – Kinh nghiệm Người thực hiện: Nguyễn Thị Khuyên Begin M:=M-1; For i:= 1 to M do If a[i]>a[i+1] then Begin Tam:=a[i]; a[i]:=a[i+1]; a[i+1]:=Tam; End; End; Writeln(' Day sau khi xep:'); Xuat; End. 4. Chương trình minh họa chi tiết Program Sap_Xep; Uses Dos, Crt; Const Max = 50; Type M1C = Array[1..Max] of Integer; Var a: M1C; Tam, M: Integer; N, i, Dau: Byte; Procedure Xuat; Var j: Integer; Begin For j:=1 to N do Begin If (j=Dau)or(j=Dau+1) then Textcolor(Yellow) Else If j>M+1 then Textcolor(LightGreen) Else Textcolor(White); Write(a[j]:4); End; Textcolor(White); Readln; End; Begin Textmode(C40); Repeat Textcolor(White); Clrscr; Write(' Nhap so phan tu N = '); Readln(N); For i:=1 to N do Begin Write(' Nhap phan tu thu ',i,': '); Readln(a[i]); End; Dau:=N+1; M:= N; Writeln(' Day vua nhap:'); Xuat; Textcolor(LightGreen); Write(' Gia tri khoi tao: M = ',M); Sử dụng ngôn ngữ lập trình Pascal … Trang 13 / 27 Sáng kiến – Kinh nghiệm Người thực hiện: Nguyễn Thị Khuyên If M=2 do Begin Textcolor(Yellow); Writeln(' M = ',M); M:=M-1; For i:= 1 to M do Begin If a[i]>a[i+1] then Begin Tam:=a[i]; a[i]:=a[i+1]; a[i+1]:=Tam; Dau:=i; Xuat; End; End; End; Dau:=N+1; Textcolor(White); M:=-1; Writeln(' Day sau khi xep:'); Xuat; Writeln; Write('Phim bat ky=Tiep tuc. ESC=Ket thuc'); Until Readkey=#27; End. Trong chương trình này, biến M đóng vai trò là số phần tử cần sắp xếp trong dãy, biến này có giá trị giảm dần từ N đến 1 (khi M=1 thì vòng lặp While–do kết thúc và quá trình sắp xếp cũng kết thúc). Biến Dau dùng để đánh dấu các phần tử được tráo đổi trong bước lặp hiện tại (phần tử thứ Dau và Dau+1). Trong thủ tục Xuat, các phần tử thứ Dau và thứ Dau+1 sẽ được tô màu vàng (bởi câu lệnh If (j=Dau)or(j=Dau+1) then Textcolor(Yellow)), các phần tử đã được sắp xếp sẽ được tô màu xanh lá cây (bởi câu lệnh If j>M+1 then Textcolor(LightGreen) - Do trong vòng lặp While–do, lệnh M:=M-1 được gọi đầu tiên nên thực tế, các phần tử chưa đã được sắp xếp là các phần tử từ vị trí thứ M+2 trở đi), các phần tử còn lại sẽ được tô màu trắng. Trong quá trình sắp xếp, thủ tục Xuat chỉ được gọi khi tại bước lặp trong vòng For–do có sự tráo đổi. Do đó, tùy thuộc vào dữ liệu nhập vào, có thể Sử dụng ngôn ngữ lập trình Pascal … Trang 14 / 27 Sáng kiến – Kinh nghiệm Người thực hiện: Nguyễn Thị Khuyên ứng với 1 hay nhiều giá trị của M (ở những bước lặp cuối), thủ tục này không được gọi đến. 5. Minh họa chương trình khi chạy IV. BÀI TOÁN THỨ TƯ: THUẬT TOÁN TÌM KIẾM TUẦN TỰ 1. Xác định bài toán - Input: Số nguyên dương N, dãy N số nguyên khác nhau a 1, a2, …, aN và số nguyên k. - Output: Chỉ số i mà ai = k hoặc thông báo không có số hạng nào của dãy A có giá trị bằng k. Sử dụng ngôn ngữ lập trình Pascal … Trang 15 / 27 Sáng kiến – Kinh nghiệm Người thực hiện: Nguyễn Thị Khuyên 2. Sơ đồ khối mô tả thuật toán Nhập N, a1, a2, ..., aN và k i←1 ai = k? Đúng Đưa ra i rồi kết thúc Sai i←i+1 Sai i > N? Đúng Thông báo dãy A không có số hạng nào có giá trị bằng k rồi kết thúc 3. Chương trình chuẩn tương ứng với thuật toán Program Tim_Kiem_Tuan_Tu; Uses Crt; Const Max = 50; Type M1C = Array[1..Max] of Integer; Var a: M1C; N, i: Byte; k: Integer; Procedure Xuat; Begin For i:=1 to N do Write(a[i]:4); Readln; End; Begin Clrscr; Write(' Nhap so phan tu cua day, N = '); Readln(N); For i:=1 to N do Begin Write(' Nhap phan tu thu ',i,': '); Readln(a[i]); End; i:=N+1; Writeln(' Day so vua nhap:'); Xuat; Write(' Nhap so can tim, k = '); Readln(k); i:=1; While (i k? Cuoi ← Giua – 1 Sai Sai Dau ← Giua + 1 Đưa ra Giua rồi kết thúc aGiua = k? Đúng Thông báo dãy A không có số hạng nào có giá trị bằng k rồi kết thúc 3. Chương trình chuẩn tương ứng với thuật toán Program Tim_Kiem_Nhi_Phan; Uses Crt; Const Max = 50; Type M1C = Array[1..Max] of Integer; Var a: M1C; N, i, Dau, Cuoi, Giua: Byte; k: Integer; Begin Clrscr; Write(' Nhap so phan tu cua day, N = '); Readln(N); For i:=1 to N do Begin Write(' Nhap phan tu thu ',i,': '); Readln(a[i]); End; Writeln(' Day so vua nhap:'); For i:=1 to N do Write(a[i]:4); Readln; Write(' Nhap so can tim, k = '); Readln(k); Dau:=1; Cuoi:=N; Giua:=(Dau+Cuoi) div 2; While (Dauk then Cuoi:=Giua-1 Else Dau:=Giua+1; Giua:=(Dau+Cuoi) div 2; Sử dụng ngôn ngữ lập trình Pascal … Trang 19 / 27 Sáng kiến – Kinh nghiệm Người thực hiện: Nguyễn Thị Khuyên End; If a[Giua]=k then Write(' Tim thay ',k,' tai vi tri thu ',Giua) Else Write(' Khong tim thay ',k,' trong day vua nhap'); Readln End. 4. Chương trình minh họa chi tiết Program Tim_Kiem_Nhi_Phan; Uses Dos, Crt; Const Max = 50; Type M1C = Array[1..Max] of Integer; Var a: M1C; N, i, j, Dau, Cuoi, Giua: Byte; k: Integer; Procedure Xuat; Begin For j:=1 to N do Begin If (j>=Dau) and (ja[j+1] then Begin k:=a[j]; a[j]:=a[j+1]; a[j+1]:=k; End; End; Begin Textmode(C40); Repeat Textcolor(White); Clrscr; Write(' Nhap so phan tu cua day, N = '); Readln(N); For i:=1 to N do Begin Write(' Nhap phan tu thu ',i,': '); Readln(a[i]); End; Dau:=N; Cuoi:=1; Giua:= N+1; Writeln(' Day so vua nhap:'); Xuat; Sap_Xep; Writeln(' Day so sau khi sap xep:'); Xuat; Write(' Nhap so can tim, k = '); Readln(k); Dau:=1; Cuoi:=N; Giua:=(Dau+Cuoi) div 2; i:=1; If a[Giua]=k then Begin Sử dụng ngôn ngữ lập trình Pascal … Trang 20 / 27 Sáng kiến – Kinh nghiệm Người thực hiện: Nguyễn Thị Khuyên Textcolor(LightBlue);Writeln('Lan thu ',i); Textcolor(White); Writeln(' Dau = ',Dau,' ; Cuoi = ',Cuoi,' ; Giua = ',Giua); Xuat; Writeln(' a[Giua] = ',a[Giua],' = k'); End Else While (Dauk then Write(' > ',k) Else If a[Giua]k then Cuoi:=Giua-1 Else Dau:=Giua+1; i:=i+1; End; If a[Giua]=k then Begin Textcolor(LightGreen); Writeln(' Ket luan:'); Writeln(' Tim thay ',k,' tai vi tri thu ',Giua); End Else Begin Textcolor(LightCyan); Writeln(' Lan thu ',i); Textcolor(White); Write(' Dau = ',Dau,', Cuoi = ',Cuoi); Textcolor(LightRed); Writeln(' ==> Dau > Cuoi'); Textcolor(LightGreen); Writeln(' Ket luan:'); Writeln(' Khong tim thay ',k,' trong day vua nhap'); End. End; Textcolor(Yellow); Write(' Phim bat ky = Tiep tuc. ESC = Ket thuc'); Until Readkey = #27; Trong chương trình này, trước hết, ta cần biết vì sao cần có thủ tục Sap_Xep? Thực ra thì nếu với dữ liệu vào đúng như yêu cầu của bài toán thì Sử dụng ngôn ngữ lập trình Pascal … Trang 21 / 27 Sáng kiến – Kinh nghiệm Người thực hiện: Nguyễn Thị Khuyên không cần phải sắp xếp. Tuy nhiên, trong thực tế, điều này sẽ làm mất công khi nhập dữ liệu, do đó, tác giả đưa thêm vào thủ tục này để giảm bớt gánh nặng khi nhập dữ liệu và coi như dữ liệu vào là dãy số sau khi đã sắp xếp. Chúng ta hoàn toàn có thể bỏ thủ tục này đi và yêu cầu khi nhập dữ liệu phải đúng như yêu cầu của bài toán. Điều cần quan tâm thứ hai trong chương trình là: Trong thủ tục Xuat, ta có thể thấy rằng các phần tử ở trong phạm vi tìm kiếm (từ Dau tới Cuoi) sẽ được tô màu xanh lá cây, phần tử thứ Giua sẽ được tô màu vàng để dễ nhận biết, còn các phần tử khác sẽ được tô màu trắng. Việc tô màu này là rất cần thiết khi chạy chương trình để minh họa cho học sinh. Cũng chính vì việc tô màu này mà ở 2 lần xuất dãy số đầu tiên, ta thấy có dãy lệnh gán: Dau:=N; Cuoi:=1; Giua:= N+1; Thực chất dãy lệnh này chỉ để “đánh lừa” máy tính, coi tất cả các phần tử đều là các “phần tử khác” (như trên đã nói) và tất cả đều được tô màu trắng. Một vấn đề nữa là, ở trong chương trình này, ta thấy có một số câu lệnh bị lặp lại, cụ thể là các câu lệnh Writeln(' Lan thu ',i); … Write(' Dau = ',Dau,', Cuoi = ',Cuoi); … Vậy liệu việc lặp lại này có phải là thừa không? Có thể chương trình minh họa này chưa được thiết kế một cách tối ưu, nhưng theo ý tác giả thì các câu lệnh này được đưa vào để xét các trường hợp riêng như ở phần minh họa, đó là các trường hợp: Tìm thấy sau lần duyệt đầu tiên; Tìm thấy sau nhiều lần duyệt; Không tìm thấy. Sử dụng ngôn ngữ lập trình Pascal … Trang 22 / 27 Sáng kiến – Kinh nghiệm Người thực hiện: Nguyễn Thị Khuyên 5. Minh họa chương trình khi chạy Trường hợp 1: Tìm thấy sau lần duyệt đầu tiên Trường hợp 2: Tìm thấy sau nhiều lần duyệt Sử dụng ngôn ngữ lập trình Pascal … Trang 23 / 27 Sáng kiến – Kinh nghiệm Người thực hiện: Nguyễn Thị Khuyên Trường hợp 3: Không tìm thấy Sử dụng ngôn ngữ lập trình Pascal … Trang 24 / 27 Sáng kiến – Kinh nghiệm Người thực hiện: Nguyễn Thị Khuyên Phần 3: KẾT QUẢ VÀ VIỆC PHỔ BIẾN ỨNG DỤNG NỘI DUNG VÀO THỰC TIỄN Với việc xây dựng các chương trình minh họa như trên, trong quá trình giảng dạy Tin học 10, bản thân tác giả thấy rằng các tiết học về bài toán và thuật toán không còn nhàm chán, khô cứng nữa mà trở nên sôi nổi hơn và học sinh cũng có thể hiểu các thuật toán một cách dễ dàng hơn. Hơn nữa, với mỗi thuật toán, giáo viên có thể minh họa bằng rất nhiều bộ Test khác nhau mà không mất nhiều công sức, có thể nói đây là đặc điểm nổi bật mà máy tính có thể trợ giúp cho con người. … Đề tài này ra đời từ kinh nghiệm của bản thân tác giả trong quá trình giảng dạy và từ những kiến thức mà tác giả có được nên trong khi thiết kế chương trình, có thể chương trình của tác giả còn chưa đạt tối ưu. Tác giả rất mong sự góp ý chân thành của quý thầy cô để những chương trình minh họa này có thể trợ giúp cho chúng ta một cách hiệu quả hơn. Tác giả xin chân thành cảm ơn! Ayun Pa, tháng 01 năm 2011 Tác giả Nguyễn Thị Khuyên Sử dụng ngôn ngữ lập trình Pascal … Trang 25 / 27 Sáng kiến – Kinh nghiệm Người thực hiện: Nguyễn Thị Khuyên TÀI LIỆU THAM KHẢO 1. Sách giáo khoa Tin học 10, Hồ Sĩ Đàm (Chủ biên), Hồ Cẩm Hà,… , NXB Giáo dục, 2006 2. Sách giáo viên Tin học 10, Hồ Sĩ Đàm (Chủ biên), Hồ Cẩm Hà,… , NXB Giáo dục, 2006 3. Sách giáo khoa Tin học 11, Hồ Sĩ Đàm (Chủ biên), Hồ Cẩm Hà,… , NXB Giáo dục, 2007 4. Sách giáo viên Tin học 11, Hồ Sĩ Đàm (Chủ biên), Hồ Cẩm Hà,… , NXB Giáo dục, 2007 Sử dụng ngôn ngữ lập trình Pascal … Trang 26 / 27 Sáng kiến – Kinh nghiệm Người thực hiện: Nguyễn Thị Khuyên MỤC LỤC Phần 1: ĐẶT VẤN ĐỀ......................................................................................1 Phần 2: NHỮNG BIỆN PHÁP GIẢI QUYẾT VẤN ĐỀ..................................2 I. BÀI TOÁN THỨ NHẤT: TÌM GIÁ TRỊ LỚN NHẤT CỦA MỘT DÃY SỐ NGUYÊN..............................................................................3 II. BÀI TOÁN THỨ HAI: KIỂM TRA TÍNH NGUYÊN TỐ..................9 III. BÀI TOÁN THỨ BA: SẮP XẾP DÃY SỐ BẰNG THUẬT TOÁN TRÁO ĐỔI........................................................................................11 IV. BÀI TOÁN THỨ TƯ: THUẬT TOÁN TÌM KIẾM TUẦN TỰ.......15 V. BÀI TOÁN THỨ NĂM: THUẬT TOÁN TÌM KIẾM NHỊ PHÂN...18 Phần 3: KẾT QUẢ VÀ VIỆC PHỔ BIẾN ỨNG DỤNG NỘI DUNG VÀO THỰC TIỄN......................................................................................25 TÀI LIỆU THAM KHẢO..............................................................................26 Sử dụng ngôn ngữ lập trình Pascal … Trang 27 / 27 [...]... ỨNG DỤNG NỘI DUNG VÀO THỰC TIỄN Với việc xây dựng các chương trình minh họa như trên, trong quá trình giảng dạy Tin học 10, bản thân tác giả thấy rằng các tiết học về bài toán và thuật toán không còn nhàm chán, khô cứng nữa mà trở nên sôi nổi hơn và học sinh cũng có thể hiểu các thuật toán một cách dễ dàng hơn Hơn nữa, với mỗi thuật toán, giáo. .. (Chủ biên), Hồ Cẩm Hà,… , NXB Giáo dục, 2006 2 Sách giáo viên Tin học 10, Hồ Sĩ Đàm (Chủ biên), Hồ Cẩm Hà,… , NXB Giáo dục, 2006 3 Sách giáo khoa Tin học 11, Hồ Sĩ Đàm (Chủ biên), Hồ Cẩm Hà,… , NXB Giáo dục, 2007 4 Sách giáo viên Tin học 11, Hồ Sĩ Đàm (Chủ biên), Hồ Cẩm Hà,… , NXB Giáo dục, 2007 Sử dụng ngôn ngữ lập trình Pascal … Trang 26 / 27 Sáng kiến... của quý thầy cô để những chương trình minh họa này có thể trợ giúp cho chúng ta một cách hiệu quả hơn Tác giả xin chân thành cảm ơn! Ayun Pa, tháng 01 năm 2011 Tác giả Nguyễn Thị Khuyên Sử dụng ngôn ngữ lập trình Pascal … Trang 25 / 27 Sáng kiến – Kinh nghiệm Người thực hiện: Nguyễn Thị Khuyên TÀI LIỆU THAM KHẢO 1 Sách giáo khoa Tin học 10, Hồ Sĩ Đàm (Chủ... Người thực hiện: Nguyễn Thị Khuyên 5 Minh họa chương trình khi chạy Trường hợp 1: Tìm thấy sau lần duyệt đầu tiên Trường hợp 2: Tìm thấy sau nhiều lần duyệt Sử dụng ngôn ngữ lập trình Pascal … Trang 23 / 27 Sáng kiến – Kinh nghiệm Người thực hiện: Nguyễn Thị Khuyên Trường hợp 3: Không tìm thấy Sử dụng ngôn ngữ lập trình Pascal … Trang 24 / 27 Sáng kiến – Kinh... phải là thừa không? Có thể chương trình minh họa này chưa được thiết kế một cách tối ưu, nhưng theo ý tác giả thì các câu lệnh này được đưa vào để xét các trường hợp riêng như ở phần minh họa, đó là các trường hợp: Tìm thấy sau lần duyệt đầu tiên; Tìm thấy sau nhiều lần duyệt; Không tìm thấy Sử dụng ngôn ngữ lập trình Pascal … Trang 22 / 27 Sáng kiến... ',k,' trong day so vua nhap'); Textcolor(White); Write(' Phim bat ky = Tiep tuc ESC = Ket thuc'); Until Readkey = #27; End Sử dụng ngôn ngữ lập trình Pascal … Trang 17 / 27 Sáng kiến – Kinh nghiệm Người thực hiện: Nguyễn Thị Khuyên 5 Minh họa chương trình khi chạy Trường hợp 1: Tìm thấy k trong dãy vừa nhập Trường hợp 2: Không tìm thấy k trong dãy vừa nhập V BÀI TOÁN. .. tuc ESC=ket thuc'); Until Readkey = #27; End 5 Minh họa chương trình khi chạy √ √ √ III BÀI TOÁN THỨ BA: SẮP XẾP DÃY SỐ BẰNG THUẬT TOÁN TRÁO ĐỔI 1 Xác định bài toán - Input: Số nguyên dương N và dãy A gồm N số nguyên a1, a2, …, aN - Output: Dãy A đã được sắp xếp thành một dãy không giảm Sử dụng ngôn ngữ lập trình Pascal … Trang 11 / 27 Sáng kiến – Kinh nghiệm... bước lặp trong vòng For–do có sự tráo đổi Do đó, tùy thuộc vào dữ liệu nhập vào, có thể Sử dụng ngôn ngữ lập trình Pascal … Trang 14 / 27 Sáng kiến – Kinh nghiệm Người thực hiện: Nguyễn Thị Khuyên ứng với 1 hay nhiều giá trị của M (ở những bước lặp cuối), thủ tục này không được gọi đến 5 Minh họa chương trình khi chạy IV BÀI TOÁN THỨ TƯ: THUẬT TOÁN. .. a[Giua]>k then Cuoi:=Giua-1 Else Dau:=Giua+1; Giua:=(Dau+Cuoi) div 2; Sử dụng ngôn ngữ lập trình Pascal … Trang 19 / 27 Sáng kiến – Kinh nghiệm Người thực hiện: Nguyễn Thị Khuyên End; If a[Giua]=k then Write(' Tim thay ',k,' tai vi tri thu ',Giua) Else Write(' Khong tim thay ',k,' trong day vua nhap'); Readln End 4 Chương trình minh họa chi tiết Program Tim_Kiem_Nhi_Phan; Uses Dos, Crt; Const... luan:'); Writeln(' Khong tim thay ',k,' trong day vua nhap'); End End; Textcolor(Yellow); Write(' Phim bat ky = Tiep tuc ESC = Ket thuc'); Until Readkey = #27; Trong chương trình này, trước hết, ta cần biết vì sao cần có thủ tục Sap_Xep? Thực ra thì nếu với dữ liệu vào đúng như yêu cầu của bài toán thì Sử dụng ngôn ngữ lập trình Pascal … Trang 21 / 27 Sáng kiến – Kinh ... thiệu chương trình minh họa chi tiết cho thuật toán Đây chính là chương trình tác giả sẽ dùng để minh họa, chạy, ta sẽ thấy từng bước của thuật toán Minh họa chương trình. .. Minh họa chương trình chạy Dưới là hình ảnh minh họa chương trình chạy: Mô thuật toán sơ đồ khối Sử dụng ngôn ngữ lập trình Pascal … Trang / 27 Sáng kiến – Kinh nghiệm Sử dụng. .. dựng chương trình minh họa: Để minh họa thuật toán với nhiều bộ Test khác nhau, tác giả đã sử dụng vòng lặp Repeat–Until để lặp lại quá trình sử dụng chương trình Chỉ