Tải bản đầy đủ (.pdf) (13 trang)

Cách 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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (241.87 KB, 13 trang )

Sáng kiến kinh nghiệm

1

A- PHN M U:

1. Lớ do chn ti
- Trong thi i hin nay, s bựng n CNTT ó tỏc ng ln n cụng cuc phỏt
trin kinh t xó hi. 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ần phần mềm giúp
ích cho con ngờ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ông nghệ thông tin. Ngày nay con ngời không biết sử dụng máy vi
tính thì coi nh là mự ch. 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ờng họ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â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. Những năm qua môn tin học ở THCS cha có sách giáo
khoa cụ thể hớng dẫn cho học sinh về cách phân tích lập trình. Vì vậy học sinh
cha có tính độc lập sáng tạo mà phải nhờ vào giáo viên rất nhiều. Nhng năm
nay đã có sách giáo khoa hớ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ớ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 bớc cơ bản nào?
2. Cơ sở thực tiễn

Trong quá trình dạy tôi nhận thấy ở các em học sinh l ngi dõn tc thiu
s. õy l mụn hc mi, v cỏc em bc u lm quen vi mỏy tớnh nờn cũn khú
khn trong vic thao tỏc mỏy. 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êu thí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ải toá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ạo nhâ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ũng có nhiều cuốn sách do nhiều tác
giả viết. Song với bản thân tôi khi lựa chọn viết đề tài này là muốn đa ra





S¸ng kiÕn kinh nghiÖm

2

CÁCH 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.
3. Đối tượng nghiên cứu:
Ứng dụng ngôn ngữ lập trinh Pascal để giải một số bài toán trên máy.
4. Khách thể nghiên cứu:
Học sinh lớp 8.
5. Phạm vi nghiên cứu:
Các tiết học tin học của lớp 8. Sự hứng thú và tích cực của học sinh lớp 8
về tiết học. Thời gian nghiên cứu là từ năm học 2009-2010 đến năm học 2012-
2013.
6. Phương pháp nghiên cứu:
Phương pháp phân tích.
Phương pháp tổng hợp kinh nghiệm trong giảng dạy.
Phương pháp trò chuyện trao đổi.
Phương pháp nghiên cứu tài liệu.

Phương pháp cử đôi bạn học tập, tạo sự hoạt động nhóm.















Sáng kiến kinh nghiệm

3

B. NI DUNG

I- Gii quyt vn
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 các bài toán.
2. Vit thuật toán

3. Viết chơng trình
4. Chạy thử, sửa đổi chơng trình
1- XC NH BI TON
a. 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 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ế. Nhng 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: Kt qu thu c hay cái phải tìm, phải làm ra khi
kết thúc bài toá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.
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, nhng 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.
c. Một số ví dụ
Sáng kiến kinh nghiệm

4

Ví 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 ó cú chiu di v chiu rng
+ Các thông tin cần chế biến thông tin nh:
i. Lần lợt đa a,b vào ( cho a=3,b=4)
ii. áp dụng công thức tính diện tích hình chữ nhật: a*b
iii. Kết quả in ra là 12.
Ví dụ 3
: Tìm tất cả các số hon ho 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ố hon ho (cú tng cỏc c bng chớnh nú)
II- Tìm thuật toán

Thuật toán là một quá trình thc hin các thao tác đơn giản đợc sắp xếp
theo một trình tự sao cho 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ó 3 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, 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
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 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 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
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
Sáng kiến kinh nghiệm

5








a=b đúng


sai


Đúng Sai
a<>b







