1. Trang chủ
  2. » Tất cả

Đề tài skkn hướng dẫn cách viết chương trình con theo hệ thống bài tập từ dễ đến khó

17 2 0
Tài liệu đã được kiểm tra trùng lặp

Đ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 17
Dung lượng 193,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Đặt vấn đề: Ngày nay Công nghệ thông tin ngày càng phát triển, việc sử dụng rộng rãi máy tính không còn chỉ bó hẹp trong các viện nghiên cứu, trường đại học, trung tâm máy tính mà còn mở

Trang 1

1 Tên đề tài:

HƯỚNG DẪN CÁCH VIẾT CHƯƠNG TRÌNH CON THEO HỆ

THỐNG BÀI TẬP TỪ DỄ ĐẾN KHÓ

2 Đặt vấn đề:

Ngày nay Công nghệ thông tin ngày càng phát triển, việc sử dụng rộng rãi máy tính không còn chỉ bó hẹp trong các viện nghiên cứu, trường đại học, trung tâm máy tính mà còn mở rộng sử dụng ở mọi cơ quan, xí nghiệp nhà máy… Song song với quá trình trên, việc giảng dạy môn Tin học trong các trường đại học, trung học phổ thông cũng được đẩy mạnh, đi đôi với việc tăng cường trang bị máy tính Chính vì vậy, đối với mỗi giáo viên giảng dạy môn Tin học ở các trường phổ thông thì việc tìm hiểu, nghiên cứu các vấn đề về Tin học, cùng với việc tìm các biện pháp giảng dạy trong trường phổ thông là một công việc cần phải làm thường xuyên và lâu dài Nhằm đáp ứng với nhu cầu, sự đòi hỏi của xã hội ngày càng cao

Trong bối cảnh toàn ngành Giáo dục và Đào tạo đang nỗ lực đổi mới phương pháp dạy học theo hướng phát huy tính tích cực chủ động của học sinh trong hoạt động học tập Điều 24.2 của Luật giáo dục đã nêu rõ:

“Phương pháp giáo dục phổ thông phải phát huy tính tích cực, tự giác, chủ động, sáng tạo của học sinh, phù hợp với đặc điểm của từng lớp học, môn học; bồi dưỡng phương pháp tự học, rèn luyện kỹ năng vận dụng kiến thức vào thực tiễn, tác động đến tình cảm, đem lại niềm vui, hứng thú học tập cho học sinh” Như vậy, chúng ta có thể thấy định hướng đổi mới phương pháp

dạy học đã được khẳng định, không còn là vấn đề tranh luận Cốt lõi của việc đổi mới phương pháp dạy học ở trường phổ thông là giúp học sinh hướng tới việc học tập chủ động, chống lại thói quen học tập thụ động

Đổi mới phương pháp dạy học theo hướng tích cực hóa hoạt động của học sinh là một quá trình lâu dài; không thể ngày một ngày hai mà đông đảo giáo viên từ bỏ được kiểu dạy học truyền thụ kiến thức, tiếp thu thụ động đã quen thuộc từ lâu Việc phát triển các phương pháp tích cực đòi hỏi một số điều kiện, trong đó quan trọng nhất là bản thân mỗi giáo viên cần có một sự

nỗ lực để tìm tòi, sáng tạo trong công tác giảng dạy của mình

3 Cơ sở lý luận:

Là một giáo viên giảng dạy bộ môn Tin học, theo tôi không phải cứ tìm được nhiều bài toán khó, bài toán hay để giảng dạy cho học sinh Mà vấn đề đặt ra là chúng ta cần phải tích cực tìm tòi, sáng tạo trong việc đưa ra những bài toán đó để giúp cho học sinh có sự hứng thú, tìm tòi sáng tạo trong quá trình giải quyết học tập, từ đó biết vận dụng linh hoạt trong các tình huống cụ thể ngoài thực tế

Xây dựng đề tài này theo tinh thần đổi mới, thể hiện rõ hơn quan điểm coi trọng hoạt động của học sinh Khi sử dụng đề tài này, giáo viên không

Trang 2

dùng lối thuyết giảng mà cần quan tâm hơn đến việc giao nhiệm vụ cho học sinh trong từng hoạt động của tiết học Giáo viên là người hướng dẫn, động viên, giám sát mọi hoạt động của học sinh trong tiết học

4 Cơ sở thực tiễn:

