You are on page 1of 19

Sáng kiến kinh nghiệm tin học 11 GV: Phan Thị Hương

MỘT SỐ LỖI KHI SỬ DỤNG THỦ TỤC VÀ HÀM TRONG PASCAL

A. PHẦN MỞ ĐẦU
I. ĐẶT VẤN ĐỀ
 Hiện nay trong lí luận dạy học nói chung và lí luận dạy học môn tin
học nói riêng đề cập khá nhiều phương pháp và kỉ thuật dạy học: phương pháp
thảo luận, phương pháp đặt câu hỏi, phương pháp chia nhóm …
 Các cách thiết kế bài giảng hiện nay, nhằm mục đích áp dụng phương
pháp hiện đại để bồi dưỡng cho học sinh năng lực ham muốn học hỏi, tư duy
sáng tạo, năng lực tự giải quyết vấn đề, rèn luyện và phát triển năng lực tự học
sáng tạo, nghiên cứu, nghĩ và làm việc một cách tự chủ… Đồng thời để thích
ứng với sự phát triển tư duy của học sinh trong xã hội mới và tiếp cận với các
công nghệ tiến tiến trong xã hội, trên thế giới. Bên cạnh đó, trong các phương
pháp dạy học mới, vai trò của người thầy có sự thay đổi là: “hướng dẫn học
sinh biết tự minh tìm ra hướng giải quyết những vấn đề nãy sinh trong quá trình
học tập, biết cách làm việc độc lập, làm việc tập thể. Giáo viên là người định
hướng, là người cố vấn giúp học sinh tự đánh giá, cũng như giúp học sinh luôn
đi đúng con đường tìm hiểu, lĩnh hội kiến thức…”.
 Xuất phát từ thực tiễn giảng dạy tại trường THPT Huỳnh Thúc Kháng
tôi thấy rằng, để đạt hiệu quả cao trong mỗi phần học, tiết học cần có cách thiết
kế bài giảng cho phù hợp với nội dung kiến thức, phương pháp, phương tiện dạy
học phải phù hợp với từng đối tượng học sinh. Để qua mỗi phần học, tiết học học
sinh thích thú với kiến thức mới, qua đó hiểu được kiến thức đó học trên lớp,
đồng thời học sinh thấy được tầm quan trọng của vấn đề và việc ứng dụng của
kiến thức trước hết để đáp ứng những yêu cầu của môn học, sau đó là việc ứng
dụng của nó vào các công việc thực tiển trong đời sống. Trong thời đại thông tin
 1
MỘT SỐ LỖI KHI SỬ DỤNG THỦ TỤC VÀ HÀM TRONG PASCAL 
Sáng kiến kinh nghiệm tin học 11 GV: Phan Thị Hương

bùng nổ ngày nay, thì không chỉ ngành tin học mới sử dụng đến những kiến thức
về tin học mà tất cả đều sử dụng tin học. Nhưng hiện nay đội ngũ những người
lập trình ra được các phần mềm ứng dụng thì đang còn quá ít nói chung hầu hết
không mấy người mặn mà lắm với công việc lập trình bởi đối với công việc này
đòi hỏi phải có tu duy, và sự đam mê với công việc.
 Khi giảng dạy môn Tin học 11, khi dạy Bài 17 “CHƯƠNG TRÌNH
CON VÀ PHÂN LOẠI”, nội dung của bài này: giới thiệu cho học sinh nắm
được cơ bản trong việc khi sử dụng để giải quyết các vấn đề cần chia nhỏ và giải
quyết được bằng những đoạn chương trình ngắn gọn, đơn giản. Trong pascal
được tổ chức thành các thủ tục và hàm . Nhưng tôi nhận thấy hầu hết học sinh rất
bỡ ngỡ với các khái niệm hoàn toàn mới mẻ mang tính trừu tượng như: tại sao lại
dùng thủ tục? tại sao lại dùng hàm?. Danh sách tham số, tham số giá trị, tham số
biến, tham số hình thức, tham số thực sự.
 Điều làm tôi không khỏi băn khoăn đó là làm thế nào để học sinh
