Tải bản đầy đủ (.docx) (28 trang)

SỬ DỤNG CHƯƠNG TRÌNH CON TRONG LẬP TRÌNH PASCAL KHI BỒI DƯỠNG HSG MÔN TIN HỌC LỚP 8; 9

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 (346.3 KB, 28 trang )

PHÒNG GIÁO DỤC VÀ ĐÀO TẠO ...................
TRƯỜNG THCS ..................
----------  ----------

BÁO CÁO KẾT QUẢ
NGHIÊN CỨU, ỨNG DỤNG SÁNG KIẾN

Tên sáng kiến: “SỬ DỤNG CHƯƠNG TRÌNH CON TRONG LẬP
TRÌNH PASCAL KHI BỒI DƯỠNG HSG MÔN TIN HỌC LỚP
8, 9”

Tác giả sáng kiến: .............................................
Mã sáng kiến: 40

.........................., tháng 2 năm 2023


2

Mục lục
Đề mục

Trang

1. Lời giới thiệu:....................................................................................................5
2. Tên sáng kiến:...................................................................................................5
3. Tác giả sáng kiến:..............................................................................................6
4. Chủ đầu tư tạo ra sáng kiến:..............................................................................6
5. Lĩnh vực áp dụng sáng kiến:.............................................................................6
6. Ngày sáng kiến được áp dụng lần đầu hoặc áp dụng thử:.................................6
7. Mô tả bản chất của sáng kiến:...........................................................................6


7.1. Về nội dung của sáng kiến:........................................................................6
7.1.1. Phần mở đầu:.......................................................................................6
7.1.2. Cơ sở lý luận:......................................................................................8
7.1.3. Cơ sở thực tiễn:...................................................................................8
7.1.4. Đề xuất giải pháp:................................................................................9
7.2. Về khả năng áp dụng của sáng kiến:........................................................18
8. Những thông tin cần được bảo mật của sáng kiến:........................................26
9. Các điều kiện cần thiết để áp dụng sáng kiến:................................................26
10. Đánh giá lợi ích thu được hoặc dự kiến thu được do áp dụng sáng kiến......26
10.1. Đánh giá lợi ích thu được hoặc dự kiến thu được do áp dụng sáng kiến
theo ý kiến của tác giả.....................................................................................26
10.2. Đánh giá lợi ích thu được hoặc dự kiến thu được do áp dụng sáng kiến
theo ý kiến tổ chức cá nhân.............................................................................26
11. Danh sách những tổ chức/ cá nhân đã tham gia áp dụng thử hoặc áp dụng
sáng kiến lần đầu.............................................................................................27
Tài liệu tham khảo...............................................................................................28


3

Danh mục từ viết tắt

Ký hiệu chữ viết tắt

Chữ viết đầy đủ

HSG

Học sinh giỏi


BGH

Ban giám hiệu

THCS

Trung học cơ sở

SGK

Sách giáo khoa

HS

Học sinh

GV

Giáo viên

PHHS

Phụ huynh học sinh

KHTN

Khoa học tự nhiên

SKKN


Sáng kiến kinh nghiệm


4

BÁO CÁO KẾT QUẢ
NGHIÊN CỨU, ỨNG DỤNG SÁNG KIẾN
1. Lời giới thiệu:
Ngơn ngữ lập trình Pascal là một nội dung quan trọng nhất, xuyên suốt
chương trình Tin học lớp 8, nó giúp học sinh giải được một số bài tốn trong
mơn Tốn cũng như trong cuộc sống. Pascal cũng được sử dụng rất nhiều trong
các cuộc thi HSG tin học các cấp, Cuộc thi tin học trẻ, ... Là ngôn ngữ lập trình
cơ bản và có cấu trúc chặt chẽ nó tạo nền móng rất tốt để các em có thể học tốt
các mơn lập trình khác.
Nhưng trên thực tế thì việc học ngơn ngữ lập trình Pascal trong chương
trình tin học 8, 9 cịn rất ít, giống như cưỡi ngựa xem hoa, học sinh vẫn chưa tự
mình sử dụng được ngơn ngữ này để giải các bài tốn đã học, và những bài tốn
trên thực tế. Cũng vì lý do như vậy học sinh càng thấy học lập trình khó và
khơng có mấy tác dụng.
Vì thế để học sinh trở nên u thích mơn học ta cần phải bồi dưỡng thêm
để học sinh có thể tự giải được một số bài tốn bằng ngơn ngữ Pascal. Học sinh
thấy được tác dụng và sự thú vị trong việc lập trình từ đó tạo thái độ u thích
mơn học, u thích lập trình và có khả năng trở thành một lập trình viên trong
tương lai.
Qua các năm giảng dạy, bồi dưỡng đội tuyển học sinh giỏi môn Tin học và
cụ thể là giảng dạy ngơn ngữ lập trình Pascal, tơi nhận thấy khi mới học lập
trình Pascal học sinh cảm thấy khó hiểu, khó tiếp thu vì nó kết hợp cả tiếng Anh
lẫn cấu trúc lập trình. Học sinh chưa có khả năng vận dụng Pascal để phục vụ
được các môn khoa học tự nhiên khác nên các em lại càng khơng thấy hứng thú
với mơn học, vì nghĩ rằng nó chẳng có tác dụng gì. Để tạo được hứng thú, u

