Tải bản đầy đủ (.doc) (22 trang)

Sang kien ren HSG tin THCS

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 (161.64 KB, 22 trang )

Rèn học sinh giỏi có kỹ năng giải quyết một số bài tốn về xâu ký tự
PHỊNG GD VÀ ĐT HOÀI NHƠN CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT NAM
TRƯỜNG THCS SỐ 2 BỒNG SƠN
Độc lập - Tự do - Hạnh phúc

SÁNG KIẾN
RÈN HỌC SINH GIỎI CÓ KỸ NĂNG GIẢI QUYẾT
MỘT SỐ BÀI TỐN VỀ XÂU KÝ TỰ
* Kính gửi:

* Tơi tên:

-

HĐKH Trường THCS Số 2 Bồng Sơn.

-

HĐKH Phịng GD và ĐT Hoài Nhơn.

Nguyễn Trương Tiên
Hiện là Giáo viên đang công tác tại Trường THCS Số 2 Bồng Sơn.

Hưởng ứng tinh thần viết đề tài sáng kiến phục vụ việc dạy và học. Nhất là
việc ứng dụng công nghệ thông tin trong công tác quản lý. Theo văn bản hướng dẫn
của Sở Giáo dục và Đào tạo Bình Định về việc viết, đánh giá, xếp loại đề tài sáng
kiến và hướng dẫn thực hiện quy trình làm đề tài của Phịng Giáo dục và Đào tạo
Hồi Nhơn. Nay bản thân có một sáng kiến với đề tài: RÈN HỌC SINH GIỎI

CĨ KỸ NĂNG GIẢI QUYẾT MỘT SỐ BÀI TỐN VỀ XÂU KÝ TỰ.


Xin được trình bày như sau đây

Nguyễn Trương Tiên

Năm học 2018-2019

Trang 1


Rèn học sinh giỏi có kỹ năng giải quyết một số bài toán về xâu ký tự
1: Đặt vấn đề:
Bộ Giáo dục và Đào tạo vừa ban hành văn bản số 4095/BGDĐT-CNTT, ngày
10/09/2018 về việc hướng dẫn thực hiện nhiệm vụ công nghệ thông tin (CNTT) năm học
2018-2019 đối với các Sở Giáo dục và Đào tạo, Sở Giáo dục và Đào tạo Bình Định, phịng
Giáo dục và Đào tạo Hoài Nhơn phổ biến và yêu cầu tiếp tục ứng dụng công nghệ thông tin
trong ngành giáo dục nhằm đẩy mạnh công tác ứng dụng công nghệ thông tin vào quản lý,
dạy và học ở nhà trường cũng như các cấp quản lý của ngành.
1.1: Lý do chọn đề tài.
Lý luận: Hiện nay phương pháp phát huy hết tính tự lực, tích cực, tính sáng tạo của
học sinh đóng vai trị chính mà giáo viên phải đạt được. Nhu cầu nhận thức học sinh ngày
càng đòi hỏi cao. Trong quá trình bồi dưỡng kiến thức, kĩ năng giải bài tập Tin học cho học
sinh, giáo viên cịn gặp nhiều khó khăn nhưng trong chương trình chính khóa khơng thực
hiện được.Vì khơng có đủ thời lượng để giáo viên thực hiện mở rộng, nâng cao kiến thức và
chiếm lĩnh kiến thức ra ngồi phạm vi chương trình.
Thực tiễn:
+ Hiện nay những bài thi HSG Tin 9 chất lượng đề thi cao và vượt xa với kiến thức
nội dung đang học ở trong chương trình chính khóa. Nội dung chính liên quan đến nội dung
thi HSG lớp 9 môn Tin học phần xâu ký tự hàng năm từ cấp huyện hay cấp tỉnh thường hay
có trong đề thi.
+ Nhiều dạng bài tốn phát huy năng lực tư duy mà trong chương trình khơng đề cập

đến và học sinh dù có học giỏi ở lớp cũng không giải quyết được.
+ Nhiều học sinh giỏi bộ mơn khi đọc sách tham khảo, tìm hiểu trên mạng hay các
kênh thông tin khác chỉ biết và ghi nhớ một cách máy móc, mà khơng có một cơ sở nào
vững chắc để giải quyết bài toán tương tự khác.
+ Một số kĩ năng toán học cần thiết học sinh chưa được học trong chương trình tốn
học chính khóa ở cấp THCS cung cấp nên khi giải bài tập, học sinh gặp nhiều khó khăn.
+ Học sinh có nhu cầu nâng cao kiến thức để thi học sinh giỏi cấp huyện, cấp tỉnh,
hay lớp chuyên trung học phổ thơng. Chính vì lẽ đó mà tơi chọn viết giải pháp kinh nghiệm
này để góp phần giải quyết những thực trạng trên và nâng cao chất lượng giảng dạy bộ mơn
Tin học ở cấp THCS.
1.2. Mục đích nghiên cứu
Nguyễn Trương Tiên

Năm học 2018-2019

Trang 2


Rèn học sinh giỏi có kỹ năng giải quyết một số bài toán về xâu ký tự
Quan trọng hơn hết là truyền đạt kinh nghiệm để học sinh có kĩ năng tốt để phân tích,
lập trình giải quyết một bài tốn liên quan đến xâu ký tự. Để từ đó, học sinh có thể hình
thành các kỹ năng phân tích, vận dụng thuật tốn thích hợp để giải quyết hầu hết các bài
toán liên quan.
Kinh nghiệm vận dụng thuật toán, thủ thuật phân tích, kiểm sốt lỗi,..... trong việc
giải bài tập Tin học.
Giúp học sinh phát hiện ra nhanh để giải quyết bài toán Tin học và chọn cách giải tốt
nhất. Bài tập Tin học đa dạng nên việc xác định cách xác định thuật toán là rất cần thiết. Do
đó nhiệm vụ chính trong kinh nghiệm này là cung cấp cho học sinh giải bài tập Tin học theo
cách đơn giản, dễ hiểu nhất, kinh nghiệm phát triển bài tập từ bài tập đã có.
Giúp học sinh có khả năng vận dụng thuật tốn thích hợp khi gặp phải những bài tập