Học sinh tại trường tôi đang công tác hiện được phân thành 2 nhóm mỗi khối: nhóm nâng cao và nhóm cơ bản Trong quá trình giảng dạy môn Tin học 11 (Pascal) tôi nhận ra rằng: để học sinh thấu hiểu được bộ môn này

các em cần phải có tư duy cộng với niềm đam mê thì mới có thể giải được

một số bài tập mà chương trình đề ra Qua hơn 12 năm công tác giảng dạy, mặc dù đã cố gắng trong quá trình giảng dạy nhưng học sinh vẫn chưa có khả năng giải được những bài tập trung bình khá (ngoại trừ một số học sinh có tư duy cao) Qua đó, tôi nhận thấy cần phải tạo cho học sinh một hệ thống nhất định, nhằm kết hợp giữa lý thuyết và bài tập để giải quyết những bài tập từ dễ đến khó Đó là lý do mà tôi viết đề tài này

Đề tài mà tôi đang làm là một chuỗi bài tập loại chương trình con theo một trình tự nhằm hướng cho các em viết được các bài tập trung bình khá đến giỏi ở dạng chương trình con Sau khi học sinh được học lý thuyết kết hợp với bài tập có trình tự tôi thấy học sinh hiểu bài, tỏ ra thích thú với bộ môn (Pascal) này hơn

Bài tập dạng chương trình con có rất nhiều nhưng do thời lượng

chương trình( 6 tiết bài tập) Tôi chỉ đưa ra các bài tập cơ bản cần phải sử

dụng chương trình con và cũng là nền tảng để các em có khả năng nghiên cứu

thêm (dành cho học sinh có đam mê môn lập trình).

Ở giữa học kỳ I tôi đã cố tình đưa ra những bài tập như kiểm tra tính nguyên tố của 1 số, kiểm tra 1 số đối xứng, ước chung lớn nhất của 2 số, kiểm tra 1 số a số phải là số hoàn chỉnh hay không….Đa số các em thắc mắc nếu viết chương trình để kiểm tra 1 đến 2 số như vậy thì cần gì phải viết chương trình, nhìn qua đã biết rồi ?

Thắc mắc của học sinh là hoàn toàn đúng, vì chỉ ứng dụng lý thuyết của nội sách giáo khoa thì những bài toán tương tự như vậy chỉ dừng lại ở đó Để giải quyết được n số theo yêu cầu của bài toán đề ra thì việc sử dụng chương trình con là cần thiết

Hạn chế: Đa số học sinh bị hỏng kiến thức Toán từ lớp dưới nên ý thức tìm

tòi và nghiên cứu của các em còn hạn chế Có không ít học sinh chưa cố gắng trong học tập, không chịu khó động não, nên ảnh hưởng không nhỏ đến việc học

5.

Nội dung nghiên cứu:

Nội dung được chia làm hai mục:

1 Cấu trúc của một chương trình con

2 Bài tập minh họa

Trang 3

Trong mỗi phần, Tôi trình bày từ dạng đơn giản tới phức tạp, có xây dựng phương pháp giải tổng quát cho từng trường hợp trên cơ sở suy luận toán học và tư duy

1 Cấu trúc của một chương trình con

Chương trình con sử dụng thủ tục (procedure)

Procedure <tên thủ tục>(<danh sách tham số >);

<khai báo biến cục bộ>

Begin

<Dãy các lệnh>

End;

Chương trình con sử dụng hàm (function)

Function <tên hàm>(<danh sách tham số >) : kiểu dữ liệu;

<khai báo biến cục bộ>

Begin

<Dãy các lệnh>

End;

Điểm giống nhau giữa hàm và thủ tục:

- Danh sách tham số không có thì không cần có trong phần đầu chương trình con

- Biến cục bộ không có thì không khai báo trong chương trình con Điểm khác nhau ở hàm và thủ tục:

- Tên hàm trả về giá trị còn tên thủ tục thì không

- Do tên hàm trả về giá trị nên phải khai báo kiểu dữ liệu ; kiểu dữ liệu của tên hàm có thể là: Boolean, integer, longint,string…

2 Bài tập minh họa

Xét bài toán: Viết chương trình vẽ 3 hình chữ nhật(sgk trang 96)

Để thực hiện được yêu cầu của đề bài ta viết đi viết lại ba đoạn chương trình liên tiếp vẽ 3 hình chữ nhật về mặt cấu trúc giống hệt nhau Thay vì dùng 3 đoạn chương trình gống hệt nhau về cấu trúc ta dùng 1 đoạn bằng cách