thích mơn học thì cần phải giúp học sinh biến ngơn ngữ lập trình Pascal là cơng
cụ đắc lực trong việc giải quyết các bài tốn trong chương trình học của các em.
Các em học sinh trong đội tuyển Tin học của nhà trường khi làm bài thường chỉ
chú ý đến việc lập trình mà khơng mơ tả thuật tốn trước, hay các em chưa chú ý
sử dụng chương trình con trong lập trình.... từ đó khiến các em thường xun bỏ
sót các trường hợp vì thế chất lượng giải chưa được cao. Việc tìm cách mơ tả
thuật tốn, sử dụng chương trình con trong lập trình giúp các em tìm cách giải
bài tốn trở nên dễ dàng và cho kết quả tốt hơn khi lập trình trên máy tính.
2. Tên sáng kiến:
Sử dụng chương trình con trong lập trình Pascal khi bồi dưỡng HSG môn
Tin học lớp 8, 9.


5

3. Tác giả sáng kiến:
- Họ và tên: ……………………………
- Địa chỉ tác giả sáng kiến: ……………… - Vĩnh Tường - Vĩnh Phúc.
- Số điện thoại: ……………………..
- E_mail: …………………………
4. Chủ đầu tư tạo ra sáng kiến:
Chủ đầu tư tạo ra sáng kiến là cá nhân tác giả sáng kiến:
……………………
5. Lĩnh vực áp dụng sáng kiến:
Có thể áp dụng sáng kiến và vấn đề mà sáng kiến giải quyết đó là:
- Giáo dục.
- Lĩnh vực công nghệ thông tin và truyền thông.
6. Ngày sáng kiến được áp dụng lần đầu hoặc áp dụng thử:
20/08/2021.
7. Mô tả bản chất của sáng kiến:

7.1. Về nội dung của sáng kiến:
7.1.1. Phần mở đầu:
 Giới thiệu ngắn gọn về ngơn ngữ lập trình Pascal:
Pascal là một ngơn ngữ lập trình bậc cao
do Niklaus Wirth, giáo sư điện toán trường
Đại học kỹ thuật Zurich (Thụy Sĩ) đề xuất
năm 1970. Ơng lấy tên Pascal để kỷ niệm
nhà tốn học và nhà triết học người Pháp
nổi tiếng Blaise Pascal.
Pascal là một ngơn ngữ lập trình bậc cao có các từ khóa bằng tiếng Anh, tính
logic Tốn học chặt chẽ, đặc trưng bởi thuật toán và khả năng trừu tượng hóa
cao. Điều này lí giải vì sao những học sinh học Tốn tốt, thơng minh lại dễ dàng
tiếp thu dạng kiến thức này.
 Các ưu điểm của ngôn ngữ lập trình Pascal
Pascal là một ngơn ngữ lập trình có định kiểu mạnh mẽ (có nghĩa là nó
khơng cho phép trộn lẫn với nhau các biến, hằng có kiểu dữ liệu khác nhau)
Pascal là một ngơn ngữ có cấu trúc thể hiện ở các mặt sau:


6

 Cấu trúc về mặt dữ liệu: Từ các dữ liệu đã có ta có thể xây dựng được
một cấu trúc dữ liệu phức tạp hơn.
 Cấu trúc về mặt lệnh: Từ các lệnh đã có (lệnh đơn giản hoặc lệnh có cấu
trúc) ta có thể nhóm chúng lại với nhau đặt giữa cặp từ khóa Begin và
End để trở thành một câu lệnh phức tạp hơn gọi là lệnh hợp thành (lệnh
ghép).
 Cấu trúc về mặt chương trình: Một chương trình lớn có thể được chia
