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

Một số giải pháp phát triển năng lực tin học của học sinh khi tìm hiểu về kiểu dữ liệu có cấu trúc trong chương trình tin học 11

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

SỞ GIÁO DỤC VÀ ĐÀO TẠO YÊN BÁI
TRƯỜNG THPT LÝ THƯỜNG KIỆT

BÁO CÁO SÁNG KIẾN CẤP CƠ SỞ
(Lĩnh vực: Giáo dục (Tin học))

MỘT SỐ GIẢI PHÁP PHÁT TRIỂN NĂNG LỰC TIN HỌC CỦA
HỌC SINH KHI TÌM HIỂU VỀ KIỂU DỮ LIỆU CĨ CẤU TRÚC
TRONG CHƯƠNG TRÌNH TIN HỌC 11

Tác giả: Nguyễn Thị Thu Hiền
Trình độ chun mơn: Đại học
Chức vụ: Giáo viên
Đơn vị công tác: Trường THPT Lý Thường Kiệt

Yên Bái, tháng 01 năm 2022


MỤC LỤC
Nội dung
Trang
I. THÔNG TIN CHUNG VỀ SÁNG KIẾN............................................................ 2
1. Tên sáng kiến ...................................................................................................... 2
2. Lĩnh vực áp dụng sáng kiến .................................................................................2
3. Phạm vi áp dụng sáng kiến .................................................................................. 2
4. Thời gian áp dụng sáng kiến ................................................................................2
5. Tác giả: ................................................................................................................2
II. MƠ TẢ GIẢI PHÁP SÁNG KIẾN.....................................................................2
1. Tình trạng các giải pháp đã biết ........................................................................... 2
2. Nội dung giải pháp đề nghị cơng nhận là sáng kiến .............................................3
2.1. Mục đích của (các) giải pháp:...........................................................................3


2.2. Nội dung (các) giải pháp ...................................................................................4
2.3. Những điểm khác biệt, tính mới của sáng kiến:.............................................. 21
3. Khả năng áp dụng của giải pháp:.......................................................................21
4. Hiệu quả, lợi ích thu được hoặc dự kiến có thể thu được do áp dụng giải pháp. 22
5. Những người tham gia tổ chức áp dụng sáng kiến lần đầu (nếu có) ...................23
6. Các thông tin cần được bảo mật .........................................................................23
7. Các điều kiện cần thiết để áp dụng sáng kiến .....................................................23
8. Tài liệu gửi kèm .................................................................................................23
III. Cam kết không sao chép hoặc vi phạm bản quyền...........................................24

1


I. THÔNG TIN CHUNG VỀ SÁNG KIẾN
1. Tên sáng kiến: Một số giải pháp phát triển năng lực tin học của học
sinh khi tìm hiểu về kiểu dữ liệu có cấu trúc trong chương trình Tin học 11
2. Lĩnh vực áp dụng sáng kiến: Giáo dục (Tin học)
3. Phạm vi áp dụng sáng kiến: Trường THPT Lý Thường Kiệt.
4. Thời gian áp dụng sáng kiến: Từ ngày 06 tháng 9 năm 2019 đến ngày
08 tháng 01 năm 2022
5. Tác giả:
Họ và tên: Nguyễn Thị Thu Hiền
Năm sinh: 1980
Trình độ chuyên môn: Đại học
Chức vụ công tác: Giáo viên
Nơi làm việc: Trường THPT Lý Thường Kiệt
Địa chỉ liên hệ: Trường THPT Lý Thường Kiệt, số 303, đường Trần Hưng
Đạo, phường Hồng Hà, TP Yên Bái, tỉnh Yên Bái
Điện thoại: 0912.589.726
II. MÔ TẢ GIẢI PHÁP SÁNG KIẾN

1. Tình trạng các giải pháp đã biết
Đại hội đại biểu toàn quốc lần thứ XIII của Đảng Cộng sản Việt Nam tiếp
tục đề cao vai trò của giáo dục, coi giáo dục và đào tạo là quốc sách hàng đầu.
“Xây dựng đồng bộ thể chế, chính sách để thực hiện có hiệu quả chủ trương giáo
dục và đào tạo cùng với khoa học và công nghệ là quốc sách hàng đầu, là động
lực then chốt để phát triển đất nước”. Quan điểm này vừa khẳng định hai lĩnh
vực được xác định là quốc sách hàng đầu đó là giáo dục, đào tạo và khoa học,
cơng nghệ; đồng thời phản ánh mối quan hệ biện chứng giữa giáo dục, đào tạo
với khoa học, cơng nghệ. Chính vì vậy, mơn Tin học trở thành một mơn học có
nhiệm vụ và vai trị vơ cùng quan trọng trong việc thực hiện nhiệm vụ trên. Môn
Tin học giữ vai trò chủ đạo trong việc chuẩn bị cho học sinh khả năng tìm kiếm,
tiếp nhận, mở rộng tri thức và sáng tạo trong thời đại thông tin, kết nối và tồn
cầu hóa; hỗ trợ đắc lực học sinh tự học và tập nghiên cứu; tạo cơ sở vững chắc
cho việc ứng dụng công nghệ kĩ thuật số, phục vụ phát triển nội dung kiến thức
mới, triển khai phương thức giáo dục mới và hiện đại cho tất cả các môn học.
Hiện nay, trong lý luận dạy học sử dụng khá nhiều phương pháp và kỹ thuật dạy
học như: dạy học dự án, dạy học giải quyết vấn đề, dạy học hợp tác, dạy học
khám phá… Theo các phương pháp trên cũng có nhiều cách thiết kế kế hoạch
dạy học để phát triển năng lực tin học một cách hiệu quả. Trong đó, việc phát
triển năng lực tin học với các thành phần năng lực như giải quyết vấn đề với sự
hỗ trợ của công nghệ thông tin và truyền thông; ứng dụng công nghệ thông tin
và truyền thông trong học và tự học có thể thực hiện với học sinh thông qua việc
học Pascal. Tuy nhiên, trong thực tế giảng dạy hiện nay cho thấy hầu hết học
sinh lúng túng trong q trình học tập do đặc thù của mơn Tin học là một mơn
có kiến thức trừu tượng, đặc biệt là môn Tin học lớp 11 với một số phần như
2


kiểu mảng, kiểu xâu, kiểu tệp và chương trình con. Một số giáo viên chưa tìm ra
được phương pháp phù hợp để có thể truyền đạt kiến thức cũng như giúp học

