SỞ GIÁO DỤC VÀ ĐÀO TẠO ĐỒNG NAI
TRƯỜNG THPT NGÔ SĨ LIÊN
Số:..........................
SÁNG KIẾN KINH NGHIỆM
Giảng dạy nội dung khó trong tin học 11
bằng phương pháp đặt và giải quyết vấn đề
Người thực hiện: Trịnh Văn Thịnh
Lĩnh vực nghiên cứu:
- Quản lý giáo dục
- Phương pháp dạy học bộ môn: Tin Học 11
- Lĩnh vực khác: .................................................
Có đính kèm: Các sản phẩm không thề hiện trong bản in SKKN
Mô hình
Phần mềm
Phim ảnh
Hiện vật khác
Năm học: 2014 – 2015
SƠ LƯỢC LÝ LỊCH KHOA HỌC
I. THÔNG TIN CHUNG VỀ CÁ NHÂN
1. Họ và tên: Trịnh Văn Thịnh
2. Ngày tháng năm sinh: 24 – 04 – 1981
3. Nam, nữ: Nam
4. Địa chỉ: Xã đồi 61 – Trảng Bom – Đồng Nai
5. Điện thoại: 0613 866 499
6. Fax:
(CQ)/ ĐTDĐ: 0976 848 737
E-mail:
7. Chức vụ: Giáo viên
8. Nhiệm vụ được giao: giảng dạy môn tin học THPT
9. Đơn vị công tác: Trường THPT Ngô Sĩ Liên
II. TRÌNH ĐỘ ĐÀO TẠO
- Học vị (hoặc trình độ chuyên môn, nghiệp vụ) cao nhất: Cử nhân
- Năm nhận bằng: 2005
- Chuyên ngành đào tạo: Tin học
III. KINH NGHIỆM KHOA HỌC
- Lĩnh vực chuyên môn có kinh nghiệm: Giảng dạy môn tin học THPT
Số năm có kinh nghiệm: 7 năm
- Các sáng kiến kinh nghiệm đã có trong 5 năm gần đây: 02
Sáng kiến kinh nghiệm
GIẢNG DẠY NỘI DUNG KHÓ TRONG TIN HỌC 11
BẰNG PHƯƠNG PHÁP ĐẶT VÀ GIẢI QUYẾT VẤN ĐỀ
I. LÝ DO CHỌN ĐỀ TÀI:
Từ năm học 2006 – 2007, Bộ Giáo dục & Đào tạo đã đưa môn tin học vào
chương trình môn học bắt buộc của khối THPT. Tuy nhiên từ khi có vai trò là một
môn học bắt buộc đến nay thì môn tin học vẫn được xem là một môn phụ, điều
này đã dẫn tới việc nhà trường chưa chú trọng, giáo viên chưa đam mê đầu tư
nghiên cứu, học sinh thì chưa coi trọng môn học.
Do đó người thầy cần phải tìm ra phương pháp dạy học tích cực hơn để
tăng hiệu quả dạy và học. Dạy học sinh cách chủ động, phương pháp học, cách
học những điều mà thực tế đòi hỏi thay vì chuyển tải một lượng kiến thức quá
nhiều đến mức học sinh không thể nhớ nổi hoặc có nhớ lúc học, còn lúc cần vận
dụng thì quên hết.
Xuất phát từ thực tiễn giảng dạy tại trường THPT NGÔ SĨ LIÊN 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ó).
Ở một khía cạnh khác, trong chương trình tin học lớp 11, ngoài những nội
dung đã được Bộ GD&ĐT đưa vào phần nội dung giảm tải. Vẫn còn một số nội
dung mà những học sinh mới được tiếp xúc với môn học Pascal cảm thấy khó tiếp
thu, khó hiểu và không làm được các bài tập áp dụng.
Dựa trên các giải pháp từ sáng kiến của bản thân năm học 2013 – 2014
"PHƯƠNG PHÁP GIẢNG DẠY MỘT SỐ NỘI DUNG KHÓ TRONG
CHƯƠNG TRÌNH TIN HỌC 11", đã được hội đồng khoa học của sở Giáo dục
và Đào tạo đánh giá xếp loại. Tôi đã phát triển theo hướng khắc phục một số hạn
chế và hướng mở rộng đã nêu ở đề tài trước để tìm ra một giải pháp mới cụ thể
hơn, áp dụng trong quá trình giảng dạy đạt hiệu quả hơn. Đó chính là các giải pháp
trong đề tài “GIẢNG DẠY NỘI DUNG KHÓ TRONG TIN HỌC 11 BẰNG
PHƯƠNG PHÁP ĐẶT VÀ GIẢI QUYẾT VẤN ĐỀ”, thực hiện trong năm học
2014 - 2015.
GV : Trịnh Văn Thịnh
Trang 1
Sáng kiến kinh nghiệm
II. CƠ SỞ LÝ LUẬN VÀ THỰC TIỄN
Trong sáng kiến kinh nghiệm của tôi năm học 2013 – 2014 "Phương pháp
giảng dạy một số nội dung khó trong chương trình tin học 11" đã nêu lên một
số vấn đề sau:
Trong quá 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 được xem là khó đó là: 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ự), Kiểu tệp (dữ liệu được lưu trữ lâu dài) và Chương trình
con (lập trình có cấu trúc)
Nội dung nghiên cứu đã trình bày các phương pháp để làm rõ một số vấn đề
sau:
Kiểu dữ liệu mảng một chiều là cần thiết trong các chương trình có sử
dụng nhiều giá trị có kiểu dữ liệu giống nhau
Tại sao kiểu xâu có thể xem như mảng một chiều và khi sử dụng thì giống
kiểu mảng một chiều ở những điểm nào
Tại sao phải sử dụng kiểu tệp, khi làm việc với kiểu tệp thì cần phải chú ý
những điều gì
Chương trình con được viết dưới hai dạng: thủ tục (procedure) và hàm
(function).
- So sánh cấu trúc của 2 kiểu chương trình con này thì tương tự với nhau,
mặc dù cách truy xuất của chúng có khác nhau và cách trao đổi thông tin trong
mỗi kiểu cũng có điểm khác nhau. Hàm (function) trả lại một giá trị kết quả vô
hướng thông qua tên hàm và hàm được sử dụng trong biểu thức hoặc các thủ tục.
- Các giải pháp đã thực hiện trong sáng kiến kinh nghiệm cũ đã một phần
giải quyết được cách tiếp cận của học sinh đối với một vấn đề, một nội dung mới,
đơn giản hóa cách suy nghĩ, đơn giản hóa kiến thức mà vẫn đảm bảo được nội
dung của chương trình học.
- Các giải pháp của đề tài này là sử dụng một phương pháp dạy học cụ thể là
đặt và giải quyết vấn đề để giảng dạy hiệu quả hơn những nội dung trên.
* Các hình thức và cấp độ được áp dụng trong đề tài này là.
- Vấn đáp đặt và giải quyết vấn đề
“Giáo viên xây dựng một hệ thống câu hỏi để gợi ý, dẫn dắt học sinh thực
hiện tất cả các pha của dạy học đặt và giải quyết vấn đề, ngoại trừ pha thể chế hoá.
Ở mức độ thấp hơn thì chính giáo viên thực hiện việc tạo tình huống có vấn đề và
trình bày vấn đề.
GV : Trịnh Văn Thịnh
Trang 2
Sáng kiến kinh nghiệm
Học sinh, nhờ vào hệ thống câu hỏi gợi ý dẫn dắt của giáo viên mà tự giác và
tích cực nghiên cứu phát hiện, trình bày và giải quyết vấn đề.
Tri thức không được cho dưới dạng có sẵn và trực tiếp, mà xuất hiện trong
quá trình hình thành và giải quyết vấn đề, được khám phá nhờ quá trình tương tác
giữa thầy và trò, trong đó trò đóng vai trò chính.”[5]
- Thuyết trình đặt và giải quyết vấn đề
Là cấp độ thấp nhất của dạy học đặt và giải quyết vấn đề.
“Giáo viên thực hiện tất cả các khâu của hình thức dạy học này: Tạo tình
huống gợi vấn đề, trình bày vấn đề, trình bày quá trình suy nghĩ tìm kiếm, dự đoán
cách thức giải quyết vấn đề (chứ không đơn thuần trình bày lời giải), … Giáo viên
trình bày cả quá trình tìm kiếm của mình, có lúc thành công, có lúc thất bại, có lúc
phải điều chỉnh phương hướng nhiều lần mới đi đến kết quả.
Nói cách khác, giáo viên phải đóng vai một học sinh đang tìm cách phát hiện
và giải quyết vấn đề : tự đặt ra cho mình các câu hỏi, các nghi vấn, tự mày mò tìm
kiếm các phương án giải quyết, rồi tự trả lời, … Điều quan trọng là trong quá trình
này, giáo viên cần để lại những “khoảng lặng” để cho học sinh (người học) đủ thời
gian cùng tham gia vào quá trình suy nghĩ, tìm kiếm câu trả lời như chính học sinh
giả tưởng, chứ không cho câu trả lời ngay sau khi vừa đặt ra một câu hỏi, một nghi
vấn nào đó.
Học sinh theo dõi quá trình nghiên cứu đặt và giải quyết vấn đề được trình
bày bởi giáo viên. Trong quá trình này, họ cũng trải qua những thời điểm, những
cảm xúc và thái độ khác nhau như một học sinh đang thực sự tham gia quá trình
nghiên cứu, nhưng không trực tiếp giải quyết vấn đề.
Tri thức, mặc dù không được khám phá bởi chính học sinh, nhưng cũng
không được truyền thụ dưới dạng có sẵn và trực tiếp, mà nảy sinh trong quá trình
đặt và giải quyết vấn đề của giáo viên.”[5]
* Các bước chủ yếu của dạy học giải quyết vấn đề
“Bước 1: Tạo tình huống gợi vấn đề
Bước 2: Trình bày vấn đề và đặt mục tiêu giải quyết
Bước 3: Giải quyết vấn đề
a) Tìm giải pháp
b) Trình bày giải pháp
HS trình bày lại toàn bộ từ việc phát biểu vấn đề tới giải pháp. Nếu vấn đề là
một đề bài cho sẵn thì có thể không cần phát biểu lại vấn đề.
Bước 4: Rút ra kết luận
Kiểm tra, đánh giá lời giải, kết quả và cả cách thức tìm kiếm lời giải
Thể chế hóa kiến thức cần lĩnh hội
GV : Trịnh Văn Thịnh
Trang 3
Sáng kiến kinh nghiệm
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 những khả năng ứng dụng kết quả
Đề xuất những vấn đề mới có liên quan nhờ xét tương tự, khái quát hóa, lật
ngược vấn đề,... và giải quyết nếu có thể.”[5]
Trong đề tài này tôi đã đưa ra giải pháp thay thế một phần giải pháp đã có
để cụ thể hóa phương pháp giảng dạy bằng cách vận dụng các hình thức và cấp độ
cùng với các bước chủ yếu của phương pháp dạy học đặt và giải quyết vấn đề. Các
giải pháp khi thực hiện đề tài này chỉ chủ yếu áp dụng 2 cấp độ là "Vấn đáp đặt và
giải quyết vấn đề" và "Thuyết trình đặt và giải quyết vấn đề" cùng với các bước để
thực hiện trong cả 4 nội dung đã được đề cập đó là : Kiểu mảng 1 chiều, kiểu xâu,
kiểu tệp và chương trình con.
GV : Trịnh Văn Thịnh
Trang 4
Sáng kiến kinh nghiệm
III. TỔ CHỨC THỰC HIỆN CÁC GIẢI PHÁP
1. Giải pháp giảng dạy kiểu mảng một chiều
Phương pháp giảng dạy khi bắt đầu cho học sinh làm quen với kiểu mảng
một chiều với cấp độ vấn đáp và thuyết trình
“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 toán hay không hay viết
chương trình có tối ưu không”[6]. Cụ thể thực hiện như sau:
* Nội dung 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 toà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ũ:
GV : Trịnh Văn Thịnh
Trang 5
Sáng kiến kinh nghiệm
……
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:
- 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”.
* Nội dung 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.”[6]
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;
GV : Trịnh Văn Thịnh
Trang 6
Sáng kiến kinh nghiệm
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.
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 chính là cách thứ 2 để khai báo kiểu dữ liệu mảng một chiều:
GV : Trịnh Văn Thịnh
Trang 7
Sáng kiến kinh nghiệm
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.
* Nội dung 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:
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.
GV : Trịnh Văn Thịnh
Trang 8
Sáng kiến kinh nghiệm
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
HS: nhận xét:
9
3
C
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”[6]
“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ự.”[6]
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ó phải 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.
GV : Trịnh Văn Thịnh
Trang 9
Sáng kiến kinh nghiệm
Đặ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ể tự tri giác được các kiến thức sau:
- Bản chất của kiểu xâu là kiểm mảng một chiều mà mỗi phần tử là một kí
tự
- Hoàn toà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)
GV : Trịnh Văn Thịnh
Trang 10
Sáng kiến kinh nghiệm
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:
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 sach
giáo khoa. Hình thành nên khả năng tư duy tự học và sáng tạo.
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.
GV : Trịnh Văn Thịnh
Trang 11
Sáng kiến kinh nghiệm
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 đề [6]
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, Quan sát kết quả
như tính tổng trong bài mảng một chiều
hay giải phương trình bậc 2,....
- Thoát khỏi chương trình và hỏi: Kết
quả sau khi thực hiện các chương trình - TL:Chạy lại 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ì toàn bộ dữ liệu
trong chương 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 - Lưu trữ ở bộ nhớ ngoài và các đơn vị
được lưu trữ ở đâu ? và các đơn vị lưu lưu trữ là các tệp.
trữ là gì?
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:”[6]
Trình bày vấn đề đặt ra
Mục tiêu giải quyết
- Khai báo bao nhiêu biến tệp?
- Bằng với số tệp trong chương trình.
- 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 hiện như - Khi lập trình pascal trong chương trình
thế nào?
tin 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
GV : Trịnh Văn Thịnh
Trang 12
Sáng kiến kinh nghiệm
Trình bày vấn đề đặt ra
Mục tiêu giải quyết
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 với việc - Cú pháp tương tự. và chỉ cần đưa thêm
nhập từ bàn phím, và ghi ra màn hình
biến tệp vào trong tham số của thủ tục
nhập, xuất
- Sau khi thao tác với tệp xong có phải - phải thực hiện lưu tệp bằng thao tác
đóng tệp lạ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ố nguyên. Hãy viết
chương trình tính tổng các số nguyên đó 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
Var f1, f2 : text;
* Gắn tên tệp:
Cú pháp: assign (<tên biết 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’);
GV : Trịnh Văn Thịnh
Trang 13
Sáng kiến kinh nghiệm
* 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 khao, 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:
Hoặc:
+ Ghi tệp:
read(<biến tệp>,<danh sách biến>);
readln(<biến tệp>,<danh sách biến>);
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);
GV : Trịnh Văn Thịnh
Hoặc: readln(f1,a,b);
Trang 14
Sáng kiến kinh nghiệm
+ 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 luôn luôn đượ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ừ 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, để 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
GV : Trịnh Văn Thịnh
Trang 15
Sáng kiến kinh nghiệm
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,….
4. Giải pháp giảng nội dung về chương trình con:
“Ngoà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 có thể trình
bày theo phương pháp đã nêu như sau:”[6]
* Nội dung 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 s : string;
i : byte;
Begin
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);
Readln
End.
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.
GV : Trịnh Văn Thịnh
Trang 16
Sáng kiến kinh nghiệm
- 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ì?
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ó
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>:=<Biểu 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?
GV : Trịnh Văn Thịnh
Trang 17
Sáng kiến kinh nghiệm
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ể.
* Nội dung 2: Tìm hiểu về thủ tục (Procedure):
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 ;
GV : Trịnh Văn Thịnh
Trang 18
Sáng kiến kinh nghiệm
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) ?’ ) ; Readln (yn) ;
End ;
END.
- 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 ;
GV : Trịnh Văn Thịnh
Trang 19
Sáng kiến kinh nghiệm
Ví dụ 2 : Tính giai thừa của một số
Program Tinh_Giai_thua ;
Var
n : integer ; gt : real ;
Procedure giaithua (m : integer );
Var
i : integer ;
Begin
gt := 1 ;
For i := 1 to m do gt := gt * i ;
End;
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.
4. 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:
+ 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
GV : Trịnh Văn Thịnh
Trang 20
Sáng kiến kinh nghiệm
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.
* Nội dung 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>):<Kiểu kết 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 ;
GV : Trịnh Văn Thịnh
Trang 21
Sáng kiến kinh nghiệm
Ví dụ : Bài toán tính giai thừa.
Program
Var
giaithua;
x : integer ;
Function gt(n : integer):integer ;
Var
i, tichso : integer ;
Begin
Tichso:= 1 ;
If n > 1 Then
For i := 2 to n do
tichso:= tichso * i ;
gt := tichso;
End ;
BEGIN
Write (‘ Nhap vao so nguyen duong x = ’);
Readln (x) ;
Writeln (‘ Voi x = ’, x , ‘ thi giai thua se la : x ! = ’ , gt(x));
Readln;
END.
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 hàm
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 quá trình tính toá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.”[6]
GV : Trịnh Văn Thịnh
Trang 22
Sáng kiến kinh nghiệ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.
* Nội dung 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ụ:
procedure thamso (x : integer ; var y : integer ) ;
HS: Nhận xét bằng sự nghi vấn: khai báo tham số hình thức ở đây khác nhau
của hai tham số x và y
GV: Như vậy khi xây dựng chương trình con không phải tham số hình thức
lúc nào cũng được khai báo giống nhau mà tùy vào từng trường hợp để khai báo.
Bước 2: Trình bày vấn đề và dặt mục tiêu giải quyết
Truyền tham số khi viết và sử dụng chương trình con đòi hỏi phải có
sự tương ứng về tên của kiểu dữ liệu của các tham số hình thức và tham số thực.
“Những tham số hình thức nằm sau từ khóa VAR gọi là tham số biến
(variable parameter). Với tham số biến, các tham số thực bắt buộc phải là biến
chứ không được là giá trị. Khi giá trị của tham số biến thay đổi thì nó sẽ làm thay
đổi giá trị của tham số thực tương ứng và khi ra khỏi chương trình con đó, tham
số thực vẫn giữ giá trị đã được thay đổi đó.
Những tham số hình thức không đứng sau từ khóa VAR gọi là tham số trị
(value parameter), khi đó các tham số thực có thể là một biến, một biểu thức, một
hằng, hoặc một giá trị số. Các tham số trị nhận giá trị từ tham số thực khi truyền như
là giá trị ban đầu, khi giá trị của tham số trị thay đổi thì nó sẽ không làm thay đổi giá
trị của tham số thực, nghĩa là giá trị của tham số thực sau khi thoát khỏi chương trình
con vẫn luôn bằng với giá trị của tham số thực trước khi truyền đến chương trình con
đó. Do vậy một tham trị không bao giờ là kết quả tính toán của chương trình
con.”[6]
Chúng ta sẽ xét ví dụ để làm rõ vấn đề trên
GV : Trịnh Văn Thịnh
Trang 23