thành nhiều module chương trình nhỏ hơn (chương trình con), vì thế một
chương trình có thể phân chia cho nhiều người cùng tham gia xây dựng.

Trong khi lập trình người lập trình hay gặp phải các chương trình phức
tạp và những trường hợp phải viết lặp đi lặp lại một đoạn chương trình nào đó.
Để giúp học sinh dễ dàng hơn trong việc lập trình giải quyết các bài tốn phức
tạp và có những đoạn chương trình lặp đi lặp lại nhiều lần. Một chương trình
như vậy gây lãng phí khơng gian lưu trữ chương trình. Để khắc phục Pascal cho
phép chúng ta xây dựng chương trình từ nhiều module chương trình nhỏ hơn gọi
là chương trình con ghép lại với nhau. Một chương trình như vậy có các ưu điểm
sau:
- Tiết kiệm thời gian lập trình
- Làm tăng tính cấu trúc cho chương trình lớn
- Làm tăng tính độc lập khi thử nghiệm
Trong nội dung của bài sáng kiến này tôi đưa ra những tóm lược cơ bản nhất của
việc sử dụng chương trình con trong lập trình Pascal khi bồi dưỡng HSG.
 Đối tượng nghiên cứu:
- Học sinh lớp 8, lớp 9.
 Phương pháp nghiên cứu:
- Phương pháp điều tra.
- Phương pháp phân tích.
- Phương pháp tổng hợp kinh nghiệm trong giảng dạy.
- Phương pháp trò chuyện trao đổi.
- Phương pháp đọc sách và tổng hợp tư liệu.
7.1.2. Cơ sở lý luận:
* Các căn cứ thực hiện:
Công văn số 4003/BGDĐT-CNTT ngày 07/10/2020 về việc hướng dẫn
nhiệm vụ Công nghệ thông tin. Một trong các nhiệm vụ trọng tâm đó là “Tăng
cường ứng dụng CNTT trong đổi mới nội dung, phương pháp dạy, học, thi và
kiểm tra đánh giá, quản lý giáo dục, quản trị nhà trường; áp dụng dạy, học trực


7


tuyến; phát triển kho học liệu số toàn ngành, ngân hàng câu hỏi trực tuyến dùng
chung, kho bài giảng e-learning kết nối với Hệ tri thức Việt số hóa”.
Chương trình giáo dục phổ thông tổng thể năm 2018. Ban hành kèm theo
Thông tư số 32/2018/TT-BGDĐT ngày 26 tháng 12 năm 2018 của Bộ trưởng
Bộ Giáo dục và Đào tạo.
Căn cứ vào các văn bản hướng dẫn thực hiện nhiệm vụ năm học 20222023 của các cấp....
Để giúp học sinh dễ dàng hơn trong việc lập trình giải quyết các bài tốn
phức tạp trong lập trình ở bộ mơn Tin học vừa đúng với nguyên tắc dạy học ở
trường phổ thông, vừa đúng theo tinh thần đổi mới phương pháp dạy học hiện
nay, nhằm hình thành cho học sinh tính tích cực, độc lập, sáng tạo, nâng cao
năng lực phát triển và giải quyết vấn đề, rèn luyện kỹ năng vận dụng kiến thức
vào thực tiễn, tác động đến tình cảm, đem lại niềm tin và thích thú học tập cho
HS. Hiện nay, khơng ít học sinh lười, học tập thụ động và có khơng ít phụ huynh
thiếu sự quan tâm đến việc học của con em mình. Vì vậy, việc chia một chương
phức tạp thành các chương trình con nhỏ hơn rồi ghép chúng lại để giải quyết
vấn đề phức tạp của chương trình lớn. để giải một số bài tập của giáo viên phải
được chú ý đúng mức.
7.1.3. Cơ sở thực tiễn:
Trong q trình giảng dạy, tơi nhận thấy Pascal là mơn học khó đối với
các em học sinh Khối 8,9. Vì có một số thuật tốn các em chưa được học ở bộ
mơn Tốn, thêm vào đó là các em chỉ sử dụng các câu lệnh bằng Tiếng Anh để
thể hiện khi lập trình. Do đó việc học tập của học sinh vẫn cịn mang tính mơ hồ,
như bị ép buộc, có nhiều học sinh rất sợ mơn Tin học 8, 9 vì tính chất khơ khan,
khó hiểu trong khi học.
Từ thực tế đó tơi khơng ngừng học hỏi để tìm ra biện pháp khắc phục.
Bằng kinh nghiệm khiêm tốn trong những năm bồi dưỡng HSG môn Tin Học
lớp 8, 9. Tơi đã đưa ra những tóm lược cơ bản nhất về sử dụng chương trình con
trong lập trình Pascal. Khi bồi dưỡng HSG mơn Tin Học lớp 8, 9 có hiệu quả là
nhằm giúp học sinh biết phân tích chương trình phức tạp thành các chương trình