sinh tìm ra được những kiến thức mới qua các bài học của môn Tin học 11, dẫn
đến học sinh tiếp thu một cách thụ động, khơng có hứng thú với mơn Tin học vì
cảm thấy khó. Giáo viên chưa biết cách đặt một vấn đề mang tính cởi mở để học
sinh tiếp cận với nội dung mới và chưa nhấn mạnh khi giải một bài toán lớn và
phức tạp thì cần phải chia nhỏ bài tốn lớn đó ra thành các bài toán nhỏ hơn, mà
dạy theo cảm tính và trình độ của mình, chưa tìm hiểu rõ năng lực của các đối
tượng học sinh. Học sinh đa phần đã tiếp xúc với máy tính và mơn Tin học
nhưng chủ yếu là để giải trí và một số kiến thức tin học căn bản, cịn với mơn
lập trình thì tư duy trừu tượng của các em cịn hạn chế. Bài giảng của giáo viên
đối với một số nội dung khó chưa có tính liên hệ với thực tế vì thế khó gây được
hứng thú đối với học sinh trong việc tìm hiểu một kiến thức mới. Việc sử dụng
tư liệu, đồ dùng dạy học của giáo viên đôi khi chưa hợp lý nên chưa đáp ứng
nhu cầu của bài học. Cụ thể với những nội dung này, giáo viên cần sử dụng 1
máy vi tính để trình bày tiết dạy theo dạng trực quan và thực hành một số ví dụ
về viết chương trình hồn chỉnh nhằm giúp học sinh thấy ngay kết quả thực
hành và cũng hình dung được cách sử dụng Chương trình để giải các bài tốn.
Từ đó các em sẽ thấy được nội dung bài học, ý nghĩa của từng phần cũng như
các sử dụng dữ liệu hay câu lệnh cho việc viết chương trình nhất là đối với
những bài tốn phức tạp khi được giải trên máy tính. Như vậy khó khăn chung
của một số nội dung này là: Giáo viên chưa tìm ra được phương pháp phù hợp,
chưa nghiên cứu tổng quát về hệ thống kiến thức cơ bản, mối quan hệ giữa các
kiến thức của bài này với bài khác, giữa các mơn Tin học với Tốn học, với thực
tế, chưa biết cách đặt tình huống cho các em tìm hiểu, thảo luận... Do đó học
sinh khơng nắm rõ được các khái niệm cơ bản của kiểu mảng một chiều, kiểu
xâu, kiểu tệp và chương trình con trong tin học, khơng phân biệt được điểm
giống và khác nhau giữa chúng hoặc có nắm bắt được cũng chỉ là một cách
chung chung, phiến diện, tiếp thu bài học một cách hời hợt và thụ động.
Xuất phát từ cơ sở trên, tôi đã chọn đề tài “Một số giải pháp phát triển
năng lực tin học của học sinh khi tìm hiểu về kiểu dữ liệu có cấu trúc trong
chương trình Tin học 11”, nhằm giúp các em biết cách tiếp cận với những nội

dung đó ở một góc độ dễ hơn, trực quan hơn, từ đó hiểu rõ được ngữ nghĩa cũng
như cách sử dụng các câu lệnh phù hợp để có thể tiếp thu tốt nội dung bài học và
làm tốt các bài tập áp dụng, từ đó góp phần phát triển năng lực tin học của học
sinh, đáp ứng các yêu cầu giáo dục hiện nay. Các giải pháp được trình bày dựa
trên kinh nghiệm giảng dạy của bản thân và tham khảo một số tài liệu liên quan.
2. Nội dung giải pháp đề nghị công nhận là sáng kiến
2.1. Mục đích của (các) giải pháp:
- Nâng cao hiệu quả dạy học của giáo viên và tiếp thu kiến thức trong q
trình học tập của học sinh đối với mơn học địi hỏi tư duy sáng tạo như lập trình
pascal, đặc biệt là phần dữ liệu kiểu cấu trúc. Tạo động cơ cho học sinh ý thức về ý
3


nghĩa của các hoạt động khi thao tác tên dữ liệu có kiểu cấu trúc trong cơng việc
lập trình. Từ đó, học sinh có thể liên hệ, vận dụng sáng tạo vào giải quyết các bài
tốn lập trình và các tình huống thực tế nhằm góp phần hình thành và phát triển
năng lực trí tuệ chung cho học sinh THPT và năng lực tin học nói riêng. Trong q
trình học một vấn đề mới thì học sinh cần phải có sự liên hệ với những nội dung đã
được học từ những bài trước, phân biệt được sự khác nhau về kiểu dữ liệu, về cấu
trúc và về câu lệnh. Từ đó mới hình thành được khả năng tư duy và tiếp thu được
nội dung mới của bài học. Vấn đề này được thể hiện khá rõ khi học tới nội dung
kiểu mảng một chiều (là dãy hữu hạn các phần tử có cùng kiểu dữ liệu), kiểu xâu
(có thể xem như mảng một chiều mà mỗi phần tử là một kí tự). Tệp (Tệp là một
dãy các phần tử cùng kiểu được sắp xếp một cách tuần tự. Tệp dữ liệu được lưu trữ
ở bộ nhớ ngoài dưới một tên nào đó. Tệp tập hợp trong nó một số phần tử dữ liệu
có cùng cấu trúc giống như mảng nhưng khác mảng là số phần tử của tệp chưa
được xác định).
Một nội dung khác là “Chương trình con và phân loại”. Học sinh cần hình
dung được chương trình thường có những đoạn chương trình hay phép tính lặp lại
nhiều lần. Nếu mỗi lần lặp lại, ta phải viết những đoạn lệnh như nhau thì chương

trình trở nên dài dịng, rối rắm và mất thời gian vơ ích. Để giải quyết những trường
hợp như vậy, Pascal cho phép tạo ra các module, mỗi module mang một đoạn
chương trình gọi là chương trình con (subroutine hay subprogram). Mỗi chương
trình con sẽ mang một tên khác nhau. Một module chỉ cần viết một lần và sau đó có
thể truy xuất nó nhiều lần, bất kỳ nơi nào trong chương trình chính. Khi cần thiết,
ta chỉ việc gọi tên chương trình con đó ra để thi hành lệnh. Học sinh hiểu được việc
sử dụng chương trình con, chương trình có thể tiết kiệm được ơ nhớ. Đồng thời, có
thể kiểm tra tính logic trong tiến trình lập trình cho máy tính điện tử, có thể nhanh
chóng loại bỏ những sai sót khi cần hiệu chỉnh hay cải tiến chương trình. Đây là
khái niệm cơ bản trong ý tưởng lập chương trình có cấu trúc. Một q trình tính
cũng có thể có nhiều chương trình con lồng ghép vào nhau.
- Sử dụng các ví dụ cụ thể nhằm giúp các em học sinh xử lý được một số bài
tập ứng dụng, tăng sự yêu thích với mơn học được mệnh danh là mơn học khó nhất
trong các mơn học ở lớp 11. Qua đó, học sinh vận dụng được kiến thức của nhiều
môn học khác nhau để giải quyết một vấn đề cụ thể, rèn cho học sinh phẩm chất:
cẩn thận, chu đáo, sáng tạo và vận dụng các kỹ năng cần thiết để xử lý các tình
huống gặp phải trong cuộc sống.
- Các giải pháp được áp dụng trong thời gian năm học đối với khối lớp 11
2.2. Nội dung (các) giải pháp
2.2.1. Giải pháp giảng dạy kiểu mảng một chiều
Bắt đầu từ kiểu dữ liệu có cấu trúc thì học sinh được tìm hiểu thêm một
kiểu dữ liệu mới là kiểu mảng một chiều vì vậy giáo viên phải biết cách đặt vấn
đề để học sinh hiểu rõ tại sao phải có kiểu dữ liệu đó, nếu khơng có dữ liệu đó
mà chỉ cần những dữ liệu đã học thì có thể giải quyết được các bài tốn hay
khơng hay viết chương trình có tối ưu khơng. Cụ thể thực hiện như sau:
4


