SKKN Các bước giải bài toán trên máy tính trong chương trình Tin học 8 - Pdf 26

SÁNG KIẾN KINH NGHIỆM
ĐỀ TÀI:
“CÁC BƯỚC GIẢI BÀI TOÁN TRÊN MÁY TÍNH TRONG
CHƯƠNG TRÌNH TIN HỌC 8”
A. MỞ ĐẦU
I. Đặt vấn đề
1. Thực trạng
- Là một giáo viên tin học, một trong các mục tiêu khi dạy môn tin học trong nhà
trường 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ân
tí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. Vì thế mà trong bài viết này tôi sẽ hướng cho 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 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ợ khi thấ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 ra kế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. Nhưng bằng những tâm huyết của mình và cũng
như sự yêu thích của học sinh. Nhất là những năm gần đây nghành giáo dục có phát
động phong trào giải toán trên mạng (Violympic) cũng như thành lập đội tuyển tham
dự các kì thi “Tin học trẻ” được tổ chức quy mô hàng năm. Điều đó đã thúc đẩy tôi rất
nhiều trong việc dạy học là làm sao giúp cho các em có sự đam mê học tập bộ môn
tin học và phát triển tài năng của học sinh.
2. Ý nghĩa và tác dụng của đề tài
- Đưa ra các bước giải bài toán trên máy vi tính trong chương trình môn Tin học
8 phù hợp nhất với học sinh.
- Tạo cho học sinh rất hứng thú học môn Tin học nhất là tiết thực hành và rèn
luyện cho học sinh tính tư duy, tính sáng tạo trong quá trình lập trình.
3. Phạm vi nghiên cứu của đề tài
- Học sinh khối 8 trường THCS An Tân, An Lão, Bình Định.
II. Phương pháp tiến hành:
1. Cơ sở lý luận và thực tiễn
- Qua hai 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

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ột
bài toán cụ thể mà còn giải 1 lớp 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ữ pascal
thì cần các bước :
1. Xác định bài toán.
2. Xây dựng thuật toán.
3. Viết chương trình.
4. Chạy thử, sửa đổi chương trình.
1. Xác định bài toán:
* 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ục
giả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 đầu giả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ọc sinh lớp
8 do chương trình học toán của các em chỉ mới đến giải phương trình bậc nhấ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ột phầ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ả 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 khi kết thúc bài toán .
→ Là suy luận: giải pháp cần xác định hay chuỗi các thao tác thực hiện từ A
đến B.
* 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 đến B.
* Một số ví dụ:

- 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 a khá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:=a-b và quay trở lại
bước 2. Ngược lại ước số chung là b:=b-a và quay trở lại bước 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
- 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

