Lí do chọn đề tài Chương trình tin học 11 cung cấp đầy đủ các kiến thức cơ bản của lập trình và hình thành kĩ năng lập trình căn bản cho học sinh.. Chủ đề chương trình con CTC được đưa v
Trang 1MỤC LỤC
1.Mở đầu 1
1.1 Lí do chọn đề tài 1
1.2 Mục đích nghiên cứu 1
1.3 Đối tượng nghiên cứu 1
1.4 Phương pháp nghiên cứu 1
2 Nội dung sáng kiến kinh nghiệm 2
2.1 Cơ sở lí luận của sáng kiến kinh nghiệm 2
2.2 Thực trạng của vấn đề trước khi áp dụng sang kiến kinh nghiệm 2
2.3 Các sáng kiến kinh nghiệm, giải pháp đã sử dụng để giải quyết vấn đề 3
2.3.1 Mục đích của việc sử dụng chương trình con 3
2.3.2 Phân loại chương trình con 6
2.3.3 Cấu trúc chương trình con 6
2.3.4 Cách dùng chương trình con 9
a Lời gọi chương trình con 9
b Cách dùng tham số 9
c Biến cục bộ và biến toàn cục 9
2.3.5 Thoát khỏi chương trình con 11
2.3.6 Bài tập áp dụng 11
2.4 Hiệu quả của sáng kiến kinh nghiệm đối với hoạt động giáo dục, với bản thân, đồng nghiệp và nhà trường 14
3 Kết luận và kiến nghị 15
3.1 Kết luận 15
3.2 Kiến nghị 15
Tài liệu tham khảo 16
Danh mục mục các đề tài SKKN mà tác giả đã được Hội đồng Cấp phòngGD&ĐT, Cấp Sở GD&ĐT và các cấp cao hơn đánh giá đạt từ loại C trở lên 17
Trang 21 Mở đầu
1.1 Lí do chọn đề tài
Chương trình tin học 11 cung cấp đầy đủ các kiến thức cơ bản của lập trình và hình thành kĩ năng lập trình căn bản cho học sinh Nội dung xuyên suốt chương trình giúp học sinh dễ dàng hệ thống và tiếp cận tới từng vấn đề đặt ra Chủ đề chương trình con (CTC) được đưa vào cuối chương trình với nội dung ở
2 bài 17 và bài 18, với các kiến thức: lợi ích của việc sử dụng chương trình con, cấu trúc chung của CTC, phân loại CTC, cấu trúc CTC, ví dụ và cách sử dụng CTC Qua đấy thấy được lợi ích rất quan trọng của việc sử dụng CTC, yêu cầu người học vận dụng toàn bộ kiến thức đã biết để hướng tới mở rộng khả năng tư duy và kĩ năng lập trình từ cơ bản đến thành thạo và thực sự chuyên nghiệp Điều này là quan trọng và cần thiết, không chỉ giúp ích cho học sinh ở phổ thông
mà còn là hành trang để các em bước vào các bậc học cao hơn Nhưng nội dung liên quan đến CTC lại khá khó tiếp cận với mặt bằng chung nhiều học sinh, chính là nội dung khó nên cũng là phần nội dung phân loại học sinh rõ nét nhất, tạo hứng thú để phát hiện ra những nhóm học sinh có tiềm năng tư duy lập trình chuyên nghiệp Bản thân tôi qua quá trình giảng dạy theo dõi, đánh giá và tổng kết được chủ yếu học sinh khối 11 của mình còn khá yếu trong việc học lập trình pascal, nhất là sử dụng CTC vào lập trình Cứ thấy nội dung khó không vận dụng được là các em dễ dàng bỏ qua phần kiến thức cần thiết và rất hay này
Chính vì lí do trên nên tôi chọn đề tài “Chạy chương trình Pascal với vận tốc của chương trình con để về đích lập trình”, “Chạy chương trình”-“Ctrl+F9”,
“vận tốc”-“Debug and Compile” và “về đích”-“để kết thúc chương trình tin học 11”, hướng tới giúp học sinh sử dụng CTC để giải quyết các bài toán lập trình từ đơn giản đến phức tạp, hình thành kĩ năng lập trình căn bản, thành thạo
1.2 Mục đích nghiên cứu
Với việc chọn vấn đề “Chạy chương trình với vận tốc của chương trình con để về đích lập trình”, tôi mong muốn: đối với HS sẽ hình thành kiến thức, tư duy và kĩ năng lập trình tốt hơn nhằm hoàn thành chương trình tin học 11và là bàn đạp để nâng đỡ những lập trình viên tương lai Đối với bản thân tôi sẽ muốn hoàn thành tốt công tác chuyên môn, nâng cao hiệu quả trong giảng dạy, bổ sung những phần kiến thức kinh nghiệm còn thiếu
Mặc khác, tôi mông muốn tài liệu của mình sẽ giúp đỡ được các giáo viên đồng môn phần nào trong việc tạo hứng thú lập trình, tìm và phát hiện khả năng
tư duy lập trình để bồi dưỡng và phát triển tiếp
1.3.Đối tượng nghiên cứu.
Đề tài của tôi sẽ nghiên cứu, khai thác những phần kiến thức quan trọng,
ví dụ bài tập lập trình, bài tập thực hành, bài tập thực hành tổng hợp, tìm hiểu, phân loại và hướng tới từng nhóm đối tượng học sinh Tất cả các kỹ năng lập trình như viết chương trình, test chương trình, hiệu chỉnh chương trình cho phù hợp với đặc trưng của bộ môn
1.4 Phương pháp nghiên cứu
- Phương pháp nghiên cứu xây dựng cơ sở lí thuyết
Trang 3- Phương pháp điều tra khảo sát thực tế, thu thập thông tin.
- Phương pháp thống kê, xử lí số liệu
2 Nội dung sáng kiến
2.1 Cơ sở lí luận của sáng kiến kinh nghiệm
Cùng với sự phát triển của khoa học công nghệ, tin học ra đời đóng vai trò
là một ngành khoa học mang lại hiệu quả rất to lớn trong đời sống của con người Việc ứng dụng tin học vào thực tế nhất là việc sử dụng máy tính để giải các “bài toán” đã và đang đưa tri thức của con người lên một tầm cao mới Dần dần chúng ta có thể sử dụng những “cỗ máy nhân tạo” được “lập trình” để giải quyết các công việc không những nhanh, tiết kiệm thời gian mà hiệu quả gấp nhiều lần so với sức lao động của con người Và một trong những kiến thức lập trình căn bản mà học sinh phổ thong được tiếp cận- ngôn ngữ lập trình Pascal bắt đầu hình thành cho các em- thế hệ chủ nhân tương lai, kiến thức và kĩ năng
tư duy lập trình
Toàn bộ những nội dung quan trọng trong chương trình tin học 11: dữ liệu chuẩn và kiểu dữ liệu có cấu trúc), cấu trúc câu lênh, vòng lăp, cấu trúc CTC…
đã trang bị đầy đủ cho học sinh kiến thức lập trình cơ bản, để từ đây giúp các em phát triển hơn Ứng dụng kiến thức lập trình vào các môn học khác, từ các môn học khác vào lập trình và ứng dụng vào ngay cuộc sống môi trường học tập,vui chơi, giải trí…
Nội dung kiến thức liên quan đến chương trình con là cần thiết để hoàn thiện kĩ năng lập trình cho học sinh phổ thông
2.2 Thực trạng vấn đề trước khi áp dụng sáng kiến kinh nghiệm
Môn Tin học đến nay không còn là môn học mới mẻ đối với học sinh phổ thông, bởi học sinh đã được làm quen nó ngay ở các cấp học dưới Nhưng việc học các môn này ở các cấp học dưới và kể cả cấp học này chỉ chưa thực sự phát huy được hiệu quả của nó Nhiều học sinh chưa thực sự yêu thích và xem nhẹ tầm quan trọng của môn học này, dẫn tới học qua loa, máy móc, đối phó Dẫn tới tình trạng các em học lập trình mà như “cưỡi ngựa xem hoa” Đôi khi có những câu hỏi “Học lập trình này ứng dụng vào đâu thầy?”
Năm học 2016-2017 qua những bài kiểm tra, bài thu hoạch, bài hoạt động
cá nhân, bài hoạt động nhóm và tổng số phần trăm học sinh tham gia thực hành trên phòng máy đạt mức kĩ năng lập trình cơ bản là còn chưa cao Bản thân tôi khi tới nội dung này cũng gặp không ít khó khăn phần vì khách quan (đã gần cuối năm học nên tư tưởng và hứng thú của học sinh đã có phần đi xuống), chủ quan (phần kiến thức này khá khó tiếp cận đối với học sinh), kĩ năng lập trình chuyên nghiệp một cách thành thạo cũng có phần hạn chế và mất nhiều thời gian nghiên cứu học hỏi, kinh nghiệm bản thân cũng chưa nhiều nên việc xây dựng nội dung cho phù hợp với học sinh là khá khó Chính vì vậy cần khai thác tối đa những gì bản thân học sinh đã có, tạo hứng thú học tập cho học sinh, có đôi khi phát triển nội dung theo năng lực học sinh, đi theo hướng học sinh để hệ thống
và dẫn dắt để kết luận lại Thường xuyên cho các em rèn luyện kĩ năng lập trình trên phòng máy, là cơ hội để giáo viên tiếp cận học sinh ở cự li gần nhất
Trang 42.3 Các sáng kiến kinh nghiệm, giải pháp đã sử dụng để giải quyết vấn đề
2.3.1 Mục đích của việc sử dụng chương trình con
Đặt vấn đề:
- Phân loại nhóm đối tượng:
+ HS nào từng sử dụng CTC để lập trình? Mức độ sử dụng như thế nào?(xem và nhận biết, hiểu và sử dụng cơ bản, sử dụng thành thạo)
+ Nhóm HS chưa được làm quen, nội dung kiến thức là mới hoàn toàn
- Với nội dung kiến thức từ đầu chương trình tới giờ mỗi HS đã tự hình thành
kĩ năng lập trình cho riêng mình Chúng ta sẽ sử dụng những kiến thức ấy để tiếp tuc phát triển và hoàn thành tổng quan về kiến thức lập trình Pascal
Bài toán: Nhập và in ra màn hình 4 mảng 1 chiều(n phần tử, n nhập từ bàn
phím) Cho biết số phần tử là nguyên tố của mỗi mảng
(chương trình được viết theo 2 cách có và không sử dụng CTC)
Yêu cầu:
- Theo kiến thức đã học, HS tự lập trình theo cách không sử dụng CTC
- Trong nhóm HS khá có HS lập trình theo cách sử dụng CTC
Gợi ý: các công việc cần làm trong chương trình.
- Nhập n (nhập số phần tử của mảng)
- Nhập 4 mảng một chiều: a, b, c, d
- In từng mảng: a, b, c, d
- Đếm số nguyên tố của từng mảng và in ra màn hình
Chương trình sử dụng CTC để lập trình Chương trình không sử dụng CTC đểlập trình
uses crt;
type mang = array[1 100] of integer;
var a,b,c,d: mang;
i,n:integer;
procedure nhap(var x:mang;
y:integer);
begin
for i:= 1 to y do
begin
write('nhap phan tu thu ',i);
readln(x[i]);
end;
end;
procedure inmang(x:mang; y:integer);
begin
for i:= 1 to y do write(x[i]:5);
writeln;
end;
function nt(x:integer): boolean;
uses crt;
var a,b,c,d : array[1 100] of integer;
kt: boolean;
i,j,n,dem:integer;
begin clrscr;
{nhap mang}
write('nhap so phan tu: '); readln(n);
writeln('nhap mang a: ');
for i:= 1 to n do begin
write('nhap phan tu thu ',i); readln(a[i]);
end;
writeln('nhap mang b: ');
for i:= 1 to n do begin
Trang 5var j:integer; kt:boolean;
begin
kt:= true;
for j:= 2 to round(sqrt(x)) do
if (x mod j = 0 ) then kt:=false;
if x = 1 then kt:=false;
nt:= kt;
end;
procedure demnt(x:mang; y:integer);
var dem: integer;
begin
dem:=0;
for i:= 1 to y do
if nt(x[i]) then dem:=dem+1;
writeln('so ptu ngto: ',dem);
end;
begin
clrscr;
write('nhap n: ');
readln(n);
nhap(a,n);
nhap(b,n);
nhap(c,n);
nhap(d,n);
clrscr;
inmang(a,n); demnt(a,n);
inmang(b,n); demnt(b,n);
inmang(c,n); demnt(c,n);
inmang(d,n); demnt(d,n);
readln;
end.
write('nhap phan tu thu ',i); readln(b[i]);
end;
writeln('nhap mang c: ');
for i:= 1 to n do begin
write('nhap phan tu thu ',i); readln(c[i]);
end;
writeln('nhap mang d:');
for i:= 1 to n do begin
write('nhap phan tu thu ',i); readln(d[i]);
end;
clrscr;
{in mảng}
writeln(' in mang a:');
for i:= 1 to n do write(a[i]:5); writeln;
writeln(' in mang b:');
for i:= 1 to n do write(b[i]:5); writeln;
writeln(' in mang c:');
for i:= 1 to n do write(c[i]:5); writeln;
writeln(' in mang d:');
for i:= 1 to n do write(d[i]:5); writeln;
{ tim so nguyen to trong tung mang}
dem:=0;
for i:= 1 to n do begin
kt:=true;
for j:=2 to round(sqrt(a[i])) do
if (a[i] mod j = 0 ) then kt:=false;
if a[i] = 1 then kt:=false;
if kt then dem:=dem+1;
end;
writeln('so nguyen to trong mang la: ',dem);
dem:=0;
Trang 6for i:= 1 to n do begin
kt:=true;
for j:=2 to round(sqrt(b[i])) do
if (b[i] mod j = 0) then kt:=false;
if b[i] = 1 then kt:=false;
if kt then dem:=dem+1;
end;
writeln('so nguyen to trong mang la: ',dem);
dem:=0;
for i:= 1 to n do begin
kt:=true;
for j:=2 to round(sqrt(c[i])) do
if (c[i] mod j = 0) then kt:=false;
if c[i] = 1 then kt:=false;
if kt then dem:=dem+1;
end;
writeln('so nguyen to trong mang la: ',dem);
dem:=0;
for i:= 1 to n do begin
kt:=true;
for j:=2 to round(sqrt(d[i])) do
if d[i] mod j = 0 then kt:=false;
if d[i] = 1 then kt :=false;
if kt then dem:=dem+1;
end;
writeln('so nguyen to trong mang la: ',dem);
readln end.
Nhận xét:
- Từ 2 chương trình trên, HS có nhận xét gì? Từ nhận xét rút ra được khái niệm
và lợi ích của việc sử dụng CTC
- Khái niệm: chương trình con là một dãy lệnh mô tả một số thao tác nhất định
và có thể được thực hiện (được gọi) từ nhiều vị trí trong chương trình.
Trang 7- Lợi ích việc sử dụng CTC:
+ Tránh được việc phải viết lặp đi lặp lại cùng một dãy lệnh nào đó
+ Hỗ trợ việc thực hiện chương trình lớn
+ Phục vụ cho quá trình trừu tượng hoá
+ Mở rộng khả năng ngôn ngữ
+ Thuận tiện cho phát triển, nâng cấp chương trình
2.3.2 Phân loại chương trình con
?1 Trong chương trình ví dụ trên, em biết có những loại chương trình con nào.
?2 Chỉ ra từng đoạn chương trình tương ứng với từng loại chương trình con đó.
- Điểm khác nhau cơ bản giữa các loại CTC đó?
Là CTC thực hiện một số thao tác nào
đó và trả về một giá trị qua tên của nó Là CTC thực hiện các thao tác nhấtđịnh nhưng không trả về giá trị nào
qua tên của nó
Ví dụ:
- Hàm abs(x) trả về giá trị tuyệt đối
của x
- Hàm nt(x) trả về là True khi x là
số nguyên tố hoặc false nếu x không là
số nguyên tố
Ví dụ: Các thủ tục để vào ra dữ liệu writeln;
Readln;
nhap(x,y);
inra(x,n);
2.3.3 Cấu trúc chương trình con
a Cấu trúc chung
Chương trình con có 3 phần:
<phần đầu>
[<phần khai báo>]
<phần thân>
Trong đó:
- Phần đầu: dùng để khai báo tên chương trình con, nếu là hàm phải khai báo kiểu dữ liệu cho giá trị trả về của hàm
- Phần khai báo: khai báo biến cho dữ liệu vào/ra, các hằng và biến dùng trong chương trình
- Phần thân:
Begin
<dãy câu lệnh>;
End;
? So sánh cấu trúc CTC và CT chính
Cấu trúc <phần đầu>
[<phần khai báo>]
<phần thân>
[<phần khai báo>]
<phần thân>
Trang 8Phần đầu dùng để khai báo tên chương
Phần khai báo Chứa khai báo hằng, biến,
phạm vi các đối tượng chỉ trong CTC
Bao gồm: khai báo tên CT, khai báo thư viện, khai báo hằng, khai báo biến và các CTC sử dụng trong CT
<dãy câu lệnh>;
End;
Begin <dãy câu lệnh>;
End
b Cấu trúc chương trình con dạng hàm
Function <tên hàm> [<danh sách tham số>] : <kiểu dữ liệu>;
[<phần khai báo>]
begin
[<dãy lệnh>];
<tên hàm>:= <biểu thức>;
end;
Chương trình 1:Sử dụng cấu trúc hàm viết chương tìm rút gọn phân số với tử số
và mẫu số được nhập từ bàn phím
? Xây dựng ý tưởng cho bài toán
- Chương trình sử dụng một hàm để tìm UCLN của 2 số (tử số và mẫu số)
- Sử dụng hàm UCLN để rút gọn phân số
program rutgon_phanso;
uses crt;
var tuso,mauso,a: integer;
function UCLN(x,y:integer):integer;
var sodu:integer;
begin
while y<>0 do
begin
sodu:=x mod y;
x:=y;
y:=sodu;
end;
UCLN:=x;
end;
BEGIN
clrscr;
write('nhap phan so: ');readln(tuso,mauso);
a:=UCLN(tuso,mauso);
if a>1 then
begin
Tên hàm
Lệnh trả giá trị
Lời gọi hàm
Trang 9tuso:=tuso div a;
mauso:=mauso div a;
end;
write(tuso:5,mauso:5);
readln
END
Chương trình 2 : Sử dụng hàm hãy viết CT tìm giá trì lớn nhất của 3 số nguyên
bất kỳ được nhập từ bàn phím
program max3so;
uses crt;
var a,b,c: integer;
function max (a,b :integer): integer;
Begin
If a> b then max:= a
else max:=b;
End;
Begin
write(‘ Nhap lan luot 3 so tu nhien a , b , c :’);
Readln(a,b,c);
writeln(‘so lon nhat trong 3 so la: ’, max(max(a,b),c));
Readln
End
c Cấu trúc chương trình con dạng thủ tục
Procedure <tên thủ tục>[<danh sách tham số>];
[<phần khai báo>]
Begin
[<dãy lệnh>];
end;
Thành phần:
- Tên hàm, tên thủ tục do người lập trình đặt (tuân theo quy tắc đặt tên của NNLT Pascal)
- Danh sách tham số: các hằng, biến vào/ra dữ liệu trong CTC
- Từ cấu trúc của CTC dạng hàm và thủ tục hãy chỉ ra điểm khác nhau cơ bản?
- Có thể lập bảng so sánh như sau
hướng thông qua tên (được sử dụng trong các biểu thức)
Không trả giá trị thông qua tên (không thể viết trong các biểu thức)
số
của các biến Gọi tên của thủ tục nhưmột câu lệnh
Trang 10Có cấu trúc tương tự, cấu trúc 3 phần
của CTC - Từ khóa dành riêng hàm (Function),thủ tục (Procedure)
- Phải khai báo kiểu dữ liệu mà giá trị hàm trả về
- Trong phần thân hàm phải có lệnh trả giá trị thong qua tên hàm
<tên hàm>:= <biểu thức>;
2.3.4 Cách d ù ng chương trình con
a Lời gọi chương trình con
- Từ ví dụ xác định phạm vi, vị trí của CTC: xác định được phạm vi giới hạn của từng CTC; vị trí của từng CTC (trong phần khai báo của chương trình chính)
Chương trình con được khai báo sau khai báo biến và trước chương trình chính.
- Khi nào cần thực hiện thao tác liên quan đến CTC gọi CTC đó ra bằng lời gọi CTC Cấu trúc của lời gọi CTC:
<tên chương trình con>[<danh sách tham số>];
+ Danh sách tham số: các tham số thực sự thay thế cho các tham số hình thức + Quá trình thay thế: là quá trình truyền dữ liệu phải đảm bảo số lượng các tham
số, thứ tự các tham số, kiểu dữ liệu các tham số
Chú ý: lời gọi CTC của hàm và thủ tục có gì khác nhau, lời gọi hàm phải được
đặt trong một câu lệnh hoặc lời gọi CTC khác
-Khi gặp một lời gọi tới chương trình con máy sẽ thực hiện như sau:
+ Cấp phát bộ nhớ cho các đối các biến cục bộ
+ Truyền giá trị của các tham số thực sự cho các tham số giá trị tương ứng, truyền địa chỉ của các tham số thực sự ứng với các tham biến
+ Thực hiện các lệnh trong chương trình con
+ Giải phóng các đối các biến cục bộ trở về nơi gọi chương trình con
b Cách dung tham số
b.1 Vai trò của tham số:
- Các tham số khao báo ở đầu chương trình con dung để gửi các giá trị vào để chương trình xử lí, cũng là nơi lấy các kết quả mà chương trình đã xử lí xong
- Chú ý: Không được khai báo các biến riêng của chương trình con trùng với tên của các tham số trên
- Tham số hình thức là các biến được khai báo cho dữ liệu vào/ra
- Tham số thực sự: thay thế cho các tham số hình thức trong lời gọi CTC
- Tham số có 2 loại:
Tham biến (Tham số biến) Tham trị (Tham số giá trị)
Khai báo:
<DS tham số>:<kiểu dữ liệu>; Khai báo:Var <DS tham số>:<kiểu dữ liệu>; Giá trị thay đổi khi ra khỏi CTC Giá trị không thay đổi khi ra khỏi
CTC