Tải bản đầy đủ (.pdf) (71 trang)

Xây dựng hệ thống bài tập trong dạy học lập trình pascal tin học 11

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (545.16 KB, 71 trang )

TRƢỜNG ĐẠI HỌC SƢ PHẠM HÀ NỘI 2
VIỆN CÔNG NGHỆ THÔNG TIN

NGUYỄN THỊ HỒNG LOAN

XÂY DỰNG HỆ THỐNG BÀI TẬP
TRONG DẠY HỌC LẬP TRÌNH
PASCAL TIN HỌC 11

KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC
Chuyên ngành: Sƣ phạm Tin học

HÀ NỘI – 2018


TRƢỜNG ĐẠI HỌC SƢ PHẠM HÀ NỘI 2
VIỆN CÔNG NGHỆ THÔNG TIN

NGUYỄN THỊ HỒNG LOAN

XÂY DỰNG HỆ THỐNG BÀI TẬP
TRONG DẠY HỌC LẬP TRÌNH
PASCAL TIN HỌC 11
KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC
Chuyên ngành: Sƣ phạm Tin học
Ngƣời hƣớng dẫn khoa học

ThS. Nguyễn Văn Hà

HÀ NỘI – 2018



LỜI CẢM ƠN
Sau một thời gian dài nghiên cứu, cố gắng để học tập và làm việc một
cách nghiêm túc, em đã hoàn thành bài khóa luận với đề tài “Xây dựng hệ
thống bài tập trong dạy học lập trình pascal Tin học 11”, ngoài sự cố gắng
của bản thân, em xin bày tỏ lòng biết ơn đến những người đã giúp đỡ, bên
cạnh em suốt thời gian qua.
Đầu tiên, em xin bày tỏ lòng biết ơn chân thành và sâu sắc nhất của
mình tới thầy giáo ThS. Nguyễn Văn Hà đã tận tình giúp đỡ, hướng dẫn và
chỉ bảo em trong suốt quá trình thực hiện đề tài.
Ngoài ra, em xin chân thành cảm ơn các thầy, cô giáo viện CNTT
trường Đại học Sư phạm Hà Nội 2 đã tạo điều kiện thuận lợi cho em trong
suốt quá trình học tập, nghiên cứu.
Trong quá trình khảo sát, cũng như trong quá trình làm khóa luận, do
lần đầu tiên làm quen với công tác nghiên cứu khoa học, trình độ lý luận cũng
như kinh nghiệm thực tiễn còn hạn chế, mặc dù đã rất cố gắng nhưng vẫn khó
trách khỏi sai sót, em rất mong các thầy cô bỏ qua. Em rất mong nhận được
những ý kiến đóng góp quý báu để em tích lũy thêm được nhiều kinh nghiệm
và khóa luận được hoàn thiện hơn.
Em xin chân thành cảm ơn!
Hà Nội, tháng 5 năm 2018
Sinh viên

Nguyễn Thị Hồng Loan


LỜI CAM ĐOAN
Tên em là: Nguyễn Thị Hồng Loan.
Sinh viên lớp: K40B Sư phạm Tin học – Viện CNTT.
Trƣờng: Đại học Sư phạm Hà Nội 2.

Em xin cam đoan đây là công trình nghiên cứu của riêng em và được sự
hướng dẫn khoa học của thầy giáo ThS. Nguyễn Văn Hà. Trong khóa luận
này em có tham khảo những tài liệu có liên quan đã được hệ thống trong mục
tài liệu tham khảo. Và nó không trùng với kết quả của bất cứ tác giả nào khác.
Hà Nội, tháng 5 năm 2018
Sinh viên

Nguyễn Thị Hồng Loan


MỤC LỤC
DANH MỤC VIẾT TẮT
LỜI MỞ ĐẦU
CHƢƠNG 1 CƠ SỞ LÝ LUẬN VÀ THỰC TIỄN CỦA ĐỀ TÀI ........................4
1.1 Lí luận về bài toán Toán học .........................................................................4
1.1.1 Bài toán và lời giải của bài toán ..............................................................4
1.1.2 Phương pháp tìm lời giải bài toán Toán học ...........................................6
1.2 Lí luận về bài toán Tin học ............................................................................7
1.2.1 Bài toán Tin học ......................................................................................7
1.2.2 Phương pháp tìm thuật giải bài toán Tin học: .........................................8
1.3 Đặc điểm năng lực nhận thức và năng lực lập trình của HS ở THPT .....12
1.4 Phân loại, vị trí và ý nghĩa của bài tập Tin học .........................................13
1.4.1 Phân loại ................................................................................................13
1.4.2 Vị trí ......................................................................................................13
1.4.3 Ý nghĩa ..................................................................................................14
1.5 Biện pháp sƣ phạm khi dạy học bài tập lập trình Tin học .......................14
1.5.1 Thông hiểu các thuật toán cơ bản .........................................................14
1.5.2 Phân tích tìm thuật toán giải bài toán ....................................................15
1.5.3 Lập trình và test chương trình với bộ dữ liệu cũ ...................................15
1.5.4 Khai thác bài toán .................................................................................16