Cách 3
: Viết chơng trình hoàn chỉnh (dùng ngôn ngữ pascal)
PROGRAM USCLN;
USES CRT;
VAR
a,b, :integer;
BEGIN
CLRSCR;
WRITE('nhap 2 gia tri m,n=');READLN(a,b);
WHILE m<>n DO
IF a>b THEN a:=a b
else b:=b-a;
WRITELN('uoc so chung lon nhat cua 2 so,a:5);
READLN
END.
Begin

a, b

UCLN là a

END

b:= b
-
a

a:= b
-
a


Sáng kiến kinh nghiệm

6

III- Viết chơng trình
Lập trình là dùng ngôn ngữ cụ thể (ngôn ngữ Pascal) để diễn tả thuật toán,
cấu trúc dữ liệu thành câu lệnh để máy tính có thể thực hiện đợc và giải quyết
đúng bài toán mà ngời lập trình mong muốn.
1. 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 qủa tồi tệ.
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ê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.
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ô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 rì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.
4. 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
Sáng kiến kinh nghiệm

7

- 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: = [ ]
S = [2, N]
Repeat
Tìm số đầu tiên trong S
NT:= NT+ [S
0
]
Loại khỏi S các bội số của S
0


Until S=[ ];
Xuất NT;
Kết thúc;
c. Tinh chế lấn 3 ( chơng trình hoàn chỉnh)
Program nguyen_to;
Const
N=100;
Type
nguyen=1 N;
var
NT, S:set of nguyen;
s0,I:integer;
begin
NT:=[]; S:=[2 N];S0:=2;
repeat
while not (S0 in S) do
S0:=S0+1; NT:=NT+[S0];I:=S0;
While I<=N do
Begin
s:=S-[i];I:=I+S0;
End;
until S=[];
for I:= 1 to n do
If I in Nt then Write(I:4);
readln
end.
Sáng kiến kinh nghiệm

8


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
nhng 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;
begin

repeat
write('nhap n=');readln(n);
until n>= 2;
for i:= 2 to n do
begin
k:=0;
for j:= 2 to trunc(sqrt(i)) do
if i mod j=0 then k:= 1;
if k=0 then write(i:3);
end;
readln
Sáng kiến kinh nghiệm

9

end.
Vậy đó là kỹ năng lập trình ngời lập trình có thể tinh chỉnh chơng trình
từng bớc làm sao đa ra một phơng án tối u cho ngwời xem dễ tiếp thu cũng
nh chiếm bộ nhớ của máy tính càng ít các tốt.
IV- Chạy Thử , thay đổi, kiểm tra chơng trình
1. Chạy thử
Một chơng trình đã viết xong cha chắc đã chạy đợc trên máy vi tính để
cho kế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.
Lần 1: Program tim_so;
uses crt;
var
a,b,c:integer;
begin

clrscr;
write('nhap 3 so=');readln(a,b,c);
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 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);
Sáng kiến kinh nghiệm

10

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
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
- 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.
- 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.
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ìm kiếm lời giải tối u. Vì chúng cha biết kết qủa nào là đúng nhất. Vì vậy
việc tìm lỗi rất là khó khăn.Trong quá trình chạy thử một chơng trình ta cần lu
ý:
- Nếu khởi đầu bằng bộ chơng trình(test ) nhỏ nhng các giá trị đặc biệt
(đây là dễ bị lỗi nhất).
- Làm nhiều các bộ test nhng 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. 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 nhng cha có nghĩa là quá trình lập trình đã xong . Mà ngời
lập trình muốn nói ở đâ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.
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.
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à
Sáng kiến kinh nghiệm

11

biết khả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ần phả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.

C- KT QU
*) Kt qu cha ỏp dng
Lp Nm hc Tng
s
Di trung bỡnh

T l Trờn trung bỡnh T l
Khi 8 2008 - 2009 54 16 29.6%

38 70.4%


*) Kt qu t c sau khi ỏp dng
Lp Nm hc Tng
s

Di trung bỡnh

T l Trờn trung bỡnh T l
Khi 8

2009 - 2010 56 10 17.8%

46 82.2%

Khi 8

2010 - 2011 48 9 18.5%

39 81.5%

Khi 8

2011 - 2012 52 3 5.8% 49 94.2
Khi 8

2012 - 2013 31 Hc kỡ I: 0 0% Hc kỡ I: 31 100%





Sáng kiến kinh nghiệm

12


D- KT LUN

Để đ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ột bài toán chúng ta có thể đa ra nhiều phơng pháp giải khác nhau . Song
trong lập trì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à cho cá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ần trớc nh:
+ Chọn kiểu dữ liệu sai
+ Viết kết quả in ra ở dạng có quy cách và không quy cách
+ Phép gán sai ví dụ nh bài toán tính tổng ban đầu ta phải gán S:=0; nếu
gán S:= 1; thì cho kết quả sai. Hay Bài toán tính tích thì phép gán phải ngợc trở
lại ban đầu S:=1;
Vậy để giải quyết đợc bài toán trên máy tính điện tử sử dụng ngôn ngữ
lập trình pascal nói chung và của lớp 8 nói riêng. Để nâng cao chất lợng dạy
học tin ở các trờng phổ thông thì là một giáo viên tin học tôi muốn nói rằng
chúng ta không chỉ dạy lý thuyết suông mà cần phải biết kết hợp thực hành . Để
từ đó học sinh mới nhận thấy đợc u điểm của việc học chơng trình này có lợi
hơn ở điểm nào.

Tóm lại đây là chơng trình học khá mới mẻ, các bài toán đa ra để xây
dựng một chơng trình cha có gì lạ phức tạp. Bởi có nhiều bài hay thì học sinh
lớp 8 cha 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 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 Để 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.
Bản thân tôi mong muốn góp một phần nhỏ bé của mình vào sự nghiệp
giáo dục. Bởi đây là môn học khá mới mẻ với tất cả các học sinh THCS .

Trờn l kinh nghim nh m tụi ó thc hin trong thi gian qua. Chc
chn vn cú nhiu hn ch, mong nhn c s gúp ý chõn thnh ca quớ thy
cụ, bn bố ng nghip sỏng kin ngy mt hon chnh hn.

Bỡnh Long
, ngy 12 thỏng 3 nm 2013
Ngời viết



Nguyn Th Thanh

S¸ng kiÕn kinh nghiÖm

13







×