con (modul) nhỏ hơn. Sau đó ghép các chương trình con lại để thành chương
trình lớn với cách này HS hiểu nhanh, nhớ kiến thức lâu hơn và cảm thấy thích
thú trong lập trình.
Thực trạng khi bồi dưỡng HSG tại đơn vị:
 Thuận lợi:


8

Tin học là mơn khoa học tự nhiên, nó là cơ sở, là nền tảng của nhiều lĩnh
vực khoa học. Nhu cầu học tập, nâng cao kiến thức và say mê khám phá khoa
học của học sinh ngày càng nâng cao. Vì vậy, mơn tin học ngày càng được
nhiều em học sinh quan tâm, lựa chọn là môn học ưa thích và cần thiết cho
mình.
Được sự quan tâm của Chi Bộ và của BGH nhà trường trong bồi dưỡng
HSG.
Giáo viên giảng dạy được đào tạo theo đúng chuyên ngành và được bồi
dưỡng chuyên đề hàng năm.
Phần lớn các em học sinh trong đội tuyển có ý thức tự học cao, ln tìm
tịi học hỏi những kiến thức mới trong học tập và rất hứng thú với môn Tin học.
Đa số các gia đình đã có điều kiện để đầu tư cho con em mình học tập tốt
hơn.
Được nhà trường tạo điều kiện thuận lợi về cơ sở vật chất, trang thiết bị
máy tính, máy chiếu, hệ thống mạng internet và các thiết bị dạy học khác.
* Những việc đã làm được: Tôi đã áp dụng công nghệ thông tin để soạn
giảng các bài lý thuyết và thực hành nhằm hướng dẫn học sinh dễ hiểu bài và
ghi nhớ kiến thức một cách sâu sắc trong lập trình Pascal ở bộ mơn Tin học 8, 9.
 Khó khăn:
Mơn Tin học 8, 9 vẫn là mơn học tự chọn nên vẫn cịn có học sinh chưa
thật sự đam mê mơn học, một số em cịn thụ động trong q trình tiếp thu kiến

thức.
Đa số các em cịn bị hổng kiến thức Tốn từ lớp dưới nên việc giải quyết
các bài toán trong lập trình cịn hạn chế, nên ảnh hưởng khơng ít đến việc học.
Vì trong lập trình Pascal u cầu địi hỏi HS phải có nền tảng tốn học tốt.
7.1.4. Đề xuất giải pháp:
7.1.4.1. Xây dựng KHGD ngay từ đầu năm học:
Ngay từ đầu năm học, GV phải lập kế hoạch, xây dựng chương trình bồi
dưỡng HSG.
GV cần đầu tư nghiên cứu các phương pháp dạy học khác nhau từ đó cải
thiện cách truyền thụ kiến thức tới HS. GV mỗi năm cập nhật những thuật toán
hay của đồng nghiệp để tích lũy cho việc giảng dạy.
GV cần hướng dẫn HS cách phân tích bài tốn trong lập trình một cách
cẩn thận và đưa ra những hướng giải quyết bài toán đó. GV yêu cầu HS nhớ


9

kiến thức cơ bản vừa học ở các tiết học lý thuyết. Cũng như cách tìm hiểu ý
nghĩa của mỗi lệnh trong các bài thực hành.
HS phải nắm được đầu vào (Input) và đầu ra (Output) của bài toán từ đó
đi xây dựng thuật tốn sau đó mới tiến hành lập trình trên ngơn ngữ lập trình
Pascal.
7.1.4.2. Một số giải pháp thực hiện:
a, Khái niệm và phân loại về chương trình con:
 Khái niệm:
Chương trình con là một dãy lệnh mơ tả một số thao tác nhất định và có
thể được thực hiện (được gọi) từ nhiều vị trí trong chương trình
 Phân loại:
Trong Pascal chương trình con được chia thành hai loại: Thủ tục
(Procedure) và Hàm (Function).