khó và tạo điều kiện để học sinh nâng cao kiến thức và kĩ năng giải những bài tập ở mức độ
tư duy cao hơn.
Tóm lại mục đích của giải pháp là:
-Phát huy hết tính tự lực, tích cực, tính chủ động sáng tạo của học sinh khi tham gia
giải một bài tập Tin học và hiểu sâu sắc kiến thức, rèn kĩ năng phân tích và vận dụng thuật
tốn thích hợp.
-Định hướng học tập để học sinh dễ học, dễ ghi nhớ theo trình tự tư duy từ thấp đến
cao. Bài sau có sự kế thừa phát triển và mở rộng của bài trước.
-Cung cấp cho học sinh những kiến thức cơ bản và nâng cao phù hợp nhận thức để
học tốt phần xâu ký tự khi tham dự thi học sinh giỏi Tin học cấp huyện, tỉnh.
-Cung cấp không những là kĩ năng Tin học cần thiết, những kĩ năng Toán học cần
thiết để học sinh có kĩ năng áp dụng thực tế giải quyết tình huống bài tập cụ thể nhanh
chóng và thuận lợi.
- Vận dụng được phương pháp giảng dạy mới, tạo điều kiện để học sinh tự lực, tích
cực, chủ động phát triển tư duy học tập để học tốt bộ môn Tin học.
- Sử dụng các kênh thông tin như trang web, các diễn đàn lập trình, thư điện tử,... để
học sinh, giáo viên có thể tham khảo, học hỏi, trao đổi.
1.3. Đối tượng nghiên cứu: Đề tài nghiên cứu thuộc lĩnh vực Tin học. Đối tượng nghiên
cứu cụ thể ở đây là các bài tốn lập trình trên ngơn ngữ Free Pascal liên quan đến xâu ký
tự, đến kỷ năng viết chương trình của học sinh.

Nguyễn Trương Tiên

Năm học 2018-2019

Trang 3


Rèn học sinh giỏi có kỹ năng giải quyết một số bài toán về xâu ký tự
1.4. Đối tượng khảo sát, thực nghiệm: Thông qua các kỳ thi học sinh giỏi môn Tin cấp

trường, huyện, tỉnh.
1.5: Phương pháp nghiên cứu
1.5.1. Cơ sở lý luận và thực tiễn:
+ Tổng hợp:
Những bài tập Tin học THCS, THPT phần xâu ký tự từ cơ bản nhất đến nâng cao, mà
trong đó giải quyết các bài tập theo cách giải quyết riêng, dễ hiểu và hiệu quả hơn.
+ Phân tích:
Bài tốn đưa ra một số phương án giải, sau đó phân tích chọn giải pháp tốt nhất.
Trong đó kinh nghiệm của sáng kiến tính ưu việt thể hiện cao.
+ Lựa chọn:
Lựa chọn đa dạng hóa các bài tập nhưng chỉ phục vụ cho một hoặc kĩ năng nào đó
gần giống nhau về cách giải quyết vấn đề, để rèn kĩ năng áp dụng và phát triển năng lực
nhận thức ở mức cao hơn.
Trong việc lựa chọn ta phân chia theo nhiều dạng tốn tích hợp kiến thức; kĩ
năng. Nhờ đó mà sau này gặp tình huống tương tự học sinh dễ dàng nhận dạng nhanh và
đưa ra hướng giải quyết đúng, tối ưu hơn.
1.5.2. Các biện pháp tiến hành:
Để thực hiện đề tài này, tôi đã tiến hành các biện pháp: Thực nghiệm, phân tích, xem
tài liệu và học hỏi, trị chuyện với các đồng nghiệp liên quan nhất là đồng chí Phó Hiệu
trưởng ở nhà trường,..
- Đối với biện pháp thực nghiệm: Qua các lần đảm nhiệm công tác bồi dưỡng học
sinh giỏi cấp trường, cấp huyện.
- Đối với biện pháp phân tích: Qua các lần trực tiếp thực hiện công tác tổ chức các
kỳ thi học sinh giỏi ở trường, huyện, tỉnh.
- Đối với biện pháp xem tài liệu: Thường xuyên truy cập Internet, tham gia các diễn
đàn để nắm bắt các thông tin liên quan đến các biện pháp, cách thức thực hiện mới có trên
mạng cũng như các kiến thức liên quan trong chương trình, nhất là lập trình trong mơi
trường Free Pascal.
- Đối với biện pháp trị chuyện với các đồng nghiệp liên quan: Trong quá trình
thực hiện, việc học hỏi ở đồng nghiệp là điều rất quan trọng. Bằng cách trao đổi trực tiếp

hay gián tiếp với các bộ phận được phân công bồi dưỡng học sinh giỏi ở trường, trường
bạn, huyện.
Nguyễn Trương Tiên

Năm học 2018-2019

Trang 4


Rèn học sinh giỏi có kỹ năng giải quyết một số bài toán về xâu ký tự
1.6. Phạm vi và thời gian nghiên cứu:
Đề tài chỉ nghiên cứu về cách thức viết một chương trình theo yêu cầu tránh được
các lỗi xảy ra thường hay gặp, cách bố trí một chương trình hồn mỹ, dễ phát hiện lỗi. Nhất
là rèn kỹ năng giải quyết các bài tốn lập trình liên quan đến xâu ký tự mà trong quá trình
học, học sinh thường hay gặp lỗi.
Thời gian nghiên cứu và kiểm nghiệm đề tài này được thực hiện kể từ tháng 07 năm
2018, cải tiến, vận dụng hiệu quả hơn kể từ tháng 02/2019.
2. NỘI DUNG:
2.1. Mục tiêu:
Giúp học sinh có khả năng vận dụng thuật tốn thích hợp khi gặp phải những bài tập
khó và tạo điều kiện để học sinh nâng cao kiến thức và kĩ năng giải những bài tập ở mức độ
tư duy cao hơn.
2.2. Thực trạng vấn đề nghiên cứu:
Trong q trình đảm nhiệm cơng tác bồi dưỡng học sinh giỏi ở trường, ở huyện, thực
trạng của học sinh trong quá trình bồi dưỡng thường gặp phải các hạn chế như sau:
Hiện nay những bài thi HSG Tin 9 chất lượng đề thi cao và vượt xa với kiến thức nội
dung đang học ở trong chương trình chính khóa. Nội dung chính liên quan đến nội dung thi
HSG lớp 9 môn Tin học phần xâu ký tự hàng năm từ cấp huyện hay cấp tỉnh thường hay có
trong đề thi.
+ Nhiều dạng bài tốn phát huy năng lực tư duy mà trong chương trình khơng đề cập

đến và học sinh dù có học giỏi ở lớp cũng không giải quyết được.
+ Nhiều học sinh giỏi bộ mơn khi đọc sách tham khảo, tìm hiểu trên mạng hay các
kênh thông tin khác chỉ biết và ghi nhớ một cách máy móc, mà khơng có một cơ sở nào
vững chắc để giải quyết bài toán tương tự khác.
+ Một số kĩ năng toán học cần thiết học sinh chưa được học trong chương trình tốn
học chính khóa ở cấp THCS cung cấp nên khi giải bài tập, học sinh gặp nhiều khó khăn.
2.3. Mơ tả giải pháp:

2.3.1. Thuyết minh tính mới:
2.3.1.1.PHẦN KIẾN THỨC CHUNG
Phần này cung cấp một số các qui tắc chung khi sử dụng một ngôn ngữ lập trình nào
đó để giải quyết bài tập cụ thể. Bao gồm:
1/ Rèn luyện tư duy thuật toán cho học sinh THCS:
a/ Tại sao phải rèn luyện kỹ năng tìm tịi thuật tốn.
Nguyễn Trương Tiên

Năm học 2018-2019

Trang 5


Rèn học sinh giỏi có kỹ năng giải quyết một số bài toán về xâu ký tự
b/ Xác định rõ INPUT và OUTPUT.
c/ Mịn dần thuật toán.
2/ Rèn luyện phong cách lập trình tốt cho học sinh THCS:
a/ Quy ước về cách đặt tên cho các định danh.
b/ Phong cách viết mã nguồn.
c/ Tối ưu sự thực thi mã nguồn.
d/ Tạo các bộ thử.
2.3.1.2.NỘI DUNG CỤ THỂ NHƯ SAU

1/ Rèn luyện tư duy thuật toán cho học sinh THCS:
a/Tại sao phải rèn luyện tư duy thuật toán cho học sinh THCS:
Trong quyển sách nổi tiếng của mình về NNLT Pascal xuất bản năm 1970, tác giả
N.With đã viết một dòng ngay từ đầu trang:
CHƯƠNG TRÌNH=THUẬT TỐN + CẤU TRÚC DỮ LIỆU
Như vậy, thuật toán là phần quan trọng bậc nhất để tạo nên một chương trình. Nhưng
hết cấp Tiểu học, học sinh vẫn chưa được làm quen với khái niệm thuật tốn. Do vậy, khi
học lập trình cái khó khăn ban đầu của học sinh THCS chính là tìm thuật toán để giải bài
toán đã cho. Một học sinh muốn tiến sâu, tiến xa trong tương lai phải có tư duy thuật toán
tốt.
Bởi vậy làm quen và rèn luyện tư duy thuật toán cho học sinh mới bắt đầu học lập
trình là một u cầu thiết yếu. Khơng nên vội vàng cho học sinh làm việc ngay trên máy
tính khi mới bắt đầu học. Có thầy giáo khi dạy tin học cho lớp chuyên Tin đã bỏ ra cả học
kỳ để dạy riêng thuật toán.
b/ Xác định rõ INPUT và OUTPUT:
Xác định bài toán, tức là xác định đâu là điều kiện cho trước, đâu là kết quả cần thu
được sau khi xử lý. Đây là yêu cầu ở bước đầu tiên khi tiến hành giải bài toán trên máy tính
nên việc xác định rõ INPUT và OUTPUT là rất quan trọng. Vì nếu ta xác định sai hay
khơng xác định rõ dẫn đến việc giải quyết bài toán trên máy tính của ta sẽ khơng xác định
được hướng đi cũng như kết quả đạt được không như mong muốn.
c/ Mịn dần thuật toán:
Làm mịn dần là chiến lược giải quyết vấn đề theo tiếp cận chia để trị. Tức là: Phân tích
bài tốn/thuật tốn thành các bài tốn/thuật tốn con đơn giản hơn, q trình phân tích đó
diễn ra đến khi nhận được các bài toán/thuật toán con sơ cấp (để giải quyết hoặc đã biết
cách giải quyết). Có hai cách tiếp cận làm min dần: Từ trên xuống (Top-Down) và từ dưới
lên (Bottop-up).
Ví dụ: Input: Tọa độ 4 đỉnh một tứ giác; Output: Diện tích tứ giác.
- Làm mịn dần từ trên xuống dưới: S(tứ giác)→S(Tam giác) →Dodaicanh(A, B)
- Làm mịn dần từ dưới lên trên: Dodaicanh(A, B) → S(Tam giác) → S(tứ giác).
Dạy học thuật toán làm mịn dần gồm có ba bước:


Nguyễn Trương Tiên

Năm học 2018-2019

Trang 6


Rèn học sinh giỏi có kỹ năng giải quyết một số bài toán về xâu ký tự
- Bước 1: Làm thơ: Thuật tốn chính được phân tích thành các thuật tốn con ở dạng
“đóng gói”. Biểu diễn thuật tốn chính được thể hiện ở mức tổng thể, “thô” nhất (kém
“mịn” nhất).
- Bước 2: Làm mịn dần: Thực hiện quá trình xây dựng các thuật toán con theo cách làm
như đối với thuật tốn chính. Q trình này thực hiện đến khi nhận xây dựng được các thuật
toán sơ cấp.
- Bước 3: Làm mịn hồn tồn: Thực hiện q trình thay thế dần các gói thuật tốn con
bằng cách biểu diễn chi tiết của chúng đã tìm được ở bước 2.
Khi các thuật toán con được biểu diễn chi tiết trong thuật tốn chính, ta nói rằng nó được
“mở ra”.
Lưu ý rằng: Mỗi bước có thể xem chúng là một giai đoạn nếu như có nhiều bước nhỏ
bên trong.
d/ Phong cách lập trình tốt:
Để có một phong cách lập trình tốt ngồi việc tn theo các qui chuẩn, cịn cần phải
tn theo các qui ước. Cơ sở cho việc cài đặt một chương trình hiệu quả là: Cách trình bày
rõ ràng, sáng sủa nỗi bật được cấu trúc logic của chương trình. Một phần nhỏ trong lập trình
là để máy tính có thể đọc được nó. Phần lớn hơn là viết các mã lệnh cho chương trình chạy
được theo đúng chức năng và làm sao để con người có thể dễ đọc, dễ hiểu nó.
Lợi ích của việc trình bày cẩn thận:
- Thể hiện tốt cấu trúc logic của mã lệnh.
- Cải thiện khả năng đọc.

- Bảo đảm sự chính xác trong các thay đổi.
- Các lợi ích hệ quả của các lợi ích trên:
+ Chương trình ít mắc lỗi và dễ sửa chữa khi mắc lỗi.
+ Tiết kiệm được thời gian sửa lỗi.
+ Tăng khả năng làm việc theo nhóm.
. Quy ước về cách đặt tên cho các định danh:
Thông thường tùy theo ngơn ngữ và mơi trường lập trình, người viết chương trình chọn
cho mình một phong cách nhất quán trong việc đặt tên cho các định danh. Tuy nhiên, nên
đặt sao cho thuận tiện, dễ đọc, dễ nhớ và dễ làm việc, có một số quy tắc cần quan tâm khi
đặt tên như sau:
d.1. Đặt tên cho biến;
Tên biến nên thể hiện được ý nghĩa: thông thường các biến nguyên như i, j, k dùng làm
biến lặp; x, y dùng làm biến lưu tọa độ... Còn những biến lưu trữ khác thì nên đặt tên gợi
nhớ: Biến đếm số lần dùng “Count” hay “Sluong”; biến trọng lượng “weight” hay
“Tluong”... Nếu đặt quá ngắn gọn như “c” cho biến đếm hay “w” cho biến trọng lượng thì
sau này khi nhìn vào chương trình sẽ rất khó hiểu và dễ nhầm lẫn, nhưng cũng khơng nên
q dài dịng như “Demsoluong” hay “Tinhtrongluong” bởi khi dùng sẽ rườm rà, tốn thời
gian nhập.
d.2. Đặt tên hằng:
Tất cả các ký tự đều viết hoa.
Ví dụ: Const
MAXN
=
10000;
INPUT
=
‘Baitap.inp’;
Nguyễn Trương Tiên

Năm học 2018-2019


Trang 7


Rèn học sinh giỏi có kỹ năng giải quyết một số bài toán về xâu ký tự
d.3. Đặt tên cho chương trình con:
Tên chương trình con thường bắt đầu bằng chữ hoa. Vì chương trình con thường được
thực hiện một chức năng nào đó nêu tên hay bắt đầu bằng động từ.
Ví dụ: TimMax(); GetNum();
e) Phong cách viết mã nguồn
e.1. Quy tắc trình bày tổng thể chương trình:
Chương trình nên tách thành nhiều đơn thể (mô _ đun), mỗi đơn thể thực hiện một công
việc, càng độc lập với nhau càng tốt (chương trình con). Điều này sẽ giúp cho chương trình
dẽ cải tiến và khi đọc chương trình sẽ dễ hình dung được vấn đề đang thực hiện.
- Nên sử dụng các tham số khi truyền thông tin cho các chương trình con. Tránh sử dụng
các biến tồn cục để truyền thơng tin giữa các chương trình con vì như vậy sẽ làm mất đi
tính độc lập giữa các chương trình con và rất khó khăn khi kiểm sốt giá trị của chúng khi
chương trình con thi hành.
- Cách trình bày chương trình càng nhất quán càng dễ đọc, dễ hiểu.
- Chương trình nên giữ được tính đơn giản, rõ ràng.
- Chương trình nên thực hiện như một dịng chảy từ trên xuống:
+ Sau đó đến khai báo đơn vị, khai báo hằng, khai báo kiểu, khai báo biến tồn cục, khai
báo chương trình con.
+ Khơng nên sử dụng Goto vì sẽ phá vỡ tính tuần tự của việc thực hiện chương trình.
e.2. Quy tắc trình bày dịng lệnh:
- Mỗi câu lệnh nên được đặt riêng trên một dòng để chương trình dễ đọc và dễ quan sát
cách thực hiện khi dùng watch để tìm lỗi.
- Sử dụng tab để canh lề chương trinh (các lệnh ngang cấp thì phải tab vào như nhau):
Điều này sẽ giúp chương trình rõ ràng và dễ quản lý.
Ví dụ:

Khơng nên

Nên

For i:= 1 to n do Begin Action1;
Action2;
End

For i: 1 to n do
Begin
Action1;
Action2;
End;

Nên viết Begin
end; rồi viết lệnh vào giữa để tránh thiếu end;
- Sử dụng khoảng trắng chương trình sẽ dễ nhìn hơn:
Ví dụ:
Khó đọc

Dễ đọc