2.2.1.1. Hiểu ý nghĩa của kiểu mảng một chiều:
Bước 1: Tạo tình huống gợi vấn đề

GV: Với kiến thức đã học các em hãy viết một đoạn chương trình để nhập
vào điểm trung bình của 2 học sinh.
HS: Viết đoạn chương trình bình thường
GV: Bây giờ hãy viết đoạn chương trình để nhập điểm trung bình của các
học sinh trong lớp.
-> Khi học sinh làm bài sẽ nảy sinh tình huống có vấn đề ở đây là: số lượng
biến khai báo khá nhiều và phải viết nhiều câu lệnh hoặc câu lệnh viết quá dài.
Bước 2: Trình bày vấn đề và đặt mục tiêu giải quyết
GV: Như vậy vấn đề gặp phải khi viết chương trình này là gì nếu như yêu
cầu của chương trình là nhập vào điểm trung bình của học sinh tồn trường
HS: Suy nghĩ và trả lời vì có nhiều biến phải khai báo:
Var x1, x2, x3, x4, x5, … :real;
Câu lệnh phải viết quá dài hoặc phải có nhiều câu lệnh
Readln(x1,x2,x3,x4,x5,…);

Chương trình sẽ khơng phù hợp với kiểu dữ liệu chuẩn đã học
GV: Để giải quyết vấn đề trên thì mục tiêu là cần phải có một kiểu dữ liệu
mới phù hợp hơn, có đủ các phần tử để chứa được tất cả các giá trị khác nhau
theo yêu cầu của bài, và chương trình được viết lại để phù hợp hơn.
Bước 3: Giải quết vấn đề:
GV: Đưa ra một đoạn chương trình để giải quyết vấn đề đã nêu là nhập
điểm trung bình của các học sinh trong lớp bằng cách sử dụng kiểu mảng một
chiều để học sinh quan sát được sự khác biệt với đoạn chương trình cũ:
Var A : array [1..50] of real;
i : Byte;
Begin

for i:=1 to 42 do readln(A[i]);
……


Bước 4: Rút ra kết luận:
Từ vấn đề được giải quyết như trên thì việc cần phải tìm hiểu và sử dụng
một kiểu dữ liệu mới là rất cần thiết đó là kiểu mảng một chiều, một kiểu dữ liệu
có cấu trúc.
Bước 5: Vận dụng kiến thức để đặt ra nhiệm vụ tiếp theo:
GV: Tiếp tục vấn đáp, đặt câu hỏi để học sinh tìm hiểu về khái niệm mảng
một chiều, cách khai báo, cách tham chiếu đến 1 phần tử, và cách duyệt qua các
phần tử.
Có thể thuyết trình, vấn đáp để giải quyết các nội dung khái niệm mảng
một chiều như sau:
GV: Đặt câu hỏi học sinh tìm hiểu về số lượng các phần tử và kiểu dữ liệu
của các phần tử đó ở các ví dụ đã nêu
HS: Mong đợi học sinh sẽ nhận xét được như sau:
5


- Số lượng biến nhiều nhưng là số hữu hạn
- Mỗi phần tử đều có kiểu dữ liệu giống nhau
 Dựa trên các vấn đáp đó học sinh có thể tự khái niệm được:“Mảng
một chiều là dãy hữu hạn các phần tử cùng kiểu”.
2.2.1.2. Khai báo mảng một chiều:
Sách giáo khoa có khai báo cả hai cách. Trong đó cách trực tiếp giới thiệu
trước và gián tiếp giới thiệu sau. Tuy nhiên nếu giới thiệu với học sinh theo trình
tự này có thể làm cho học sinh bị thụ động trong cách khai báo vậy giáo viên có
thể sử dụng phương pháp được dẫn chứng dưới đây để học sinh tự khai báo
được một trong hai cách. Nhằm ghi nhớ sâu hơn việc khai báo biến mảng một
chiều.
Bước 1: Tạo tình huống gợi vấn đề:
- Bắt đầu từ khai báo đã biết
Var <Tên biến> : <Kiểu dữ liệu>;

GV: Giả sử ngoài những kiểu dữ liệu đã học bây giờ ta có một kiểu dữ
liệu mới dạng kiểu mảng có tên là DiemTrungBinh, và cho HS khai báo:
Var DTB : DiemTrungBinh;
Vấn đề ở đây là kiểu dữ liệu DiemTrungBinh là kiểu dữ liệu đã có chưa?,
có được sử dụng khơng?
Bước 2: Trình bày vấn đề và đặt mục tiêu giải quyết:
GV: Ở đây điểm trung bình là một tên kiểu dữ liệu mà ta tự đặt ra, xem
như đây là một kiểu dữ liệu có cấu trúc gồm nhiều phần tử đủ để chứa được
điểm trung bình của các học sinh trong lớp.
Pascal hỗ trợ câu lệnh để chúng ta có thể định nghĩa tạo ra một kiểu dữ
liệu như vậy đó là kiểu mảng một chiều
Bước 3: Giải quyết vấn đề:
GV: Từ vấn đề được trình bày và đặt mục tiêu giải quyết ở trên. Ngơn ngữ
lập trình Pascal cho phép chúng ta định nghĩa ra kiểu dữ liệu này bằng câu lệnh:
Type <Tên kiểu mảng> = array [Kiểu chỉ số] of <kiểu phần tử>;
Do phải định nghĩa trước và khai báo sau nên các câu lệnh sẽ được viết là:
Type <Tên kiểu mảng> = array [Kiểu chỉ số] of <kiểu phần tử>;
Var <Tên biến mảng> : <Tên kiểu mảng>;
 Đây là cách thứ nhất để khai báo kiểu dữ liệu mảng một chiều.
Trong đó:
- Kiểu chỉ số có dạng: n1 . . n2 (n1, n2 là những số nguyên hoặc biểu thức
nguyên và n1 ≤ n2)
- Kiểu phần tử là kiểu dữ liệu của từng phần tử trong mảng.
Ví dụ: Type DiemTrungBinh = array [1..50] of real;
Var
DTB : DiemTrungBinh;
GV: Cho học sinh quan sát kỹ và nhận xét về câu lệnh về cú pháp và ví dụ
ở khai báo trên để HS phát hiện được có một đặc điểm giống như tính chất bắc
cầu của các biểu thức.
6



HS: Mong đợi sẽ nhận xét được như sau:
<Tên biến mảng> : <Tên kiểu mảng>;
Mà <Tên kiểu mảng > = array [Kiểu chỉ số] of <kiểu phần tử>;
Nên có thể thay thế câu lệnh trên bằng câu lệnh sau:
Var <Tên biến mảng> : array[Kiểu chỉ số] of <Kiểu phần tử>;
 Đây là cách thứ hai để khai báo kiểu dữ liệu mảng một chiều.
Bước 4: Rút ra kết luận:
Như vậy với phương pháp giảng dạy đặt và giải quyết vấn đề như trên học
sinh đã không cần phải phụ thuộc vào sách giáo khoa, mà chỉ cần nhớ kiến thức
cũ và trải qua quá trình vấn đáp và suy nghĩ theo sự dẫn dắt của giáo viên các
em cũng có thể hiểu rõ được vai trò của kiểu mảng một chiều, khái niệm được
và khai báo được mảng một chiều một cách hoàn toàn tự nhiên, Tự viết ra được
một cách khai báo trực tiếp từ gián tiếp. Học sinh sẽ cảm thấy hứng thú và nhớ
bài ngay trên lớp.
2.2.1.3. Duyệt và tham chiếu các phần tử trong mảng một chiều:
Với nội dung này tơi xin trình bày vắn tắt các bước trong quá trình đặt và
giải quết vấn đề như sau:
Bước 1: Tạo tình huống gợi vấn đề:
GV: Đặt tình huống là muốn đưa ra màn hình điểm trung bình của một
học sinh nào đó hay đưa ra tất cả điểm trung bình của các học sinh ra màn hình
thì phải làm thế nào.
HS: Mong đợi suy nghĩ:
Đưa ra màn hình tất cả: Sử dụng câu lệnh Write(DTB);
Cịn đưa ra điểm của một học sinh: Chắc phải có một sự tham chiếu nào
đó.
Bước 2: Trình bày vấn đề và đặt mục tiêu giải quyết:
GV: Từ suy nghĩ của học sinh giáo viên có thể thực hiện ngay câu lệnh
mà học sinh suy nghĩ là Write(DTB). Tất nhiên trình biên dịch sẽ báo lỗi. Từ vấn

đề đó giáo viên sẽ dẫn dắt để học sinh biết cách phải tham chiếu và xuất ra từng
phần tử một theo đúng cú pháp
Tham chiếu: <Tên biến mảng>[<chỉ số>]
Chú ý đối với học sinh là: chỉ sổ ở trên có phục thuộc vào việc chọn kiểu
chỉ số trong khai báo
Bước 3: Giải quyết vấn đề:
GV: Để học sinh viết câu lệnh xuất điểm của một học sinh nào đó từ khai
báo đã ví dụ ở trên
HS: Sẽ viết được
Ví dụ: Write(DTB[4]:4:1); {Xuất điểm của học sinh thứ 4 trong lớp}
Hoặc xuất ra màn hình điểm của 40 học sinh trong lớp
For i := 1 to 40 do write(DTB[i]:4:1);
Bước 4: Rút ra kết luận:
7


GV: Nhấn mạnh việc thao tác trên mảng là phải thao tác với từng phần tử
trong mảng, vì vậy yếu tố duyệt và cách tham chiếu đến các phần tử trong mảng
có yếu tố quan trọng khi viết các chương trình có sử dụng kiểu dữ liệu mảng một
chiều.
2.2.2. Giải pháp giảng dạy kiểu xâu
Bản chất của kiểu xâu là kiểu mảng một chiều mà mỗi phần tử là một kí
tự. Dựa vào điều này giáo viên có thể sử dụng phương pháp đặt và giải quyết
vấn đề mang tính gợi mở để học sinh có một cách tiếp cận tự nhiên từ kiến thức
mới học đó là kiểu mảng một chiều. Tơi sẽ trình bày cụ thể các bước khi thực
hiện giải pháp giảng dạy này như sau:
Bước 1: Tạo tình huống gợi vấn đề:
GV: Trình chiếu dãy các giá trị sau và gợi hỏi học sinh nhận xét về đặc
điểm và bản chất của từng dãy:


Dãy A

1

4

2

8

5

Dãy B

2.5

6.1

5.0

4.3

7.2

Dãy C

T

I


N

H

O

9

3

C

HS: nhận xét:
Dãy A là dãy gồm 7 số nguyên
Dãy B là dãy gồm 5 số thực
Dãy C là dãy gồm 6 kí tự
Theo định nghĩa về kiểu mảng thì mỗi dãy trên đều gồm một số hữu hạn
các phần tử có cùng kiểu dữ liệu nên các dãy trên đều có thể xem là mảng một
chiều.
Như vậy, từ nhận xét trên thì có một vấn đề nảy sinh từ kiến thức mảng
một chiều đó là dãy A và dãy B thì quen thuộc nhưng ở dãy C thì mỗi phần tử ở
đây là một kí tự.
Bước 2: Trình bày vấn đề và đặt mục tiêu giải quyết:
GV: Đặt câu hỏi gợi mở cho học sinh suy nghĩ và nhận xét về dãy C. Đây
là dãy gồm các kí tự, hay cịn gọi là một xâu kí tự, vậy các em có suy nghĩ gì khi
làm việc với dãy này? Về cách để xuất giá trị của dãy này ra màn hình? Ví dụ
như xuất ra họ và tên của một học sinh, có bắt buộc phải xuất từng kí tự khơng?
Rồi khi xử lí dãy này như muốn in hoa, muốn xóa bớt kí tự, muốn sao chép một
số kí tự,… điều đó có khó khăn khơng?...
HS: Với một số các câu hỏi đặt ra của giáo viên thì mong đợi học sinh sẽ

có những suy nghĩ đó là nếu như xem đây là mảng một chiều thì việc thực hiện
những vấn đề nêu trên sẽ rất khó khi thực hiện.
8


Đặt mục tiêu giải quyết vấn đề trên là liệu có một quan niệm khác cho
dãy C hay khơng, đó là không xem dãy C là mảng một chiều. Và ngơn ngữ lập
trình Pascal đã hỗ trợ một kiểu dữ liệu mới là kiểu xâu, và khi chúng ta làm việc
với dãy C như là một kiểu dữ liệu xâu mà khơng phải là mảng một chiều thì các
vấn đề đặt ra ở trên sẽ được giải quyết khá là dễ dàng. Và để thực hiện với kiểu
dữ liệu xâu này thì sẽ phải tìm hiểu một số nội dung là khai báo như thế nào và
có những thao tác cơ bản nào trên kiểu dữ liệu xâu.
Từ đây, học sinh đã có thể hiểu được các kiến thức sau:
- Bản chất của kiểu xâu là kiểu mảng một chiều mà mỗi phần tử là một kí tự.
- Hồn tồn có thể thao tác với kiểu xâu như kiểu mảng, ví dụ như tham
chiếu đến kí tự nào đó trong xâu.
- Kiểu xâu sẽ có nhiều thao tác xử lí đơn giản mà ngơn ngữ lập trình cung
cấp sẵn các câu lệnh để xử lí (đó là các hàm và thủ tục xử lí xâu).
Bước 3: Giải quyết vấn đề:
* Nội dung 1: Khái niệm và khai báo:
GV: Để học sinh tự suy nghĩ và khái niệm về kiểu xâu từ cách mà giáo
viên đã đưa ra tình huống ở trên:
HS: Khái niệm về kiểu dữ liệu xâu: Là mảng một chiều mà mỗi phần tử là
một kí tự.
GV: Để sử dụng kiểu xâu thì phải khai báo kiểu xâu. GV đưa ra cú pháp
khai báo.
Var <Tên biến xâu> : String[<độ dài lớn nhất của xâu>];
Trong đó, độ dài lớn nhất của xâu là số lượng kí tự tối đa mà xâu được
khai báo muốn lưu trữ và không lớn hơn 255. Khi bỏ qua tham số này thì xâu sẽ
chứa tối đa 255 kí tự.

HS: Tự lấy các ví dụ khai báo một số biến xâu. GV có thể đưa ra một số
khai báo chưa đúng để học sinh nắm vững cách khai báo.
Ví dụ:
Var s : String[50];
s1,s2 : String [30];
s3 : String; {s3 có độ dài tối đa là 255 kí tự}
* Nội dung 2: Tham chiếu đến các kí tự trong xâu:
GV: Lưu ý học sinh: bản chất là xâu là mảng một chiều nên tham chiếu
tới kí tự cũng như tham chiếu tới các phần tử trong mảng một chiều. chỉ số của
kí tự đầu tiên trong xâu luôn là 1.
HS: Tự tham chiếu đến các kí tự trong xâu :
Ví dụ: đưa ra màn hình một số kí tự trong dãy C (giả sử C là tên của biến
xâu)
Write(C[1]);
{xuất ra màn hình kí tự ‘T’}
Hay Write(C[4]);
{xuất ra màn hình kí tự ‘H’}
* Nội dung 3: Các thao tác xử lí xâu:
9


Các thao tác cơ bản gồm: Ghép xâu, so sánh xâu, các thủ tục delete, insert,
hay các hàm copy, pos, length, upcase.
Với các thao tác trên thì quy trình giảng dạy của giáo viên cần thực hiện
với trình tự sau:
Đặt vấn đề: Muốn có kết quả nào đó, ví dụ như nối họ đệm với tên, sắp
xếp tên theo thứ tự, xóa một số kí tự trong xâu, …. Đó là các kết quả của các
thao tác sẽ giới thiệu.
Giải quyết vấn đề:
GV: Thực hiện cú pháp các câu lệnh, các thủ tục và các hàm.

HS: Lấy các ví dụ tương ứng với từng thao tác theo cú pháp mà GV giới
thiệu.
GV: Có thể đặt ra một số tình huống sai hoặc khó xác định để học sinh
nắm vững hơn.
Bước 4: Rút ra kết luận:
Kiểu xâu có vai trị vơ cùng quan trọng trong khi lập trình và để thực hiện
tốt các thao tác trên xâu thì việc nắm vững các thao tác cơ bản xử lí xâu là yếu tố
quyết định khi lập trình có thể thao tác thành thạo với kiểu xâu hay khơng.
Với phương pháp và trình tự thực hiện với kiểu xâu như trên học sinh sẽ
tự lĩnh hội được nhiều kiến thức mới, không quá phụ thuộc vào nội dung giới
thiệu sách giáo khoa, từ các vấn đề mà GV đặt ra học sinh sẽ tự tìm được lời giải
từ kiến thức về mảng một chiều, có thể kết thúc nội dung kiểu dữ liệu xâu mà
học sinh chỉ trao đổi và tìm cách giải quyết vấn đề chứ không cần phải sử dụng
sách giáo khoa hình thành nên khả năng tư duy tự học và sáng tạo.
2.2.3. Giải pháp giảng dạy kiểu tệp
Học sinh đã được làm quen với một số kiểu dữ liệu chuẩn và một số kiểu
dữ liệu có cấu trúc. Đây là kiểu dữ liệu mà người lập trình sử dụng chủ yếu vào
mục đích sử dụng nguồn dữ liệu lưu trữ sẵn có hoặc xử lí kết quả khi thực hiện
chương trình. Vậy tại sao cần phải có kiểu dữ liệu tệp (làm rõ vấn đề này tức là
đã làm cho học sinh hiểu rõ được vai trò của kiểu tệp). Trong chương trình chỉ
đề cập đến kiểu tệp văn bản.
Nội dung chủ yếu cần đạt: Hiểu vai trò của tệp và các thao tác với tệp:
Bước 1: Tạo tình huống gợi vấn đề:
Hoạt động của GV
Hoạt động của HS
- Chạy lại một số chương trình đã học, như - Quan sát kết quả
tính tổng trong bài mảng một chiều hay giải
phương trình bậc 2,....
- Thốt khỏi chương trình và hỏi: Kết quả sau - TL: Chạy lại chương trình
khi thực hiện các chương trình này được xem

lại như thế nào?
- Chốt lại: Như vậy với các chương trình đã
học kết quả chỉ có được khi chạy chương
trình đó là vì tồn bộ dữ liệu trong chương
10


trình được lưu trữ ở ram, nên khơng có khả
năng lưu trữ lâu dài.
- Để lưu trữ dữ liệu lâu dài thì dữ liệu được - Lưu trữ ở bộ nhớ ngoài và
lưu trữ ở đâu và các đơn vị lưu trữ là gì?
các đơn vị lưu trữ là các tệp.
Bước 2: Trình bày vấn đề và đặt mục tiêu giải quyết:
Trong quá trình giảng dạy giáo viên cần làm rõ một số vấn đề sau:
Trình bày vấn đề đặt ra
Mục tiêu giải quyết
- Khai báo bao nhiêu biến - Bằng với số tệp trong chương trình.
tệp?
- Tại sao phải gắn tên tệp?
- Trong lập trình ta khơng thao tác trực tiếp với
tệp trên đĩa mà thông qua biến tệp. vậy nên
phải gắn từng tên tệp cho các đại diện là biến
tệp.
- Tại sao phải mở tệp?
- Giống như việc muốn xem hoặc ghi và sửa
chữa nội dung trong tệp cần phải thực hiện
nháy đúp để mở tệp đó.
- Việc đọc ghi tệp được thực - Khi lập trình pascal trong chương trình tin
hiện như thế nào?
học 11 thì 3 thao tác cơ bản là nhập, tính, xuất.