hiểu và nắm bắt được các khái niệm này một cách hiệu quả nhất, nhằm tránh
những sự hiểu lầm giữa các khái niệm tham biến và tham trị .
 Hiện nay hầu hết các ngôn ngữ bậc cao đều tổ chức hai cách truyền
tham số khi gọi một CTC( chương trình con), đó là truyền theo trị và truyền theo
biến. Việc truyền tham chiếu theo hai cách khác nhau nhiều khi gây ra những kết
quả khác nhau không mong muốn, điều này dẫn đến những lỗi logic rất khó phát
hiện. Dưới đây trình bày những sai lầm có thể xảy ra khi sử dụng chương trình
con là hàm hay thủ tục, hai cách truyền tham số và cách dùng chúng cho đúng để
đạt được múc đích đã đề ra của chương trình.
 Bài viết này không nghiêng về thuật toán của các bài toán khó mà chỉ
đưa ra các bài toán có thuật toán đơn giản nhất để học sinh không rơi vào việc
giải quyết thuật toán mà chú trọng đến vấn đề của bài viết “GIẢI QUYẾT MỘT

 2
MỘT SỐ LỖI KHI SỬ DỤNG THỦ TỤC VÀ HÀM TRONG PASCAL 
Sáng kiến kinh nghiệm tin học 11 GV: Phan Thị Hương

SỐ LỔI KHI SỬ DỤNG HÀM VÀ THỦ TỤC CÁC THAM SỐ CỦA HÀM VÀ
THỦ TỤC trong PASCAL ”.
 Do lần đầu tiên thực hiện làm sáng kiến kinh nghiệm, nên không
tránh khỏi những thiếu sót. Mong quý thầy cô góp ý để lần sau làm tốt hơn.

 3
MỘT SỐ LỖI KHI SỬ DỤNG THỦ TỤC VÀ HÀM TRONG PASCAL 
Sáng kiến kinh nghiệm tin học 11 GV: Phan Thị Hương

II. MỤC ĐÍCH CỦA ĐỀ TÀI


 Sử dụng các ví dụ cụ thể trước hết để học sinh nắm được khi nào
thì sử dụng hàm khi nào cần sử dụng thủ tục và lúc nào sử dùng tham số là tham
trị khi nào thì sử dụng tham biến. và sao cần thiết phải sử dụng tham trị, và sao
cần thiết phải sử dụng tham biến.
 Khi đứng trước một vấn đề nào đó trong trong việc giải quyết một
bài toán cần chia nhỏ nếu sử dụng hàm hay thủ tục thì có thể thực hiện được các
yêu cầu sau:
 Lựa chọn thủ tục hay hàm.
 Lựa chọn được tham số là tham trị hay tham biến.
III. PHƯƠNG PHÁP TRỂN KHAI:
- Sáng kiến kinh nghiệm đang trình bày của tôi dựa theo các luận cứ khoa học
hướng đối tượng, cụ thể: thuyết trình, quan sát, điều tra cơ bản, phân tích kết quả
thực nghiệm sư phạm, v…v… phù hợp với đối tượng học sinh vùng núi như
trường tôi đang trực tiếp giảng dạy.
Kết hợp thực tiễn giáo dục ở trường THPT HUỲNH THÚC KHÁNG .
Có tham khảo các tài liệu liên quan đến ngôn ngữ lập trình pascal.
Đưa ra một số ví dụ cụ thể như trong bài 17 - Tin học 11, để học sinh
thảo luận và đưa ra nhận xét đúng đắn về vấn đề này.
IV. ĐỐI TƯỢNG NGHIÊN CỨU:
 Học sinh khối 11tại Trường THPT Huỳnh Thúc Kháng – Huyện IaGrai.
 Sử dụng máy tính để cho các em quan sát kết quả qua phần mềm TP.
pascal.

 4
MỘT SỐ LỖI KHI SỬ DỤNG THỦ TỤC VÀ HÀM TRONG PASCAL 
Sáng kiến kinh nghiệm tin học 11 GV: Phan Thị Hương

B. PHẦN NỘI DUNG