Cách 3: Dùng ngôn ngữ phỏng trình
Bắt đầu
Nhập a, b
Begin
a, b
a=b
UCLN là a
END
a>b
b:= b - a
a:= b - a
đúng
đúng
* 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ên
thì 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 trong má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ần nắ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ần dần để
chuyển các ý tưởng ra thành chương trình hoàn chỉnh.
* 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ông việ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 trình pascal 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.
* Ví dụ
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
a. Tinh chế lần 1
- Lấy 2 tập
NT= [ ] (để chứa các số nguyên tố tìm được)
S = [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=[]
- Xuất NT
b. Tinh chế lần 2
Bắt đầu
NT: = [ ]

for I:= 1 to n do
If I in Nt then Write(I:4);
readln end.
d. Tinh chế lần 4. Rõ ràng cấu trúc dữ liệu tập hợp “Set of nguyen” tuy dễ hiểu nhưng
rất cồng kềnh và làm máy chạy chậm chạp, ta có thể dùng mảng Boolean linh hoạt hơn
như sau:
Program nguyen_to;
Const
N=100;
var
a:array[1 N] of boolean;
i,j:integer;
begin
a[1]:=false;
for i:=2 to N do a[i]:=true;
for i:= 2 to N div 2 do
for j:= 2 to N div i do
a[i*j]:=false;
for i:= 1 to N do
if a[i] then
write(i:3);
readln
end.
e. Tinh chế lần 5
Trong ngôn ngữ pascal nếu dùng mảng boolean thì ta bị giới hạn N<10000. Để
có thể chạy với số lớn hơn ta không dùng mảng , tập hợp mà dùng như sau:
Program nguyen_to;
uses crt;
var
i,j,k,n:integer;

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
Lần 2: Program tim_so; uses crt;
var
a,b,c,t:integer;
begin
clrscr;
write('nhap 3
so=');readln(a,b,c);
t:=a;
if t<b then t:=b;
if t<c then t:=c;
write('so lon nhat la ',t);
readln
End.
Nếu nhập:
Lần nhập A B C Kết quả
1 5 4 7 7
2 5 7 9 9
3 9 3 5 9
Ví dụ 2: Viết chương trình in ra màn hình hình chữ nhật toàn dấu * với chiều dài và
chiều rộng nhập từ bàn phím.

End.

4.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à làm lại từ đầu.
Ví dụ 1: viết chương trình tính tổng S=
n
1

3
1
2
1
1 ++++
(n được nhập vào từ bàn phím)
Học sinh viết chương trình khai báo biến S thuộc kiểu dữ liệu nguyên (Integer)
thì chương trình sẽ không thực hiện được phép toán tính tổng. Do vậy để thực hiện
được phép toán thì khai báo biến S là thuộc kiểu dữ liệu thực (Real).
- 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ụ 2: 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
từ bàn phím.
program ptb1;
var
a,b:real;
begin
write('nhap cac he so=');readln(a,b);
if a<>0 then
writeln('phuong trinh vo so nghiem');
else

rấ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
là dễ bị lỗi nhất).
- Làm nhiều các bộ test nhưng phải đa dạng tránh lặp đi lặp lại các bộ test tương
tự.
- Nên kết thúc bằng các bộ test có kích thước lớn để kiểm tra tính chịu đựng của
chương trình.
4.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à ta
mong muốn nhưng chưa có nghĩa là quá trình lập trình đã xong . Mà người lập trình
muốn nó ở đây ta có thể sửa đổi nó theo một hướng khác mà nó có thể đáp ứng được
mộ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ửa
chữ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 tam giá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ộng cho
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ủa
mả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ương
trì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 tinh chế. Ở 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.

một chương trình chưa có gì lạ phức tạp. Bởi có nhiều bài hay thì học sinh lớp 8 chưa
học đến. Cho nên giáo viên cần phải nắm chắc các phương pháp để truyền đạt. Đồng
thời cũng phối hợp chương trình toán đã học đến những phần nào để từ đó đưa ra các
ví dụ, bài tập để học sinh có thể nắm chắc lý thuyết cũng như thực hành trên máy tính
dễ tiếp thu. Và để từ đó các em rút ra được ưu điểm của các chương trình này so với
cách tính tay ở chỗ nào.
Đề xuất:
- Tôi mong ước rằng trong tương lai, phòng máy vi tính sẽ được mở rộng, đảm
bảo số lượng máy tính tạo điều kiện cho các em học sinh được thực hành nhiều hơn.
Vì có như vậy chất lượng dạy và học của giáo viên và học sinh mỗi ngày đạt chất
lượng cao hơn.
- Trên đây là một số biện pháp mà tôi đã áp dụng vào dạy tin học khối 8. Tuy đã
được đúc rút từ kinh nghiệm giảng dạy thực tế và đã cho kết quả khả quan. Nhưng
trong quá trình thực hiện bài viết này sẽ không tránh khỏi những thiếu sót. Rất mong
nhận được sự góp ý bổ ích của các thầy cô giáo và các bạn đồng nghiệp để bài viết
được hoàn thiện hơn./.
Xin cảm ơn!


Nhờ tải bản gốc
Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status