sử dụng chương trình con

procedure hcn;

begin

writeln('*********');

writeln('* *');

writeln('*********');

end;

begin

hcn; hcn; hcn;

readln

end

Mở rộng: yêu cầu vẽ n hình chữ nhật tương tự như vậy.

procedure hcn;

begin

Trang 4

writeln('*********');

writeln('* *');

writeln('*********');

end;

begin

for i:=1 to n do hcn;

readln

end

Nhận xét:

-Trường hợp xử lí trên n hình bắt buộc phải sử dụng chương trình con mới giải quyết được vấn đề

-Từ chương trình trên để ta thấy được việc sử dụng chương trình con trở nên đơn giản hơn khi tính toán trên số lượng lớn

Để giải quyết một số bài toán các em thường gặp trong toán học và

thực tế, đòi hỏi phải sử dụng chương trình con, áp dụng cho học sinh THPT

Tôi thường sử dụng chương trình con dạng hàm (Function) để giải quyết Vì như thế học sinh sẽ dễ hiểu ra vấn đề hơn

A Dạng toán thường gặp khi sử dụng chương trình con

Bài 1: Kiểm tra một số nguyên dương a (a>1) có phải là số nguyên tố hay

không Biết rằng số nguyên tố là số lớn hơn 1 và có hai ước 1 và chính nó

Dữ liệu vào (input) là số nguyên dương a.

Dữ liệu ra (output) là số nguyên tố hay không là số nguyên tố.

Hướng dẫn:

-Nhập vào số nguyên dương a ;

-Kiểm tra từ 2 đến phần nguyên căn bậc hai của a nếu có số nào là ước của a thì kết luận a không là số nguyên tố ngược lại thì a là số nguyên tố var nt:boolean; i,a:longint;

begin

readln(a);

nt:=true;

for i:=2 to trunc(sqrt(a)) do if a mod i =0 then nt:=false;

if nt then writeln('phai') else writeln('khong');

readln

end

Nhận xét:

-Với những bài toán yêu cầu có hay không ; phải hay không phải ta dùng biến Boolean là thích hợp nhất

Mở rộng:

Bài 1.1: Xuất ra các số nguyên tố nhỏ hơn hoặc bằng n (n>1).

Dữ liệu vào (input) là số nguyên dương n.

Dữ liệu ra (output) là các số nguyên tố nhỏ hơn hoặc bằng n.

Trang 5

Ví dụ:

-Chuyển đoạn chương trình kiểm tra tính nguyên tố ở trên thành chương trình con

-Duyệt từ 2 đến phần nguyên căn bậc hai của một số a nào đó và gọi lại đoạn chương trình trên nếu bằng true thì cho xuất ra

Chương trình:

var i,n:longint;

function nt(a:longint):boolean;

var i:integer;

begin

nt:=true;

for i:=2 to trunc(sqrt(a)) do if a mod i=0 then nt:=false;

end;

begin

readln(n);

for i:=2 to n do

if nt(i) then write(i,' ');

readln

end

Nhận xét: với yêu cầu trên thì việc sử dụng chương trình con là cần thiết.

Biến bài toán phức tạp thành đơn giản Chương trình có thể xử lí trên nhiều số chứ không còn là một số nữa

Tương tự: Học sinh đã hiểu được 2 bài toán trên thì các em có thể giải quyết

các số bài toán sau:

Bài 1.2: Cho một dãy số nguyên dương (>1) gồm n số Em hãy xuất ra các số

nguyên tố nếu có trong dãy

Dữ liệu vào (input) gồm n và dãy số nguyên dương a1,a2, ,an (1<ai<104)

Dữ liệu ra (output) là dãy số nguyên tố.

Ví dụ:

8

45 56 78 61 79 47 43 42

61 79 47 43

Bài 1.3 Hãy nhập một nguyên dương (>0) Em hãy xuất ra n số nguyên tố đầu

tiên

Dữ liệu vào (input) là số nguyên dương n(n>0).

Dữ liệu ra (output) là n số nguyên tố đầu tiên.

Trang 6

Ví dụ:

Bài 2: Nhập vào một số nguyên dương a Hãy xuất ra số đảo ngược.

Dữ liệu vào (input) là số nguyên dương a.

Dữ liệu ra (output) là số đảo ngược của a.

Ví dụ:

Chương trình:

var a,d:longint; so:byte;

begin

readln(a);

d:=0;

while a>0 do

begin