I. CƠ SỞ LÍ LUẬN:
Khi học sinh học bài học Bài 17. “CHƯƠNG TRÌNH CON VÀ PHÂN
LOẠI”,. Học sinh có rất nhiều khó khăn, nhầm lẫn trong việc xác định thủ tục
hay hàm. Tham trị hay tham biến.
II. NỘI DUNG VÀ GIẢI PHÁP THỰC HIỆN:
1. Khái niệm chương trình con
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ể thực hiện được (được gọi) nhiều vị trí trong chương trình.
2. Những tình huống có thể xẩy ra khi sử dụng hàm hay thủ tục
Khi giảng dạy bài này tôi nhận thấy hầu hết học sinh rất khó nhận biết
được khi nào các em nên dùng thủ tục lúc nào nên dùng hàm thật vậy. Trong khi
dạy bài 17 tin học 11 ngoài ví dụ trong sách giáo khoa tôi có đưa thêm một số ví
dụ như
 Viết chương trình tính N! (N giai thừa).
 Tôi thấy hầu hết các em không biến nên sử dụng chương trình
con là Function hay Procedure?
Vậy thì câu hỏi đặt ra là dùng Procedure hay Function để tính N! ?
Câu trả lời là hoàn toàn có thể dùng Procedure hay Function để tính
N! đều được.
Ta có thể đặt tên là Function N! hay Procedure N! được không?
Câu trả lời là không được vì Pascal không cho phép dùng các dấu
chấm câu để đặt tên
 Ta có thể viết chương trình con sử dụng hàm để tính N! như sau
Function GT (N:integer): Integer;
Var i, T: integer;
Begin
 5
MỘT SỐ LỖI KHI SỬ DỤNG THỦ TỤC VÀ HÀM TRONG PASCAL 
Sáng kiến kinh nghiệm tin học 11 GV: Phan Thị Hương

If n= 0 then GT:=1;
Else
Begin
T:=1;
For i:= 1 to n do
T:=T*I;
GT:=T;
End;
End;

- Khi sử dụng Procedure để viết chương trình tính N! thì sử dụng như
thế nào?
Procedure tinhGT(N:integer; var GT:integer);
Var i:integer;
Begin
IF N=0 Then GT:=1
Else
Begin
GT:=1;
For i:= 1 to n do GT:=GT*i;
End;
End;
- Nhưng khi đưa ra câu hỏi là dùng chương trình con để giải bài toán
sau:
N!
CNK =
K !( N  K )!
 Việc dùng thủ tục hay hàm để giải bài toán trên là một vấn đề phải
nói , với học sinh hầu như các em không thể trả lời được câu hỏi này.
 Lúc này giáo viên phải hướng dẫn và giải thích cho các em rõ điều này
đó là. Ta thấy N! chỉ nhận lại 1 kết quả thuộc loại vô hướng nên hoàn toàn có thể
lập Function tính N!. Song điều đó không bắt buộc người dùng phải sử dụng
Function.
 Nhưng khi nào cần dùng FUNCTION? khi nào cần dùng là
PROCEDURE?

 6
MỘT SỐ LỖI KHI SỬ DỤNG THỦ TỤC VÀ HÀM TRONG PASCAL 
Sáng kiến kinh nghiệm tin học 11 GV: Phan Thị Hương

 Ta sử dụng FUNCTION khi:


 Kết quả của bài toán trả về 1 giá trị duy nhất (kiểu vô hướng,
kiểu string hoặc kiểu con trỏ)
 .Lời gọi CHƯƠNG TRÌNH CON cần nằm trong các biểu thức
tính toán.
 Ta sử dụng PROCEDURE Khi:
 Kết quả của bài toán không trả về giá trị nào hoặc trả về nhiều giá
trị hoặc trả về kiểu dữ liệu có cấu trúc (Array, Record, File).-
 Lời gọi CHƯƠNG TRÌNH CON không nằm trong các biểu thức

tính toán
 Vậy thì bài toán tính tổng không thể sử dụng Procedure vi
trong chương trình có sử dụng biểu thức tính toán.

Giống nhau:

 Hàm và thủ tục là các chương trình con có chức năng thực
hiện một công việc nào đó trong chương trình chính. Về cấu trúc chung thì
chúng gần giống nhau.

Khác nhau:

 Hàm sau khi thực hiện công việc sẽ trả về một giá trị cho tên hàm.
 Thủ tục khi thực hiện công việc không trả về một giá trị cho tên thủ