CHƢƠNG 2 XÂY DỰNG HỆ THỐNG BÀI TẬP DẠY HỌC KĨ NĂNG LẬP
TRÌNH PASCAL CHO HỌC SINH LỚP 11 TRƢỜNG THPT ........................20
2.1 Tổng quan các bài tập lập trình Tin học 11 THPT ...................................20
2.1.1 Nội dung chương trình các bài tập lập trình .........................................20
2.1.2 Một số nguyên tắc xây dựng hệ thống bài tập nhằm củng cố kiến thức
và phát triển tư duy sáng tạo .....................................................................................21
2.2 Xây dựng hệ thống bài tập dạy học lập trình Pascal ở lớp 11 trƣờng
THPT ........................................................................................................................23
2.2.1 Hệ thống bài tập “Cấu trúc rẽ nhánh” ...................................................23
2.2.2 Hệ thống bài tập “Cấu trúc lặp” ............................................................29
2.2.3 Hệ thống bài tập “Kiểu mảng” ..............................................................34
2.2.4 Hệ thống bài tập “Kiểu xâu” .................................................................44


2.2.5 Hệ thống bài tập “Kiểu tệp” ..................................................................51
KẾT LUẬN CHƢƠNG 2 ...................................................................................61
KẾT LUẬN VÀ HƢỚNG PHÁT TRIỂN .............................................................62
TÀI LIỆU THAM KHẢO ......................................................................................64


DANH MỤC VIẾT TẮT

CNTT

Công nghệ thông tin

GV

Giáo viên


HS

Học sinh

NNLT

Ngôn ngữ lập trình

PPDH

Phương pháp dạy học

PT

Phổ thông

THPT

Trung học phổ thông


LỜI MỞ ĐẦU
1. Lý do chọn đề tài
Đất nước ta đang trong giai đoạn đẩy mạnh công nghiệp hóa, hiện đại
hóa và hội nhập quốc tế, nguồn lực con người trở nên có ý nghĩa quan trọng
quyết định đến sự thành công của công cuộc phát triển đất nước. Mục tiêu của
giáo dục phổ thông đã đề ra: “Mục tiêu của giáo dục phổ thông là giúp HS
phát triển toàn diện về đạo đức, trí tuệ, thể chất, thẩm mỹ và các kĩ năng cơ
bản, phát triển năng lực cá nhân, tính năng động và sáng tạo, hình thành nhân
cách con người Việt Nam xã hội chủ nghĩa, xây dựng tư cách và trách nhiệm

công dân; chuẩn bị cho HS tiếp tục học lên hoặc đi vào cuộc sống lao động,
tham gia xây dựng và bảo vệ Tổ quốc”. Chính vì vậy, giáo dục có vai trò vô
cùng quan trọng trong việc xây dựng một thế hệ con người Việt Nam mới
phát triển toàn diện, có lý tưởng, đạo đức, có tính tổ chức và kỷ luật, làm chủ
tri thức hiện đại, có tư duy sáng tạo, đáp ứng yêu cầu xây dựng và bảo vệ tổ
quốc.
Trong thực tế, Tin học là môn học vừa mang tính khoa học vừa mang
tính kĩ thuật, ngành Tin học đang phát triển như vũ bão, ngày càng xâm nhập
vào các ngành khoa học công nghệ và đời sống, môn Tin học phản ánh vào
nhà trường những tri thức và phương pháp phổ thông cơ bản nhất trong những
thành tựu cơ bản của nhân loại, sắp xếp chúng thành một hệ thống logic đảm
bảo tính khoa học, tính tư tưởng, tính thực tiễn, và tính sư phạm, phù hợp với
điều kiện hoàn cảnh của đất nước, đáp ứng được yêu cầu của cách mạng khoa
học công nghệ ngày nay, phục vụ công cuộc công nghiệp hóa, hiện đại hóa
đất nước, chuẩn bị cho nền kinh tế tri thức. Tin học 11 giúp học sinh hình
thành nên những kiên thức cơ bản và quan trọng nhất, chuẩn bị cho các em
một hành trang để bước vào đời hoặc học lên những bậc học cao hơn. Đó
cũng chính là chiếc chìa khoá mở cửa cho tương lai.
Hiện nay môn Tin học đã trở thành môn học bắt buộc trong nhà trường
phổ thông, đây là một thuận lợi lớn cho việc tiến hành giảng dạy. Tuy nhiên,


thực tế ở trường phổ thông nhà trường và HS chưa chú ý nhiều đến môn Tin
học. Vì vậy đa số HS lớp 11 THPT còn non kém về kĩ năng lập trình.
Trong chương trình môn Tin học lớp 11 trường THPT, kĩ năng được đề
cập đến và quan trọng nhất đó là những kĩ năng lập trình giải quyết các bài
toán. Nhờ có kĩ năng này mà HS có được những trải nghiệm thú vị, thấy được
máy tính có thể giúp con người giải quyết các bài toán, các công việc một
cách tự động bằng chương trình, chính những nhận thức và kĩ năng lập trình
này sẽ kích thích HS hứng thú hơn trong việc tìm tòi về thuật toán về NNLT.

