Tải bản đầy đủ - 0 (trang)
Xác định bài toán:

Xác định bài toán:

Tải bản đầy đủ - 0trang

Trường THCS An Tân



Sáng kiến kinh nghiệm



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 cá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

+ Xác định các thao tác chế biến thông tin

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ố ngun tố (chia hết cho nó và số 1)

2. Tìm thuật tốn:

Thuật tốn là một q trình gồm một dãy hữu hạn các thao tác đơn giản được sắp xếp

theo một trình tự xác định sao cho theo đó từ Input của bài tốn sẽ tìm ra được Output bài

tốn .

Một bài tố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

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:=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 tốn, các câu lệnh

- Hình ơvan thể hiện bắt đầu và kết thúc

Begin

- Các mũi tên quy định trình tự các thao tác

a, b



a=b



đúng



sai

đúng



a:= b - a



Giáo viên: Nguyễn Văn Quang



a>b



UCLN là a

END



sai



b:= b - a



Trang 3



Trường THCS An Tân



Sáng kiến kinh nghiệm



Cách 3: Dùng ngơn ngữ phỏng trình

Bắt đầu

Nhập a, b

While a khác b

IF a>b then thay a :=a -b

Else thay b:=b-a;

Kết thúc in ra USCLN (a,b) .

Cách 4: Viết chương trình hồn chỉnh (dùng ngơn ngữ pascal)

PROGRAM USCLN;

USES CRT;

VAR

a,b, :integer;

BEGIN

CLRSCR;

WRITE('nhap 2 gia tri a,b=');READLN(a,b);

WHILE a<>b 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.

3. Viết chương trình:

Lập trình là dùng ngơn ngữ máy vi tính cụ thể nào (ngơn ngữ Pascal) để diễn tả thuật

tố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 tốn mà người lập trình mong muốn.

* 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 tố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 sắp đặ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ệ.

* Phát triển chương trình bằng cách tinh chế từng bước

Một bài tố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 tốn đó là gì ? Do đó việc tinh chỉnh các bước cho bài tố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 tố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 hồ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



Giáo viên: Nguyễn Văn Quang



Trang 4



Trường THCS An Tân



Sáng kiến kinh nghiệm



Ở 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:= NT+ [S0]

NT: = [ ]

Loại khỏi S các bội số của S0

S = [2,..N]

Until S=[ ];

Repeat

Xuất NT;

Tìm số đầu tiên trong S

Kết thúc;

