Tuy nhiên mọi thứ đều có điểm khởiđầu của nó, với học sinh việc học Pascal là khởi đầu cho việc tiếp cận ngôn ngữ lậptrình bậc cao, qua đó giúp các em hình dung được sự ra đời, cấu tạo,
Trang 1PHÒNG GIÁO DỤC VÀ ĐÀO TẠO TRẢNG BOM
Đơn vị Trường THCS Đinh Tiên Hoàng
Mã số: (Do HĐTĐSK Sở GD&ĐT ghi)
(Ghi rõ tên bộ môn)
- Lĩnh vực khác:
(Ghi rõ tên lĩnh vực)
Có đính kèm: Các sản phẩm không thể hiện trong bản in sáng kiến
(các phim, ảnh, sản phẩm phần mềm)
Năm học: 2016 - 2017
BM 01-Bia SK
Trang 3SƠ LƯỢC LÝ LỊCH KHOA HỌC
môn, giảng dạy môn, lớp, chủ nhiệm lớp,…): Tổ phó tổ Toán Tin, giảng dạy Tin khối 8,91,92
II TRÌNH ĐỘ ĐÀO TẠO
- Học vị (hoặc trình độ chuyên môn, nghiệp vụ) cao nhất: Đại Học
- Năm nhận bằng: 2013
- Chuyên ngành đào tạo: Sư phạm Tin học
III KINH NGHIỆM KHOA HỌC
- Lĩnh vực chuyên môn có kinh nghiệm:
Số năm có kinh nghiệm:
- Các sáng kiến đã có trong 5 năm gần đây:
BM02-LLKHSK
Trang 5Tên sáng kiến :SỬ DỤNG PHƯƠNG PHÁP HƯỚNG DẪN CÁC BƯỚC GIẢI
BÀI TOÁN TRÊN MÁY TÍNH
Hiện nay nước ta cũng như các nước trên thế giới đang cạnh tranh vềnghành công nghệ chế tạo máy cũng như các sản phẩm phần mềm giúp ích cho conngười trên mọi lĩnh vực Vậy làm thế nào để làm được điều đó : nhờ vào ngành côngnghệ thông tin Ngày xa xưa con người không biết đọc, không biết viết đó là một nỗikhổ vô cùng, còn ngày nay con người không biết sử dụng máy vi tính thì coi như làkhông biết đọc, không biết viết Vậy khi biết sử dụng máy vi tính rồi chúng ta sẽ làm
gì hay chỉ ngồi chơi điện tử, các trò giải trí, soạn thảo các bài văn bản mà thôi ?
Là một giáo viên Tin học một trong các mục tiêu khi đưa tin học vào trườnghọc là nhằm giúp học sinh không chỉ biết soạn thảo mà còn phải có khả năng phântích, tổng hợp, trừu tượng hoá, khái quát hoá vấn đề và đặc biệt là phát triển tư duy,sáng tạo Những năm qua môn Tin học ở THCS chưa có sách giáo khoa cụ thể hướngdẫn cho học sinh về cách phân tích lập trình Vì vậy học sinh chưa có tính độc lậpsáng tạo mà phải nhờ vào giáo viên rất nhiều Những năm nay đã có sách giáo khoahướng dẫn cho học sinh cụ thể qui trình lập trình như thế nào.Vì thế mà tôi sẽ hướngcho học sinh lớp 8 cách để trở thành một nhà lập trình thì cần phải nắm các bước cơbản nào?
Trong thời đại thông tin bùng nổ ngày nay, việc lập được các chương trình tựhoạt động cho máy tính, máy gia dụng là cần thiết Và để làm được việc đó cần cómột quá trình nghiên cứu, học tập về ngôn ngữ lập trình lâu dài, qua đó nhà lập trình
có thể chọn một ngôn ngữ lập trình thích hợp Tuy nhiên mọi thứ đều có điểm khởiđầu của nó, với học sinh việc học Pascal là khởi đầu cho việc tiếp cận ngôn ngữ lậptrình bậc cao, qua đó giúp các em hình dung được sự ra đời, cấu tạo, hoạt động cũngnhư ích lợi của các chương trình hoạt động trong máy tính, các máy tự động Qua đógiúp các em có thêm một định hướng, một niềm đam mê về tin học, về nghề nghiệp
mà các em chọn sau này Đồng thời Pascal là một ngôn ngữ có cấu trúc thể hiện trên
3 yếu tố: Cấu trúc về mặt dữ liệu, cấu trúc về mặt câu lệnh, cấu trúc về mặt chươngtrình
Xuất phát từ cơ sở trên, tôi đã chọn đề tài “Sử dụng phương pháp hướng dẫn các
bước giải bài toán trên máy tính”, giúp các em nắm được cấu trúc của chương trình và
ngôn ngữ lập trình ( Lập trình đơn giản của phần I - SGK tin học 8)
II CƠ SỞ LÝ LUẬN VÀ THỰC TIỄN
1 Về cơ sở lý luận:
Việc đổi mới chương trình sách giáo khoa đặt trọng tâm vào việc đổi mới phươngpháp dạy học Chỉ có đổi mới căn bản phương pháp dạy học và chúng ta có thể tạođược sự đổi mới thực sự trong giáo dục, mới có thể đào tạo được lớp người năngđộng, sáng tạo có tiềm năng cạnh tranh trí tuệ trong bối cảnh nhiều nước trên thế giớihướng tới nền kinh tế tri thức
BM03-TMSK
Trang 6Trong vài thập kỷ gần đây, đã có sự bùng nổ về thông tin hay gọi là thời đạithông tin Cùng với việc sáng tạo ra hệ thống công cụ mới, con người cũng đã tậptrung trí tuệ từng bước xây dựng ngành khoa học tương ứng để đáp ứng những yêucầu khai thác tài nguyên thông tin Trong bối cảnh đó, ngành Tin học được hìnhthành và phát triển thành một ngành khoa học độc lập với các nội dung, mục tiêu,phương pháp nghiên cứu riêng và ngày càng có nhiều ứng dụng trong hầu hết cáclĩnh vực hoạt động của xã hội loài người.
Tin học được đưa vào nhà trường, vào giáo dục của nước ta nhằm giúp họcsinh chúng ta theo kịp với trình độ phát triển của khu vực và thế giới Đưa Tin họcvào nhà trường nói chung và THCS nói riêng là một việc làm cần thiết để các em làmquen và tiếp cận với công nghệ khoa học tiên tiến
Khi học sinh bước vào chương trình lớp 8 (Phần I lập trình đơn giản) Học sinh đãgặp rất nhiều khó khăn và bở ngỡ trong việc để hiểu và giải các bài toán trên máy vitính
Qua bốn năm giảng dạy chương trình tin học lớp 8, tôi nhận thấy rằng kĩ năng giảibài toán trên máy tính của các em còn yếu
Khi giải bài toán trên máy học sinh chỉ quan tâm đến công thức để tính toán ra kếtquả bài toán mà quên các bước xác định thông tin vào, thông tin ra và xây dựng thuậttoán Khi chạy chương trình thì học sinh chưa nhận biết được kết quả chương trìnhđúng hay sai
2 Về cơ sở thực tiễn:
Trong quá trình dạy tôi nhận thấy ở các em học sinh Mới đầu các em cũng rất sợ khithấy giải một bài toán ở ngoài thì đơn giản và chỉ trong vòng vài giây có thể nhẩm rakết quả Còn ở trong lập trình cũng bài toán đó mà phải làm đến hàng chục phút màlại có thể cho kết quả sai Song bằng những tâm huyết của mình và cũng như sự yêuthích của học sinh Nhất là năm nay nghành giáo dục có phát động phong trào giảitoán trên mạng Điều đó đã thúc đẩy tôi rất nhiều trong việc dạy học là làm sao đưa rađược cho các em sự đam mê và phát triển tài năng của học sinh trong việc đào tạonhân tài cho đất nước
Ngôn ngữ lập trình PASCAL là một phần mềm có cấu trúc và rất được nhiềuđộc giả quan tâm và cũng chính đó đã có nhiều cuốn sách do nhiều tác giả viết Songvới bản thân tôi khi lựa chọn viết đề tài này là muốn đưa ra Sử dụng phương pháp
hướng dẫn các bước giải bài toán trên máy tính” sử dụng bằng ngôn ngữ lập trình pascal.
Qua điều tra những tiết học đầu tiên về cả lý thuyết và thực hành tôi tiến hành tổnghợp và đã thu được kết quả như sau:
Trang 7III TỔ CHỨC THỰC HIỆN CÁC GIẢI PHÁP (ĐỀ XUẤT)
Phương pháp cơ bản giải các bài toán trong tin học không chỉ dùng để giải mộtbài toán cụ thể mà còn giải nhiều các bài toán cụ thể thuộc cùng một loại Bài toán được cấu tạo từ hai yếu tố cơ bản: Thông tin vào (Input) và thông tin ra (Output) Phương pháp tổng quát để giải một bài toán bằng máy vi tính dựa trên ngôn ngữ
1 Khái niệm bài toán
Trong quá trình học người học sinh hay bất kỳ một cá nhân nào luôn phải liên tụcgiải quyết các bài toán Trong cuộc sống là 1 chuỗi các bài toán mà ta phải đối đầugiải quyết không một chút đơn giản mà nhiều lúc phải bức mình Song đối với họcsinh lớp 8 do chương trình học toán của các lớp chỉ mới đến giải phương trình bậcnhất là cao nhất Nên việc đưa các lớp bài toán vào giải cho các em đang còn mộtphần nào bị hạn chế Nhưng bất kỳ một bài toán nào thì chúng ta cũng đọc đề rồi xácđịnh nó : A->B
Trong đó:
- A là giải thiết : điều kiện ban đầu hoặc cái đã cho khi bắt đầu giải bài toán
- B là kết luận: Mục tiêu cần đạt được hay cái phải tìm, phải làm ra khi kết thúc bàitoán
- -> Là suy luận: giải pháp cần xác định hay một chuổi thao tác thực hiện từ A đến B
2 Bài toán trên máy vi tính:
Bài toán trên máy cũng mang đầy đủ các tính chất của bài toán tổng quát trên, nhưng
nó lại được diễn đạt theo một cách khác
- A: là đưa thông tin vào (Input )
- B: là đưa thông tin ra( Output)
: là chương trình tạo từ các lệnh cơ bản của máy tính cho phép biến đổi từ A đếnB
3 Một số ví dụ
Trang 8Ví dụ 1: Tính diện tích hình chữ nhật.
Ta cần xác định cho bài toán:
+ Thông tin vào: Chiều dài là cạnh a, chiều rộng là cạnh b
+ Thông tin ra: Kết quả diện tích khi đưa a,b vào
+ Các thông tin cần chế biến như:
- Lần lượt đưa a,b vào ( cho a=3,b=4)
- Áp dụng công thức tính diện tích hình chữ nhật: a*b
- Kết quả in ra là 12
Ví dụ 2: Cho 2 số tự nhiên a, b Tìm ước số chung lớn nhất của chúng.
Các bước xác định bài toán:
+ Xác định thông tin vào: hai số tự nhiên a,b
+ Xác định thông tin ra: số tự nhiên d thoả mãn:
d là ước của a và d là ước của b
d là số lớn nhất trong tập các ước chung của a, b+ Các thông tin cần chế biến như:
Xây dựng hữu hạn các thao tác cho phép tính được d từ a và b
Nhập a =16 b= 24 -> d =8
Ví dụ 3: Tìm tất cả các số nguyên tố trong các số nguyên N được nhập vào từ bàn phím:
+ Xác định thông tin vào:Nhập số nguyên N
+ Xác định thông tin ra: Các số nguyên tố ( chia hết cho nó và số 1)
B- TÌM THUẬT TOÁN
Thuật toán là một quá trình gồm một dãy hữu hạn các thao tác đơn giản đượcsắp xếp theo một trình tự xác định sao cho theo đó từ Input của bài toán sẽ tìm rađược Output bài toán
Một bài toán ta có 4 cách thể hiện thuật toán: Các bước xác định bằng lời, lập
sơ đồ khối, ngôn ngữ phỏng trình, dùng một ngôn ngữ lập trình (Pascal)
Ví dụ: Tìm ước số chung lớn nhất của 2 số nguyên dương a,b ta có thể giải bằng các
cách trên
1 Cách 1: Các bước xác định bài toán bằng lời:
- Bước 1: Nhập 2 số nguyên dương là a,b
- Bước 2: So sánh giá trị a và b Nếu a bằng b thì sang bước 3, ngược lại akhác b thì sang bước 4
- Bước 3: Tìm được ước số chung là a và kết thúc chương trình
- Bước 4: Nếu a lớn hơn b thì ước số chung lớn nhất là a và quay trở lại bước
2 Ngược lại ước số chung là b và quay trở lại bước 2
2 Cách 2: Giải bài toán bằng sơ đồ
- Có hình thoi thể hiện các thao tác so sánh
- Hình chữ nhật thể hiện các phép tính toán, các câu lệnh
Trang 9- Hình ôvan thể hiện bắt đầu và kết thúc
- Các mũi tên quy định trình tự các thao tác
Write('nhap gia tri a =');Readln(a);
Write('nhap gia tri b =');Readln(b);
Trang 101 Kỹ năng lập trình
- Rèn luyện được cho học sinh kỹ năng cài đặt thành công các thuật toán bằng một ngôn ngữ lập trình
- Đã gọi là kỹ năng thì chỉ có thể có được thông qua rèn luyện tích cực
- Kinh nghiệm cho thấy một thuật toán do cài đặt vụng về, lộn xộn thì khi chạy trên máy tính có thể cho kết quả tồi tệ hoặc là không thể chạy được
2 Phát triển chương trình bằng cách tinh chế từng bước
Một bài toán ta có thể đưa ra nhiều cách giải khác nhau, song là một giáo viênthì chúng ta cần giúp học sinh viết chương trình làm sao người xem nhìn vào có thể
dễ hiểu được bài toán đó là gì? Do đó việc tinh chỉnh các bước cho bài toán trongmáy tính là phương pháp khoa học, có hệ thống giúp ta phân tích các thuật toán vàcấu trúc dữ liệu từ đó thành một chương trình Muốn lập trình giỏi không phải chỉ cầnnắm ngôn ngữ lập trình là đủ Mà vấn đề cốt yếu là biết phương pháp phát triển dầndần để chuyển các ý tưởng ra thành chương trình hoàn chỉnh
3 Phương pháp tinh chế từng bước
Một chương trình bắt đầu được viết bằng lời tự nhiên (tiếng việt) thể hiện sự phân tích tổng thể của người lập trình được thể hiện ở từng bước sau các câu lệnh đ-ược phân tích chi tiết hơn, bằng những lời khác nhau tương ứng với sự phân tích côngviệc thành các việc nhỏ chi tiết hơn dễ hiểu và chính xác hơn Song ngôn ngữ lập rìnhpascal người lập trình có thể đưa ra phương pháp tinh chỉnh từng bước là thể hiện tư duy giải quyết vấn đề bài toán từ trên xuống trong đó các bước là hướng về ngôn ngữ lập trình làm sao cho bài toán đưa ra được phương pháp lập trình tối ưu, sáng sửa
Trang 11S = [2, N] (tập các số cần xét )
- Tìm số đầu tiên trong S đưa vào NT
- Loại bỏ khỏi S các bội số của số nguyên tố vừa tìm được
- Số đầu tiên còn lại của S là số nguyên tố Tiếp tục quá trình cho đến khi S=[]
Write(‘Nhap vao mot so nguyen to:’); Readln(N);
If N <= 1 then Writeln (N,’ khong la so nguyen to!’)
chiếm bộ nhớ của máy tính càng ít các tốt
D- CHẠY THỬ , THAY ĐỔI, KIỂM TRA CHƯƠNG TRÌNH:
1 Chạy thử
Trang 12Một chương trình đã viết xong chưa chắc đã chạy được trên máy vi tính để chokết quả mong muốn.
Ví dụ: Tìm số lớn nhất trong 3 số a,b,c nguyên dương được nhập vào từ bàn phím.
if a<b then a:=b
else if a<c then a:=c;
write('so lon nhat la ',a);
readln
End
Với chương trình này cũng chạy được song đáp số có lúc đúng, có lúc sai tuỳthuộc vào lúc nhập giá trị a,b,c{ nếu ta nhập thứ tự a=5,b=7,c=9
Thì sẽ cho ta kết quả số lớn nhất là 7 Vậy thì sai hoàn toàn}
Do đó người lập trình cần phải biết cách tìm lỗi Sữa lỗi, điều chỉnh viết lại chương trình cũng là kỹ năng quan trọng của người lập trình Vậy với ví dụ trên để kết quả luôn đúng thì ta có thể viết lại chương trình
2 Phân loại lỗi và cách sửa lỗi:
- Lỗi về thuật toán: Điều chỉnh lại thuật toán, thêm vị trí có thể, loại bỏ thuật toán
sai, tìm thuật toán khác nghĩa làm lại từ đầu
Trang 13Ví dụ: viết chương trình tính tổng S= n1
3
1 2
- Lỗi về trình tự: Phải xem lại thuật toán, phân tích lại từ trên xuống dưới để đặt lại
cho đúng với thuật toán
Ví dụ:Viết chương trình giải phương trình bậc nhất ax+b=0 với a,b được nhập vào
Trang 14- Lỗi về cú pháp: Viết lại cho đúng cú pháp của ngôn ngữ lập trình mà mình đang sử
dụng
Ví dụ : Lỗi sau câu lệnh ta không sử dụng dấu chấm phẩy, hay kết thúc chương
trình không có dấu chấm, hay từ khoá DOWNTO nếu ta viết DOWN TO thì sẽ không có nghĩa
3 Kiểm tra
Có nhiều chương trình khó kiểm tra tính đúng đắn, nhất là chương trình tìmkiếm lời giải tối ưu Vì chúng chưa biết kết qủa nào là đúng nhất Vì vậy việc tìm lỗirất là khó khăn Trong quá trình chạy thử một chương trình ta cần lưu ý:
- Nếu khởi đầu bằng bộ chương trình (test ) nhỏ nhưng các giá trị đặc biệt (đây
4 Thay đổi chương trình
Một chương trình đã viết xong, đã chạy thử tốt, giải quyết đúng bài toán mà tamong muốn nhưng chưa có nghĩa là quá trình lập trình đã xong Mà người lập trìnhmuốn nó ở đây ta có thể sửa đổi nó theo một hướng khác mà nó có thể đáp ứng đượcmột yêu cầu mới Như phần tinh chế một chương trình là rất quan trọng cho việc sửachữa chương trình củ sang chương trình mới
Ví dụ: - Nhập 3 số a,b,c kiểm tra xem 3 số đó có thể là độ dài của các cạnh một tam
giác hay không Từ đó ta có thể chuyển nó sang dạng là các cạnh đó thoã mãn tamgiác cân, đều hay là tính diện tích của tam giác đó
- Tính tổng cho N số nguyên đầu tiên được nhập vào từ bàn phím Từ đó ta có thểtriển khai tính giai thừa, tìm số nguyên tố, độ dài của dãy số đó, tính trung bình cộngcho dãy số……
- Nhập vào mảng của dãy số từ bàn phím Từ đó ta có thể tìm giá trị lớn, nhỏ củamảng, trung bình độ dài của mảng, điểm của học sinh…
Vậy là một người lập trình bạn cần nắm được các tiêu chuẩn của một chươngtrình từ giúp bài toán có một kết quả tốt
- Tính tin cậy: Có một giải thuật đúng
- Tính uyển chuyển: Chương trình có thể sửa đổi
- Tính trong sáng: dễ đọc, dễ hiểu
- Tính hữu hiệu: chạy chương trình nhanh và tốn ít dung lượng bộ nhớ về không gian
và thời gian
Tóm lại: Quá trình xây dựng chương trình là một chuỗi các bước tính Ở mỗi
bước được phân ra nhiều công việc con để từ đó đưa ra được phương pháp tối ưu.Song người lập trình cần rèn luyện để có ý thức về các quyết định liên quan và biết
Trang 15khảo sát nghiêm túc cũng như từ bỏ các lời giải ngay cả khi chúng đúng Mà cầnphải cân nhắc mọi phương tiện của từng lời giải theo một tiêu chuẩn.
IV HIỆU QUẢ CỦA SÁNG KIẾN
Trong quá trình giảng dạy tôi đã áp dụng sáng kiến nêu trên, qua khảo sát thực
tế của học sinh, tôi đã thấy chất lượng bộ môn đạt kết quả cao Học sinh rất hứng thúhọc môn Tin học nhất là tiết thực hành Rèn luyện cho học sinh tính tư duy, tính sángtạo trong quá trình lập trình
Việc làm này đã phát huy năng lực dạy học lập trình của giáo viên và học sinhtrong việc khắc phục những khó khăn, đáp ứng kịp thời, hiệu quả những yêu cầu dạyhọc của bộ môn, giúp học sinh nắm bắt kĩ năng giải bài toán trên máy tính, hìnhthành tư duy lập trình, giúp học sinh hiểu bài sâu sắc hơn và tạo hứng thú học tập bộmôn thiết thực góp phần đổi mới phương pháp dạy học và nâng cao chất lượng bàihọc tin học
Đối với học sinh tôi nhận thấy học sinh học tập tích cực, hào hứng, chú ý hơn
và tham gia xây dựng bài sôi nổi hơn Đặc biệt các em ghi nhớ kiến thức lâu hơn,chất lượng đi lên rõ rệt
Sau khi áp dụng các biện pháp trên vào các tiết dạy thể hiện chất lượng cácmức như sau
V ĐỀ XUẤT, KHUYẾN NGHỊ KHẢ NĂNG ÁP DỤNG
Để đưa ra một phương pháp tối ưu cho một bài toán không đơn giản Bởi mộtbài toán chúng ta có thể đưa ra nhiều phương pháp giải khác nhau Song trong lậptrình người giải không sử dụng đúng cách giải thì một bài toán lại đi ngược lại là chocác kết quả khác nhau Điều đó chứng tỏ cho thấy người lập trình cần phải nắm đ-ược các bước giải bài toán trong lập trình
Bài toán cho kết quả sai là do nhiều nguyên nhân mà tôi đã trình bày ở phầntrước như: