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

Đề tài skkn một số phương pháp giúp học sinh tìm hiểu về chương trình con

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 (156.62 KB, 27 trang )

PHỤ LỤC
I. NỘI DUNG GIẢI PHÁP .................................................................Trang 2
A. Mục đích và sự cần thiết ....................................................................Trang 2
B. Phạm vi triển khai thực hiện...............................................................Trang 4
C. Nội dung.............................................................................................Trang 4
D. Danh sách đồng tác giả.......................................................................Trang 27
C. Nội dung............................................................................................Trang 4
1. Tình trạng giải pháp đã biết.................................................................Trang 3
2. Nội dung- giải pháp ............................................................................Trang 4
2.1. Mục đích cụ thể chi tiết giải pháp....................................................Trang 4
2.2. Mô tả chi tiết nội dung và giải pháp thực hiện.................................Trang 4
2.3. Lí thuyết...........................................................................................Trang 4
2.4. Bài tập .............................................................................................Trang 8
3. Khả năng áp dụng của giải pháp.........................................................Trang 26
4. Kết quả thu được.................................................................................Trang 26
5. Phạm vi ảnh hưởng của giải pháp......................................................Trang 27
6. Kiến nghị, đề xuất...............................................................................Trang 27

1


I. NỘI DUNG GIẢI PHÁP
A. Mục đích, sự cần thiết.
Ngày nay, trên thế giới đang diễn ra quá trình tin học hoá trên nhiều lĩnh vực
hoạt động của xã hội loài người và đem lại nhiều hiệu quả to lớn. Việc sử dụng máy
tính khơng cịn chỉ bó hẹp trong viện nghiên cứu, các trường đại học, các trung tâm
máy tính mà cịn mở rộng ra mọi cơ quan, tổ chức kinh tế,.. và trong các gia đình.
Song song với quá trình trên, việc giảng dạy Tin học trong các trường đại học, THPT
cũng được đẩy mạnh đi đôi với việc tăng cường trang bị máy vi tính. Đảng và Nhà
nước ta đã nhận thấy được tầm quan trọng của ngành Tin học và đã đưa môn học này
vào trường phổ thông như những môn học khác bắt đầu từ năm học 2006-2007.Chính


vì vậy, đối với mỗi giáo viên giảng dạy môn Tin học ở các trường phổ thông, việc tìm
hiểu, nghiên cứu các vấn đề về Tin học, cùng với việc tìm các biện pháp giảng dạy Tin
học trong nhà trường phổ thông là một công việc cần phải làm thường xuyên.
Đổi mới phương pháp dạy học là một vấn đề hết sức quan trọng, nhất là với bộ
môn Tin học hiện đang được đưa vào giảng dạy ở các trường phổ thông. Là một giáo
viên giảng dạy bộ mơn này, theo tơi khơng phải cứ tìm được nhiều bài tốn khó, bài
tốn hay để giảng dạy cho học sinh. Mà vấn đề đặt ra là chúng ta cần phải tích cực tìm
tịi, sáng tạo trong việc đưa ra những bài tốn đó để giúp cho học sinh có sự hứng thú,
tìm tịi sáng tạo trong q trình giài quyết học tập, từ đó biết vận dụng linh hoạt trong
các tình huống cụ thể ngồi thực tế.
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 kỹ thuật 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ự mình 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ể. Thầy 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 ln đ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 MÙN CHUNG 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 xã hội (nếu có). Trong thời đại thông tin bùng nổ ngày nay, việc lập được các
chương trình tự hoạt động cho máy tính, máy gia dụng là cần thiết. Và để làm được
việc đó cần có một q trình nghiên cứu, học tập về ngơn ngữ lập trình lâu dài, qua đó


2


người lập trình có thể chọn một ngơn ngữ lập trình thích hợp. Tuy nhiên mọi thứ đều
có điểm khởi đầu của nó, với học sinh việc học Pascal là khởi đầu cho việc tiếp cận
ngơn ngữ lập trình bậc cao, qua đó giúp các em hình dung được sự ra đời, cấu tạo, hoạt
động cũng như ích lợi của các chương trình hoạt động trong máy tính, các máy tự
động…Quá đó giúp các em có thêm một định hướng, một niềm đam mê về tin học, về
nghề nghiệp mà các em chọn sau này. Đồng thời Pascal là một ngơn ngữ có cấu trúc
thể hiện trên 3 yếu tố: Cấu trúc về mặt dữ liệu, cấu trúc về mặt lệnh, cấu trúc về mặt
chương trình.
Tuy nhiên, trong các mơn học ở bậc học THPT thì mơn Tin học lớp 11 được
các em học sinh cho là mơn học “khó nhất” trong các môn học. Từ việc các em chỉ là
người sử dụng các phần mềm sẵn có như: hệ điều hành, sọan thảo văn bản Word, bảng
tính Excel, các phần mềm học tập, nghe nhạc hay chơi game… thì các em lại là người
phải tìm ra lời giải cho các bài tốn, chỉ ra các bước cho máy tính thực hiện và viết
chương trình để tạo ra các sản phẩm phần mềm cho người khác sử dụng mặc dù mới
chỉ là bước khởi đầu, cơ bản.
Turbo Pascal là ngôn ngữ lập trình có cấu trúc, nó được dùng phổ biến ở nước
ta hiện nay trong công tác giảng dạy, lập trình tính tốn, đồ họa. Turbo Pascal được
dùng trong chương trình giảng dạy Tin học ở hầu hết các trường đại học, cao đẳng,
trung học phổ thơng và nó được mệnh danh là “ngôn ngữ học đường”.
Các em học sinh phải làm quen với nhiều kiểu dữ liệu mới mà trong các mơn
học khác khơng có, nhiều học sinh cịn bỡ ngỡ khơng hiểu vì sao cùng là kiểu số
nguyên mà lại chia làm nhiều kiểu như byte, integer, word, … mà trong toán học chỉ
gồm số nguyên âm và ngun dương. Hoặc các loại thơng tin như hình ảnh, âm
thanh… được xử lý như thế nào. Kiến thức mới và khó, học sinh sợ học mơn Tin học
11, kết quả giảng dạy thấp, nhất là ở các lớp học sinh yếu về mơn tự nhiên, ít có điều
kiện sử dụng máy tính. Người thầy, cơ phải làm gì để khắc phục được điều này?

Để khắc phục được điều đó, theo tơi chúng ta cần phải tìm tịi, nghiên cứu tìm
ra những bài tốn phù hợp, kích thích được sự độc lập, tích cực của học sinh trong học
tập. Học sinh có thể tự mình tìm ra được những ý tưởng sáng tạo vận dụng thiết thực
vào cuộc sống thực tế khi nhu cầu nảy sinh, khi đó các em có thể tự mình hồn thành
được ý tưởng đó.
Trên cơ sở những gì mà học sinh được học tập về mơn lập trình Pascal, để giúp
cho học sinh nhìn nhận vấn đề một cách tích cực hơn, sáng tạo hơn và nhất là giúp cho
các em có thể yêu thích nhiều hơn nữa ngơn ngữ lập trình Pascal.
Để thực hiện một phần mục đích của mơn học, mục đích của việc thực hiện giải
pháp trên, tôi đã chọn đề tài “Một số phương pháp giúp học sinh tìm hiểu về
chương trình con”, giúp các em nắm được kiểu dữ liệu có cấu trúc – phân loại – cách
viết chương trình con (Chương VI, bài 17, 18, tin học 11).
B. Phạm vi triển khai thực hiện:

3


Giáo viên tin học và học sinh lớp 11 trường THPT Mùn Chung.
C. Nội dung.
1. Tình trạng giải pháp đã biết
- Giải pháp đang được thực hiện tại đơn vị:
+ Ưu điểm: học sinh nắm được kiến thức cơ bản: cấu trúc, lợi ích cách viết
chương trình con, vận dụng chương trình con vào các bài tập, bài tốn tính toán ở mức
độ đơn giản.
+ Khuyết điểm: học sinh chưa phát huy được hết khả năng phân tích, khả năng
tư duy lập trình, khả năng ứng dụng về bài tốn có sử dụng chương trình con, chưa
giải được các bài toán nâng cao.
- Giải pháp mới được thực hiện tại đơn vị:
+ Đưa ra vấn đề bài Bài 17- 18, tin học 11, đưa ra một số ví dụ minh họa cụ thể
để chứng minh những lợi ích của chương trình con, những ví dụ vận dụng cụ thể vào