If (a
If ( a
a:=b*c;

a := b * c;


TimMax(a,b,c);

TimMax(a, b, c);

Nguyễn Trương Tiên

Năm học 2018-2019

Trang 8


Rèn học sinh giỏi có kỹ năng giải quyết một số bài toán về xâu ký tự
- Nên định nghĩa hằng số: Điều này sẽ tránh việc các con số khó hiểu xuất hiện trong
chương trình và cũng giúp người lập trình dễ kiểm sốt chương trình lớn vì giá rị của hằng
số khi cần thay đổi chỉ phải thay đổi một lần duy nhất ở giá trị định nghĩa.
Ví dụ:
Không nên

Nên

........................................
For i := 1 to 100 do A[i] := Random(100);
While i<=100 do...

Const MAXN
= 100;
MAXNUM =
100;
.............
For i :=1 to MAXN do

A[i] := Random(MAXNUM);
While i <= MAXN do ....

Ở đoạn chương trình bên trái rất khó phân biệt các số 100 kia có quan hệ gì với nhau.
Tuy nhiên, trong đoạn chương trình bên phải ta dễ dàng thấy được ý nghĩa của từng giá trị
khi thay bằng định danh. Ngoài ra khi cần thay đổi giá trị của MAXN, MAXNUM thì chỉ
cần thay một lần trong phần định nghĩa.
- Các biến không nên sử dụng lại với nhiều ý nghĩa khác nhau trong cùng một hàm để
tránh sự nhầm lẫn.
- Viết chú thích cho chương trình: Biến, hàm khi định nghĩa nên viết chú thích ý nghĩa
và chức năng rõ ràng. Đôi khi các đoạn lệnh thực thi cũng cần giải thích nếu chúng quá
phức tạp. Nên viết chú thích ngắn gọn nhưng đầy đủ và dễ hiểu.
Ví dụ: VariCount: Integer;
{ đếm số cách thực hiện}
Procedure
Try( i : Integer);
{ Tìm từ i}
Tuy nhiên không phải bất cứ lệnh nào cũng chú thích, việc chú thích tràn lan ngay cả với
câu lệnh đơn giản khơng có ý nghĩa gì mà cịn làm chương trình khó nhìn hơn.
- Nên viết biểu thức điều kiện mang tính tự nhiên: Biểu thức nện viết dưới dạng khẳng
định, việt viết dưới dạng phủ định sẽ làm khó hiểu.
Ví dụ:
Khơng nên

Nên

If not(a mod 5<>0) then ...

If a mod 5 = 0 then ...


e.3. Qui tắc khai báo tên tệp dữ liệu dùng trong chương trình:
Dùng tệp nên khai báo tên tệp trước trong phần khai báo hằng:
Ví dụ:
Const fi=’BAI1.INP’;
Fo=’BAI1.OUT’ ;
f) Tối ưu sự thực thi mã nguồn:
Mục đích của việc tối ưu mã nguồn là nâng cao tốc độ xử lý và hạn chế không gian bộ
nhớ mà chương trình chiếm dụng. Thơng thường có thể mâu thuẫn giữa tốc độ và không
gian lưu trữ, do đó tùy theo điều kiện cụ thể mà người lập trình có sự lựa chọn thích hợp.
Một số thủ thuật có thể giúp người lập trình hình thành nên phong cách lập trình tốt.
- Lưu tạm giá trị thường sử dụng: Nếu một biểu thức tính tốn được dùng nhiều lần thì
nên tính kết quả một lần rồi lưu vào một biến và dùng lại.
Nguyễn Trương Tiên
Năm học 2018-2019
Trang 9


Rèn học sinh giỏi có kỹ năng giải quyết một số bài tốn về xâu ký tự
Ví dụ:
Khơng nên

Nên

F:=sqrt(x*x+y*y)+(sqrt(x*x+y*y)*sqrt(x*y)-sqrt(y*y);

x2 := x*x;
y2 := y*y;
p :=sqrt(x2 + y2);
F := p + (q * sqrt(x2) – sqrt(y2));


If b * b – 4 * a * c >0 then
Begin
x1 := (-b +sqrt( b * b – 4 * a * c)) / (2 * a);
x2 := (-b - sqrt( b * b – 4 * a * c)) / (2 * a);
end;

Delta := b * b – 4 * a * c
If delta >0 then
Begin
Delta:=sqrt(delta);
x1 := (-b + delta) / (2 * a);
x2 := (-b - delta) / (2 * a);
end;

- Thay thế một biểu thức bằng một biểu thức tương đương nhưng lợi thế về thực thi:
Ví dụ: Thay thế các phép nhân chia bằng phép dịch chuyển bit vì các
phép xử lý bít tốc độ nhanh hơn các phép xử lý khác.
Khơng nên

Nên

For i := 1 to n do s:=s*2;

S sh1 n;

Dùng số nguyên thay cho số thực: Do việc xử lý số thực chậm hơn xử lý số nguyên nên
ta có thể dùng số nguyên thay cho số thực có phần lẻ nhỏ.
Ví dụ: Điểm trung bình của học sinh là số thực ta có thể thay bằng số nguyên: DTB là
7.85 thì lưu số nguyên là 785, khi xuất ra thì chia cho 100.
- Thốt khỏi vịng lặp khi sớm nhất: Một số trường hợp không cần thiết phải lặp hết tồn

bộ mà đã đạt được mục đích thì có thể thốt khỏi vịng lặp.
Ví dụ:
Khơng nên

Nên

bkt := true;
For i := 2 to n do
If n mod i = 0 then
bkt := False;

bkt := true;
For i := 2 to n do
If n mod i = 0 then
Begin
bkt := False;
Break;
End;

Hạn chế sử dụng câu lệnh rẽ nhánh: Lệnh rẽ nhánh làm chậm chương trình do ngắt
luồng thực thi.
Ví dụ:
Khơng nên
Nguyễn Trương Tiên

Năm học 2018-2019

Nên
Trang 10



Rèn học sinh giỏi có kỹ năng giải quyết một số bài toán về xâu ký tự
If x > y then d:=True else d:= False;

d := x>y;

- Tránh lãng phí bộ nhớ: Bằng cách sử dụng kiểu dữ liệu nhỏ nhất đủ để lưu trữ. Việc sử
dụng tài nguyên nhiều hơn mức địi hỏi của chương trình là một thói quen xấu mà người lập
trình hay mắc phải. Hơn nữa tốc độ chương trình sẽ nhanh hơn khi sử dụng kiểu dữ liệu nhỏ
hơn.
- Khai báo biến cục bộ trong phạm vi gần nhất: Khai báo biến cục bộ gần với điểm sử
dụng nhất. Việc khai báo ở phạm vi rộng hơn chỉ làm lãng phí và khó kiểm sốt.
- Giảm số lượng tham số truyền vào hàm: Việc sử dụng hàm có quá nhiều tham số được
truyền vào có thể làm ảnh hưởng đến ngăn xếp dành cho việc gọi hàm. Nhất là trường hợp
tham số là kiểu dữ liệu có cấu trúc. Sử dụng con trỏ hay tham chiếu trong trường hợp này để
đơn giản hóa.
g/ Các dạng tốn bồi dưỡng mơn tin cho học sinh giỏi THCS:
Nhóm các bài tập thường được phân loại theo thuật toán, theo cấu trúc dữ liệu dùng để
giải. Ở bậc THPT dạng toán phong phú hơn rất nhiều do được mở rộng về CTDL song song
với việc mở rộng thuật toán.
Ở bậc THCS các bài toán thường chỉ sử dụng các vịng lặp, sử dụng các kiến thức tốn
như UCLN, BCNN, số nguyên tố, sự chia hết của các số nguyên,... Các dạng tốn thường
gặp là:
- Nhóm các bài tốn số học;
- Nhóm các bài tốn thao tác trên mảng một chiều, mảng hai chiều;
- Nhóm các bài tốn xử lý xâu;
- Một số các bài tập khác.
2.3.1.3 MỘT SỐ BÀI TẬP, BÀI THI VỀ XÂU KÝ TỰ
Bài 1: Mã hóa theo khóa:
Cho trước khóa là một hốn vị của N số (1, 2, 3, ..N). Khi đó, để mã hóa một xâu ký

tự, ta có thể chia xâu thành từng nhóm N ký tự (riêng nếu nhóm cuối cùng khơng đủ N ký
tự thì ta có thể thêm các dấu cách vào sau cho đủ) rồi hoán vị các ký tự trong từng nhóm.
Sau đó, ghép lại theo thứ tự các nhóm, ta được một xâu đã mã hóa.
Chẳng hạn, với khóa 3241 (N=4) thì ta có thể mã hóa xâu “English” thành “gnlEhs i”.
Hãy viết chương trình mã hóa một xâu ký tự cho trước ứng với khóa đã cho.
Cách giải 1: (Theo tài liệu)

Nguyễn Trương Tiên

Năm học 2018-2019

Trang 11


Rèn học sinh giỏi có kỹ năng giải quyết một số bài toán về xâu ký tự
uses crt;
var i,j:integer; kq:string[100];
var s:string[100];
begin
a:array[1..100] of word;
clrscr;
n:integer;
if length(s) mod n <>0 then
procedure nhap;
for i:=1 to n-(length(s) mod
var i:integer;
n) do
begin
s:=s+#32;
clrscr;

kq:='';
write('So luong phan
for i:=0 to (n div
tu:');readln(n);
length(s)) +1 do
writeln('Nhap cac chi so
for j:= n*i+1 to n*(i+1)
trong khoa:');
do
for i:=1 to n do
kq:=kq+s[a[j-(n*i)]+
begin
(n*i)];
write('a[',i,']=');readln(a[i]);
write('Chuoi ma hoa theo
end;
khoa:',kq);
write('Nhap
end;
chuoi:');readln(s);
begin
end;
nhap;mahoa;
readln;
procedure mahoa(s:string);
end.
Ở cách giải này, buộc học sinh phải nhớ công thức, vả lại hầu hết học sinh không
hiểu. Để đơn giản, ta đưa ra cách giải thứ hai như sau:
1/ Ta xem khóa N là một xâu số (Khoa).
2/ Thêm ký tự trắng vào sau xâu S cần mã hóa để đủ nhóm N ký tự.

3/ Sau đây là thuật tốn ở dạng thô:
B1: i←1 ;KQ← ‘’ ;
B2 : Nếu length(S) =0 thì chuyển bước 5 ;
B3 : val(Khoa[i],k,e); KQ←KQ+S[k] ;
B4: Nếu i=length(Khoa) thì delete(S,i,1); I←1. Ngược lại I←I+1. Quay lại bước 2.
B5: Thơng báo KQ, kết thúc.
Chương trình minh họa như sau:

Nguyễn Trương Tiên

Năm học 2018-2019

Trang 12


Uses crt;
begin
Var Khoa, S:string;
delete(s,1,i);
procedure mahoa(Khoa,S:string);
i:=1;
var i:byte; k,e:integer;
end
KQ:string;
else inc(i);
begin
end;
While length(s) mod length(khoa)write(‘Xau ma hoa:’,KQ) ;
<>0 do
end;

s:=s+#32;
Begin
i:=1; kq:='';
Clrscr;
while length(s) >0 do
Write(‘Nhap khoa:’);Readln(Khoa);
begin
Write(‘Nhap xau:’);Readln(s);
val(Khoa[i],k,e);
Mahoa(Khoa,S);
kq:=kq+s[k];
Readdln;
if i=length(khoa) then
End.


Bài 2: SẮP XẾP CÁC DÃY SỐ TRONG XÂU
Cho xâu S (khơng q 255 ký tự) có lẫn các dãy số (các dãy số này nguyên dương
và mỗi dãy số khơng q 10 chữ số) ở các vị trí khác nhau trong S. Hãy viết chương trình
sắp xếp các dãy số này theo thứ tự tăng dần tính từ trái qua mà vị trí các ký tự trong S vẫn
giữ nguyên.
Vi dụ: Cho xâu s: abc123dfggsf4563sf34sf56sf
Kết quả: In ra màn hình là: abc34dfggsf56sf123sf4563sf
Cái khó của u cầu ở bài tốn này là xác định vị trí bắt đầu ở mỗi dãy số trong
xâu, nên nếu săps xếp trực tiếp các dãy số trong xâu S sẽ làm thay đổi vị trí ban đầu. Nên
có ý tưởng thuật tốn như sau:
Sử dụng 2 mảng:
+ Một mảng xâu kí tự để chứa các số trong xâu (mảng A)
+ Một mảng nguyên chứa vị trí các số (mảng VT)
- Sắp xếp mảng a theo thứ tự tăng dần.

- Chèn các phần tử của mảng A (đã sắp xếp) vào xâu S theo các vị trí trong mảng VT và
chèn từ cuối lên đầu (để khơng làm thay đổi vị trí cũ).
Chương trình minh họa:


uses crt;
var s:string;
a:array[1..50]of string[10];
vt:array[1..50]of byte;
n:byte;
procedure chuyen(var s:string);
var i,j,so:byte;kt:integer;
begin
i:=1;j:=1;
while i<=length(s) do
begin
val(s[i],so,kt);
if kt=0 then
begin
vt[j]:=i;
while (kt=0) and (i<=length(s)) do
begin
a[j]:=a[j]+s[i];delete(s,i,1);
val(s[i],so,kt);
end;
j:=j+1;
end;
i:=i+1;
end;
n:=j-1;

end;
procedure sapxep;
var i,j:byte; tg:string[10];

so1,so2:longint;kt:integer;
begin
for i:=1 to n-1 do
for j:=i+1 to n do
begin
val(a[i],so1,kt); val(a[j],so2,kt);
if so1>so2 then
begin
tg:=a[i];
a[i]:=a[j];
a[j]:=tg;
end;
end;
end;
procedure chenso(var s:string);
var i:byte;
begin
for i:=n downto 1 do
insert(a[i],s,vt[i]);
end;
begin
clrscr;
write('Nhap xau s=');readln(s);
chuyen(s);sapxep;chenso(s);
writeln('Xau
sau

khi
xep:');writeln(s);
readln;
end.

sap

Bài 3: SỐ LA MÃ:
a/ Viết chương trình nhập vào số tự nhiên N (0 < N < 4000) từ bàn phím. Viết ra
màn hình số N dưới dạng số La Mã.
Ví dụ:
Nhập N=25 thì in ra màn hình là XXV.
Nhập N=98 thì in ra màn hình là XCVIII.
Nhập N=2017 thì in ra màn hình là MMXVII
Cho biết:
Chữ số La Mã
I V X
L
C
D
M
Giá trị
1 5 10 50 100 500 1000
Ý tưởng thuật tốn:
Ta nhận thấy, ứng với đề cho, ta có bảng dữ liệu tương quan giữa số La Mã và số
thập phân như sau:
Chữ số La Mã
M
CM
D

CD C XC L XL X IX V IV
Giá trị thập 1000 900 500 400 100 90 50 40 10 9
5
4
phân
Như vậy để đơn giản, ta định nghĩa hai mảng. Một mảng LaMa kiểu xâu ký tự
có 13 phần tử chứa ký tự hay cụm ký tự ứng với giá trị từ lớn đến bé. Một mảng So

I
1


cũng có 13 phần tử chứa giá trị số thập phân tương ứng với từng phần tử trong mảng
Lama.
Khi đó, ta tiến hành dị tìm trong mảng So[i] (với i=1..13), nếu tại i mà N≥So[i]
thì giảm N←N-So[i] và KQ←KQ+LaMa[i]. Làm như vậy cho đến khi N←0 thì dừng.
Chương trình minh họa như sau:
uses crt;
const lama:array[1..13]of string[2]= ('M','CM','D','CD','C','XC',
'L','XL','X','IX','V','IV','I');
so:array[1..13]of word=(1000,900,500,400,100,90,50,40,10,9,5,4,1);
var n:word;
procedure xuly(n:word);
write(kq);
var i,t:word;yes:boolean;kq:string[50];
end;
begin
begin
kq:='';
clrscr;

while n>0 do
repeat
begin
write('Nhap so n=');readln(n);
for i:=1 to 13 do
if (n<=0) or (N>=4000) then
if n>=so[i] then
writeln(‘So nhap khong hop le!’);
begin
until (n>0) and (n<4000);
t:=i;
write('So ',n,' duoc doi ra so la ma la:
break;
');
end;
xuly(n);
n:=n-so[t];
readln;
kq:=kq+lama[t];
end.
end;
b/ Viết chương trình nhập vào xâu La mã S (khơng q 20 ký tự) từ bàn phím.
Viết ra màn hình số tự nhiên N có giá trị (0Ví dụ:
Nhập S= XXV thì in ra màn hình là 25.
Nhập S= XCVIII thì in ra màn hình là 98.
Nhập S= MMXVII thì in ra màn hình là 2017
Cho biết:
Chữ số La Mã
I V X

L
C
D
M
Giá trị
1 5 10 50 100 500 1000
Ta có qui tắc chuyển đổi như sau:
-Số thập phân được cấu thành từ các chữ số đơn lẻ. Ví dụ: 1989 được ghép bởi
1,9,0,8. Còn đối với cách biểu diễn chữ số la mã thì mỗi chữ số khác 0 ở mỗi hàng
(hàng đơn vị, hàng chục, hàng trăm,…) sẽ được biểu diễn bởi 1 kí tự số la mã. 1000 =
M, 900 = CM, 0 không được biểu diễn, 8 = VIII. 1908 = MCMVIII
-Chữ số đi sau có giá trị nhỏ hơn hoặc bằng giá trị của chữ số đi trước thì cộng
thêm vào:
VI = I + V = 1+5 = 6
LX = X + L = 10 + 50 = 60
XX = X + X = 10 + 10 = 20
-Chữ số đi sau có giá trị lớn hơn hoặc bằng chữ số có giá trị đi trước thì trừ bớt
đi:


IV = V – I = 5 – 1
XL = L – X = 50 – 10 = 40
+“I” chỉ có thể bị trừ bởi “V”, “X”. ( IV = V – I = 5 – 1 = 4, IX = X – I = 10 – 1 = 9)
+“X” chỉ có thể bị trừ bởi “C”, “L”. ( XC = 100 – 10 = 90, XL = 50 – 10 = 40)
+“C” chỉ có thể bị trừ bởi “D” và “M”. (CD = 500 – 100 = 400, CM = 1000)
+“V”, “L”, “D” không bao giờ bị trừ .
Chung qui, xét ví dụ:
- MMXVII=1 + 1 + 5+ 10 + 1000 + 1000=2017.
- XCVIII=1+1+1+5+100 -10=98
Như vậy, ta dùng mảng số nguyên dương A lưu giữ các giá trị tương ứng với các

ký tự la mã (‘I’, ‘V’, ‘X’, ‘L’, ‘C’, ‘D’, ‘M’ ứng với các giá trị 1, 5, 10, 50, 100, 500,
1000) trong xâu S. Dũy nhiên, ban đầu toàn bộ các phần tử trong mảng A đều có giá trị
0. Sau đó duyệt tồn bộ xâu S theo chiều hướng từ phần tử cuối cùng dần lùi đến phần
tử thứ 2 (i←n..2, với n là độ dài xâu S), kiểm tra nếu tại i mà A[i]>A[i-1] thì KQ←KQA[i-1], ngược lại KQ←KQ+A[i-1]. Dũy nhiên, ban đầu, KQ sẽ có giá trị là giá trị ứng
với ký tự la mã cuối cùng trong xâu s, tức là: KQ←A[n].
Chương trình minh họa như sau:


uses crt;
const f1='Lama_TP.int';
f2='Lama_TP.out';
var A:array[1..50] of integer;
s:string[50];
fv,fr:text;
procedure khoitao;
begin
assign(fv,f1);
{$I-} reset(fv);{$I+}
if ioresult>0 then
begin
rewrite(fv);reset(fv);
end;
Assign(fr,f2);rewrite(fr);
end;
procedure docdl;
var i:byte;dem:integer;
begin
readln(fv,s);
for i:=1 to length(s) do s[i]:=upcase(s[i]);
dem:=0;

for i:=1 to length(s) do
if S[i] in ['I','V','X','L','C','D','M'] then
inc(dem);
if dem<>length(s) then
begin
write('Du lieu vao khong dung!');
readln;
close(fv);
close(fr);
exit;

end;
fillchar(a,sizeof(a),0);
for i:=1 to length(s) do
case s[i] of
'I': A[i]:=1;
'V': A[i]:=5;
'X': A[i]:=10;
'L': A[i]:=50;
'C': A[i]:=100;
'D': A[i]:=500;
'M': A[i]:=1000
end;
end;
procedure xuly;
var KQ:longint; i:byte;
begin
KQ:=a[length(s)];
for i:=length(s) downto 2 do
if a[i]>a[i-1] then

kQ:=KQ-A[i-1]
else
KQ:=KQ+A[i-1];
writeln(fr,k);
end;
begin
khoitao;
while not eof(fv) do
begin
docdl;
xuly;
end;
close(fv);close(fr);
end.


2.3.2. Khả năng áp dụng:
Trong thời gian đảm nhiệm và trực tiếp bồi dưỡng, vận dụng đề tài. Kết quả đạt
được như sau:
- Học sinh không ngần ngại đến vấn đề giải quyết các bài toán liên quan đến Tin
học, nhất là các bài toán, các đề thi liên quan đến xâu ký tự.
- Học sinh nắm được các qui tắc trình bày một chương trình, các qui tắc khai báo
biến, cách xây dựng các thuật toán tối ưu, nhất là các bài toán liên quan đến xâu ký tự
- Với giải pháp mà tơi đã nghiên cứu và trình bày có khả năng vận dụng ở tất cả
các trường trong huyện cũng như toàn tỉnh, toàn quốc.
Nhờ thế mà kết quả học sinh giỏi cấp tỉnh vừa qua đạt kết quả rất cao (Đạt 5/6
học sinh tham gia dự thi học sinh giỏi cấp tỉnh).
2.3.3. Lợi ích kinh tế - Xã hội:
- Ít tốn thời gian và cơng sức trong quá trình thực hiện, vận dụng được nhiều
năm tiếp theo, cho phép chia sẽ qua mạng đến với mọi học sinh, mọi giáo viên.

.
3. KẾT LUẬN:
Trong thời gian tới, tơi sẽ tiếp tục nghiên cứu các thuật tốn cịn hạn chế để
hoàn thiện hơn đề tài này và gởi đến quý Hội đồng khoa học, đồng nghiệp mong được
góp ý.
Sau cùng, xin chúc các thành viên trong Hội đồng khoa học sức khỏe.

TÀI LIỆU THAM KHẢO
1. Tài liệu Excel.
2. Thơng tin từ Internet.
3. Tài liệu lập trình VBA-Macro.


MỤC LỤC
Trang
1. Đặt vấn đề........................................................................................................2
1.1. Lý do chọn đề tài...........................................................................................2
1.2. Mục đích nghiên cứu.....................................................................................2
1.3. Đối tượng nghiên cứu....................................................................................3
1.4. Đối tượng khảo sát thực nghiệm...................................................................3
1.5. Phương pháp nghiên cứu...............................................................................3
1.5.1. Cơ sở lý luận và thực tiễn...........................................................................3
1.5.2.Các biện pháp tiến hành..............................................................................4
1.6.Phạm vi và thời gian nghiên cứu....................................................................4
2. Nội dung..........................................................................................................4
2.1. Mục tiêu.........................................................................................................5
2.2.Thực trạng vấn đề nghiên cứu........................................................................5
2.3. Mơ tả giải pháp..............................................................................................5
2.3.1.Thuyết minh tính mới..................................................................................5
a) Chuẩn bị.................................................................................................5

b) Hướng dẫn thiết kế giao diện.................................................................5
b.1. Giao diện “TongHop” danh sách của một khối.........................6
b.2. Giao diện chia phòng thi...........................................................6
b.2.1. Giao diện học sinh theo lớp...................................................7
b.2.3. Giao diện thống kê theo khối................................................7


b.3. Giao diện in danh sách phòng thi..............................................8
b.4. Giao diện in bảng điểm kiểm tra học kỳ của lớp......................8
b.5. Giao diện lọc theo lớp...............................................................9
c) Đánh số báo danh, lập danh sách phòng thi, lọc điểm, thống kê điểm,
....................................................................................................................9
c.1. Ở trang tính “TonhHop”............................................................9
c.2. Ở trang tính “Chiaphong”.......................................................11
c.3. Ở trang tính “In_phongthi” ....................................................16
c.4. Ở trang tính “In_diem”...........................................................18
c.5. Tiến hành khóa, bảo vệ các trang tính, bảng tính, các Macro
..................................................................................................................21
d) Sử dụng................................................................................................21
2.3.2. Khả năng áp dụng.....................................................................................22
2.3.3. Lợi ích kich tế - xã hội.............................................................................22
C. KẾT LUẬN.......................................................................................................22
TÀI LIỆU THAM KHẢO.....................................................................................23
MỤC LỤC..............................................................................................................24

Bồng Sơn, Ngày 04/04/2019
Người viết

Nguyễn Trương Tiên



THẨM ĐỊNH CỦA HĐKH CẤP TRƯỜNG
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
THẨM ĐỊNH CỦA HĐKH CẤP HUYỆN
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................
.............................................................................................................................................



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×