Môn tin học là một môn học mới mẽ của học sinh Trung học phổ thông, học sinh chưa có khái niệm về công nghệ thông tin, khái niệm thuật toán trong các ngôn ngữ lập trình.. Sở dĩ tôi chọn
Trang 1SỞ GIÁO DỤC VÀ ĐÀO TẠO THANH HÓA
TRƯỜNG THPT LƯƠNG ĐẮC BẰNG
SÁNG KIẾN KINH NGHIỆM
TÊN ĐỀ TÀI CHƯƠNG TRÌNH CON VÀ PHÂN LOẠI
Người thực hiện: Trịnh Thị Kim Dung
Chức vụ: Giáo viên
Đơn vị công tác: Trường THPT Lương Đắc Bằng
SKKN thuộc lĩnh vực (môn): Tin
THANH HÓA NĂM 2021
Trang 2MỤC LỤC
2 Nội dung của sáng kiến kinh nghiệm 2
2.3 Nội dung, biện pháp thực hiện các giải pháp 2
Trang 31 MỞ ĐẦU
1.1 Lý do chọn đề tài
Công nghệ thông tin nói chung và tin học nói riêng là một ngành khoa học phát triển mạnh mẽ và có nhiều ứng dụng trong hầu hết các lĩnh vực của cuộc sống Môn tin học là một môn học mới mẽ của học sinh Trung học phổ thông, học sinh chưa có khái niệm về công nghệ thông tin, khái niệm thuật toán trong các ngôn ngữ lập trình Môn tin học trong khối THPT thì môn tin học ở khối lớp 11 được đánh giá là khó nhất Sở dĩ tôi chọn chủ đề “chương trình con và phân loại” làm đề tài cho sáng kiến vì tôi thiết nghĩ ở học kỳ I các em đã được học cấu trúc chung của một chương trình pascal thì việc chuyển sang học chương trình con không còn là vấn đề khó khăn đối với các em, từ đó gây hứng thú trong học tập làm cho các em yêu mến môn học và không cảm thấy khó khi nói đến môn tin học nói chung và lập trình pascal nói riêng
Năm học 2019 – 2020 tôi đã trực tiếp giảng dạy 2 lớp 11 được chuyển từ trường THPT Lê Viết Tạo sang (do sát nhập trường) Trong quá trình giảng dạy môn Tin học, tôi thấy gần như các em không chú tâm học môn Tin học nói chung
và học về chương trình con nói riêng, hơn nữa các em cho rằng Tin học không phải
là môn khối, do đó các em không có hứng thú trong khi học Là một giáo viên bộ môn tôi cảm thấy rất buồn, từ đó tôi đã có ý nghĩ sẽ đưa ra những bài tập, những ví
dụ rất cơ bản gần gũi với môn học của các em như: toán, lý,…nhằm thu hút sự chú
ý học tập của các em, giúp các em yêu thích môn học hơn
Dưới đây tôi xin trình bày về sáng kiến: “Phương pháp dạy học chương trình con và phân loại trong chương trình Tin học 11 thông qua một số bài tập tiêu biểu” Rất mong được sự góp ý chân thành từ các giáo viên và học sinh về
sáng kiến kinh nghiệm này để giúp tôi có những bài giảng hay để học sinh học tốt môn Tin học hơn
1.2 Mục đích nghiên cứu
Mục đích nghiên cứu nhằm giúp các em hứng thú hơn với môn tin học nói chung và lập trình pascal nói riêng Nhằm giúp các em nắm được hoạt động, cấu trúc của chương trình con để giải quyết các bài tập có liên quan Qua đó giúp các
em giải quyết tốt các bài tập lập trình, yêu thích môn học hơn
1.3 Đối tượng nghiên cứu:
Học sinh lớp 11 các trường THPT nói chung và trường THPT Lương Đắc Bằng huyện Hoằng Hóa, tỉnh Thanh Hóa nói riêng
1.4 Phương pháp nghiên cứu
Phương pháp nghiên cứu là chỉ ra cấu trúc của chương trình con, lợi ích của việc sử dụng chương trình con Đưa ra bài tập cho học sinh nghiên cứu , từ đó hướng dẫn cụ thể cho học sinh làm bài tập đó Yêu cầu học sinh chỉ ra cú pháp , hoạt động của chương trình con, phân biệt được thủ tục và hàm
1.5 Những điểm mới của sáng kiến kinh nghiệm
Trong sáng kiến này tôi đã vận dụng những kiến thức đã học lý thuyết vào các bài tập mà tôi lựa chọn, các bài tập thông dụng, gần gũi với cuộc sống hàng ngày, những tính toán, suy luận logic gần gũi với môn học của học sinh như môn toán, môn lý,… và các môn học tư duy khác Các bài tập này đã được kiểm nghiệm
Trang 4bằng chương trình thực hành và học sinh rút ra được những kiến thức bổ ích cho bài học và các chương trình sau này
2 NỘI DUNG CỦA SÁNG KIẾN KINH NGHIỆM
2.1 Cơ sở lý luận
Ngày nay việc lập trình để giải quyết các bài toán trong các lĩnh vực đã trở nên rất phổ biến Để giải quyết các bài toán lớn thì cách lập trình không sử dụng chương trình con khó có thể thực hiện, đặc biệt là đối với các bài toán lớn cần nhiều người tham gia Làm cơ sở cho học sinh sau này tiếp cận với phương pháp lập trình khác
2.2 Thực trạng của vấn đề nghiên cứu
2.2.1 Thuận lợi
Học sinh đã được tiếp cận một số thuật toán ở lớp dưới, đã sử dụng ngôn ngữ lập trình Pascal để viết chương trình giải quyết cá bài toán trong quá trình học Mặt khác sử dụng chương trình con để hợp lý, tiết kiệm công sức lập trình Đồng thời chương trình con giúp cho người lập trình dễ sửa chữa, dễ kiểm tra Khi học
về chương trình con, học sinh có thể hiểu sâu sắc hơn về ngôn ngữ lập trình, có thể giúp cho các em hoàn hành những chương trình lớn hơn Chương trình con cũng là chương trình tổng hợp các kiến thức các em đã học
2.2.2 Khó khăn
Có thể nói chương trình tin học lớp 11 là một phần nội dung mới và khó nhất trong chương trình tin học THPT Do bước đầu tiếp cận việc lập trình nên khả năng còn hạn chế, Khả năng chuyển đổi từ thuật toán đã biết sang ngôn ngữ lập trình cụ thể còn gặp nhiều khó khăn
Việc học lập trình Pascal là điểm khởi đầu giúp học sinh bước đầu tiếp cận với ngôn ngữ lập trình bậc cao, qua đó giúp các em có thêm định hướng trong học tập và yêu thích Tin học hơn
2.3 Nội dung, biện pháp thực hiện các giải pháp của đề tài.
Nêu ra cách lập trình giải quyết một số bài toán thường gặp trong toán học và các bài tâp liên quan để học sinh hiểu rõ hơn cách viết chương trình con trong pascal,
từ đó có thể tự mình giải quyết một số bài toán tương tự
2.3.1 Một số khái niệm
2.3.1.1 Chương trình con và phân loại chương trình con
Các chương trình giải các bài toán phức tạp thường rất dài, có thể gồm hàng trăm, hàng nghìn lệnh Khi đọc những chương trình dài, rất khó nhận biết được chương trình thực hiện những công việc gì và việc hiệu chỉnh chương trình cũng khó khăn Vì vậy, vấn đề đặt ra là phải cấu trúc chương trình như thế nào để cho chương trình dễ đọc, dễ hiệu chỉnh, dễ nâng cấp
Xét bài toán tính tổng bốn lũy thừa:
TLuythua = an + bm + cp + dq
Bài toán trên bao gồm bốn bài toán con tính: an, bm, cp, dq, có thể giao cho bốn người, mỗi người thực hiện một bài Giá trị TLuythua là tổng kết quả của bốn bài toán con đó Ta có thể hình dung bài toán TLuythua giống như khi ta làm một
tờ báo tường, công việc được giao cho nhiều người tham gia như: người viết lời tựa, người sưu tầm truyện cười, người viết thơ, người viết văn…
Trang 5*) 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 từ nhiều vị trí trong chương trình
*) Lợi ích của việc sử dụng chương trình con
- Tránh được việc phải viết lặp đi lặp lại cùng một dãy lệnh
- Hỗ trợ thực hiện các chương trình lớn
- Phục vụ cho quá trình trừu tượng hóa
- 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.1.2 Phân loại chương trình con
Chương trình con được viết dưới hai dạng thủ tục (Procedure) và hàm (Function) So sánh cấu trúc của hai kiểu chương trình con này thì tương tự như nhau, mặc dù cách truy xuất của chúng có khác nhau và cách trao đổi thông tin trong mỗi kiểu cũng có điểm khác nhau
*) Hàm (Function) là chương trình con 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ó Ví dụ hàm toán học (sin (x), sqr(x), abs(x)…) hay hàm xử lý xâu (length(x), copy )
- Cấu trúc của hàm:
Function <tên hàm>[(<danh sách tham số>)]:<kiểu dữ liệu>;
*) Thủ tục (Procedure) là chương trình con 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ụ các thủ tục vào/ra chuẩn, hay thủ tục xử lý xâu…
- Cấu trúc của thủ tục:
Procedure <tên thủ tục> [(<danh sách tham số>)];
[<phần khai báo>]
Begin
[<dãy các lệnh>]
End;
2.3.1.3 Biến toàn cục:
Là biến được khai báo ở đầu chương trình, nó được sử dụng bên trong chương trình chính và cả bên trong chương trình con Biến toàn cục sẽ tồn tại trong suốt quá trình thực hiện chương trình
2.3.1.4 Tham số hình thức
Các biến được khai báo cho dữ liệu vào/ra được gọi là tham số hình thức của chương trình con
2.3.1.5 Biến cục bộ, biến toàn cục
Là các biến được khai báo để dùng riêng trong chương trình con Biến cục
bộ chỉ tồn tại khi chương trình con đang hoạt động và nó sẽ được giải phóng ngay sau khi chương trình con kết thúc Nói chug, chương trình chính và các chương trình con khác không thể sử dụng được các biến cục bộ của một chương trình con
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ặc không có biến cục bộ
Biến toàn cục là biến được dùng tại mọi vị trí trong chương trình
2.3.1.6 Tham số thực sự
Để thực hiện (gọi) một chương trình con, ta cần phải có lệnh gọi nó tương tự lệnh gọi hàm hay thủ tục chuẩn, bao gồm tên chương trình con với tham số (nếu
Trang 6có) là các hằng và biến chứa dữ liệu vào và ra tương ứng cới các tham số hình thức đặt trong cặp ngoặc ( và ) Các hằng và biến này được gọi là các tham số thực sự 2.3.1.7 Tham số giá trị (tham trị):
Trong lệnh gọi thủ tục, các tham số hình thức được thay bằng các tham số thực sự tương ứng là các giá trị cụ thể được gọi là các tham số giá trị (gọi tắt là tham trị)
2.3.1.8 Tham số biến (tham biến):
Trong lệnh gọi thủ tục, các tham số hình thức được thay bằng các tham số thực sự tương ứng là tên các biến chứa dữ liệu ra được gọi là các tham số biến (gọi tắt là tham biến)
Để phân biệt tham biến và tham trị Pascal sử dụng từ khóa Var để khai báo những tham số biến
2.3.2.Một số bài tập áp dụng
Có thể nói môn tin học nói chung và tin học 11 nói riêng là một môn học khó Vì thế chương trình dưới đây tôi đưa ra những ví dụ, bài tập cơ bản nhất, gần gũi với kiến thức thực tế Cụ thể các em đã gặp các bài toán này trong bộ môn toán học, môn vật lý… Hơn nữa những ví dụ tôi đưa ra với học sinh có lực học trung bình cũng có thể hiểu và áp dụng được Từ đó làm cho các em có hứng thú và yêu thích bộ môn tin học nói chung và lập trình pascal nói riêng
2.3.2.1 /BÀI TẬP SỬ DỤNG THỦ TỤC
Bài tập 1: Nhập vào từ bàn phím 2 số nguyên a, b Viết chương trình hoán đổi vị trí của hai số a và b
- Ý tưởng: để hoán đổi vị trí của hai số nguyên a, b ta phải sử dụng biến phụ (tạm) Lúc đầu biến tạm nhận giá trị của biến a, biến a lại nhận giá trị của biến b, biến b nhận giá trị của biến tạm
- Chương trình tham khảo:
Program bai_tap1;
Uses crt;
Var a,b :integer;
Procedure Hoan_doi (Var m,n: integer);
Var tam: integer;
Begin
tam:=m;
m:=n;
n:=tam;
End;
Be gin
Clrscr;
Write (‘nhap vao hai so nguyen a,b:’);
Readln (a,b);
Hoan_doi (a, b);
Writeln (a:5, b:5);
Readln;
End
Bài tập 2: Dùng thủ tục giải phương trình bậc hai: ax2 + bx + c =0 (a<> 0)
Trang 7- Ý tưởng: ta có thể sử dụng 2 thủ tục trong 1 chương trình để giải phương trình bậc 2 Thủ tục 1 dùng để nhập các hệ số của phương trình bậc 2 Thủ tục 2 dùng để tìm nghiệm
- Chương trình tham khảo:
Program ptb2;
Ues crt;
Var a,,b,c, x1, x2: real;
Procedure nhapheso (Var a, b, c: real);
Begin
Write (‘ nhap he so bac hai:’);
Readln (a);
Write (‘ nhap he so bac nhat:’);
Readln (b);
Write (‘ nhap he so tu do:’);
Readln (c);
End;
Procedure Tim_nghiem;
Var delta: real;
Begin
Delta := sqr (b) – 4*a*c;
If delta = 0 then
Begin
Write (‘phuong trinh co nghiem kep:’);
Write (‘x1= ‘, ‘x2 = ‘,- b/(2*a) : 6 : 2);
End
Else If delta <0 then
Writeln (‘phuong trinh vo nghiem’)
Else
Begin
X1:= (- b + sqrt (delta))/ (2*a);
X2:= (- b - sqrt (delta))/ (2*a);
Writeln (‘phuong trinh co hai nghiem phan biet la:’);
Writeln (‘x1 = ‘,x1:6:2, ‘x2 =’,x2:6:2);
End;
BEGIN
Clrscr;
Nhapheso (a,b,c);
Tim_nghiem;
Readln;
END
Bài tập 3: lập trình tính diện tích và chu vi hình chữ nhật bằng việc dùng 3 thủ tục không có tham số
- Ý tưởng: ta xây dựng 3 thủ tục tương ứng lần lượt là: thủ tục nhập dữ liệu (nhap_DL), thủ tục tính toán (Tinh_toan) và thủ tục in kết quả (In_kq)
Trang 8- Chương trình tham khảo:
Program chu_nhat;
Ues crt;
Var a,b,p,s: real;
Procedure Nhap_DL;
Begin
Write (‘nhap chieu dai hinh chu nhat:’);
Readln (a);
Write(‘nhap chieu rong hinh chu nhat:’);
Readln *b);
End;
Procedure Tinh_toan:
Begin
P:= (a+b)*2;
S:= a*b;
End;
Procdure In_kq;
Begin
Writeln (‘chu vi hinh chu nhat la:’, p:8:3);
Writeln (‘dien tich hinh chu nhat la:’,s :8:3);
End;
BEGIN
Clrscr;
Nhap_DL;
Tinh_toan;
In_kq;
Radln;
End
Bài tập 4: Viết thủ tục đổi một xâu chữ thường thành một xâu chữ hoa tương ứng Ví dụ: ‘tinhoc’ thành ‘TINHOC’
- Ý tưởng: ta sử dụng hàm length để duyệt xâu, sau đó sử dụng hàm Upcase
để tiến hành đổi
- Chương trình tham khảo
Program Bai_tap4;
Uses crt;
Var xau: string;
Procedure Doi (var st: string);
Var i: byte;
Begin
For i := 1 to length (st) do
St[i] := upcase (st[i]);
End;
BEGIN
Clrscr;
Write (‘nhap xau can doi:’);
Trang 9Readln (xau);
Writeln;
Doi (xau);
Writeln (‘xau thu duoc la:’,xau);
Writeln ;
Readln;
END
Bài tập 5: Sử dụng thủ tục nhập vào một xâu kí tự từ bàn phím và đếm xem xâu đó có bao nhiêu chữ cái:
- Ý tưởng: nhập xâu cần đếm, khởi tạo biến đếm bằng 0 , ta sử dụng hàm length để duyệt xâu Trong phạm vi từ a tới z hoặc từ A đến Z ta sẽ tiến hành đếm
và biến đếm sẽ tăng lên 1 đơn vị
- Chương trình tham khảo
Program Bai_tap5;
Uses crt;
Var st: string;
Pricedure Dem_chu (s:string);
Var I, dem : byte;
Begin
Write (‘nhap xau can dem:’);
Readln (s);
Dem:= 0;
For i:= 1 to length (s) do
If (((s[i] >=’a’) and (s[i] <=’z’)) OR (s[i] >=’A’) and (s[i] <=’Z’))) then Dem:= Dem + 1;
Writeln (‘ket qua la:’, dem);
End;
BEGIN
Clrscr;
Dem_chu (st);
Readln;
END
Bài tập 6: Lập một thủ tục tính và đưa ra màn hình vận tốc V khi chạm đất của một vật rơi từ độ cao h, biết rằng V = 2gh , trong đó g là gia tốc rơi tự do và
g = 9,8 m/s2 Độ cao h(m) được nhập vào từ bàn phím
- Ý tưởng: trong bài toán này ta sử dụng thủ tục có tham số với tham số giá trị là độ cao h được nhập từ bàn phím, tham số biến là vận tốc v khi chạm đất của một vật
- Chương trình tham khảo:
Program btap6;
Uses crt;
Const g = 9.8;
Var v, h: real;
Procedure Van_toc ( h: real; var v:real);
Begin
Trang 10Write (‘nhap do cao h:’);
Readln(h);
V:= sqrt (2*g*h);
Writeln (‘van toc cua vat khi cham dat la:’,v:8:3);
End;
BEGIN
Clrscr;
Van_toc(h, v);
Writeln;
Readln;
END
Bài tập 7: Sử dụng thủ tục có tham số tính diện tích hình thang với đáy lớn, đáy bé và chiều cao nhập từ bàn phím
- Chương trình tham khảo:
Program Btap7;
Uses crt;
Var a,b,h,s :real;
Procedure Hinh_thang (a1, b1, h1: real; var s:real);
Begin
Write (‘nhap kich thuoc hinh thang: ’);
Readln (a1, b1, h1);
S:= 1/2*(a1 + b1)* h1;
Writeln (‘dien tich hinh thang la:’, s:8:3);
End;
Begin
Clrsr;
Hinh_thang(a, b, h, s);
Readln;
End
Bài tập 8: Lập thủ tục tính chu kỳ dao động của quả lắc theo công thức: T= 2 l
g
Trong đó:
+ l là độ dài dây treo quả lắc (m)
+ g là gia tốc trọng trường (g = 9.18 m/s2)
- Chương trình tham khảo:
Program btap8;
Uses crt;
Const g = 9.18;
Pi = 3.14;
Var l, T: real;
Procedure Chu_ky (l: real; var T: real);
Begin
Write (‘nhap do dai day treo qua lac: ’);
Readln (l);
Trang 11T:= 2*pi* sqrt(l/g);
Writeln (’chu ky dao dong la:’, T:6:2);
End;
BEGIN
Clrscr;
Chu_ky (l, T);
Writeln;
Readln;
END
2.3.1.2 BÀI TẬP SỬ DỤNG HÀM
Bài tập 1: Lập hàm tính ước số chung lớn nhất và bội số chung nhỏ nhất của hai số tự nhiên nhập vào từ bàn phím?
- Ý tưởng: ta xây dựng hàm tìm ước số chung lớn nhất của 2 số x, y UCLN(x,y).Tìm bội số chung nhỏ nhất của 2 số dựa trên UCLN
- Chương trình tham khảo:
Program Btap1;
Uses crt;
Var a,b, usc, bsc: integer;
Function UCLN (x, y : integer) : integer;
Begin
While x <> y do
Begin
If x > y then x:= x – y
Else
Y:= y – x;
End;
UCLN:= x;
End;
BEGIN
Clrscr;
Write (‘nhap hai so nguyen :’);
Readln (a,b);
Usc:= UCLN(a,b);
Bsc:= (a*b) div usc;
Writeln (‘ uoc so chung lon nhat la:’, usc);
Writeln (‘boi so chung nho nhat la:’, bsc);
Readln;
END
Bài tập 2: Viết hàm tính giai thừa cho số nguyên N
- Ý tưởng N! = 1 x 2 x 3 x 4 x…x N Ta sử dụng biến chạy i , với i là các số nguyên liên tục từ 1 đến N
- Chương trình tham khảo:
Program giai_thua;
Uses crt;
Var N : integer;