viết chương trình con : hàm và thủ tục. Và hình thành ở học sinh kỹ năng phân tích, xử
lý, vận dụng các vấn đề liên quan đến bài tốn có sử dụng chương trình con, ứng dụng
của chương trình con trong quá trình lập trình các chương trình đơn giản, nâng cao sau
này.
2. Nội dung giải pháp
2.1. Mục đích cụ thể chi tiết của giải pháp.
- Khi học sinh học bài 17 " Phân loại và cấu trúc chương trình con" và bài
18 '' Một số ví dụ cách viết chương trình con", học sinh đã có rất nhiều khó khăn,
chưa xác định được thế nào là chương trình con, chương trình con dùng để làm gì?
trong khi trước đó chỉ học viết chương trình. Mà một bài tốn khơng cần sử dụng
chương trình con vẫn viết được chương trình giải bình thường => mà tại sao lại phải
viết trên chương trình con?
- Ở bài Bài 17 và bài 18 giáo viên có thể minh chứng những điều thắc mắc
mơ hồ, minh chứng lợi ích, cách viết và sử dụng chương trình con qua các ví dụ bài
tốn cụ thể.
2.2. Mô tả chi tiết nội dung và giải pháp thực hiện .
- Nêu ra cách lập trình giải quyết một số bài tốn viết chương trình (khơng sử
dụng chương trình con) so sánh với chương trình (viết dưới dạng chương trình con) =>
để học sinh hiểu rõ hơn về lợi ích, cấu trúc, sử dụng chương trình con trong Pascal. =>
từ đó có thể tự mình giải quyết một số bài tốn tương tự .
2.3. LÍ THUYẾT (Tóm tắt lí thuyết)
- Kiến thức: giúp học sinh tìm hiểu về "Chương trình con" được bắt đầu từ
những ví dụ cụ thể => học sinh làm quen về " khái niệm và cấu trúc khai báo

4


chương trình con". Từ những ví dụ => chỉ ra cáclợi ích của chương trình con=> từ đó
giúp học sinh làm quen về phần kiến thức => "Cách viết và sử dụng chương trình
con. "

2.3.1 Khái niệm và cấu trúc khai báo chương trình con
1. Khái niệm chương trình con:
- Ý tưởng: từ bài toán ban đầu (bài toán lớn) ta chia bài toán ban đầu thành bài
toán nhỏ, mỗi bài tốn nhỏ có thể chia tiếp thành các bài tốn nhỏ hơn, chia đến khi
bài tốn đơn giản thì ta dừng. Vậy mỗi bài tốn nhỏ đó ta viết dưới dạng một chương
trình con.
- Mơ tả ý tưởng bằng sơ đồ:
Bài toán ban đầu

Bài toán 2

Bài toán 1

BT1.1

BT1.2

BT1.n

BT2.1

BT2.2

Bài toán n

BT2.n

BTn.1

BTn.2


BTn.n

- Mỗi bài toán con chúng ta xây dựng dưới dạng chương trình con.
Ví dụ: Bài tốn QUẢN LÍ HỌC SINH (bài toán ban đầu)
- Chia bài toán trên thành 5 bài toán nhỏ
- Mỗi bài toán nhỏ xây dựng một chương trình con
BT: QUẢN LÍ HỌC SINH

Nhập
TTHS
CTC

Sửa
TTHS
CTC

Xóa
TTHS
CTC

Tìm kiếm
TTHS
CTC

Bổ Sung
TTHS
CTC

- Từ đó: => 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.

5


2. Phân loại và cấu trúc chương trình con
2.1. Phân loại
- Hàm (function): là chương trình con thực hiện một số thao tác nào đó và trả
về một giá trị qua tên của nó. VD: length(s), SQR(x)…
-Thủ tục (procedure): là chương trình con thực hiện các tháo tác nhất định
nhưng khơng trả về giá trị qua tên của nó. VD: Write , readln..
2.2 Cấu trúc chương trình con
a. Cấu trúc của thủ tục:
Procedure <tên_thủ_tục>[(danh sách tham số)];
[]
Begin
[<dãy các lệnh>];

End;
PROGRAM  Tên_chương_trình;
USES CRT;
CONST  ............;
VAR       ............;
 PROCEDURE  THUTUC[(Các tham số)];
[Khai báo Const, Var]
BEGIN
            ..............
END;
BEGIN {Chương trình chính}
            ...................

            THUTUC[(...)];
END.
b. Cấu trúc của hàm:
- Hàm có cấu trúc tương tự như thủ tục, tuy nhiên có khác nhau phần đầu.
- Khai báo phần đầu một hàm như sau:
Function <tên_hàm>[(danh sách tham số)]:<kiểu dữ liệu>;
- Kiểu dữ liệu là kiểu dữ liệu của giá trị mà hàm trả vể và chỉ có thể là các kiểu:
integer, real, char, boolean, string.