tục.

3. Những tình huống có thể xẩy ra trong khi sử dụng tham biến và tham
trị .
- Nếu một CTC có danh sách tham số thì các tham số phải được khai báo ở
phần đầu sau tên CTC, trong cặp dấu ngoặc tròn. Khai báo một tham số có nghĩa
là chỉ ra nó thuộc loại tham số nào ( tham số biến hay tham số trị ) và nó có kiểu
dữ liệu là gì?
Ví dụ 1: Procedure Delta(Var x: integer ; y: real);

 7
MỘT SỐ LỖI KHI SỬ DỤNG THỦ TỤC VÀ HÀM TRONG PASCAL 
Sáng kiến kinh nghiệm tin học 11 GV: Phan Thị Hương

Function Beta( a, b: real): real;


Danh sách tham số là x, y, a, b. Với x có kiểu dữ liệu Integer, tham số
y, a, b, có kiểu dữ liệu là số thực. Vậy trong danh sách tham số x, y, a, b đâu là
tham biến, đâu là tham trị? Bằng trực quan ta dễ dàng nhận thấy x là tham biến
vì x có từ khoá Var đứng trước; y, a, b là tham trị vì không có từ khoá Var đứng
trước.
Trong chương trình tính N! ở trên vấn đề đặt ra là khi sử dụng là hàm
hay thủ thì tham số là tham trị hay tham biến.
Nếu dùng chương trình tính là Function thì tham số truyền vào là
tham biến hay tham trị?
Nhận xét: ta thấy N! không có nhu cầu thay đổi N. vậy N là tham số giá trị do
đó không dùng từ khóa VAR.

Ví dụ 2: Chương trình tính tích của hai số nguyên a và b.

Sử dụng Hàm:

Function Tich(a, b: integer): integer;

Var Kq: Integer;

Begin

Kq := a*b;

Tich := Kq;

End;

Sử dụng Thủ tục:

Procedure tt_Tich(a, b: integer);

Var Kq: Integer;

 8
MỘT SỐ LỖI KHI SỬ DỤNG THỦ TỤC VÀ HÀM TRONG PASCAL 
Sáng kiến kinh nghiệm tin học 11 GV: Phan Thị Hương

Begin

Kq := a*b;

Write(‘Tích của , a, ‘ và ‘, b, ‘ là ‘, Kq);

End;

Nhận xét:

 Vì hàm hàm trả về giá trị sau khi thực hiện nên có lệnh gán kết
quả cho tên hàm Tich := Kq; và cũng chính vì vậy nên sau khai báo tên hàm có
khai báo thêm kiểu dũ liệu trả về Tich(a, b: integer): integer;
 Thủ tục không trả về kết quả nên có câu lệnh xuất kết quả ngay
trong thủ tụcWrite(‘Tích của , a, ‘ và ‘, b, ‘ là ‘, Kq);
 Trong chương trình chính, khi sử dụng hàm và thủ tục cũng cần
chú ý:
 Vì hàm trả về một giá trị thông qua tên gọi của nó nên ta có thể
viết hàm trong biểu thức, hay xuất ra trong câu lệnh write. Ví dụ:
+ tich(2, 5) * 5 –> cho kết quả 50
+ write(tich(2, 5)) –> in ra màn hình giá trị 10
 Thủ tục không trả về giá trị thông qua tên của nó. Do đó ta
không thể sử dụng như hàm trong ví dụ trên và chỉ có thể gọi thủ tục như một
câu lệnh độc lập. Ví dụ:

+ Khi viết tt_Tich(2, 5); –> sẽ in ra màn hình số 10

+ Khi viết tt_Tich(2, 5) * 5 –> Chương trình dịch báo lỗi !

Ví dụ3:
Progam Vidu3;
USES CRt;
Var a, b,c,d:integer;
Procedure Tinh (a,b:Integer; Var c, d:Integer );

 9
MỘT SỐ LỖI KHI SỬ DỤNG THỦ TỤC VÀ HÀM TRONG PASCAL 
Sáng kiến kinh nghiệm tin học 11 GV: Phan Thị Hương

