1. Trang chủ
  2. » Luận Văn - Báo Cáo

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

27 755 6

Đ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 27
Dung lượng 1,04 MB

Nội dung

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 1

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ớ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 3

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ủ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 4

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

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 5

bướ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 6

Else 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 9

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

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 10

If TL then Writeln(N,' la so nguyen to')

Else Writeln(N,' khong phai la so nguyen to');

Trang 11

Writeln; 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 12

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

Program Sap_Xep;

Uses Crt;

Const Max = 50;

Type M1C = Array[1 Max] of Integer;

Var a: M1C; Tam, M: Integer;

Sai

Trang 13

Type M1C = Array[1 Max] of Integer;

Var a: M1C; Tam, M: Integer;

Trang 14

Trong 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 16

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

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 17

4 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 18

5 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 19

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

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 20

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

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 21

Textcolor(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 22

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ô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 23

5 Minh họa chương trình khi chạy

Trang 24

Trường hợp 3:

Không tìm thấy

Trang 25

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ì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 26

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à,… ,

Trang 27

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 .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

Ngày đăng: 19/10/2015, 21:22

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w