Mục tiêu của đề tài là Góp phần đổi mới phương pháp dạy học sinh đại trà và học sinh tham dự kì thi học sinh giỏi môn Tin học theo hướng phát huy tính tích cực, chủ động và sáng tạo của học sinh giúp học sinh tiếp thu tri thức một cách có hiệu quả. Góp phần gây hứng thú học tập môn Tin học cho học sinh lớp 11 và học sinh tham gia thi chọn học sinh giỏi, tránh việc học thụ động, học vẹt. Giúp học sinh lĩnh hội tri thức một cách khoa học, củng cố và khắc sâu kiến thức.
Trang 1SỞ GIÁO DỤC ĐÀO TẠO VĨNH PHÚC TRƯỜNG THPT YÊN LẠC 2
TIN HỌC 11
Tác giả sáng kiến: CHU THỊ THU
Mã sáng kiến: 28.62.01
Yên Lạc, năm 2020
Trang 3MỤC LỤC
1 LỜI GIỚI THIỆU 1
2 TÊN SÁNG KIẾN 1
3 TÁC GIẢ SÁNG KIẾN 1
4 CHỦ ĐẦU TƯ TẠO RA SÁNG KIẾN 2
5 LĨNH VỰC ÁP DỤNG SÁNG KIẾN 2
6 NGÀY SÁNG KIẾN ĐƯỢC ÁP DỤNG 2
7 MÔ TẢ BẢN CHẤT CỦA SÁNG KIẾN 2
7.1 Tổng quan các vấn đề nghiên cứu 2
7.1.1 Mục đích nghiên cứu 2
7.1.2 Bản chất đối tượng nghiên cứu 2
7.1.3 Đối tượng, phạm vi nghiên cứu 2
7.1.4 Phương pháp nghiên cứu 2
7.1.5 Giới hạn về không gian của phương pháp nghiên cứu 3
7.1.6 Phạm vi nghiên cứu 3
7.2 Phần nội dung 3
7.2.1 Cơ sở lý luận 3
7.2.2 Cơ sở thực tiễn 3
7.2.3 Nội dung cụ thể 4
I Khái niệm chương trình con 4
A Khái niệm 4
B Lợi ích của việc sử dụng chương trình con 4
II Phân loại và cấu trúc chương trình con 4
A Phân loại 4
B Cấu trúc chương trình con 4
C Thực hiện chương trình con 5
D Khai báo CTC 5
E Biến toàn cục và biến cục bộ 7
F Cách truyền tham số trong chương trình con 7
G Tính đệ quy của chương trình con 8
H Một số ví dụ 9
Trang 4J Bài tập áp dụng 15
7.3 Khả năng áp dụng của sáng kiến 22
8 NHỮNG THÔNG TIN CẦN BẢO MẬT 23
9 CÁC ĐIỀU KIỆN CẦN THIẾT ĐỂ ÁP DỤNG SÁNG KIẾN 23
10 LỢI ÍCH THU ĐƯỢC 23
KẾT LUẬN 28
TÀI LIỆU THAM KHẢO 29
Trang 5BÁO CÁO KẾT QUẢ NGHIÊN CỨU, ỨNG DỤNG SÁNG KIẾN
1 LỜI GIỚI THIỆU
Để rèn luyện kỹ năng lập trình cho học sinh khá, giỏi trước khi chọn đội tuyển đithi học sinh giỏi môn Tin học có rất nhiều cách mà giáo viên có thể áp dụng đối với cácđối tượng học sinh khác nhau Các trường có điểm thi đầu vào cao thì việc rèn luyện kỹnăng sẽ có nhiều thuận lợi nhưng với các trường có điểm thi đầu vào trung bình và thấpthì việc rèn luyện kỹ năng lập trình cho các em gặp rất nhiều khó khăn Tuy nhiên trongcùng một trường với các đối tượng học sinh khác nhau giáo viên có thể áp dụng nhiềubiện pháp khác nhau để rèn luyện kỹ năng lập trình cho học sinh với hiệu quả khác nhau.Các giáo viên đều hướng dẫn cho học sinh biết một bài toán có thể được giải với nhiềuthuật toán khác nhau và mỗi thuật toán chỉ giải được một bài toán hoặc một lớp bài toán,nhưng thực tế cho thấy, đứng trước một bài toán tin học đặc biệt là bài toán về xâu kí tựhọc sinh thường lúng túng khi lập trình việc này cũng có thể do nhiều nguyên nhân,chẳng hạn không biết xử lý dữ liệu như thế nào, không biết đọc, ghi dữ liệu ra sao… ,mặt khác học sinh không có máy để thực hành thêm ở nhà Tuy nhiên, khi học sinh đượcrèn luyện từ những bài cơ bản cho đến những bài toán có dạng tương tự hoặc dạng mởrộng từ một bài toán cơ bản nào đó trong sách giáo khoa, hoặc một bài toán cơ bản nào
đó mà các em biết thì các em có thể xây dựng và có hứng thú để xây dựng thuật toán chobài toán đặt ra Vì vậy giáo viên có thể chọn các bài tập cơ bản liên quan đến mảng mộtchiều, mảng hai chiều, xâu kí tự từ đó mở rộng và phát triển đến các bài toán có sử dụngchương trình con để để rèn luyện kỹ năng lập trình và kích thích hứng thú học tập bộ mônTin học cho học sinh
Dĩ nhiên cách làm này không mới với giáo viên nhưng cách chọn các bài toán cơbản như thế nào để học sinh có thể vận dụng và kích thích được húng thú học tập mônTin học cho học sinh đó lại là điều đáng quan tâm
Chương trình con là một trong những vấn đề hay gặp trong lập trình nói chung và
lập trình pascal nói riêng Chương trình tin học lớp 11 đã giới thiệu và có một số ví dụ vềchương trình con nhưng trong quá trình học lập trình khô khan, để học sinh không nhàmchán và tránh mắc phải những sai lầm khi lập trình lại kích thích hứng thú học tập cho
học sinh không phải là việc đơn giản Vì những lý do trên tôi chọn đề tài “Kích thích
hứng thú học tập bộ môn Tin học thông qua dạy học chương trình con tin học 11”
nhằm cung cấp cho học sinh những kiến thức khái quát hơn về chương trình con, rènluyện kỹ năng lập trình và kích thích hứng thú học tập bộ môn này cho học sinh thôngqua một số bài toán cụ thể
2 TÊN SÁNG KIẾN
“Kích thích hứng thú học tập bộ môn Tin học thông qua dạy học chương trình con tin học 11”
Trang 63 TÁC GIẢ SÁNG KIẾN
- Họ và tên: Chu Thị Thu
- Địa chỉ: Trường THPT Yên Lạc 2 – Huyện Yên Lạc – Tỉnh Vĩnh Phúc
- Số điện thoại: 037467972 E_mail:chuthu.yl2@gmail.com
4 CHỦ ĐẦU TƯ TẠO RA SÁNG KIẾN
- Họ tên: Chu Thị Thu
- Trình độ chuyên môn: Đại học sư phạm Tin học
- Đơn vị công tác: Trường THPT Yên Lạc 2– Huyện Yên Lạc – Tỉnh Vĩnh Phúc
5 LĨNH VỰC ÁP DỤNG SÁNG KIẾN
Ứng dụng chương trình con trong lập trình giảng dạy học sinh lớp 11 môn Tin học
và bồi dưỡng học sinh tham gia kì thi chọn học sinh giỏi các cấp môn Tin học
6 NGÀY SÁNG KIẾN ĐƯỢC ÁP DỤNG
Từ ngày 01/08/2018
7 MÔ TẢ BẢN CHẤT CỦA SÁNG KIẾN
7.1 Tổng quan các vấn đề nghiên cứu
7.1.1 Mục đích nghiên cứu
Góp phần đổi mới phương pháp dạy học sinh đại trà và học sinh tham dự kì thi họcsinh giỏi môn Tin học theo hướng phát huy tính tích cực, chủ động và sáng tạo của họcsinh giúp học sinh tiếp thu tri thức một cách có hiệu quả
Góp phần gây hứng thú học tập môn Tin học cho học sinh lớp 11 và học sinh thamgia thi chọn học sinh giỏi, tránh việc học thụ động, học vẹt Giúp học sinh lĩnh hội trithức một cách khoa học, củng cố và khắc sâu kiến thức
Qua đề tài này tôi mong muốn cung cấp cho học sinh một trong những vấn đề màcác em đang gặp phải trong khi lập trình thông qua việc sử dụng chương trình con giúpcác em chủ động hơn trong học tập, tích luỹ kiến thức, kỹ năng lập trình
7.1.2 Bản chất đối tượng nghiên cứu
Đưa ra hệ thống lý thuyết về chương trình con và ứng dụng chương trình con giảicác bài tập trong ngôn ngữ lập trình Pascal giúp học sinh lĩnh hội tri thức, giúp các emtích cực, chủ động tích lũy kiến thức, kích thích hứng thú học tập bộ môn Tin học Qua
đó, học sinh phát triển được tư duy logic thông qua hệ thống bài tập giúp các em rènluyện được tính tự giác, tính kỉ luật, thói quen tự học đó là những đức tính rèn luyện tốtcủa học sinh
7.1.3 Đối tượng, phạm vi nghiên cứu
Đối tượng: Chương trình con trong lập trình
Phạm vi: Các vấn đề về chương trình con trên ngôn ngữ lập trình Pascal
Trang 77.1.4 Phương pháp nghiên cứu
Phương pháp
Nghiên cứu lí luận chung
Khảo sát điều tra thực tế dạy học
Tổng hợp đúc rút kinh nghiệm
Cách thực hiện
Trao đổi với đồng nghiệp, tham khảo ý kiến giáo viên cùng bộ môn Liên hệ thực
tế trong nhà trường, áp dụng và đúc rút kinh nghiệm qua quá trình giảng dạy Thông quaviệc giảng dạy trực tiếp học sinh khối 11 và học sinh tham gia thi chọn học sinh giỏi mônTin học lớp 11
7.1.5 Giới hạn về không gian của phương pháp nghiên cứu
Đề tài được đề cập với đồng nghiệp và thực nghiệm sư phạm qua các em học sinhlớp 11A1, 11A2 và các em học sinh tham gia dự kì thi chọn học sinh giỏi môn Tin họclớp 11 năm học 2017-2018, năm học 2018-2019
là không cao, một số học sinh kém hơn thì không biết cách tìm thuật toán từ đâu và điều
đó gây tâm lý chán nản cho các em Với tình hình ấy để giúp học sinh định hướng tốt hơntrong quá trình tìm thuật toán, trước khi có thể tự tìm được thuật toán tốt hơn thì ngườigiáo viên cần tạo cho học sinh thói quen tìm thuật toán từ các các bài toán cơ bản quenthuộc mà các em đã biết, khai thác các yếu tố đặc trưng của một số bài toán cơ bản sửdụng chương trình con để giải quyết cho các bài toán mới Việc áp dụng thuật toán củacác bài toán cơ bản về chương trình con xây dựng thuật toán cho các bài toán tương tựhoặc các bài toán mở rộng từ các bài toán cơ bản đó là một quá trình giúp học sinh kíchthích hứng thú học tập và rèn luyện kỹ năng lập trình
7.2.2 Cơ sở thực tiễn
Trường tôi nằm dưới chân đê dải sông Hồng nên đa số học sinh ở nông thôn nên chưa có
cơ hội, điều kiện tiếp xúc với công nghệ và máy tính Vì vậy, tin học là một môn học tươngđối lạ lẫm và khó đối với học sinh trường tôi Học sinh học trên lớp đã không có hứng thúhọc tin học đặc biệt là các bài lập trình vì các em không học thêm hay tin học không phải là
Trang 8môn mà các em thi đại học Điều này dẫn đến ý thức tự giác của học sinh chưa cao, đặc biệt
là đối với môn học lập trình Tin học lớp 11 Những thao tác thực hành thì đa phần học sinhchưa nhớ vì ở nhà các em cũng không có máy tính để học sinh rèn luyện các kỹ năng thựchành cho học sinh Phần chương trình con là phần các em học rất ít trên tiết lý thuyết Cơ sởtrên đã giúp tôi áp dụng đề tài kích thích hứng thú học tập bộ môn Tin học thông qua chươngtrình con trong lập trình Pascal giảng dạy cho học sinh khối 11 và áp dụng cho học sinh tham
dự kì thi chọn học sinh giỏi cấp tỉnh và cấp quốc gia
B Lợi ích của việc sử dụng chương trình con
II Phân loại và cấu trúc chương trình con
A Phân loại
Trong nhiều ngôn ngữ lập trình, chương trình con thường gồm hai loại:
một giá trị qua tên của nó
Ví dụ:
Sin(x) nhận vào giá trị thực x và trả về giá trị sin x
Sqrt(x) nhận vào gía trị x trả về giá trị căn bậc hai của x
Length(x) nhận vào xâu x và trả về độ dài của xâu x
không trả về giá trị nào qua tên của nó
Ví dụ: Các thủ tục vào/ra chuẩn hay thủ tục xử lí xâu: writeln, readln, delete
B Cấu trúc chương trình con
<phần đầu>
Trang 9[<phần khai báo>]
<phần thân>
Phần đầu: Cấu trúc chương trình con tương tự chương trình chính, chương trình chính,
nhưng nhất thiết phải có phần đầu để khai báo tên, nếu là Hàm thì phải có khai báo
kiểu dữ liệu trả về.
Phần khai báo: Có thể khai báo cho dữ liệu vào ra, các hằng được sử dụng trong
chương trình con
Phần thân: Là dãy các lệnh được thực hiện trong chương trình con từ dữ liệu vào và
được kết quả như mong muốn Phần này luôn nằm giữa hai từ khóa là Begin và End Ở giữa là các thao tác cần thực hiện Sau từ khóa End là dấu chấm phẩy (;).
oMột số lưu ý:
Một chương trình con có thể có hoặc không có tham số hình thức, có thể có hoặckhông có biến cục bộ
C Thực hiện chương trình con
hàm hay thủ tục chuẩn, bao gồm tên chương trình con với tham số (nếu có) là cáchằng và biến chứa dữ liệu vào và ra tương ứng với các tham số hình thức đặt trongcặp ngoặc ( và ) Các hằng và biến này được gọi là các tham số thực số thực sự
của tham số thực sự tương ứng Khi xuất dữ liệu thì tham số hình thức lưu trữ dữ liệu
ra sẽ trả giá trị cho tham số thực sự tương ứng
D Khai báo CTC
– Nhắc lại cấu trúc của một chương trình
PROGRAM Tên_chương_trình; { Tên chương trình}
USES ; {Khai báo thư viện}
CONST ;{Khai báo hằng}
TYPE ;{Khai báo kiểu}
VAR ;{Khai báo biến}
Khai báo CTC
BEGIN {Chương trình chính}
<các lệnh>;
Trang 10Như vậy phần khai báo CTC nằm ở phần cuối của phần khai báo
a Khai báo và lời gọi hàm
– Khai báo:
FUNCTION <tên hàm>(Danh sách ác tham số):<Kiểu dữ liệu>;
[Khai báo Const, Type, Var]
Trang 11<tên thủ tục>(danh sách các tham số thực);
Ví dụ:
inso(6);
E Biến toàn cục và biến cục bộ
được dùng ở mọi nơi trong chương trình và tồn tại trong suốt thời gian làm việc củachương trình
được sử dụng trong phạm vi ctc mà nó được khai báo Sau khi kết thức ctc các biếnnày sẽ không còn tồn tại
Ví dụ:
PROGRAM vidu;
Var a,b,c:integer; {3 biến toàn cục}
PROCEDURE thutuc(n:integer);{n là biến cục bộ}
var i:integer; {i là biến cục bộ}
Trong trường họp biến cục bộ trùng tên với biến toàn cục thì máy không bị nhầm lẫn mà
sẽ thực hiện trên biến cục bộ Biến toàn cục không bị ảnh hưởng
F Cách truyền tham số trong chương trình con
tiếp biến toàn cục
với khi khai báo ctc
inso(13,'a'); {lời gọi đúng}
inso('a',13); {loi goi sai}
inso(13);{lời gọi sai}
Trang 12Tham số thực sự là các tham số sau tên hàm và thủ tục trong lời gọi.
biến chứ không được là giá trị Tham biến có thể được thay đổi trong CTC và sau khi rakhỏi CTC nó vẫn giữ giá trị thay đổi đó
thực có thể là các giá trị, hằng, biến Tham trị có thể thay đổi trong ctc nhưng sau khi kếtthúc ctc giá trị của nó trở về như ban đầu
hoặc tham biến
kiểu dữ liệu có cấu trúc (Array, Record, File)
Chú ý: Nếu một công việc có thể làm bằng hàm thì chắc chắn sẽ làm được bằng thủ
tục {tuy nhiên sẽ phức tạp hơn khi dùng hàm} nhưng một chương trình làm bằng thủtục thì chưa chắc ta đã làm được bằng hàm
Đối với Borland Pascal 7.0 ta có thể gọi hàm như gọi một thủ tục Không nhất thiếtphải lấy giá trị trả về Để thực hiện được điều này trong menu Options >Compiler cầnkhai báo cú pháp mở rộng (Extended syntax), hoặc trong chương trình cần có dẫn hướngbiên dịch {$ X+} Nếu không, khi biên dịch (gõ F9) Pascal sẽ thông báo lỗi “Error 122:Invalid variable reference”
G Tính đệ quy của chương trình con
Một CTC trong Pascal có thể gọi về chính nó Một lời gọi như thế gọi là một lờigọi đệ quy Ta xét ví dụ sau:
Trang 13 Khi sử dụng đệ quy phải có điều kiện kết thúc đệ quy (TH suy biến) Trong ví dụ
ta xét điều kiện kết thúc đệ quy chính là n=0 Nếu không có điều kiện kết thúc nàychương trình của ta sẽ lặp vô hạn
H Một số ví dụ
Ví dụ 1: Cho số nguyên dương N (N<105) Viết chương trình chuyển đổi số tự nhiên Ncho trước sang hệ cơ số 2 bằng việc xây dựng hàm chuyển đổi Dec2Bin( )
Hướng dẫn:
- Xây dựng hàm Dec2Bin( ) chuyển đổi từ số tự nhiên sang số nhị phân
Sử dụng biến S để lưu giá trị số nhị phân của N Khởi gán bằng 0
Tiến hành lặp chuyển đổi cơ số: Lặp trong khi mà N > 0
SoDu = số dư của N chia cho 2
N = N chia cho 2
Bổ sung chữ số SoDu vào số S thành một chữ số
Trả về kết quả cuối cùng của S
- Viết thân chương trình chính với nội dung dùng để kiểm tra kết quả thực hiện của hàm.Khai báo biến N, M
Thông báo nhập và nhập giá trị cho biến N
Gán giá trị M bằng kết quả trả về của hàm Dec2Bin( N )
In thông báo về kết quả số nhị phân chuyển đổi được (giá trị của M)
Gọi hàm readln trước khi kết thúc chương trình
Chương trình:
Program Doi_Co_So;
Uses crt;
Var N:integer;
{ 1 Thu tuc chuyen so tu nhien n cho truoc sang ket qua tra ve he co so 2 }
Function Dec2Bin ( n:integer ):integer;
Trang 14write( 'Nhap so N =' ); readln(N );
writeln(' Dang nhi phan cua N la ', Dec2Bin(N) );
Kiểu dữ liệu trả về: integer
Tham số: 2 tham trị là int a, int b
Giá trị trả về: chính là giá trị ước số chung lớn nhất của a và b
Function USCLN( a, b: Integer): Integer;
Trang 15{Tuong tu ham BSCNN(a, b : Integer)}
Function BSCNN(a,b: Integer): Integer;
Var k :integer;
Begin
For k := a to a*b do { Lap voi moi i co gia tri tu a den 1}
If ((k mod a = 0) and ( k mod b = 0)) then { Kiem tra a, b cung chia het cho k? } Break; { break de thoat, luu giu lai gia tri cua k.}
BSCNN:= k;
End;
* Mở rộng bài toán:
Từ ví dụ 2, viết chương trình tối giản phân số n/m Với n, m là hai số nguyên
Ví dụ 3: Cho số nguyên dương N (N<105) Viết hàm kiểm tra số N có phải là số nguyên
Xử lý kiểm tra: Dựa trên ví dụ đã có ở phần trước
Function KiemtraSNT(N: Integer ): Boolean;
Var OK : Boolean;
i : Integer;
Begin
OK:= True; { Khoi gan gia tri dung cho ktrSNT}
For i := 2 to trunc(sqrt(N)) do { Lap voi moi i co gia tri tu 2 den phan nguyencan bac 2 cua N}
If N mod i = 0 then { Kiem tra xem N co chia het cho i hay khong} Begin OK:=false; break; end;
{ Neu dung thi khong la so nguyen to va thoat khoi vong lap}
KiemtraSNT:=OK;
Trang 16Cải tiến thuật toán, không sử dụng biến phụ OK:
Function KiemtraSN(N: Integer): Integer;
2 Lập thủ tục kiểm tra xem ba số trên có lập thành ba cạnh của tam giác hay không ?
3 Viết hàm tính diện tích của tam giác
4 Viết hoàn thiện chương trình chính
Chương trình mẫu
Program Tam_Giac;
Uses crt;
Var a,b,c : Integer;
{ 1 Thu tuc nhap}
Procedure NhapABC (Var a, b, c : Integer);
Begin
Write( 'Nhap a:' ); Readln( a );
Write( 'Nhap b:' ); Readln( b );
Write( 'Nhap c:' ); Readln( c );
End;
Trang 17{ 2 Ham tinh dien tich}
Function Dientich( a, b, c:Integer ) : Real;
{ 3 Thu tuc kiem tra va In kqua tinh dien tich (neu la tam giac) }
Procedure KiemTra_InDienTich ( a,b,c:Integer);
Begin
If ((a+b>c) and (b+c>a) and (a+c>b)) then
Writeln(' Ba canh tren tao thanh tam giac.dien tich', Dientich(a,b,c) )
để lưu lại giá trị đã nhập vào
với ý tưởng thuật toán:
Chia N cho số nguyên tố u (nhỏ nhất là 2)