Viết chương trình chuẩn minh họa thuật toán... Giới thiệu chương trình minh họa chi tiết cho thuật toán.. Minh họa chương trình khi chạy bằng một vài hình ảnh... Mô
Trang 1Phầ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ớtmộ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ếtsá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ữngngườ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ớitác giả là: Hãy minh họa thuật toán với thật nhiều bộ Test Và ở trong SGKcũ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ếpbằ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ếtlạ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ọcphổ 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ậptrình (NNLT) Pascal để minh họa, bản thân tác giả nhận thấy rằng: chúng tahoàn toàn có thể sử dụng NNLT Pascal để xây dựng những chương trìnhminh 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”.
Trang 2Ở đây, tác giả muốn đưa thêm một cách minh họa (mô phỏng) bộ Testtrự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ả caonhấ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 minhhọ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ậttoá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õitrê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ốithì 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ếthọ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áchdễ 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 minhhọ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 đượctừng bước của thuật toán
Trang 34 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ủathuậ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ả đưathê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ỉ khinà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ênmàn hình (cần sử dụng thư viện DOS), mục đích của lệnh này là để cho vănbả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áychiế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(<Tên_Màu>) 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 chitiế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ácthuậ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ố
Trang 42 Sơ đồ khối mô tả thuật toán
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à:
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ànhì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
Nhập N và dãy a1, a2, , aN
Đúng Sai
Sai
Trang 5bước trong thuật toán Như vậy, học sinh sẽ không thấy rõ được từng bướctrong thuật toán Chương trình sau sẽ khắc phục được điều này:
Trang 6Else Writeln(' < Max (= ',Max,')'); 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
Trang 9II 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
3 Chương trình chuẩn tương ứng với thuật toán
Thông báo N
là số nguyên tố
rồi kết thúc
Sai
Sai Sai
Đúng
Đúng
Đúng
Trang 10If TL then Writeln(N,' la so nguyen to')
Else Writeln(N,' khong phai la so nguyen to');
Trang 11Writeln; Write('Ket luan: ');
If TL then Writeln(N,' la so nguyen to')
Else Writeln(N,' khong phai la so nguyen to'); Writeln; Writeln;
Textcolor(White);
Write('Phim bat ky=tiep 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
Trang 122 Sơ đồ khối mô tả thuật toán
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;
Sai
Trang 13Type M1C = Array[1 Max] of Integer;
Var a: M1C; Tam, M: Integer;
Trang 14Trong thủ tục Xuat, các phần tử thứ Dau và thứ Dau+1 sẽ được tô màuvà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ắpxế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àutrắng.
Trong quá trình sắp xếp, thủ tục Xuat chỉ được gọi khi tại bước lặp trongvòng For–do có sự tráo đổi Do đó, tùy thuộc vào dữ liệu nhập vào, có thể
Trang 15ứ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 a1, 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ủadãy A có giá trị bằng k
Trang 162 Sơ đồ khối mô tả thuật toán
3 Chương trình chuẩn tương ứng với thuật toán
i:=N+1; Writeln(' Day so vua nhap:'); Xuat;
Write(' Nhap so can tim, k = '); Readln(k);
i:=1;
While (i<=N)and(a[i]<>k) do i:=i+1;
If i<=N then Writeln('Tim thay ',k,' tai vi tri thu ',i) Else
Writeln('Khong tim thay ',k,' trong day so vua nhap'); Readln
Trang 174 Chương trình minh họa chi tiết
i:=N+1; Writeln(' Day so vua nhap:'); Xuat;
Write(' Nhap so can tim, k = '); Readln(k);
Write(' a[',i,'] = ',a[i]);
If a[i]=k then Writeln(' = k')
Trang 185 Minh họa chương trình khi chạy
V BÀI TOÁN THỨ NĂM: THUẬT TOÁN TÌM KIẾM NHỊ PHÂN
1 Xác định bài toán
- Input: Số nguyên dương N, dãy A là dãy tăng gồm N số nguyên khácnhau a1, a2, …, aN và một 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ủadãy A có giá trị bằng k
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
Trang 192 Sơ đồ khối mô tả thuật toán
3 Chương trình chuẩn tương ứng với thuật toán
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 (Dau<=Cuoi) and (a[Giua]<>k) do
Đúng Đúng
Giua [(Dau + Cuoi )/2]
aGiua > k? Đúng Cuoi Giua – 1
aGiua = k?
Sai
Trang 20End;
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
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
Trang 21Textcolor(LightBlue);Writeln('Lan thu ',i); Textcolor(White);
Writeln(' Dau = ',Dau,' ; Cuoi = ',Cuoi,' ;
Xuat;
Write(' a[Giua] = ',a[Giua]);
If a[Giua]>k then Write(' > ',k) Else
If a[Giua]<k then Write(' < ',k) Else Write(' = ',k);
Writeln(' Ket luan:');
Writeln(' Tim thay ',k,' tai vi tri thu ',Giua); End
Writeln(' Ket luan:');
Writeln(' Khong tim thay ',k,' trong day
Trang 22khô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ôngkhi nhập dữ liệu, do đó, tác giả đưa thêm vào thủ tục này để giảm bớt gánhnặ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, tacó 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ậnbiế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ầnthiế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ầntử đều là các “phần tử khác” (như trên đã nói) và tất cả đều được tô màutrắ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ệnhbị lặp lại, cụ thể là các câu lệnh
Writeln(' Lan thu ',i);
Trang 235 Minh họa chương trình khi chạy
Trang 24Trường hợp 3:
Không tìm thấy
Trang 25Phầ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ìnhgiả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ọcsinh 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ềubộ Test khác nhau mà không mất nhiều công sức, có thể nói đây là đặc điểmnổ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ìnhgiả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ấtmong sự góp ý chân thành của quý thầy cô để những chương trình minh họanà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
Trang 26TÀ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à,… ,
Trang 27IV 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 .18Phần 3: KẾT QUẢ VÀ VIỆC PHỔ BIẾN ỨNG DỤNG NỘI DUNG VÀO
THỰC TIỄN 25TÀI LIỆU THAM KHẢO 26