6


- Khác với thủ tục, trong thân hàm cần có lệnh gán giá trị cho tên hàm:
<tên hàm> := <biểu thức>;
 Function  <Tên_Hàm>[(Các tham số)]:<Kiểu dữ liệu>;
[Khai báo Const, Var]
BEGIN
             ..............
           <Tên_Hàm>:=<biểu thức>;

END;
PROGRAM  Tên_chương_trình;
USES CRT;
CONST  ............;
VAR       ............;
  FUNCTION  HAM[(Các tham số)]:<Kiểu dữ liệu>;
[Khai báo Const, Var]
BEGIN
            ..............
            HAM:=<biểu thức>;

END;
 BEGIN {Chương trình chính}
           A:= HAM[(...)];
            ...................
END.
=> Chính xác hóa khái niệm thủ tục và hàm.
Thủ tục

Khơng có tham chiếu

Chương trình con

Tham trị
Hàm

Có tham chiếu
Tham biến

- Bảng so sánh hàm và thủ tục.
Hàm
- Kết quả của bài toán trả về 1 giá trị duy

Thủ tục
- Kết quả của bài tốn khơng trả về giá trị

7


nhất (kiểu vô hướng, kiểu string).
- Lời gọi CTC cần nằm trong các biểu

thức tính tốn.

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, File).

VD: hàm đã học

- Lời gọi CTC không nằm trong các biểu
thức tính tốn.

- SQRT(25)=5

VD các thủ tục đã học

- SQR (3) = 9

- Readln(a,b,c): nhập ba số a,b,c từ bàn
phím

- Length('chao ban') =7


- Write(' hello! ban'): in dòng chữ: 'hello!
ban' ra màn hình
- Delete ('chao',1,2) = 'ao'


c. Một số khái niệm về tham số hình thức, tham biến, tham trị:
- Ví dụ:
Var b: Integer ; h Char;

Procedure inso(a:integer; ch:char);
Begin
    {các lệnh của CTC}
End;
{gọi}
BEGIN
inso(20,'h'); {lời gọi }
b:= 13; ch:='a';
inso(b,h); {lời gọi }
END.
Từ ví dụ đưa ra khái niệm: tham số hình thức, tham biến, tham trị.
– Tham số hình thức (đối) là các tham số sau tên hàm và thủ tục trong khai báo
VD: Procedure inso(a:integer; ch:char); {a,ch là tham số hình thức}
– Tham biến: là các tham số được khai báo sau từ khóa var. Các tham số thực phải là
các biến chứ khơng được là giá trị. Tham biến có thể được thay đổi trong CTC và sau
khi ra khỏi CTC nó vẫn giữ giá trị thay đổi đó.
VD: inso(b,h); {b,h là tham số biến }
– Tham trị: là các tham số được khai báo mà khơng đứng sau từ khóa var. Các tham
số thực có thể là các giá trị, hằng, biến. Tham trị có thể thay đổi trong ctc nhưng sau
khi kết thúc ctc giá trị của nó trở về như ban đầu. VD: Inso(20,'h')
2.4. BÀI TẬP
2.4.1. Cách viết và sử dụng thủ tục.
a. Minh chứng xóa bỏ sự hạn chế câu lệnh lặp đi lặp lại

8


Bài tập 1: Viết chương trình in ra màn hình 4 hình chữ nhật sau:
' +++++++++++++++'
'+


+'

' +++++++++++++++'
GV có thể gọi HS lên bảng viết chương trình => từ đó GV yêu cầu HS nhận xét :
+ Chương trình dài
+ Câu lệnh giống nhau lặp đi lặp lại nhiều lần.
GV khắc phục hạn chế của chương trình ta sử dụng chương trình con;
GV hỏi bài này sử dụng chương trình con thủ tục hay hàm? vì sao?
+ HS => Sử dụng thủ tục. Vì đầu ra là một hình chữ nhật không phải một giá trị nên sử
dụng thủ tục. => Viết chương trình(sử dụng thủ tục).
Khơng sử dụng chương trình con

Sử dụng chương trình con (thủ tục)

program bai1_a;

program bai1_b;

uses crt;

uses crt;

begin

Procedure VEHCN;

clrscr;