- Đối với các nội dung đã học thì sẽ là nhập từ
bàn phím vào các biến, tính (xử lí) và ghi kết
quả ra màn hình.
Khi làm việc với tệp thì về mặt tính (xử lí)
khơng có gì khác, mà cịn có thể đọc dữ liệu từ
một tệp đã chứa dữ liệu vào các biến thay cho
việc nhập từ bàn phím và ghi kết quả ra tệp
thay cho việc ghi ra màn hình.
- Đọc, ghi tệp có gì khác so - Cú pháp tương tự và chỉ cần đưa thêm biến
với việc nhập từ bàn phím, tệp vào trong tham số của thủ tục nhập, xuất.
và ghi ra màn hình?
- Phải thực hiện lưu tệp bằng thao tác đóng tệp
- Sau khi thao tác với tệp lại.
xong có phải thực hiện việu
lưu tệp lại hay không?
Bước 3: Giải quyết vấn đề:
* Khai báo biến tệp:
Cú pháp: Var <Tên biến tệp> : text;
Chú ý: Trong các bài tập về kiểu tệp thì đề bài yêu cầu liên quan đến bao
nhiêu tệp thì phải khai báo bấy nhiêu biến tệp khác nhau, vấn đề này khá dễ đối
với học sinh.
HS: Lấy ví dụ về khai báo từ bài tập cụ thể
Ví dụ: Một tệp văn bản songuyen.int có chứa các số ngun. Hãy viết
chương trình tính tổng các số ngun đó và ghi ra tệp ketqua.out.
Theo cú pháp và chú ý trên, học sinh sẽ viết được khai báo
11


Var f1, f2 : text;
* Gắn tên tệp:

Cú pháp: assign (<tên biến tệp>, <tên tệp>);
Bắt buộc phải gắn tên tệp vì chương trình chỉ thao tác với biến tệp trong
chương trình, chứ khơng thao tác trực tiếp với tên tệp ở bộ nhớ, biến tệp như
một con trỏ sẽ tác động lên dữ liệu lưu trữ trên tệp.
HS: Lấy ví dụ:
assign (f1, ‘songuyen.int’);
assign (f2, ‘ketqua.out’);
* Mở tệp:
GV: Cũng như khi ta làm việc với tệp trong môi trường của Hệ điều hành
Windows, khi muốn xem, hay thay đổi nội dung của một tệp thì ta phải mở tệp
đó ra bằng thao tác mở tệp. Vì vậy trong khi lập trình muốn thao tác với nội
dung của tệp thì phải mở tệp đó ra.
HS: Suy nghĩ về việc làm sao để mở được tệp bằng câu lệnh
GV: Gợi ý về cú pháp rồi để học sinh tự ví dụ về mở tệp
(Chú ý: Giáo viên nên giải thích về 2 thao tác khác nhau khi thực hiện mở
tệp để đọc dữ liệu vào biến và mở tệp để ghi kết quả từ chương trình ra tệp cũng
như ý nghĩa và kết quả sau mỗi lần thực hiện câu lệnh mở tệp như nội dung
trong tệp có thay đổi khơng, có bị mất khơng và vị trí con trỏ trong tệp nằm ở
đâu,…).
Cú pháp:
+ Mở tệp để đọc:
reset(<biến tệp>);
+ Mở tệp để ghi:
rewrite(<biến tệp>);
HS: Lấy ví dụ về mở tệp:
Ví dụ:
reset(f1);
rewrite(f2);
* Đọc tệp và ghi tệp:
GV: - Nêu lên vấn đề về ghi tệp và đọc tệp về bản chất cũng giống như

thao tác nhập dữ liệu từ bàn phím và ghi dữ liệu ra màn hình. Như vậy, đọc tệp
là đọc dữ liệu từ tệp vào biến, còn ghi tệp là ghi các kết quả ra tệp.
- Cú pháp của câu lệnh tương tự như câu lệnh nhập dữ liệu từ bàn phím
và ghi dữ liệu ra màn hình và thêm tên biến tệp của tệp muốn thao tác vào đầu
tiên của tham số câu lệnh.
- Từ hướng dẫn đó cho học sinh trao đổi nhóm, khơng dựa vào sách giáo
khoa, tự viết ra cú pháp và ví dụ về việc đọc tệp và ghi tệp.
HS: Trao đổi nhóm, trao đổi, bố sung lẫn nhau để tìm ra cú pháp và lấy ví
dụ:
Cú pháp :
+ Đọc tệp: read(<biến tệp>,<danh sách biến>);
12


Hoặc: readln(<biến tệp>,<danh sách biến>);
+ Ghi tệp: write(<biến tệp>,<danh sách kết quả>);
Hoặc: writeln(<biến tệp>,<danh sách kết quả>);
Ví dụ: Đọc 2 số nguyên từ tệp songuyen.int vào 2 biến a và b:
read(f1,a,b);
Hoặc: readln(f1,a,b);
Ghi tổng của hai số a và b ra tệp ketqua.out
write(f2, ‘Tong cua a va b la: ’,a+b);
Hoặc: writeln(f2, ‘Tong cua a va b la: ’,a+b);
GV: Nếu thực hiện trên máy chiếu lấy một bài cụ thể nhập các câu lệnh ví
dụ mà học sinh đưa ra sau đó cho học sinh quan sát kết quả để học sinh phân
biệt được việc khác nhau giữa câu lệnh read và readln, cũng như câu lệnh write
và writeln khi thực hiện với tệp. Chạy và cho học sinh quan sát hàm EOF và
EOLN để học sinh biết về vai trò của hai làm này khi thực hiện đọc tệp.
* Đóng tệp:
GV: Đóng tệp sau khi thao tác với tệp là một thủ tục khá đơn giản nhưng

lại rất quan trọng vì các tệp khi thao tác đã được mở ra. Nếu sau khi thực hiện
xong mà khơng đóng tệp thì tệp sẽ không lưu trữ được dữ liệu đã thay đổi.
Cú pháp: close(<biến tệp>);
HS: Lấy ví dụ về đóng tệp
close(f1);
close(f2);
Bước 4: Rút ra kết luận:
Giáo viên đặt ra hệ thống các câu hỏi để học sinh trả lời với mục đích cần
phải lưu ý và làm rõ được một số vấn đề sau:
+ Thao tác gắn tên tệp, mở tệp và đóng tệp cần phải ln ln được thực
hiện và theo đúng trình tự. Làm việc với bao nhiêu tệp thì những cơng việc đó
phải thực hiện với từng tệp một.
+ Đọc tệp và ghi tệp về mặt thủ tục thực hiện là giống với thủ tục nhập dữ
liệu từ bàn phím và ghi dữ liệu ra màn hình như đã được học.
+ Khi đọc dữ liệu từ tệp nên được kiểm soát bằng hàm việc sử dụng hàm
EOF và EOLN tùy thuộc vào từng trường hợp.
+ Khi làm việc với kiểu dữ liệu tệp thì chủ yếu là khác biệt so với kiến
thức đã học là thay cho việc nhập dữ liệu từ bàn phím và ghi dữ liệu ra màn hình.
Đó là có thể lấy dữ liệu từ tệp đưa vào các biến để xử lí và ghi kết quả ra tệp.
Bước 5: Vận dụng kiến thức mới để giải quyết những nhiệm vụ đặt ra
tiếp theo
Sau khi được học về kiểu dữ liệu tệp, có thể làm lại một số bài tập từ các
bài học trước bằng cách sử dụng bộ dữ liệu từ một tệp nguồn input và một tệp
đích output để thực hiện chương trình.
Thơng thường khi làm các bài tập thực hành trên máy giáo viên thường
cho học sinh sử dụng phần mềm Notepad để tạo ra tệp nguồn. Tuy nhiên, để
13