so:=a mod 10;

a:=a div 10;

d:=d*10+so;

end;

writeln(d);

readln

end

Nhận xét:

- Hạn chế của chương trình này là chỉ xử lí có 1 số.

-Nếu phải đảo ngược trên n số nguyên (n<109) thì chương trình trên không thể xử lí được Để xử lí được bài tập trên n số thì ta phải chuyển đoạn chương trình trên thành chương trình con

Bài 2.1: Cho một dãy số nguyên dương gồm n số (n<103) Em hãy đảo ngược các số có trong dãy

Dữ liệu vào (input) là n(n<103) và dãy số a1,a2, ,an (0<ai<106 )

Dữ liệu ra (output) là dãy số đảo ngược.

Ví dụ:

6

123 345 123 567 345 789

321 543 321 765 543 987

Hướng dẫn:

- Viết đoạn chương trình con đảo ngược 1 số

- Chương trình chính sử dụng vòng for duyệt mảng và cứ mỗi phần tử

ta gọi chương trình con đảo ngược ở trên

Trang 7

Chương trình:

var i,n:integer;

a:array[1 1000] of longint;

function dao(a:longint):longint;

var so:byte; d:longint;

begin d:=0;

while a>0 do

begin

so:=a mod 10;

a:=a div 10;

d:=d*10+so;

end;

dao:=d;

end;

begin

readln(n);

for i:=1 to n do read(a[i]);

for i:=1 to n do write(dao(a[i]),' ');

readln

end

Nhận xét:

- Xử lí được trên n số nguyên

- Từ một bài toán phức tạp khi đã sử dụng chương trình con thì trở nên

đơn giản dễ hiểu đi nhiều

Khi các em hiểu được bài 1.1; bài 2; bài 2.1 thì các em giải được bài toán tiếp theo

Bài 2.2: Nhập một số nguyên dương n Kiểm tra số vừa nhập có phải là số đối

xứng hay không?

Dữ liệu vào (input) là số nguyên dương n.

Dữ liệu ra (output) là số đối xứng hay không là số đối xứng.

Ví dụ:

Hướng dẫn:

- Sử dụng 1 đoạn chương trình con kiểm tra tính đối xứng

- Cách xử lí giống bài kiểm tra số đảo và tên hàm nên khai báo biến Boolean

Chương trình:

var n:longint;

function dx(a:longint):boolean;

var d,n:longint; so:byte;

Trang 8

d:=0; n:=a;

while a>0 do

begin

so:=a mod 10;

a:=a div 10;

d:=d*10+so;

end;

if n=d then dx:=true else dx:=false;

end;

begin

readln(n);

if dx(n) then writeln('la doi xung') else

writeln('khong la doi xung');

readln

end

Nhận xét: Bài toán trên chỉ kiểm tra 1 số nguyên có phải là số đối xứng hay

không

Mở rộng

Bài 2.3: Cho một dãy gồm n số nguyên dương (n<=103) Em hãy xuất ra các

số đối xứng nếu có trong dãy

Dữ liệu vào (input) là n(n<103) và dãy số a1,a2, ,an (0<ai<106 )

Dữ liệu ra (output) là các số đối xứng nếu có trong dãy.

Ví dụ:

6

121 343 123 567 545 789

121 343 545

Chương trình:

var i,n:integer;

a:array[1 1000] of longint;

function dao(a:longint):boolean;

var so:byte; d,n:longint;

begin

d:=0; n:=a;

while a>0 do

begin

so:=a mod 10;

a:=a div 10;

d:=d*10+so;

end;

if n =d then dao:=true else dao:=false;

end;

Trang 9

readln(n);

for i:=1 to n do read(a[i]);

for i:=1 to n do if dao(a[i]) then write(a[i]);

readln

end

Nhận xét: sau khi đã giải qua một số bài tập về chương trình con Ta cùng

nhìn lại các bài tập đã giải 1.1; 1.2; 1.3; 2.2; 2.3 đều có chung một điểm Chương trình con kiểm tra phải hay không; có hay không có những bài tập

đề yêu cầu như vậy chương trình con sử dụng hàm và kiểu dữ liệu lôgic là giải pháp tốt nhất để bài toán trở nên đơn giản

Bài 3: Viết chương trình kiểm tra một số nguyên dương a vừa nhập có phải là

số hoàn chỉnh hay không?

Biết rằng số hoàn chỉnh là số nguyên dương và tổng các ước nguyên của nó bằng hai nhân với chính nó