Thấy được tầm quan trọng của việc dạy và học môn Tin học nói chung
và Tin học 11 nói riêng, đồng thời phát huy cao hơn nữa hiệu quả trong giảng
dạy theo tinh thần đổi mới sách giáo khoa, với mong muốn đóng góp một
phần rất nhỏ về PPDH một môn học còn rất mới mẻ trong nhà trường THPT,
tôi tiến hành nghiên cứu đề tài: “Xây dựng hệ thống bài tập trong dạy học
lập trình Pascal Tin học 11”, nhằm giúp các em có thể phân loại được các
dạng bài tập phù hợp với khả năng và mục đích của mình.
2. Mục đích nghiên cứu
Nghiên cứu tổ chức dạy học có hệ thống các bài tập lập trình Pascal
nhằm phát triển kĩ năng lập trình Tin học cho HS lớp 11 trường THPT.
Góp phần khơi dậy lòng yêu thích và hứng thú khi học môn Tin học
của học sinh. Đặc biệt là giúp các em nhìn thấy những ứng dụng đơn giản, cụ
thể, gần gũi, thiết thực của lập trình trong môi trường học tập của bản thân.
3. Nhiệm vụ nghiên cứu
Nghiên cứu tổng hợp cơ sở lí luận về hình thành và phát triển kĩ năng
trong giảng dạy lập trình Tin học ở trường THPT.
Nghiên cứu cách tổ chức dạy học các bài tập lập trình Tin học để phát
triển kĩ năng lập trình cho HS.
Đề xuất những biện pháp phát triển kĩ năng lập trình.
Phân loại, phân tích hệ thống các bài toán, các phương pháp giải các
bài toán Tin học trong chương trình Tin học 11.


4. Phƣơng pháp nghiên cứu
Một số phương pháp nghiên cứu được sử dụng trong đề tài đó là: Tìm
hiểu, phân tích, tổng hợp những tài liệu về lý luận dạy học Tin học, về kĩ năng
lập trình Tin học.
Phương pháp ứng dụng tổ chức dạy học bài tập lập trình cho HS lớp 11
trường THPT.
Phân tích đánh giá mức độ học sinh hiểu vận dụng, giải được các bài

toán trong các môn học khác, từ đó xây dựng, giới thiệu các bài toán phù hợp
với từng đối tượng học sinh.
5. Ý nghĩa khoa học và thực tiễn của đề tài
Ý nghĩa khoa học
Tìm hiểu những đặc điểm và yêu cầu cần có của học sinh. Từ đó biên
soạn hệ thống bài tập dạy hoc lập trình Pascal Tin học và áp dụng các phương
pháp hướng dẫn giải bài tập phù hợp giúp bồi dưỡng học sinh giỏi.
Ý nghĩa thực tiễn
Kết quả nghiên cứu có thể sẽ là một tài liệu tham khảo cho việc dạy học
lập trình nói chung và lập trình Pascal Tin học 11 nói riêng.
Nếu xây dựng được một hệ thống bài tập khoa học và tổ chức dạy học
có hiệu quả thì sẽ phát triển được năng lực tự giải quyết vấn đề, kỹ năng lập
trình, tính tích cực, sáng tạo cho học sinh, qua đó nâng cao chất lượng dạy và
học lập trình Pascal Tin học 11.
6. Cấu trúc khóa luận
Ngoài phần mở đầu, kết luận và hướng phát triển, tài liệu tham khảo,
nội dung khóa luận gồm 2 chương:
Chương 1: Cơ sở lý luận và thực tiễn của đề tài.
Chương 2: Xây dựng hệ thống bài tập dạy học lập trình Pascal cho học
sinh lớp 11 trường THPT.


CHƢƠNG 1
CƠ SỞ LÝ LUẬN VÀ THỰC TIỄN CỦA ĐỀ TÀI
1.1 Lí luận về bài toán Toán học
1.1.1 Bài toán và lời giải của bài toán
1.1.1.1 Bài toán
Theo G.POLYA. Bài toán là việc đặt ra sự cần thiết tìm kiếm một cách
có ý thức các phương tiện thích hợp để đạt đến một mục đích nhất định trông
thấy rõ ràng, nhưng không thể đạt được ngay.

Trên cơ sở định nghĩa khái quát của G.POLYA cho ta thấy rằng: Bài
toán là sự đòi hỏi phải đạt tới mục đích nào đó. Như vậy, bài toán có thể đồng
nhất với một số quan niệm khác nhau về bài toán như đề toán, bài tập, ...
Trong định nghĩa về bài toán ở trên ta thấy có hai yếu tố chính hợp thành
của một bài toán:
- Bài toán luôn có mục đích xác định.
- Sự đòi hỏi người khác thực hiện mục đích của bài toán (giao nhiệm vụ
hoặc yêu cầu người khác thực hiện mục đích của bài toán)
Ví dụ 1:

“Số tự nhiên n  N và n < 10.”

- Đây không phải là bài toán vì thiếu sự đòi hỏi người khác thực hiện
mục đích.
- Đây không phải là mệnh đề toán học vì không có giá trị chân lý đúng
hay sai.
- Đây là một hàm mệnh đề vì đó là câu có chứa biến số n và khi thay
biến bởi hằng ta được mệnh đề.
Ví dụ 2:

“Tìm n  N và n < 10.”

Đây là bài toán vì trong đó bao gồm hai yếu tố cơ bản.
- Sự đòi hỏi của bài toán thể hiện qua cụm từ “tìm”.
- Mục đích của bài toán thể hiện. “n  N và n < 10.”
4


1.1.1.2 Lời giải bài toán
Lời giải của bài toán được hiểu là tập hợp hữu hạn, sắp thứ tự các thao