+ Hàm (Function)
Khái niệm: hàm là một chương trình con chứa các lệnh để thực hiện một
cơng việc nào đó. Mỗi hàm nhận vào giá trị thông qua các tham số và trả về một
giá trị.
Hàm được chia làm hai loại đó là hàm có sẵn (Built in function) và hàm
tự tạo (User defind function).
Mỗi hàm nhận vào giá trị của các tham số và trả về một giá trị
Một số hàm có sẵn (Built in function)
ST
T
1
2
3
4

Hàm
Round(x)
Trunc(x)
Int(x)
Frac(x)

5

Abs(x)

6

Sqr(x)

7


Sqrt(x)

8

Exp(x)

Kiểu của
tham số x
Thực
Thực
Thực
Thực
Thực/
nguyên
Thực/
nguyên
Thực/
nguyên
Thực/
nguyên

Cho ra kết
quả
Longint
Longint
Thực
Thực

Làm tròn x

Lấy phần nguyên của x
Lấy phần nguyên của x
Lấy phần thập phân của x

Thực/nguyên

Lấy giá trị tuyệt đối của x

Thực/nguyên

Bình phương của x

Thực

Căn bậc 2 của x

Thực

ex

Công dụng


10

9

Ln(x)

Thực/

nguyên

Thực

logex

Hàm tự tạo (User defind function).
Lý do phải tự tạo hàm và sử dụng hàm tự tạo
Hàm tự tạo giúp
 Dễ dàng triển khai một chương trình lớn mà mỗi phần trong đó là một
chương trình con do một người phụ trách.
 Dễ dàng hiểu được dàn ý của chương trình chính
 Dễ dàng sửa lỗi chương trình (nếu sai)
 Dễ dàng nâng cấp chương trình
 Sử dụng một chương trình con nhiều lần trong chương trình chính
Dạng tổng qt của chương trình con dạng hàm như sau:
FUNCTION tên_hàm(Khai báo các tham số hình thức): Kiểu giá trị trả về;
(* Khai báo các nhãn, các hằng, các định nghĩa kiểu, các biến cục bộ *)
(* Khai báo các chương trình con trực thuộc *)
Begin
(* Thân chương trình con *)
Exit([giá trị trả về]);
End;
Ví dụ: Hàm tính tổng của hai giá trị
Function tinhtong(x,y:longint):longint;
Var kq:longint; {biến cục bộ}
Begin
Kq := x + y;
Exit(kq);
End;

Lưu ý: Hàm có nhận vào giá trị qua các tham số và trả về một giá trị
Sử dụng hàm:
Vì hàm ln trả về một giá trị nên muốn sử dụng hàm ta phải viết tên của hàm đi
chung với một lệnh khác và truyền cho hàm cac tham số (nếu có)


11

Cách sử dụng hàm:
 Tên của hàm đi chung với lệnh gán “:=”
Ví dụ: kq:= tinhtong(a,b);
 Tên của hàm đi chung với lệnh write
Ví dụ: write(tinhtong(a,b));
 Tên của hàm đi chung với lệnh if
Ví du: IF tinhtong(a,b) > 0 Then
 Tên của hàm đi chung với lệnh For … To … Do …
Ví dụ:

For i:=1 to tinhtong(a,b) do

 Tên của hàm đi chung với lệnh Repeat … Until…
Ví dụ: Until tinhtong(a,b)=0;
 Tên của hàm đi chung với lệnh While … do …
Ví dụ: While tinhtong(a,b) <> 0 do
Lưu ý: tên của hàm không được đi chung với lệnh Read hoặc Readln
Ví dụ: khơng được phép ghi
Readln(tinhtong(a,b));  sai
Thủ tục (Procedure)
Thủ tục là một chương trình con chứa các lệnh để thực hiện một cơng việc
nào đó.

Mỗi thủ tục nhận vào giá trị qua các tham số và không trả về giá trị.
Giới thiệu một số thủ tục có sẵn (Built in procedure) trong Pascal.

ST
T
1

Inc(x)

x: nguyên

Tăng x lên một đơn vị

2

Dec(x)

Giảm x xuống một đơn vị

3

Delete(st,m,n)

x: nguyên
St:string(xâu)
M:nguyên
N:nguyên

4


Clrscr

Thủ tục

Kiểu của tham số

Công dụng

Xóa n ký tự bắt đầu từ vị trí thứ m
trong string(xâu) st
Xóa màn hình


12