begin


writeln('++++++++++++++');

writeln('++++++++++++++');

writeln('+

writeln('+

+');

+');

Writeln('++++++++++++++');

Writeln('++++++++++++++');

Writeln;

end;

writeln('++++++++++++++');

BEGIN

writeln('+

clrscr;

+');


Writeln('++++++++++++++');

VEHCN;

Writeln;

writeln;

writeln('++++++++++++++');

VEHCN;

writeln('+

writeln;

+');

Writeln('++++++++++++++');

VEHCN;

Writeln;

writeln;

writeln('++++++++++++++');

VEHCN;


writeln('+

readln;

+');

Writeln('++++++++++++++');

END.

9


readln;
End.
=> Hạn chế:
Bài 1_a: Chương trình (khơng sử dụng chương trình con) câu lệnh lặp đi lặp lại nhiều
lần.
=> Khắc phục:
Bài 1_b: sử dụng chương trình con (dạng thủ tục) việc lặp đi lại lặp lại các câu lệnh
tương tự nhau khơng xảy ra.
Bài tập 2: Viết chương trình in ra 2 hình chữ nhật theo kích thước bất kì:
- GV hướng dẫn cũng tương tự bài 1 nhưng yêu cầu nhập kích thước bất kì:
VD: Hình thứ nhất có kích thước là: chiều dài = 5, chiều rộng =10
Hình thứ hai có kích thước là: chiều dài = 20, chiều rộng =10.
- GV yêu cầu HS: Viết hai đoạn chương trình để vẽ hai hình
chữ nhật có kích thước khác nhau.
- GV có cách nào mà khơng phải viết hai đoạn lệnh tương tự
nhau không?

- HS: Sử dụng chương trình con chỉ cần viết 1 đoạn lệnh vẽ
hình chữ nhật thứ nhất, cịn hình thứ hai bằng cách gọi tên
CTC và truyền tham số vào là được.
- Minh chứng qua chương trình dưới đây:
Khơng sử dụng chương trình con

Sử dụng chương trình con (thủ tục)

PROGRAM bai2_a;

PROGRAM bai2_b;

USES CRT;

USES CRT;

VAR chdai, chrong: BYTE;

VAR A,B: BYTE;

i,j:integer;
BEGIN

PROCEDURE VEHCN(Chdai,
chrong:integer);

chdai:=5; chrong:=10;

var i,j:integer;


writeln;

begin

for i:= 1 to chdai do Write('*') ; {ve
canh tren}

writeln;

writeln;
for j:=1 to chrong-2 do
ben}

{ve canh 2

for i:= 1 to chdai do Write('*') ; {ve
canh tren}
writeln;
for j:=1 to chrong-2 do

{ve canh 2

10


begin

ben}

Write('*');


begin

for i:=1 to chdai-2 do write(' ');
{tru dau cach}

Write('*');
for i:=1 to chdai-2 do write(' ');
{tru dau cach}

writeln('*');

writeln('*');

end;
for i:=1 to chdai do write('*');
canh duoi}

{ve

end;

writeln;

for i:=1 to chdai do write('*');
canh duoi}

writeln;

writeln;


chdai:=20; chrong:=10;

end;

for i:= 1 to chdai do Write('*') ; {ve
canh tren}

BEGIN

writeln;

writeln;

for j:=1 to chrong-2 do {ve canh 2
ben}

VEHCN(5,10);

begin

{ve

clrscr;

a:=20; b:=10;
VEHCN(A,B);

Write('*');


readln;

for i:=1 to chdai-2 do write(' ');
{tru dau cach}

END.

writeln('*');
end;
for i:=1 to chdai do write('*');
canh duoi}

{ve

writeln;
readln;
END.
=> Hạn chế: bai2_a: câu lệnh tương tự nhau lặp đi lặp lại nhiều lần
=> Khắc phục: qua bai2_b: trên chúng ta nhận thấy sử dụng chương trình con tránh
đượcviệc lặp đi lặp lại những câu lệnh tương tự nhau.
Bài tập 3: Xét bài tốn : “Viết chương trình cho máy tính chu vi, diện tích của ba
hình chữ nhật theo hai kích thước của mỗi hình. Trong đó:
+ Hình thứ nhất có hai kích thước là a1, a2

11


+ Hình thứ hai có hai kích thước là b1, b2
+ Hình thứ ba có hai kích thước là a1+b1 và a2*b2”.
Khơng sử dụng chương trình con

Var a1, b1, a2, b2, c1, c2, c3, d1, d2, d3,
m1, m2, m3 : Real;
Begin
Writeln('Nhap hai canh cua hinh chu
nhat thu nhat:');
Write('a1 = '); Readln(a1);

Sử dụng chương trình con
Var a1, b1, a2, b2: Real;
Procedure Nhap(Var x, y: Real; i: Byte);
Begin
Writeln('Nhap hai kich thuoc cua hinh
chu nhat thu ',i,':');
Repeat

Write('b1 = '); Readln(b1);
Writeln('Nhap hai canh cua hinh chu
nhat thu hai:');

Write('Canh thu nhat: '); Readln(x);
Write('Canh thu hai : '); Readln(y);

Write('a2 = '); Readln(a2);

If (x <= 0) Or (y <= 0) Then
Writeln('Nhap lai!');

Write('b2 = '); Readln(b2);

Until (x > 0) And (y > 0);


c1 := 2 * (a1 + b1);
c2 := 2 * (a2 + b2);
c3 := 2 * ((a1 + b1) + (a2 * b2));
d1 := a1 * b1;
d2 := a2 * b2;
d3 := (a1 + b1) * (a2 * b2);
m1 := sqrt(a1 * a1 + b1 * b1);
m2 := sqrt(a2 * a2 + b2 * b2);
m3 := sqrt(sqr(a1 + b1) + sqr(a2 * b2));
Writeln('Hinh chu nhat thu nhat:');
Writeln('Chu vi bang : ',c1:0:2);
Writeln('Dien tich bang : ',d1:0:2);
Writeln('Duong cheo bang:
',m1:0:2);
Writeln('Hinh chu nhat thu hai:');

End;
Procedure Tinh(a, b: Real; k: Byte);
Begin
Writeln('Hinh chu nhat thu ',k,':');
Writeln('Chu vi bang : ',2 * (a +
b):0:2);
Writeln('Dien tich bang : ',a *
b:0:2);
Writeln('Duong cheo bang: ',sqrt(a
* a + b * b):0:2);
End;
Begin
Nhap(a1, b1, 1); Nhap(a2, b2, 2);

Tinh(a1, b1, 1);
Tinh(a2, b2, 2);

Writeln('Chu vi bang : ',c2:0:2);

Tinh(a1 + b1, a2 * b2, 3);

Writeln('Dien tich bang : ',d2:0:2);

Readln

Writeln('Duong cheo bang:

End.

12


',m2:0:2);
Writeln('Hinh chu nhat thu ba:');
Writeln('Chu vi bang : ',c3:0:2);
Writeln('Dien tich bang : ',d3:0:2);
Writeln('Duong cheo bang:
',m3:0:2);
Readln
End.
=> Hạn chế: Chương trình trên để thực hiện được yêu cầu của đề bài, ta phải
viết đi viết lại ba dịng liên tiếp tính chu vi, diện tích và đường chéo của từng hình chữ
nhật. Giả sử nếu phải tính đến n hình chữ nhật thì vấn đề quả thực là hết sức phức tạp.
Trong bài tốn trên ta cịn chưa có phần kiểm tra điều kiện nhập vào của mỗi hình.

Nếu có thêm điều kiện này, chắc chắn chương trình cịn dài nữa.
Vấn đề đặt ra là: làm thế nào có thể xóa bỏ được sự hạn chế này?
=> Khắc phục: Ở đây, ta có thể hướng dẫn cho học sinh sử dụng chương trình
con để khắc phục sự hạn chế đó. Thay vì phải viết nhiều lần lệnh nhập, tính đi tính lại
cho từng hình ta có thể viết 2 thủ tục:
1. Thủ tục nhập hai cạnh của hình chữ nhật.
2. Thủ tục Tính ba giá trị cho mỗi hình.
b. Một số ví dụ củng cố cách viết và gọi thủ tục
Bài tập 4
Xuất phát, ta cho học sinh thực hiện bài toán sau: “Viết chương trình đổi

một xâu ký tự thành chữ HOA”.
Var x:String;
Procedure Doi(x: String);
Var d, i:Integer;
Begin
d := 0;
Write('Doi sang chu hoa: ');
For I := 1 to Length(x) Do
Write(Upcase(x[i]));
End;

13


Begin
Write('Nhap xau: '); Readln(x);
Doi(x);
Readln
End.

- Ngược lại, ta đặt câu hỏi: Nếu ta cần đổi một xâu ký tự thành xâu chữ thường
thì làm thế nào?
-Học sinh đã biết trong bảng mã ASCII mỗi ký tự viết hoa A, B, C, ... , Z được
mã hóa bằng các con số từ 65 đến 90. Còn các ký tự thường a, b, c, ... z được mã

hóa bằng các con số từ 97 đến 122. Ta thấy rõ mỗi ký tự viết hoa và viết thường
của một chữ cách nhau 32 đơn vị. Chính vì vậy, ta có thể sử dụng quy luật này
để đổi một xâu ký tự viết HOA thành xâu ký tự viết thường bằng cách dùng một
vòng For chạy từ đầu xâu đến cuối xâu và đổi từng ký tự thành mã ASCII, nếu
gặp ký tự viết hoa, ta cộng mã ASCII của nó thêm 32 đơn vị. Chương trình như
sau:
Var x: String;
Procedure Doi(x: String);
Var d, i:Integer;
Begin
d := 0;
Write('Doi sang chu thuong: ');
For i := 1 to Length(x) Do Begin
d := ord(x[i]);
If (d >= 65) And (d <= 90) Then d := d + 32;
Write(chr(d));
End;
End;
Begin
Write('Nhap xau: '); Readln(x);
Doi(x);
Readln
End.

14



Bài tập 6.
            Viết chương trình cho phép nhập hai số vào hai biến, thực hiện đổi giá trị
của hai biến cho nhau. Yêu cầu dùng chương trình con để thực hiện chức năng
đổi giá trị.
- Hướng dẫn: Thực hiện đổi vị trí giá trị của hai biến cho nhau:

a

b
tam

- Xây dựng một thủ tục đổi giá trị của hai biến x,y cho nhau sử dụng một biến tạm:
Tam:=x; x:=y; y:=tam
- Mã chương trình:
Program CTC_1;
uses crt;
var a,b: real;
{----CTC doi gia tri----}
Procedure Hoan_doi(var x,y:real);
Var tam:real;
Begin
tam:=x; x:=y; y:=tam;
End;
{-----Ket thuc CTC-----}
Begin
clrscr;
write('Nhap so a: ');readln(a);
write('Nhap so b: ');readln(b);

Hoan_doi(a,b);
write('Sau khi doi a =',a:3:1);
write('Sau khi doi b =',b:3:1);
readln
End.

15


 
=> Nhận xét:
- Nếu bỏ từ var ở khai báo var x,y:real thì chương trình vẫn khơng báo lỗi
nhưng chức năng đổi giá trị của hai biến không thực hiện được.
c. Đơn giản hóa bài tốn
Bài tập 7: Viết chương trình nhập vào số nguyên dương N (N≤ 300) và dãy A
gồm N số nguyên. Sắp xếp dãy số vừa nhập thành dãy khơng giảm và xuất dãy
được sắp xếp ra ngồi màn hình.

Bài tốn xử lí mảng

Nhập mảng

Sắp xếp

Xuất mảng

Hốn đổi

Viết dạng CTC
Phân tích:

-

Thiết kế một chương trình con phục vụ việc nhập dãy số.

-

Thiết kế một chương trình con phục vụ việc xuất dãy số ra màn hình.

-

Thiết kế một chương trình con dùng để thực hiện cơng việc sắp xếp.

-

Các chương trình con trên khơng cần trả về một giá trị cụ thể nào nên
dùng thủ tục.

-

Đối với thủ tục nhập mảng cần phải dữ lại các thay đổi bên trong nên sử
dụng tham số biến.

-

Đối với thủ tục sắp xếp cần giữ lại các giá trị sau khi sắp xếp nên khai
báo mảng là tham số biến, số lượng phần tử khơng thay đổi nên dùng
tham trị.

Chương trình:
Program sapxepdayso;

Uses CRT;
Const Nmax = 300;
Type ArrInt = Array[1..300] of integer;
Var

16


A: ArrInt;
N: integer;
Procedure Nhap_Mang(var A: ArrInt; var M: integer);
Var i: integer;
Begin
Write(‘Nhap so phan tu cua day so:’); Readln(M);
For i:=1 to M do
Begin
Write(‘A[‘,i,’]=’); Readln(A[i]);
End;
End;
Procedure Hoan_doi(var a,b:integer);
Var tam: integer;
Begin
tam:= a;
a := b;
b:= tam;
End;
Procedure Sap_xep(var A: ArrInt; M: integer);
Var i, j: integer;
Begin
For j:=M downto 2 do

For i:=1 to j-1 do
If A[i] > A[i+1] then Hoan_doi(A[i],A[i+1]);
End;
Procedure Xuat_mang(A: ArrInt; M: integer);
Var i: integer;
Begin
For i:=1 to M do
Write(A[i]: 5);
End;

17


BEGIN
Clrscr;
Nhap_mang(A,n);
Sap_xep(A,n);
Xuat_mang(A,n)
Readln
END.
Bài tập tương tự:
1. Viết chương trình nhập vào một dãy số nguyên dương B gồm M phần tử
(M≤300). Tìm giá trị nhỏ nhất của dãy.
2. Viết chương trình nhập vào số nguyên dương N (N≤ 300) và dãy A gồm N số
nguyên. Sắp xếp dãy số vừa nhập thành tăng và xuất dãy được sắp xếp ra ngồi
màn hình.
Bài tập 8: Viết chương trình đọc dữ liệu từ tệp A.IN đưa vào mảng A: dòng đầu
tiên trong tệp A.IN chứa số phần tử của mảng A, dòng thứ 2 chứa các số nguyên
là các giá trị của các phần tử trong mảng mỗi số cách nhau bởi một dấu cách, sau
đó tạo ra mảng B trong đó B[i] là tổng i phần tử đầu tiên trong mảng A. Ghi các

giá trị của mảng B ra tệp B.OUT.
Phân tích:
-

Thiết kế một thủ tục phục vụ đọc dữ liệu từ tệp.

-

Thiết kế một thủ tính các giá trị của dãy B

-

Thiết kế một thủ tục ghi các giá trị của dãy B ra tệp

Chương trình:
Program TEP_DL;
const input='A.IN';
output='B.OUT';
max=300;
var A, B:array[1..max] of integer;
i, n: integer;
procedure Doc_DL;
var f:text;
i: integer;
Begin

18


assign(f,input);

reset(f);
readln(f,n);
for i:=1 to n do
read(f,A[i]);
close(f);
End;
Procedure XuLi_DL;
var i:integer;
Begin
B[1]:=A[1];
for i:=2 to n do
B[i]:=B[i-1]+A[i];
End;
Procedure Ghi_DL;
var i: integer;
f:text;
Begin
assign(f,output);
rewrite(f);
for i:=1 to n do
write(f,B[i]:3);
close(f);
End;
Begin
Doc_DL;
XuLi_DL;
Ghi_DL;
End.
Bài tập tương tự:


19


1 Viết chương trình sắp xếp dãy số chứa trong tệp INPUT.IN (dòng 1: Chứa số n,
dòng 2:chứa n số nguyên cách nhau bởi dấu cách). Ghi dãy số được sắp tăng dần ra tệp
OUTPUT.OUT.
2 Viết chương trình đọc dãy số chứa trong tệp INPUT.IN (dòng 1: Chứa số n, dòng
2:chứa n số nguyên cách nhau bởi dấu cách). Cho biết trong dãy số có bao nhiêu số
chẵn, bao nhiêu số lẻ và tính tổng số chẵn, tổng số lẻ rồi ra tệp OUTPUT.OUT( dòng
đầu tiên ghi 2 số: số đầu tiên là số lượng số chẵn trong dãy, số kế tiếp là tổng các số
chẵn; dòng thứ 2 ghi 2 số: số đầu tiên là số lượng số lẻ trong dãy, số kế tiếp là tổng các
số lẻ)
2.4.2. Cách viết và sử dụng hàm:
Bài tốn 1: Viết chương trình tính n giai thừa. Trong đó n là số ngun dương
được nhập vào từ bàn phím khi chạy chương trình.
Phân tích: Cần thiết kế một chương trình con(hàm) để tính giai thừa
VD: 5! =5*4*3*2*1=1*2*3*4*5
=> Cơng thức tính giai thừa: n! =n*(n-1)*(n-2)*….*1
Chương trình:
Program Giai_thua;
Uses CRT;
Var n: word
Fucntion GT(k: word): longint;
Var T, i: word;
Begin
T:= 1;
For i:=1 to k do
T:= T* i;
GT:=T;
End;

BEGIN
Clrscr;
Write(‘nhap n:’); readln(n);
Write(n,’!=’, GT(n));
Readln
END.

20



×