tác cần thực hiện để đạt tới mục đích đã đặt ra trong bài toán.
Như vậy ta thống nhất các thuật ngữ bài giải, cách giải và đáp án của
bài toán đều theo nghĩa lời giải ở trên.
Một bài toán có thể có lời giải như sau.
- Một lời giải;
- Nhiều lời giải;
- Không có lời giải.
Giải được một bài toán được hiểu là tìm ra và trình bày đúng ít nhất một
lời giải của bài toán trong trường hợp bài toán có lời giải, hoặc lý giải được
bài toán là không giải được trong trường hợp nó không có lời giải.
Ví dụ 1: Tìm các lời giải của bài toán cổ sau.
“Vừa gà vừa chó,
Bó lại cho tròn,
Ba mươi sáu con,
Một trăm chân chẵn.
Tính số gà, số chó?”
Cách giải:. Giả thiết tạm
Giả sử tất cả 36 con vật đều là gà.
Vậy số chân của 36 con vật là
2  36 = 72 (chân)
Tổng số chân hụt đi so với điều kiện thực tế của bài toán là
100 – 72 = 28 (chân)
Ta thấy 28 chân thiếu hụt so với điều kiện thực của bài toán là do ta giả
sử tất cả 36 con vật đều là gà. Như vậy, ta đã bỏ đi ở mỗi con chó là 2 chân.
Vậy số con chó là 28 : 2 = 14 (con chó)
5


Số con gà là 36 – 14 = 22 (con gà)
Đáp số: Số gà là 22 con; số chó là 14 con.

1.1.2 Phƣơng pháp tìm lời giải bài toán Toán học
Bốn bước giải toán của G.POLYA
Bƣớc 1.Tìm hiểu đề
Trước khi giải một bài toán ta phải phân tích nội dung của bài toán, rồi
tìm hiểu thấu đáo nội dung của bài toán bằng những câu hỏi sau:
- Những cái gì đã biết? Cái gì chưa biết của bài toán?
- Tìm những yếu tố cố định, những yếu tố không đổi, những yếu tố
thay đổi và biến thiên của bài toán.
- Xác định các ẩn và các giá trị hằng của bài toán.
- Dữ kiện của bài toán có đủ để xác định cái chưa biết hay không?
Bƣớc 2. Xây dựng chƣơng trình giải
Để tìm được lời giải cho bài toán một cách có hiệu quả thì bước xây
dựng chương trình giải là bước quyết định, đồng thời đây cũng là bước khó
khăn nhất.
Bước xây dựng chương trình giải đòi hỏi chúng ta biết huy động các
kiến thức đã biết để xem xét, phân tích, so sánh, bác bỏ, tổng hợp. Từ đó mới
có thể thiết lập được mối liên hệ giữa cái đã cho và cái cần tìm.
Trả lời một số câu hỏi:
– Bạn đã gặp bài toán nào tương tự thế này chưa? Hay ở một dạng hơi
khác?
– Bạn có biết một định lý, một bài toán liên quan đến bài toán này
không?
– Hãy xét kỹ cái chưa biết, và thử nhớ xem có bài toán nào có cùng cái
chưa biết không?
– Hãy xét kỹ các khái niệm có trong bài toán và nếu cần hãy quay về
các định nghĩa.
6


– Đây là bài toán mà bạn đã có lần giải nó rồi, bạn có thể áp dụng được

gì ở nó? Phương pháp? Kết quả? Hay phải đưa thêm yếu tố phụ vào mới áp
dụng được?
– Nếu bạn chưa giải được bài toán này, hãy thử giải một bài toán phụ
dễ hơn có liên quan, một trường hợp riêng, tương tự, tổng quát hơn? Hãy giữ
lại một phần giả thiết khi đó ẩn được xác định đến chừng mực nào? Từ các
điều đó bạn có thể rút ra được điều gì có ích cho việc giải bài toán? Với giả
thiết nào thì bạn có thể giải được bài toán này?
– Bạn đã tận dụng hết giả thiết của bài toán chưa?
Bƣớc 3. Thực hiện chƣơng trình giải
Thực hiện lời giải mà bạn đã đề ra. Bạn có nghĩ rằng các bước là đúng?
Bạn có thể chứng minh nó đúng?
Đây là quá trình tổng hợp lại của bước xây dựng chương trình giải, ta
dùng các phép suy luận hợp logic xuất phát từ giả thiết của bài toán hay các
mệnh đề Toán học đã biết ta suy dần ra đi tới kết luận của bài toán.
Trong bước thực hiện chương trình giải một bài toán cần chú ý phân
biệt sự khác nhau giữa những điều đã thấy được và những điều suy ra được chính là điều chứng minh được.
Bƣớc 4. Kiểm tra lời giải và khai thác bài toán
Bạn có nghĩ ra một hướng khác để giải bài toán? Lời giải có ngắn hơn,
đặc sắc hơn.
Bạn đã áp dụng cách giải đó cho bài toán nào chưa?
Bạn có thể áp dụng bài toán này để giải các bài toán khác đã biết?
1.2 Lí luận về bài toán Tin học
1.2.1 Bài toán Tin học
- Bài toán là những việc nào đó ta muốn máy tính thực hiện.
- Tìm hiểu nội dung bài toán: Khi dùng máy tính giải toán cần quan tâm Input
và Output
Input : Thông tin nào đưa vào máy tính.
7