Begin
c:= a – b ;
d:= a + b ;
a:= a*b ;
End;
Begin clrscr;
a:= 15; b:= 5; c:= 5; d:= 10;
Tinh(a,b,c,d);
Write(a,b,c,d);
Readln;
End.
Mới nhìn vào chương trình nhiều học sinh có thể chủ quan đưa ra các
giá trị 150, 5, 5, 25 tương ứng với các tham số a, b, c, d. Nhưng kết qủa nhận
được sau khi chạy chương trình lại là 15, 5, 10, 20 tương ứng với các tham số a,
b, c, d. Vậy tại sao lại có kết quả này?
Thật vậy, do a, b được truyền theo trị nên khi có lời gọi Tinh(a,b,c,d)
thì giá trị của a, b vẫn được giữ nguyên như ban đầu a = 15, b = 5 còn c, d được
truyền theo biến nên khi có lời gọi Tinh(a,b,c,d) thì các giá trị của c, d thay đổi c
= 10, d = 20
Nhận xét: Qua ví dụ3, sau khi chạy chương trình thì tham biến có kết quả
thay đổi còn tham trị kết quả không thay đổi, đó chính là sự khác nhau cơ
bản giữa tham biến và tham trị, ta xét ví dụ sau.

Program Vidu4;

Var x, y: integer;

Procedure HoanDoi(var a, b: integer): integer;

Var tam: integer;

begin

tam:=a; a:=b; b:=tam

 10
MỘT SỐ LỖI KHI SỬ DỤNG THỦ TỤC VÀ HÀM TRONG PASCAL 
Sáng kiến kinh nghiệm tin học 11 GV: Phan Thị Hương

end;

BEGIN

write(‘Nhap hai so nguyen: ‘); readln(x, y);

writeln(‘Hai so vua nhap la: ‘, x:5, y:5);

HoanDoi(x, y);

write(‘Hai so sau khi hoan doi la: ‘, x:5, y:5);

readln

END.

Nhận xét:

 Thủ tục HoanDoi khai báo hai tham số a và b là tham biến do đó


khi kết thúc thủ tục, a và b giữ lại giá trị đã bị thay đổi trong chương trình con.
 Trong chương trình trên nếu nhập vào x=5; y=10 thì trên màn hình
in ra 2 dòng như sau:
Hai so vua nhap la: 5 10
Hai so sau khi hoan doi la: 10 5
 Bây giờ sửa lại khai báo chương trình con thành:
Procedure HoanDoi(a, b: integer): integer;
Thì kết quả trên màn hình là:
Hai so vua nhap la: 5 10
Hai so sau khi hoan doi la: 5 10
 Vì lúc này a và b là hai tham trị nên việc thay đổi giá trị của chúng
trong chương trình con sẽ không có tác dụng, khi thoát khỏi chương trình con
chúng vẫn giữ nguyên giá trị ban đầu.
 Tiếp theo sửa lại khai báo chương trình con thành:

 11
MỘT SỐ LỖI KHI SỬ DỤNG THỦ TỤC VÀ HÀM TRONG PASCAL 
Sáng kiến kinh nghiệm tin học 11 GV: Phan Thị Hương

Procedure HoanDoi(var a: integer; b: integer): integer;


(a là tham biến, b là tham trị).
Thì kết quả trên màn hình là:
Hai so vua nhap la: 5 10
Hai so sau khi hoan doi la: 10 10
 Vì lúc này a là tham biến nên giữ lại giá trị đã thay đổi, b là
tham trị nên vẫn giữa nguyên giá trị ban đầu.
 Tùy theo bài toán ta có thể dùng tham trị hoặc tham biến,
thông thường tham số cung cấp dữ liệu vào cho chương trình con được khai báo
là tham trị, còn tham số nhận dữ liệu ra thì khai báo là tham biến.

Ví dụ 5: Viết chương trình tối giản phân số.