c. Tinh chế lấn 3 ( chương trình hồ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.



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;

for i:= 2 to N div 2 do

Const

for j:= 2 to N div i do

N=100;

a[i*j]:=false;

var

for i:= 1 to N do

a:array[1..N] of boolean;

if a[i] then

i,j:integer;

write(i:3);

begin

readln

a[1]:=false;

end.

for i:=2 to N do a[i]:=true;



Giáo viên: Nguyễn Văn Quang



Trang 5



Trường THCS An Tân



Sáng kiến kinh nghiệm



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;

begin

uses crt;

k:=0;

var

for j:= 2 to trunc(sqrt(i)) do

i,j,k,n:integer;

if i mod j=0 then k:= 1;

begin

if k=0 then write(i:3);

repeat

end;

write('nhap n=');readln(n);

readln

until n>= 2;

end.

for i:= 2 to n do

Như 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 người xem dễ tiếp thu và đạt được tốc độ

tính tốn cao nhất cũng như chiếm bộ nhớ của máy tính càng ít càng tốt.

4. Chạy Thử, thay đổi, kiểm tra chương trình:

4.1. Chạy thử:

Một chương trình đã viết xong chưa chắc đã chạy được trên máy vi tính để cho kết

quả mong muốn.

Ví du 1: 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
else if a
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 hồn tồ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ả ln

đú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
if t
write('so lon nhat la ',t);

readln

End.



Nếu nhập:

Giáo viên: Nguyễn Văn Quang



Trang 6



Trường THCS An Tân



Lần nhập

1

2

3



Sáng kiến kinh nghiệm



A

5

5

9



B

4

7

3



C

7

9

5



Kết quả

7

9

9



Ví dụ 2: Viết chương trình in ra màn hình hình chữ nhật tồn dấu * với chiều dài và chiều

rộng nhập từ bàn phím.

Lần 1: Program hcn;

Ues crt;

Var i, cd,cr:integer;

Begin

Clrscr;

Write(‘ Nhap chieu dai hinh chu nhat’); readln(cd);

Write(‘ Nhap chieu rong hinh chu nhat’); readln(cr);

For i = 1 to cd*cr do writeln(‘*’);

Readln

End.

Với chương trình này cũng chạy được song kết quả sai (in ra màn hình một cột tồn

dấu * với chiều dài là diện tích hinh chữ nhật).

Với ví dụ trên để kết quả ln đúng thì ta có thể viết lại chương trình.

Lần 2: Program hcn;

For i = 1 to cr do

Ues crt;

Begin

Var i,j, cd,cr:integer;

for j = 1 to cd do write(‘*’);

Begin

Writeln;

Clrscr;

End;

Write(‘ Nhap chieu dai hinh chu nhat’);

Readln

readln(cd);

End.

Write(‘ Nhap chieu rong hinh chu nhat’);

readln(cr);

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 tốn, thêm vị trí có thể, loại bỏ thuật tốn

sai, tìm thuật tốn khác nghĩa là làm lại từ đầu.

1

2



1

3



Ví dụ 1: viết chương trình tính tổng S= 1    .... 



1

(n được nhập vào từ bàn phím)

n



Học sinh viết chương trình khai báo biến S thuộc kiểu dữ liệu ngun (Integer) thì

chương trình sẽ khơng thực hiện được phép tốn tính tổng. Do vậy để thực hiện được phép

tố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 tốn, phân tích lại từ trên xuống dưới để đặt lại

cho đúng với thuật tố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

Giáo viên: Nguyễn Văn Quang



Trang 7



Trường THCS An Tân



Sáng kiến kinh nghiệm



a,b:real;

begin

write('nhap cac he so=');readln(a,b);

if a<>0 then

writeln('phuong trinh vo so nghiem');

else

if b=0 then

writeln('phuong trinh co nghiem',-b/a:4:2)

else

writeln('phuong trinh vo nghiem')

readln

end.

Với chương trình trên hồn tồn có thể chạy được song kết quả sẽ khơng đúng khi

nhập dữ liệu a, b vào . Do vậy ta phải sắp xếp lại thuật toán để cho một kết quả đúng nh ư

yêu cầu :

program ptb1;

var

a,b:real;

begin

write('nhap cac he so=');readln(a,b);

if a<>0 then

if b=0 then

writeln('phuong trinh vo nghiem')

else

writeln('phuong trinh co nghiem',-b/a:4:2)

else

writeln('phuong trinh vo so nghiem');

readln

end.

- 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ụ 3: 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ừ khố BEGIN nếu ta viết BE GIN thì sẽ khơng có nghĩa.

4.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 chưa 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 q 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:



Giáo viên: Nguyễn Văn Quang



Trang 8



Trường THCS An Tân



Sáng kiến kinh nghiệm



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à q 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 đó thỗ 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ố ngun đầ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ố ngun 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 tố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. 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 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.

* Khả năng áp dụng

- Đề tài này có thể vận dụng cho tất cả học sinh mới bắt đầu làm quen ngơn ngữ lập

trình Pascal.

* Lợi ích kinh tế - xã hội

- Trong q 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áng tạo trong quá trình lập trình.



C. KẾT LUẬN

- Để đưa ra một phương pháp tối ưu cho một bài tốn khơng đơn giản . Bởi một bài

tố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 và cho các kết quả khác



Giáo viên: Nguyễn Văn Quang



Trang 9



Trường THCS An Tân



Sáng kiến kinh nghiệm



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 tốn

trong lập trình.

- Bài tốn cho kết quả sai là do nhiều ngun 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 tố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 tố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 tố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

thcs và 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 tốn đưa ra để xây dựng 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 tố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!

An Tân, ngày 20 tháng 02 năm 2013

Người viết



Nguyễn Văn Quang



Giáo viên: Nguyễn Văn Quang



Trang 10



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Xác định bài toán:

Tải bản đầy đủ ngay(0 tr)

×