thuận tiện cho việc thực hành thì nên để học sinh sử dụng ngay trình soạn thảo

của pascal để tạo tệp nguồn hay mở tệp đích ra để xem kết quả mà không phải
quay về môi trường của hệ điều hành, các tệp được thao tác sẽ có phần phần mở
rộng là pas. Ví dụ, input.pas, output.pas, songuyen.pas, ketqua.pas,….
2.2.4. Giải pháp giảng dạy nội dung về chương trình con
Ngồi 3 nội dung trên thì chương trình con là một nội dung mà học sinh
khó tiếp cận nhất trong nội dung tin học 11. Vì vậy, hiểu chi tiết về cấu trúc của
chương trình con dạng thủ tục và hàm, về lời gọi chương trình con cũng như
cách truyền tham số cho chương trình con sẽ mang tính quyết định trong việc
viết chương trình có sử dụng chương trình con. Ta sẽ xét cụ thể một số nội dung
có thể trình bày theo phương pháp đã nêu như sau:
2.2.4.1. Phân biệt các loại chương trình con:
Bước 1: Tạo tình huống gợi vấn đề:
GV: Trình chiếu một chương trình có sử dụng hàm và thủ tục xử lí xâu:
Ví dụ: Chương trình xóa tất cả các kí tự trắng và in hoa một xâu được
nhập từ bàn phím và đưa xâu đã được xử lí ra màn hình.
Program xu_ly_xau;
Uses crt;
Var

i : byte;
Begin

s : string;

Clrscr;

Write (‘ Nhap vao mot xau ki tu s = ’);
Readln (s);

While pos(‘ ‘,s) <> 0 do delete (s,pos(‘ ‘,s),1);


For i : = 1 to length (s) do s[i] : = upcase (s[i]);
Write(‘ xau da duoc xu li la : ’, s);
End.

Readln

HS: Quan sát chương trình và chỉ ra các hàm và thủ tục xử lí xâu đã được
sử dụng trong chương trình trên. Hàm pos, length, upcase, và thủ tục delete.
Bước 2: Trình bày vấn đề và đặt mục tiêu giải quyết:
GV: Trong chương trình trên khi gọi hàm pos, length, upcase hay thủ tục
delete thì lập tức kết quả sẽ được thực hiện mà ta không biết bản chất của các
hàm hay thủ tục đó được xây dựng như thế nào. Và thực chất các hàm và thủ tục
trên là các chương trình con mà pascal cung cấp sẵn cho chúng ta. Khi thực hiện
chỉ cần gọi tên và cung cấp đủ tham số phù hợp thì chương trình con đó sẽ được
thực hiện. Vậy chúng ta có thể tự xây dựng được các hàm và thủ tục phục vụ
riêng trong các chương trình khi viết chương trình hay khơng?
- Thực tế ngơn ngữ lập trình pascal cung cấp cho chúng ta đầy đủ các cấu
trúc và cú pháp để chúng ta xây dựng các chương trình con này. Vậy chương
trình con có mấy loại? đó là gì?
14


HS: Từ vấn đề được trình bày trên HS có thể trả lời được chương trình
con có hai loại. Đó là chương trình con dạng Hàm và chương trình con dạng Thủ
tục
GV: Chúng ta cần tìm hiểu cấu trúc của hai chương trình con này
Bước 3: Giải quyết vấn đề:
- Cấu trúc của hàm :
Function <Tên hàm> [(<Danh sách tham số>)] : <Kiểu dữ liệu>;

[<Phần khai báo>]
Begin
[<dãy các lênh>];
<Tên hàm>:=<Biểu thức>;
End;
- Hàm: là chương trình con thực hiện một số thao tác và trả về giá trị
thông qua tên của nó. Chính vì vậy phần đầu của chương trình con phải có dữ liệu> của tên hàm và trong phần thân phải có câu lệnh <Tên hàm>:=thức>;
- Cấu trúc của thủ tục:
Procedure <Tên thủ tục>[(<Danh sách tham số>)];
[<Phần khai báo>];
Begin
[<Dãy các lệnh>]
End;
- Thủ tục: Là chương trình con thực hiện một số thao tác và không trả về
giá trị thông qua tên của nó. Vì vậy, phần đầu của thủ tục sẽ khơng có kiểu dữ
liệu và trong phần thân cũng chỉ gồm có dãy các lệnh mơ tả các thao tác.
HS: Cần phải phân biệt được Hàm khác với Thủ tục ở chổ hàm có dữ liệu> trả về cho tên hàm và trong phần thân có biểu thức: <Tên hàm> : =
<biểu thức>;
Bước 4: Rút ra kết luận:
GV: Dựa vào cấu trúc đã cung cấp, chúng ta có thể xây dựng được hai
chương trình con có dạng khác nhau là hàm và thủ tục. Có thể hỏi học sinh, khi
nào thì xây dựng hàm và khi nào thì xây dựng thủ tục?
HS: Thảo luận và mong đợi trả lời :
+ Khi kết quả nhận được của chương trình con là một giá trị mới thông
qua tên của chương trình con đó thì xây dựng hàm
+ Khi gọi chương trình con mà chỉ muốn thực hiện một số thao tác nhất
định, không sinh ra giá trị qua tên của nó thì xây dựng thủ tục

Bước 5: Vận dụng kiến thức mới để giải quyết những nhiệm vụ đặt ra
tiếp theo:
+ Tìm hiểu cụ thể về từng loại chương trình con: Thủ tục và Hàm chủ
yếu là thông qua việc phân tích cấu trúc và giải quyết các ví dụ cụ thể.
2.2.4.2. Tìm hiểu về thủ tục (Procedure):
15


Bước 1: Tạo tình huống gợi vấn đề:
GV: Hỏi HS: dựa vào các ký hiệu trong cấu trúc của thủ tục, hãy chỉ ra
phần nội dung có thể có hoặc khơng có?
HS: Mong đợi trả lời có nội dung là: phần (<danh sách tham số>)
GV: đưa ra nhận xét và chốt lại:
Có 2 loại thủ tục:
+ Thủ tục khơng tham số
+ Thủ tục có tham số.
Bước 2: Trình bày vấn đề và đặt mục tiêu giải quyết:
GV: Chúng ta sẽ xét cụ thể từng loại về cấu trúc cụ thể của nó và lấy ví dụ
để minh họa
HS: Viết lại cấu trúc của thủ tục trong cả hai trường hợp bằng việc bỏ đi
hoặc giữ lại phần (<Danh sách tham số>)
Bước 3: Giải quyết vấn đề:
- Cấu trúc của thủ tục không tham số:
PROCEDURE < Tên thủ tục > ;
[<Các khai báo hằng, biến, kiểu cục bộ>]
BEGIN
[<các lệnh trong nội bộ thủ tục>]
END ;
Ví dụ 1 : Tìm số lớn nhất trong 3 trị số nguyên
Program So_ln ;

Var

a, b, c : integer ; yn : Char ;

Procedure maximum ;
Var max : integer ;
Begin

if a > b then max := a
else max := b ;

