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

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

18 6,6K 23

Đ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 18
Dung lượng 101 KB

Nội dung

Ý 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.. - Khi giải bài toán trên máy học sinh chỉ qua

Trang 1

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”

Trang 2

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 giải bà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ết quả 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

Trang 3

thuật toá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

- Trước khi thực hiện đề tài, tôi đã khảo sát học sinh khối 8 thông qua giờ dạy lý thuyết, dạy thực hành, kiểm tra bài cũ Tổng hợp kết quả thu được:

Tỷ lệ học

sinh giỏi

Tỷ lệ học sinh khá

Tỷ lệ học sinh trung bình

Tỷ lệ học sinh yếu

Tỷ lệ học sinh kém

9.5% 20,5% 47,5% 18,5% 4 %

2 Các biện pháp tiến hành

- Qua dự giờ và trao đổi kinh nghiệm với đồng nghiệp

- Qua các tiết thực hành, tiết lý thuyết

- Tham khảo tài liệu trên sách, báo, internet,…

B NỘI DUNG

I Mục tiêu

Tìm ra những phương pháp, 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

Trên cơ sở nghiên cứu tính tích cực của học sinh trong giờ học môn Tin học 8, đề xuất một số ý kiến nhằm nâng cao chất lượng dạy và học

II Mô tả giải pháp

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

Trang 4

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ụ:

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 đưa a,b vào

+ Các thông tin cần chế biến thông tin như:

- Lần lượt đưa a,b vào ( cho a=3,b=4)

Trang 5

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

2 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 được sắ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

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

Trang 6

- 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

sai sai

Trang 7

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

* Kỹ năng lập trình

Trang 8

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

Trang 9

- 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: = [ ]

S = [2, N]

Repeat

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

NT:= NT+ [S0] Loại khỏi S các bội số của S0

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);

Trang 10

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;

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);

Trang 11

end;

readln

end

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

Lần 2: Program tim_so; uses crt;

Trang 12

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:

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

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

Trang 13

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 toà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ả luôn đúng thì ta có thể viết lại chương trình

Lần 2: Program hcn;

Ues crt;

Var i,j, 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 cr

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

Writeln;

End;

Readln 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

Trang 14

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 hoàn toà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)

Trang 15

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ừ khoá 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 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 đó

Ngày đăng: 03/04/2015, 21:57

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w