Output : Thông tin đưa ra từ máy tính.
Ví dụ 1: Tìm ước số chung lớn nhất của 2 số tự nhiên M, N
Input : Cho 2 số tự nhiên M, M
Output: Một số UC là ước số chung lớn nhất của 2 số M và N
Ví dụ 2: Kiểm tra 1 số tự nhiên N có phải là nguyên tố ?
Input : Cho số tự nhiên N
Output: Số N là nguyên tố hay không là số nguyên tố
1.2.2 Phƣơng pháp tìm thuật giải bài toán Tin học:
Bƣớc 1: Tìm hiểu nội dung bài toán
Input → Process → Output
(Dữ liệu vào → Xử lý → Kết quả ra)
Tìm hiểu nội dung bài toán hay nói chính xác hơn là ta đi xác định xem
ta phải giải quyết vấn đề gì, với giả thiết nào đã cho và lời giải cần phải đạt
những yêu cầu gì?
Mỗi bài toán được đặc tả bởi hai thành phần: Input và Output. Việc xác
định bài toán chính là xác định từ hai thành phần này và mối quan hệ giữa
chúng. Các thông tin đó cần được nghiên cứu cẩn thận để có thể lựa chọn
thuật toán, cách thể hiện các đại lượng đã cho, các đại lượng phát sinh trong
quá trình giải bài toán và NNLT thích hợp.
Ví dụ 3:
Tạo mảng A gồm n (n ≤ 100) số nguyên, mỗi số có trị tuyệt đối không
vượt quá 300. Tính tổng các phần tử của mảng là bội số của một số nguyên k
cho trước.
Đối với bài toán này, GV cần hướng dẫn HS xác định được Input,
Output của bài toán, cách thể hiện các đại lượng đã cho, các đại lượng phát
sinh trong quá trình giải bài toán như sau:
- Input: Mảng A gồm n phần tử là các số nguyên
- Output: Tổng các phần tử của mảng chia hết cho số k
- Thể hiện các đại lượng đã cho:
8



+ Vì n là số phần tử của mảng A và n ≤ 100 nên ta khai báo kiểu dữ
liệu của n là Byte.
+ Mỗi phần tử của mảng là kiểu số nguyên và có giá trị tuyệt đối không
vượt quá 300 vì vậy ta khai báo kiểu dữ liệu của mảng là Integer.
- Các đại lượng phát sinh
+ Để tham chiếu đến từng phần tử của mảng cần khai báo thêm biến i.
+ Để tính tổng các phần tử của mảng là bội số của một số nguyên k cho
trước ta khai báo biến Tong kiểu Integer và phải gán giá trị ban đầu (bằng 0)
trước khi sử dụng biến Tong.
Bƣớc 2: Xây dựng thuật giải
Thuật toán là một hệ thống chặt chẽ và rõ ràng các quy tắc nhằm xác
định một dãy thao tác trên cấu trúc dữ liệu sao cho: Với một bộ dữ liệu vào,
sau một số hữu hạn bước thực hiện thao tác, ta đạt được mục tiêu đã định.
Dựa vào các thông tin đó xác định được về bài toán để lựa chọn hoặc
thiết kế thuật toán, đây là bước quan trọng nhất để giải một bài toán. Ở bước
này ta có thể hướng dẫn hoặc yêu cầu HS viết thuật giải bằng sơ đồ khối hoặc
ngôn ngữ phỏng trình. Tức là xây dựng dãy các tác động để cho máy tính có
thể thực hiện trong một khoảng thời gian nhất định nhằm đạt được một kết
quả xác định. Cũng có thể cho HS biết được nhiều thuật giải giải quyết cùng
một bài toán, sau đó yêu cầu HS chọn xem trong số các thuật giải đó thuật
giải nào tốt nhất.
Ví dụ 4: Nhập vào từ bàn phím một xâu. Thay thế tất cả các cụm kí tự “anh”
bằng cụm kí tự "em"
Đối với bài toán này HS có thể xây dựng thuật giải bằng ngôn ngữ mô
phỏng chương trình như sau:
THUATGIAI XULIXAU;
BIEN S: String; vt: Byte;
BATDAU

{Nhập xâu S}
KHI vị trí xâu con “anh” trong xâu s khác 0
9


BATDAU
- Tìm vị trí bắt đầu của xâu “anh”
- Xóa xâu “anh” vừa tìm thấy
- Chèn xâu “em” vào xâu s tại vị trí trước xuất hiện xâu “anh”
KETTHUC;
{In xâu S}
KETTHUC.
Bƣớc 3: Thực hiện xây dựng chƣơng trình
Xây dựng chương trình hay cũng được gọi là lập trình. Lập trình là
dùng một ngôn ngữ máy tính cụ thể để diễn tả thuật toán, cấu trúc dữ liệu
thành các 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.
Ở bước này GV có thể yêu cầu HS xây dựng chương trình bằng cách
tinh chế từng bước, đây là phương pháp có hệ thống giúp HS phân tích các
thuật toán và cơ sở dữ liệu để từ đó viết thành chương trình.
Ban đầu chương trình được viết bằng những câu lời tự nhiên thể hiện
sự phân tích tổng thể. Ở từng bước sau các câu lời được phân tích chi tiết hơn
thành những câu lời khác tương ứng với sự phân tích công việc thành những
công việc nhỏ hơn. Mỗi câu lời đó là sự đặc tả công việc. Sự tinh chế được
hướng về phía NNLT mà ta sẽ dựng nghĩa là càng ở những bước sau các câu
lời tự nhiên càng được thay bằng các câu lời của NNLT.
- Ban đầu, chương trình được thể hiện bằng ngôn ngữ tự nhiên, thể hiện
thuật toán với các bước tổng thể, mỗi bước nêu lên một công việc phải thực
hiện.
- Một công việc đơn giản hoặc là một thuật toán cơ sở đã biết thì ta tiến