if c > max then max := c ;
Writeln ( ‘ So lon nhat la:’, max:6 ) ;
end ;
BEGIN
yn := ‘Y’ ;
While (upcase(yn) = ‘Y’) do
Begin

Writeln ( ‘Nhap 3 so nguyen’ ) ;
Readln (a, b, c ) ;
maximum ;
Write

(



Tiep


tuc

nhap

3

so

moi

khong

(y/n) ?’ ) ;

16


END.

End ;

Readln (yn) ;

- Cấu trúc của thủ tục có tham số:
PROCEDURE < Tên thủ tục > (<danh sách tham số hình thức >);
[<Các khai báo hằng, biến, kiểu cục bộ>]
BEGIN
[<Các lệnh trong nội bộ thủ tục >]
END ;
Ví dụ 2 : Tính giai thừa của một số

Program Tinh_Giai_thua ;
Var

n : integer ; gt : real ;

Var

i : integer ;

Procedure giaithua (m : integer );
Begin

End;

gt := 1 ;

For i := 1 to m do gt := gt * i ;

BEGIN
Write(‘Nhap so nguyen n (0 <= n < 33) = ’ ) ;
Readln (n);

If n>=0 then
Begin

giaithua (n);
Writeln (‘Giai thua cua ’, n, ‘ la :’, gt: 10 :0) ;
End
Else Writeln( ‘ khong tinh duoc giai thua!’ );
Readln;


END.

* Rút ra kết luận:
Trong ví dụ 1:
+ Thủ tục maximum được khai báo trước khi nó được truy xuất, các biến
a, b, c được gọi nhập vào ở chương trình chính và biến max được định nghĩa bên
trong thủ tục. Điều này cho ta thấy, không phải lúc nào cũng cần thiết khai báo
biến ngay đầu chương trình chính như vậy ở đây ta thấy các biến a, b, c, yn là
các biến toàn cục, biến max là biến cục bộ.
+ Thủ tục maximum gọi trực tiếp tới các biến ở chương trình chính và
khơng sử dụng tham số hình thức. Đây là dạnh thủ tục khơng có tham số
- Trong ví dụ 2:
17


+ Khi viết một thủ tục, nếu có các tham số cần thiết, ta phải khai báo nó
(kiểu, số lượng, tính chất, ...). Các tham số này gọi là tham số hình thức (formal
parameters).
+ Một thủ tục có thể có 1 hoặc nhiều tham số hình thức. Khi các tham số
hình thức có cùng một kiểu thì ta viết chúng cách nhau bởi dấu phẩy (,). Trường
hợp các kiểu của chúng khác nhau hoặc giữa khai báo tham số truyền bằng tham
biến và truyền bằng tham trị thì ta phải viết cách nhau bằng dấu chấm phẩy (;).
+ Trong chương trình trên m là các tham số hình thức của thủ tục giaithua.
+ Khi gọi thủ tục giaithua(n) thì tham số thực n được truyền tương ứng
cho tham số hình thức m.
2.2.4.3. Tìm hiểu về hàm (Function) :
Bước 1: Tạo tình huống gợi vấn đề:
GV: Trình chiếu ví dụ:
Cho s := ‘abcdef’;

- Khi gọi thủ tục delete(s,2,2); Kết quả nhận được xâu s bị thay đổi và
khơng có giá trị nào mới sinh ra.
- Còn khi gọi hàm copy(s,2,2); Kết quả nhận được gồm có xâu s khơng
thay đổi và có thêm một giá trị mới là ‘bc’.
HS: Quan sát ví dụ và suy nghĩ
Bước 2: Trình bày vấn đề và đặt mục tiêu giải quyết
GV: Hàm là một chương trình con cho ta 1 giá trị kiểu vơ hướng. Hàm
tương tự như thủ tục nhưng trả về một giá trị thông qua tên hàm và lời gọi hàm
tham gia trong biểu thức.
HS: Vậy kiểu dữ liệu trả về là kiểu gì? Được xác định ở đâu
GV: Mục tiêu giải quyết là chúng ta phải xác định được các tham sơ, kiểu
dữ liệu và phải có biếu thức để lấy giá trị trả về cho tên hàm
Bước 3: Giải quyết vấn đề:
Cấu trúc một hàm tự đặt gồm:
FUNCTION <Tên hàm>(<Tham số hình thức : kiểu biến>):quả>;
[<Các khai báo hằng, biến, kiểu cục bộ>]
BEGIN
[<Các câu lệnh trong nội bộ hàm >]
<Tên hàm > := <Biểu thức>;
END ;
Ví dụ : Bài tốn tính giai thừa.
Program

giaithua;

Var

x : integer ;


Var

i, tichso : integer ;

Function
Begin

gt(n : integer):integer ;

Tichso:= 1 ;

18


If n > 1 Then

For i := 2 to n do

tichso:= tichso * i ;
End ;

gt := tichso;

BEGIN
Write (‘ Nhap vao so nguyen duong x = ’);
Readln (x) ;

Writeln (‘Voi x = ’, x , ‘ thi giai thua se la : x !
= ’ , gt(x));
END.


hàm.

Readln;

Bước 4: Rút ra kết luận:
Chú ý: Đối với hàm thì trong phần thân nhất định phải có câu lệnh:
<Tên hàm> := <Biểu thức>;
Vì vậy kiểu của kết quả phải là kiểu giá trị của biểu thức trả về cho tên

Trong đó:
- <Tên hàm> là tên tự đặt cần tuân thủ theo nguyên tắc đặt tên trong
Pascal.
- <Kiểu kết quả> là một kiểu vô hướng, là kiểu dữ liệu của giá trị trả về
cho hàm.
- Một hàm có thể có 1 hay nhiều tham số hình thức, khi có nhiều tham số
hình thức cùng một kiểu giá trị thì ta có thể viết chúng cách nhau bằng dấu phẩy
(,).
Trường hợp các tham số hình thức khác kiểu thì ta viết chúng cách nhau
bằng dấu chấm phẩy (;).
Trong hàm có thể sử dụng các hằng, kiểu, biến đã được khai báo trong
chương trình chính nhưng ta có thể khai báo thêm các hằng, kiểu, biến dùng
riêng trong nội bộ hàm. Chú ý là phải có một biến trung gian có cùng kiểu kết
quả của hàm để lưu kết quả của hàm trong q trình tính tốn để cuối cùng ta có
1 lệnh gán giá trị của biến trung gian cho tên hàm.
Ví dụ : function Tinh (x, y : integer ; z : real ) : real ;
Đây là một hàm số có tên là TINH với 3 tham số hình thức x, y, z. Kiểu
của x và y là kiểu số nguyên integer còn kiểu của z là kiểu số thực real. Hàm
TINH sẽ cho kết quả kiểu số thực real.
2.2.4.4. Truyền tham số cho trương trình con, phân biệt tham trị và

tham biến:
Bước 1: Tạo tình huống gợi vấn đề:
GV: Chiếu phần đầu của một chương trình con và cho học sinh nhận xét
Ví dụ:
19



×