Thủ tục tự tạo ( User Defined Procedure)
Lý do phải tạo thủ tục và sử dụng thủ tục tự tạo
Thủ tục tự tạo giúp:
 Dễ dàng triển khai một chương trình lớn mà mỗi phần trong đó là
một chương trình con (thủ tục). Mỗi chương trình con do một người
phụ trách.
 Dẽ dàng hiểu được dàn ý của chương trình lớn.
 Dễ dàng sửa lỗi chương trình (nếu sai)
 Dễ dàng nâng cấp chương trình
 Sử dụng một chương trình con nhiều lần trong chương trình
Dạng tổng quát của chương trình con dạng thủ tục như sau:
PROCEDURE tên_thủ_tục(khai báo các tham số hình thức);
(* Khai báo các nhãn, các hằng, các định nghĩa kiểu, các biến cục bộ *)
(* Khai báo các chương trình con trực thuộc *)
Begin

(* Thân chương trình con *)
End;
Ví dụ:
Procedure Inputdata(var x,y:longint; {x,y là tham số biến vì có từ khóa Var}
Begin
Write(‘ nhap x=’); readln(x);
Write(‘ nhap y=’); readln(y);
End;
Lưu ý: Mỗi thủ tục nhận vào giá trị qua các tham số và không trả về giá trị
Muốn sử dụng thủ tục: ta chỉ cần viết tên của thủ tục và truyền cho thủ tục các
tham số (nếu có).
Hàm và thủ tục khác nhau ở chỗ:
Hàm trả lại giá trị thơng qua tên hàm, do đó hàm có thể được gọi trong
biểu thức như toán hạng.


13

Thủ tục không trả lại giá trị thông qua tên của nó nên thủ tục khơng thể
viết trong biểu thức. Lời gọi thủ tục và dấu chấm phảy (;) tạo thành một câu
lệnh.
b, Khai báo chương trình con:
Trong Pascal chúng ta khai báo và định nghĩa chương trình con sau từ
khóa Var và trước từ khóa Begin của chương trình chính. Như vậy một chương
trình có sử dụng chương trình con có cấu trúc như sau:
PROGRAM Tên_chương_trình_chính;
(* Khai báo các đơn vị chuẩn, các nhãn, các hằng, các định nghĩa kiểu *)
VAR
(* Khai báo các biến và các chương trình con *)
BEGIN

(* Chương trình chính *)
END.
c, Biến tồn cục, biến cục bộ, tham số hình thức
 Biến tồn cục: là biến được khai báo ở đầu chương trình chính, giá trị của
biến toàn cục tồn tại trong suốt thời gian chương trình thi hành. Biến tồn
cục có tác động trong tồn bộ chương trình (cả chương trình chính và
chương trình con).
 Biến cục bộ: Là biến được khai báo ở đầu chương trình con. Giá trị của
các biến cục bộ tồn tại trong thời gian chương trình con thi hành và tự
động biến mất khi chương trình con kết thúc. Phạm vi tác động của biến
cục bộ chỉ trong chương trình con nơi nó được khai báo.
 Tham số hình thức: Là biến được khai báo trong cặp dấu ngoặc () sau
tên của chương trình con. Nếu chương trình con có khai báo các tham số
hình thức thì phải tn thủ các qui định sau:
- Các tham số trong cùng một nhóm phải phân cách nhau bằng dấu phảy
(,).
- Danh sách các tham số khác kiểu nhau phải phân cách bằng dấu chấm
phảy (;).
 Tham số hình thức gồm hai loại: Tham số biến (tham biến) và tham số
trị (tham trị).
 Tham số biến: Nếu trước nhóm các tham số có từ khóa VAR thì khi khai
báo chương trình con sử dụng tham số hình thức sẽ được truyền theo địa
chỉ của các tham số thực tương ứng vì thế giá trị của các tham số thực đó
có thể bị thay đổi.


14

Tham số biến được khai báo như sau: Var ts1, ts2,…, tsn: kiểu dữ liệu;
Trong đó: ts1, ts2,…, tsn là danh sách các tham số hình thức

 Tham số giá trị: Nếu trước nhóm các tham số khơng có từ khóa VAR thì
khi sử dụng tham số hình thức sẽ được truyền theo giá trị của các tham số
thực tương ứng vì thế giá trị của các tham số thực đó khơng bị thay đổi.
Tham số giá trị được khai báo như sau: ts1, ts2,…, tsn: kiểu dữ liệu;
Trong đó: ts1, ts2,…, tsn là danh sách các tham số hình thức
Ví dụ. Procedure Abc(Var a,b:integer; c,d:real);
Như vậy: Abc: là tên chương trình con (dạng thủ tục)
a, b: là các tham số biến
c, d: là các tham số trị
d, Truyền tham số cho chương trình con
Chương trình con có thể được khai báo mà khơng dùng tham số khi các
chương trình con tính tốn trực tiếp với các biến tồn cục hoặc chương trình con
khơng dùng đến bất cứ biến hay hằng nào.
Q trình hoạt động của máy tính khi bắt gặp một lời gọi hàm trong
chương trình như sau:
Cấp phát vùng nhớ cho các biến cục bộ và các tham số hình thức
Truyền giá trị của tham số thực cho các tham số hình thức tương ứng
Thực hiện các lệnh trong chương trình con
Sau khi thực hiện xong các lệnh trong thân chương trình con máy tính sẽ
giải phóng các vùng nhớ đã cấp phát cho các biến cục bộ và các tham số hình
thức.
Trong phần trên ta đã nói tham số hình thức gồm hai loại tham số biến và
tham số giá trị, do vậy khi truyền tham số cho chương trình con chúng ta cũng
có hai trường hợp sau:
 Truyền tham số giá trị (truyền trị)
Chúng ta xét một ví dụ đơn giản sau: Lập trình xây dựng một chương
trình con có nhiệm vụ hốn giá trị của hai số và dùng chương trình con này để
hốn vị giá trị của hai số nguyên a và b cho nhau.
PROGRAM swapNumbers;
USES crt;



15

VAR a,b:integer;
(* chuong trinh con hoan vi hai so *)
Procedure hoanvi(x,y:integer);
Var temp:integer;
Begin
temp := x;
x := y;
y := temp;
End;
(* Chuong trinh chinh *)
BEGIN
clrscr;
{gan gia tri cho hai bien}
a:=5; b:=10;
{g?i chuong trinh con}
hoanvi(a,b);
write('Ket qua la a=',a,' va b=',b);
readln;
END.
Quá trình hoạt động của chương trình này như sau:
Chương trình bao giờ cũng thực hiện bắt đầu từ chương trình chính.
Trước tiên máy tính sẽ cung cấp hai vùng nhớ mỗi vùng chiếm 2 bytes cho hai
biến a và b.
Tiếp theo là lệnh xóa màn hình
Hai lệnh gán giá trị tiếp theo sẽ gán giá trị 5 cho biến a và giá trị 10 cho
biến b.

Sau đó là lời gọi thủ tục “hoanvi” và truyền cho thủ tục này giá trị của hai
tham số thực a và b. Sau lời gọi thủ tục này máy tính sẽ cung cấp hai vùng nhớ
cho hai tham số hình thức x và y và gán cho chúng giá trị cua hai tham số thực
tương ứng là a và b (lúc này x = 5 và y=10)
Máy tính cung cấp vùng nhớ 2 bytes cho biến temp.
Thực hiện các lệnh trong thân chương trình con. Sau các lệnh này giá trị
của hai tham số hình thức x và y được hoán vị cho nhau (x = 10 và y = 5).
Kết thúc chương trình con (máy tính sẽ giải phóng các vùng nhớ đã cung
cấp cho các tham số hình thức x, y và biến cục bộ temp)


16

Trở về chương trình chính và thực hiện lệnh in ra màn hình giá trị của hai
biến a và b. Ta sẽ được kết quả là a bằng 5 và b vẫn bằng 10. Như vậy chương
trình con khơng làm thay đổi gì giá trị của hai biến a và b. Chương trình con chỉ
tác động trên các tham số hình thức tức là trên các bản sao của các tham số thực.
Kết luận: Phương pháp truyền tham số giá trị chỉ có ý nghĩa khi cần xử lý
dữ liệu của tham số thực mà không làm thay đổi nội dung của nó.
 Truyền tham số biến ( truyền biến)
Chúng ta làm lại ví dụ trên nhưng khi khai báo chương trình con ta
khai báo các tham số hình thức của nó là tham số biến (thêm từ khóa VAR
vào trước danh sách tham số hình thức).
PROGRAM swapNumbers;
USES crt;
VAR a,b:integer;
(* chuong trinh con hoan vi hai so *)
Procedure hoanvi(Var x,y:integer);
Var temp:integer;
Begin

temp := x;
x := y;
y := temp;
End;
(* Chuong trinh chinh *)
BEGIN
clrscr;
{gan gia tri cho hai bien}
a:=5; b:=10;
{goi chuong trinh con}
hoanvi(a,b);
write('Ket qua la a=',a,' va b=',b);
readln;
END.
Khi đó trương trình thực hiện như trên nhưng khi gọi thủ tục “hoavi” và
truyền tham số thì máy tính khơng truyền giá trị của tham số thực mà truyền
theo địa chỉ của tham số thực cho các tham số hình thức.
Chúng ta giả sử biến a là một vúng nhớ có địa chỉ là 100 cịn biến b có địa
chỉ là 101 chẳng hạn. Như vậy giá trị của hai tham số hình thức tương ứng sẽ là
x = 100 và y = 101 và do đó các lệnh trong thân chương trình con sẽ tác động
trực tiếp lên hai vùng nhớ có địa chỉ 100 và 101 làm thay đổi giá trị của hai vùng


17

nhớ này tức là giá trị của biến a và b sẽ được hoán đổi cho nhau (a bằng 10 và b
bằng 5).
Kết luận: Phương pháp truyền tham số biến có thể làm thay đổi được giá
trị của tham số thực do giá trị truyền cho tham số hình thức là địa chỉ của tham
số thực tương ứng.

7.2. Về khả năng áp dụng của sáng kiến:
Một số ví dụ sử dụng chương trình con
Bài 1: Viết chương trình nhập vào một số nguyên n. Hãy in ra thông báo
cho biết n có phải là số ngun tố hay khơng?
Ví dụ:
Nhập

In ra

N=9

9 không phải là số nguyên tố

N = 17

17 là số nguyên tố

N=0

0 không phải là số nguyên tố

Program Hamsnt;
uses crt;
Var n:longint; {bien toan cau - global var}
Function ktnt(x:longint):longint;
var i:longint; {bien dia phuong - local var}
Begin
if x < 2 then exit(0);
for i:=2 to trunc(sqrt(x)) do
if x mod i = 0 then exit(0);

exit(1);
end;
BEGIN
clrscr;
write('Nhap so nguyen n='); readln(n);
if ktnt(n)=1 then writeln(n,' la so nguyen to')


18

else
writeln(n,' khong la so nguyen to');
readln;
END.

Kết quả chạy chương trình trên
Test 1

Test 2

Test 3

Bài tập 2: Tìm nghiệm (Equation)
Xét một phương trình có dạng x + y = k, trong đó k là một số ngun
dương, phương trình này có thể có vơ số nghiệm. Tuy nhiên ở đây ta chỉ quan
tâm đến các nghiệm (x,y) mà trong đó các số x, y đều là các số nguyên tố;
Yêu cầu: Nhập vào một số nguyên dương k (với k < 5000). Hãy in ra tất cả các
bộ gồm 2 số nguyên tố x, y (với x < y) là nghiệm của phương trình trên (mỗi bộ
nằm một dịng.
Ví dụ:

Nhập

In ra

K=4

22

K= 16

3 13
5 11


19

Program Equation;
uses crt;
Var k,x,y:longint; {Bien toan cau - Global var}
Function ktnt(x:longint):longint;
var i:longint;
Begin
if x<2 then exit(0);
for i:=2 to trunc(sqrt(x)) do
if (x mod i = 0) then exit(0);
exit(1);
End;
BEGIN
clrscr;
write('Nhap so nguyen duong k='); readln(k);

for x:=2 to k div 2 do
begin
y:= k-x;
if (ktnt(x)=1) and (ktnt(y)=1) then
writeln(x,' ',y);
end;
readln;
END.

Kết quả chạy chương trình trên
Test 1


20

Test 2

Test 3

Bài tập 3:
Nhập vào một số n (5<=n<=10) và n phần tử của dãy a, 1tra dữ liệu khi nhập).
a)
b)
c)
d)

In ra các phần tử là số nguyên tố của dãy.
Tìm ước chung lớn nhất của tất cả các phần tử của dãy.
Tính biểu thức sau

Sắp xếp dãy tăng dần và in ra dãy sau khi sắp xếp.
Program baitap3;
uses crt;
var n:integer;
a:array[1..10] of integer; {n<=10 nen mang co toi da 10 phan tu}
{Thu tuc nhap du lieu va co kiem tra khi nhap}
Procedure nhap;
var i:integer;
begin
clrscr;
write('Nhap vao so phan tu n = ');



×