hành viết mã lệnh ngay bằng NNLT.
- Một công việc phức tạp thì ta lại chia ra thành những công việc nhỏ
hơn để lại tiếp tục với những công việc nhỏ hơn đó.
Phương pháp tinh chế từng bước là một thể hiện của tư duy giải quyết
10


vấn đề từ trên xuống, giúp cho người lập trình có được một định hướng thể
hiện trong phong cách viết chương trình. Tránh việc mò mẫm, xoá đi viết lại
nhiều lần, biến chương trình thành tờ giấy nháp.
Làm mịn ngôn ngữ mô phỏng từ ví dụ 4:
+ Nhập xâu S:
Cú pháp nhập một xâu từ bàn phím: read/readln(S);
+ Hàm tìm vị trí: POS(„anh‟,S)
 KHI vị trí xâu con “anh” trong xâu S khác 0:
While POS(„anh‟,S) <> 0
 Tìm vị trí bắt đầu của xâu “anh”:
vt:= While POS(„anh‟,S);
+ Thủ tục Delete(S,k,n): Xoá n kí tự trong xâu S bắt đầu từ vị trí k
Xóa xâu “anh” vừa tìm thấy: Delete(s, vt, 3);
+ Thủ tục Insert(s1,s2,k): chèn xâu s1 vào xâu s2 bắt đầu từ vị trí k

Chèn xâu “em” vào xâu s tại vị trí trước xuất hiện xâu “anh”:
Insert ('em', s, vt);
+ In xâu:

Cú pháp: write/writeln(S);

Chương trình hoàn chỉnh như sau:
Program XULIXAU;

Var

S: string;
vt: Bỵte;

BEGIN
Write (' Moi nhap mot xau: ' );
Readln(S);
While Pos ('anh' , s)<>0 do
Begin
vt:= Pos ('anh' , s);
Delete(s, vt, 3);
Insert ('em' , s, vt);

11


End;
Write (s);
Readln;
END.

Bƣớc 4: Thực hiện chƣơng trình (chạy chƣơng trình)
Để tạo điều kiện vận dụng tri thức khoa học Tin học vào thực tế cần
tránh tình trạng HS chỉ dừng lại ở phương hướng xây dựng giải thuật mà
không trực tiếp sử dụng các NNLT để mã hóa và thực hành kiểm thử lại
chương trình trên máy. Tình trạng này sẽ có tác hại không nhỏ đối với HS
trong học tập hiện tại cũng như trong cuộc sống sau này (VD: thói quen làm
việc nửa vời, mang tính lí thuyết nhiều hơn, làm việc không suy tính đến các
kết quả có thể xảy ra sau này, …)

Một chương trình viết xong chưa chắc nó chạy được trên máy tính; kĩ
năng tìm lỗi sửa lỗi, điều chỉnh viết lại chương trình cũng là một kĩ năng quan
trọng trong lập trình.
Khi chương trình không chạy được hoặc chạy cho kết quả sai là có lỗi
về thuật toán hoặc lỗi trình tự hoặc lỗi có pháp. Học sinh cần phát hiện được
và sửa được các lỗi để có chương trình chạy đúng. Trong bước này GV nên
yêu cầu HS xây dựng các bộ test nhằm kiểm tra tính đúng đắn của chương
trình, theo dõi và đánh giá chương trình của HS.
1.3 Đặc điểm năng lực nhận thức và năng lực lập trình của HS ở THPT
Lứa tuổi học sinh ở trường THPT là thời kì các em đạt được sự trưởng
thành về mặt thể lực, về hệ thần kinh, tạo điều kiện cho sự phát triển hoạt
động phân tích, tổng hợp của HS.
Nội dung và tính chất hoạt động học tập của học sinh có tính năng động
và độc lập ở mức cao hơn, yêu cầu có sự phát triển tư duy lý luận. Các em có
vốn kinh nghiệm sống rất phong phú, thái độ ý thức đối với học tập ngày càng
phát triển, hứng thú học tập gắn liền với khuynh hướng nghề nghiệp.
Lứa tuổi HS cấp THPT tính chủ định phát triển mạnh ở tất cả các quá
trình nhận thức, tri giác có mục đích đạt tới mức độ cao. Quan sát trở nên có
12


mục đích, có hệ thống toàn diện hơn. Tuy nhiên, quan sát của HS khó có hiệu
quả nếu thiếu sự chỉ đạo của GV.
Sự ghi nhớ có chủ định giữ vai trò chủ đạo trong hoạt động trí tuệ, vai
trò của ghi nhớ logic trừu tượng, ghi nhớ ý nghĩa ngày một tăng lên rõ rệt.
Nắm được quy trình thao tác thực hành nhằm đạt được mục đích, điều
cơ bản HS thông hiểu kĩ năng, ghi nhớ và áp dụng lý thuyết, thực hiện các
thao tác hành động gần như hoàn thiện.
Tuy nhiên ở lứa tuổi HS cấp THPT chưa phát huy hết năng lực độc lập
suy nghĩ của bản thân, nhiều lúc cũng kết luận vội vàng, ... Vì vậy việc giúp