Program VD5;
Var tu,mau,d:word;
Function UCLN(Var a,b:Word):Word;
Begin
While a<>b Do
If a>b Then a:= a-b
Else b:= b-a;
UCLN:= a;
End;
Begin
Write('nhap tu so:'); Readln(tu);
Write('nhap mau so:'); Readln(Mau);
d:= UCLN(tu,mau); writeln('d =:',d);
If d>1 Then
Begin
Tu:= tu Div d;
mau:= mau Div d;
End;
Writeln('phan so duoc toi gian
la:',tu,'/',mau);
Readln;
End.

 12
MỘT SỐ LỖI KHI SỬ DỤNG THỦ TỤC VÀ HÀM TRONG PASCAL 
Sáng kiến kinh nghiệm tin học 11 GV: Phan Thị Hương

Chương trình trên sử dụng hàm UCLN(a, b) để tối giản một phân số khi
nhập từ bàn phím các giá trị tử số và mẫu số của nó.
 Nhìn vào chương trình ta không phải bàn đến tính đúng đắn của
công thức. Vì ta thấy chương trình trên trả về UCLN của hai số nguyên dương a
và b và dùng hàm này để tính d là UCLN của tử và mẫu. Phân số tối giản nhận
được bằng cách cùng chia tử và mẫu cho d. Tuy nhiên, khi chạy chương trình, ta
luôn nhận được kết quả không mong muốn là 1/1 cho mọi phân số. Vậy lỗi do
đâu?
 Lỗi logic này xẫy ra do hàm UCLN được tổ chức truyền theo
tham biến, nên sau lời gọi d:= UCLN(tu,mau) , ta được đồng thời các giá trị d,
tu, mau bằng nhau và bằng d. Để chương trình cho kết quả đúng ta phải sửa lại
việc khai báo các tham số trong hàm UCLN là truyền theo tham trị ( bỏ từ khoá
Var trước a, b).
Nhận xét: Việc tổ chức truyền theo trị hay truyền theo biến cho một tham số
là không thể tuỳ tiện vì nó có thể dẫn đến những kết quả sai với yêu cầu của
bài toán. Qua hai ví dụ trên đã minh hoạ các tình huống có thể xảy ra. Ví dụ
3 cho một kết quả sai khi truyền theo trị trong khi nếu sửa lại việc khai báo
các tham số trong thủ tục Hoandoi là truyền theo tham biến thì chương trình
sẽ cho kết quả đúng với yêu cầu của bài toán. Còn ở ví dụ 4 cho thấy một kết
quả sai khi truyền theo tham biến.
Ví dụ 6:
Program VD6;
Var a: Byte;
Function F(Var x:Byte):Byte;
Begin
x:=x+1; F:=x;
End;
Begin
a:=5; Writeln(F(a)+F(a));
Readln;

 13
MỘT SỐ LỖI KHI SỬ DỤNG THỦ TỤC VÀ HÀM TRONG PASCAL 
Sáng kiến kinh nghiệm tin học 11 GV: Phan Thị Hương

End.
 Chương trình đơn giản trên đưa ra màn hình giá trị F(a)+F(a)
với a = 5. Bằng suy luận thông thường, kết quả đúng phải là 12 vì tại a = 5, F (a)
cho giá trị 6. Tuy nhiên khi chạy chương trình ta sẽ nhận được kết quả 13. Có thể
sửa biểu thức F(a)+F(a) thành biểu thức 2*F(a) lúc này ta sẽ nhận được kết quả
là 12. Chương trình vẫn thực hiện đúng những lệnh mà ta viết, chỉ có điều ở đây
xuất hiện hiệu ứng phụ do hàm F được tổ chức truyền theo biến đối với tham
biến x của nó. Lệnh x:= x + 1 trong hàm F sẽ làm biến a tăng lên một đơn vị mỗi
khi gọi F(a) khi thực hịên biểu thức F(a)+F(a), giá trị F(a) được gọi hai lần. Tại
lần thứ nhất a = 5, do đó F(a) = 6 , tại lần gọi thứ hai lúc đó a = 6 do đó F(a) = 7
và ta nhận được kết quả 13.
 Trong khi đó biểu thức 2*F(a) chỉ gọi giá trị F(a) một lần vì thế
mà ta nhận được kết quả là 12. Nếu sửa lại việc truyền cho tham biến x của hàm
F là theo trị thì không còn sự khác nhau như vậy nữa.
Nhận xét: Như vậy, khi truyền một tham số cho CTC, nếu ta muốn bảo vệ
giá trị của tham số đó khỏi bị CTC “ vô tình phá” thì tham số đó phải được
dùng như là tham trị. Khi đó cho phép giá trị đầu vào tương ứng có thể là
hằng, biểu thức hoặc biến nguyên. Còn một tham số nếu muốn dùng để lấy
kết quả (những biến đổi) do chương trình con đem lại thì tham số đó phải là
tham biến và giá trị đầu vào tương ứng chỉ có thể là biến.

4. Một số bài tập áp dụng


Câu 1: Kiểm tra chương trình con sau có mắc lỗi không nếu có thì sửa lại?
Function Tong( n:integer);
Var i:integer;
Begin
For i:= 1 to n do Tong:=Tong+I;
End;
C©u2: Cho biÕt gi¸ trÞ t¬ng øng cho c¸c biÕn a, b, c, d
sau khi ch¹y thö ch¬ng tr×nh :
Progam Vidu1;
 14
MỘT SỐ LỖI KHI SỬ DỤNG THỦ TỤC VÀ HÀM TRONG PASCAL 
Sáng kiến kinh nghiệm tin học 11 GV: Phan Thị Hương

Procedure Tong_hieu(a, b: Integer; Var c, d: Integer );


Begin
c:= a – b ;
d:= a + b ;
a:= a*b ;
End;
Begin clrscr;
a:= 10; b:= 3; c:= 5; d:= 6;
Tong_hieu(a,b,c,d);
Write(a,b,c,d);
Readln;
End.
A. 30, 3, 7, 13 B. 10, 3, 7, 13 C. 10, 3, 5, 6 D. 30, 3,
5, 6
C©u 3: Sè nµo ®îc in ra mµn h×nh khi thùc hiÖn ch¬ng
tr×nh sau?
Program c3;
Var a,b:byte;
Procedure Thu1(Var a:byte);
Begin
a:= 2*a; b:=b+5;
End;
Begin
a:= 3; b:= 7; Thu1(b);
a:= a+b; Writeln(a);
Readln;
End.
A. 13 B. 19 C. 22 D. (Mét ®¸p
¸n kh¸c)
C©u 4: Sè nµo ®îc in ra mµn h×nh khi thùc hiÖn ch¬ng
tr×nh sau?
program C4;
Var x:integer;
Procedure Thaydoi( x:integer);
Begin
x:=1;
end;
Begin
x:=0; Thaydoi(x); Writeln(x:3);
readln
End.
A. 1 B. 0 C. 1 0 D. 0 1
C©u 5: Ch¬ng tr×nh sau cho kÕt qu¶ g×?
Program VD5;
Var a: Byte;

 15
MỘT SỐ LỖI KHI SỬ DỤNG THỦ TỤC VÀ HÀM TRONG PASCAL 
Sáng kiến kinh nghiệm tin học 11 GV: Phan Thị Hương

Function F(Var x:Byte):Byte;


Begin
x:=x+1; F:=x;
End;
Begin
a:=5; Writeln(F(a)+F(a));
Readln;
End.

Câu 6: Viết chương trình sử dụng chương trình con để tính tổng các số chẵn
từ a đến b.
Câu 7: Viết chương trình tìm giá trị nhỏ nhất và giá trị lớn nhất của một
dãy số.
Câu 8: Viết hàm chuyển một xâu ký tự thường sang ký tự hoa.
Câu 9: Viết hàm tính xn.
C- Kết luận
Bộ môn tin học lớp 11 là một phần khó của chương trình tin học
phổ thông và đồng thời nó là một bộ môn chưa được đưa vào trong chương trình
thi tốt nghiệp. Cho nên đối với học sinh sự đam mê học môn ngôn ngữ lập trình
cũng đang còn hạn chế. Như vậy đối với giáo viên giảng dạy bộ môn tin học
cũng gặp nhiều khó khăn, để làm thế nào có được một tiết học tốt đồng thời giúp
các em hứng thú với tiến học sau, hay trong môn học thì đó là một quá trình
chuẩn bị của giáo viên. Giáo viên cần có sự thay đổi trong phương pháp giảng
dạy cũng như cách thiết kế nội dung trong từng bài giảng để giúp các em tiếp
nhận được dễ dàng và thấy thích thú đối với từng tiết tin học. Đối với tôi là một
giáo viên con mới chưa có nhiều kinh nghiệm thì đây cũng là một điều khó trong
quá trình giảng dạy. Nhưng đây là một vài kinh nghiệm của tôi được rút ra trong
qua trình giảng dạy bộ môn tin học lớp 11.
Và đề tài đã thu được một số kết quả sau:
 Xây dựng được hệ thống câu hỏi, bài tập để giảng dạy chương VI –
phần CTC và lập trình có cấu trúc,

 16
MỘT SỐ LỖI KHI SỬ DỤNG THỦ TỤC VÀ HÀM TRONG PASCAL 
Sáng kiến kinh nghiệm tin học 11 GV: Phan Thị Hương

 Sử dụng các ví dụ này vào trong các đề kiểm tra: tìm đáp án đúng
hay sửa lỗi chương trình…
 Đề tài đã được ứng dụng để giảng dạy và đạt kết quả tốt trong năm
học vừa qua. Phần lớn học sinh đã phân biệt cách sử dụng
hàm hay thủ tuc và biết được bản chất của sự khác nhau
giữa tham biến và tham trị và cách sử dụng chúng.

D- Kiến Nghị
 Để tiết kiệm thời gian và các giờ học đạt kết quả
cao, giáo viên cần chuẩn bị sẵn các chương trình vào máy tính. Học sinh có thể
chạy chương trình và thử với các bộ test khác nhau (Tốt hơn là dạy bằng máy
chiếu vì hầu hết trường nào cũng đã có).
 Tuy nhiên đề tài sáng kiến kinh nghiệm chưa sâu
sắc và không thể tránh khỏi những sai sót. Rất mong được sự đóng góp ý kiến
của quý thây cô để sáng kiến hoàn chỉnh hơn.

Xin Chân Thành cảm ơn


Người viết:

Phan Thị Hương

 17
MỘT SỐ LỖI KHI SỬ DỤNG THỦ TỤC VÀ HÀM TRONG PASCAL 
Sáng kiến kinh nghiệm tin học 11 GV: Phan Thị Hương

TÀI LIỆU THAM KHẢO

1. Tự Học Cơ Sở Lập Trình- Nguyễn Quang Tuấn- Hồ Trung Duy –


Nhà Xuất Bản Thành Phố Hồ Chí Minh.
2. Lý Thuyết Và Bài Tập Pascal – Nhà Xuất Bản Thống Kê.
3. Bài tập Pascal – Nguyễn Duy Khang- Kiều văn Hưng.
4. Quách Tuấn Ngọc. Ngôn ngữ lập trình PASCAL (lý thuyết và bài
tập).

 18
MỘT SỐ LỖI KHI SỬ DỤNG THỦ TỤC VÀ HÀM TRONG PASCAL 
Sáng kiến kinh nghiệm tin học 11 GV: Phan Thị Hương

MỤC LỤC
A. PHẦN MỞ ĐẦU

I. ĐẶT VẤN ĐỀ..................................................................................................01


II. MỤC ĐÍCH CỦA ĐỀ TÀI..............................................................................04
III. PHƯƠNG PHÁP TRIỂN KHAI....................................................................04
IV. ĐỐI TƯỢNG NGHIÊN CỨU:......................................................................04
B. PHẦN NỘI DUNG
I. CƠ SỞ LÍ LUẬN:.............................................................................................05
II. NỘI DUNG VÀ GIẢI PHÁP THỰC HIỆN...................................................05

1. Khái niệm chương trình con............................................................................05

2.Những tình huống có thể xẩy ra trong khi sử dụng thủ tục và hàm..................05

3.Những tình huống có thể xẩy ra khi sử dụng tham biến và tham trị.................07
4. Một số bài tập áp dụng.....................................................................................14
C- Kết luận .........................................................................................................16
D- Kiến Nghị.......................................................................................................17
Tài liệu tham khảo...............................................................................................18

 19
MỘT SỐ LỖI KHI SỬ DỤNG THỦ TỤC VÀ HÀM TRONG PASCAL 

You might also like