Dữ liệu vào (input) là số nguyên dương a.

Dữ liệu ra (output) là phải hay không phải số hoàn chỉnh.

Ví dụ: a=6 gồm các ước 1,2,3,6; có tổng 1+2+3+6=2*6

Chương trình:

var a:longint;

function hc(a:longint):boolean;

var i,t:longint;

begin

hc:=true;t:=0;

for i:=1 to a-1 do

if a mod i=0 then t:=t+i;

if t<>a then hc:=false;

end;

begin

readln(a);

if hc(a) then writeln('phai') else writeln('khong');

readln

end

Nhận xét: Đến bài này học sinh đã biết xử lý các bài tập dạng này ở chương

trình con

Mở rộng:

Bài 3.1: Nhập n(0<n<104) Hãy xuất ra các số hoàn chỉnh nhỏ hơn hoặc bằng n

Dữ liệu vào (input) là số nguyên n

Trang 10

Dữ liệu ra (output) là các số hoàn chỉnh nhỏ hơn hoặc bằng n.

Ví dụ:

Bài 3.2: Cho một dãy số nguyên dương gồm n số (n<103) Em hãy xuất ra các số hoàn chỉnh nếu có trong dãy

Dữ liệu vào (input) là n(n<103) và dãy số a1,a2, ,an (0<ai<106 )

Dữ liệu ra (output) là các số hoàn chỉnh nếu có trong dãy.

Ví dụ:

6

6 343 28 567 545 789

6 28

Nhận xét: sau khi các em đã hiểu được bài 1.2; 2; 2.1; 2.3 thì các em tự trình

bày bằng lập trình hai bài 3.1 và 3.2 một cách dễ dàng

B Dạng toán khác: cũng xử lí trên chương trình con nhưng cách gọi lại

trong chương trình chính có một chút thay đổi

Bài 4: Tìm ước chung lớn nhất của 2 số nguyên a và b.

Dữ liệu vào (input) là hai số nguyên a và b.

Dữ liệu ra (output) là ước chung lớn nhất của hai số trên.

Ví dụ:

Hướng dẫn: - Đoạn chương trình xử lí 2 số để tìm UCLN hãy đưa vào

chương trình con sử dụng hàm

- Chương trình chính nhập vào 2 số và xuất ra ucln sau khi gọi lại chương trình con

Chương trình:

var a,b:longint;

function ucln(a,b:longint):longint;

begin

while a<>b do

if a>b then a:=a-b else b:=b-a;

ucln:=a;

end;

begin

readln(a,b);

writeln('ucln=', ucln(a,b));

readln

end

Nhận xét: - Nhược điểm của bài này chỉ xử lí được có 2 số

Trang 11

Bài 4.1: Nhập vào tử số và mẫu số (#0) Hãy xuất ra tử số và mẫu số đã tối

giản ( ví dụ 1 sgk trang 101)

Dữ liệu vào (input) là tử số và mẫu số (#0).

Dữ liệu ra (output) là tử số và mẫu số đã tối giản.

Ví dụ:

50

150

1 3

Hướng dẫn:

- Sử dụng một đoạn chương trình con tìm UCLN của hai số

- Chương trinh chính nhập vào tử số a và mẫu số b

- Lấy tử số=a/UCLN(a,b); mẫu số=b/UCLN(a,b)

Chương trình:

var a,b:longint;

function ucln(a,b:longint):longint;

begin

while a<>b do

if a>b then a:=a-b else b:=b-a;

ucln:=a;

end;

begin

readln(a);

readln(b);

writeln(a/ucln(a,b):8:0);

writeln(b/ucln(a,b):8:0);

readln

end

Nhận xét: bài 4 và 4.1 đều có một đoạn chương trình con tìm UCLN hai số

nhưng cách xử lí ở chương trình chính khác nhau theo yêu cầu đề bài

Mở rộng:

Bài 4.2 Cho một dãy số nguyên dương gồm n số n(1<n<103) Tìm UCLN của

n số nguyên dương

Dữ liệu vào (input) là n(n<103) và dãy số a1,a2, ,an (0<ai<106 )

Dữ liệu ra (output) là UCLN của n số trên.

Ví dụ:

3

120 40 60

20

Hướng dẫn:

- Cũng sử dụng đoạn chương trình con tìm UCLN của hai số

- Chương trình chính cho dãy số (mảng A) gồm n phần tử

Ngày đăng: 16/09/2019, 09:44

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w