các em phát triển khả năng nhận thức là một nhiệm vụ quan trọng của GV khi
thực hiện giảng dạy kiến thức trên lớp.
1.4 Phân loại, vị trí và ý nghĩa của bài tập Tin học
1.4.1 Phân loại
Phân loại bài tập theo yêu cầu luyện tập kĩ năng, phát triển tư duy trong
quá trình dạy học.
- Bài tập luyện tập: Loại bài tập dùng để rèn luyện cho học sinh áp
dụng được những kiến thức xác định để giải từng bài tập theo mẫu xác định.
Ở đó không đòi hỏi học sinh phải tư duy sáng tạo mà chủ yếu để cho học sinh
luyện tập, có kĩ năng giải đối với một loại bài tập đã được chỉ dẫn.
- Bài tập sáng tạo: Loại bài tập áp dụng tổng hợp nhiều kiến thức để
giải các bài tập đòi hỏi phát triển tư duy sáng tạo của học sinh.
1.4.2 Vị trí
Trong thực tế dạy học hiện nay, giáo viên có thể sử dụng bài tập ở bất
cứ lúc nào, bất cứ nơi nào khi thấy nó có thể giúp mình thỏa mãn nhiệm vụ
dạy học và mục đích dạy học.
Bài tập tin học không phải là nội dung tri thức mới của Tin học nhưng
nó chứa đựng nội dung dạy học. Bài tập phải phù hợp với nội dung dạy học,
với năng lực nhận thức của học sinh và phải phục vụ được ý đồ của giáo viên.
Khi ra một bài tập phải xác định đúng vị trí của nó để bài tập trở thành một bộ
phận hữu cơ của hệ thống kiến thức cần truyền thụ.
13


1.4.3 Ý nghĩa
- Về kiến thức, kĩ năng:
+ Làm cho học sinh hiểu chính xác và biết vận dụng các khái niệm đã học.
+ Thúc đẩy việc rèn luyện các kỹ năng, kỹ xảo cần thiết về Tin học.
+ Có tác dụng hệ thống hóa các kiến thức đã học.
+ Tạo điều kiện phát triển tư duy vì khi giải những bài tập, học sinh phải sử

dụng các thao tác tư duy như: phân tích, tổng hợp, so sánh, quy nạp, ...
- Về thái độ:
+ Giáo dục đạo đức tư tưởng vì khi giải những bài tập Tin học, HS sẽ rèn
luyện những phẩm chất tốt của con người như: tính kiên nhẫn, chịu khó, chính
xác khoa học, tính trung thực, tính sáng tạo và lòng yêu thích bộ môn.
1.5 Biện pháp sƣ phạm khi dạy học bài tập lập trình Tin học
1.5.1 Thông hiểu các thuật toán cơ bản
Ở phương diện thuật giải, khi tìm thuật toán giải bài toán lập trình là
tìm cách đưa bài toán cần giải về áp dụng các thuật toán cơ sở đã biết nào đó.
Như vậy, yêu cầu HS phải thông hiểu một số thuật toán cơ sở trong lập trinh
Tin học ở lớp 11.
Trong dạy học từng thuật toán cơ sở cần chú ý tuân thủ các bước sau:
- Xác định Input và Output của bài toán.
- Nêu ý tưởng chung thuật toán.
- Trình bày thuật toán bằng lời nói với ngôn ngữ thông thường.
- Mã hóa thuật toán.
- Test thuật toán: Đưa ra bộ dữ liệu cụ thể để phân tích tìm giá trị các
biến thay đổi thế nào qua từng dòng lệnh, qua từng đoạn chương trình.
Hệ thống thuật toán cơ sở ở lớp 11:
- Thuật toán hoán đổi giá trị của hai số
- Thuật toán kiểm tra số nguyên tố
- Thuật toán tính tổng các chữ số của một số nguyên
- Thuật toán Euclide tìm UCLN
- Thuật toán tìm Max, Min của một dãy số
14


- Các thuật toán sắp xếp: Sắp xếp nổi bọt; Sắp xếp chèn; Sắp xếp chọn
- Các thuật toán tìm kiếm: Tìm kiếm tuần tự; Tìm kiếm nhị phân
Thực tế, đa phần các em HS sau khi học chương trình Tin học 11 đều

rất bỡ ngỡ và yếu khi xây dựng thuật toán cho các bài toán. Việc nắm vững
giả thiết, kết luận và cách giải một bài toán cơ sở rất quan trọng trong việc
nhận dạng, mở rộng phạm vi bài toán từ đó HS xác định, xây dựng được cách
giải các bài toán cùng dạng hoặc mở rộng. Cũng từ đó khuyến khích khả năng
tự học, tự nghiên cứu của HS.
1.5.2 Phân tích tìm thuật toán giải bài toán
Từ bộ dữ liệu cụ thể được chọn là bộ dữ liệu đưa vào trong máy tính
điện tử để giải bài toán, HS biết phân tích trên bộ dữ liệu đó tìm ra thuật toán
để giải bài toán đó.
→ Đây là bước khó khăn nhất nhưng quan trọng nhất của quá trình giải một
bài toán Tin học, vì các bài toán có thể không có thuật Algorithm (không phải
các dạng thuật toán có sẵn, không theo một trình tự nào), HS phải tự phân tích
theo từng bước để có thể khái quát thành một thuật toán cho riêng mình.
Tiếp theo mô tả thuật toán giải bài toán bằng sơ đồ khối hoặc bằng
phương pháp liệt kê từng bước. Tức là xây dựng dãy các tác động để cho máy
tính có thể thực hiện. Từ đó mã hóa chương trình theo thuật toán tìm được.
1.5.3 Lập trình và test chƣơng trình với bộ dữ liệu cũ
- Mã hóa thuật toán đã có bằng NNLT cụ thể.
- Kiểm thử lại chương trình với bộ dữ liệu ban đầu
- Xây dựng các bộ test:
+ Bắt đầu với một bộ test nhỏ, đơn giản, làm bằng tay cũng có được
đáp số để so sánh với kết quả chương trình chạy ra.
+ Tiếp theo vẫn là các bộ test nhỏ, nhưng chứa các giá trị đặc biệt hoặc
tầm thường. Kinh nghiệm cho thấy đây là những test dễ sai nhất.
+ Các bộ test phải đa dạng, tránh sự lặp đi lặp lại các bộ test tương tự.
Có một vài test lớn chỉ để kiểm tra tính chịu đựng của chương trình mà
15


thôi. Kết quả có đúng hay không thì trong đa số trường hợp, ta không thể

kiểm chứng được với test này.
1.5.4 Khai thác bài toán
Thử lại kết quả của bài toán, thử lại các lập luận trong lời giải đã tìm
được của bài toán.
Tìm các cách giải khác nếu có của bài toán.
Nghiên cứu bài toán liên quan: Bài toán tương tự, bài toán khái quát, …

Ví dụ: Nhập vào một số nguyên dương N từ bàn phím. Đưa ra số nguyên nhỏ
nhất mà lớn hơn N từ việc hoán vị các chữ số có trong N.
- Giả sử số N = 326541 nhập từ bàn phím, số phải tìm được là 341256
- Phân tích: Số cần tìm phải lớn hơn số hiện tại, nghĩa là khi ta hoán vị các
chữ số, số sinh ra vừa đủ lớn hơn theo nghĩa không thể có một số nào nữa
được tạo ra chen giữa khi chúng sắp thứ tự.
- Ý tưởng:
+ Xét 4 chữ số cuối cùng, ta thấy chúng được xếp giảm dần, có nghĩa là cho
dù ta có hoán vị 4 phần tử này thế nào, ta cũng được một số bé hơn số N.
+ Như vậy ta phải xét đến chữ số thứ 2, thay nó bằng một giá trị khác:
 Không thể là 1 bởi nếu vậy sẽ được số nhỏ hơn (316542)
 Không thể là 3 vì đã có chữ số thứ nhất bằng 3 rồi
 Còn lại các giá trị 4, 5, 6. Vì cần một số mới vừa đủ lớn hơn số N nên ta
chọn chữ số thứ hai là 4.
+ Còn các chữ số thứ 3, 4, 5, 6 sẽ lấy trong tập {2, 6, 5, 1}. Cũng vì tính vừa
đủ lớn nên ta sẽ tìm biểu diễn nhỏ nhất của 4 số này, gán cho lần lượt chữ số
thứ 3, 4, 5, 6 tức là (1, 2, 5, 6)
+ Vậy số cần tìm sẽ là 341256
- Từ ý tưởng bài toán, ta xây dựng thuật toán như sau:
(Dùng xâu kí tự S biểu diễn số nguyên dương N)

16



Xác định đoạn cuối giảm dần dài nhất, tìm chỉ số i của phần tử s[i]
đứng liền trước đoạn cuối đó. Điều này đồng nghĩa với việc tìm từ vị trí sát
cuối dãy lên đầu, gặp chỉ số i đầu tiên thỏa mãn s[i] < s[i+1].
+ Nếu tìm thấy chỉ số i như trên:
 Trong đoạn cuối giảm dần, tìm phần tử s[k] nhỏ nhất thỏa mãn điều
kiện s[k] > s[i]. Do đoạn cuối giảm dần, điều này thực hiện bằng cách
tìm từ cuối dãy lên đâu gặp chỉ số k đầu tiên thỏa mãn s[k] > s[i]
 Đảo giá trị s[k] và s[i]
 Lật ngược thứ tự đoạn cuối giảm dần (s[i+1] đến s[k]) thành tăng dần.
+ Nếu không tìm thấy tức là số N đã là số lớn nhất, không tìm được số thỏa
mãn.
- Chƣơng trình:
Program Vidu;
Uses crt;
Var l, i, j, k, a, b: integer;
tam : char; s: string;
Begin
Clrscr;
write('Nhap so N = '); Readln(s);
l := length(s); i := l - 1;
while (i > 0) and (s[i] > s[i+1]) do i := i-1;
If i = 0 then writeln('Da la so lon nhat')
Else
Begin
k := l; {s[k] la phan tu cuoi day}
while s[k] < s[i] do k := k-1;
{Lui dan k de tim gap s[k] dau tien lon hon s[i]}
tam := s[k];
s[k] := s[i];


17


s[i] := tam;
a := i+1; b := l;
{Lat nguoc doan cuoi giam dan}
while a < b do
begin
tam := s[a];
s[a] := s[b];
s[b] := tam;
a := a+1;
b := b-1;
end;
write('So can tim la ',s);
End;
Readln
End.
- Test chương trình với dữ liệu cũ N = 326541
+ l = 6, i = 5
+ Tìm i:
S[i]

S[i+1]

I

4


1

4

5

4

3

6

5

2

2

6

+Tìm được i = 2 ( > 0), k = 6
+ Tìm k:
S[k]

S[i]

K

1


2

5

18


×