SKKN: Phương pháp giảng dạy một số nội dung khó trong chương trình tin học 11
PHƯƠNG PHÁP GIẢNG DẠY MỘT SỐ NỘI DUNG KHÓ
TRONG CHƯƠNG TRÌNH TIN HỌC 11
I. LÝ DO CHỌN ĐỀ TÀI:
Công nghệ thông tin là một ngành khoa học đang phát triển rất mạnh mẽ.
Sự bùng nổ thông tin trong thời đại ngày nay, tốc độ phát triển của công nghệ
thông tin khiến cho người thầy không thể dạy hết mọi điều cho học trò, mà dù có
kéo dài thời gian để dạy hết mọi điều thì rồi các kiến thức đó cũng nhanh chóng
trở nên lạc hậu,
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.
Môn Tin học là một môn học mới mẻ của học sinh THPT, học sinh chưa có
khái niệm về công nghệ thông tin, khái niệm thuật toán trong các ngôn ngữ lập
trình, vì vậy rất khó cho việc dạy và học.
Vậy cần phải có phương pháp dạy và học cho một môn học hoàn toàn mới.
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ó).
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 quá trình nghiên cứu, học tập về ngôn ngữ lập trình lâu dài, qua đó nhà 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
GV : Trịnh Văn Thịnh
Trang 1
SKKN: Phương pháp giảng dạy một số nội dung khó trong chương trình tin học 11
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.
Ở 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.
Xuất phát từ cơ sở trên, tôi đã chọn đề tài “PHƯƠNG PHÁP GIẢNG DẠY
MỘT SỐ NỘI DUNG KHÓ 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ừ đó
cảm thấy yêu thích hơn môn tin học nói chung và nội dung về ngôn ngữ lập trình
nói riêng.
II. TỔ CHỨC THỰC HIỆN ĐỀ TÀI
1. Cơ sở lý luận
1.1 Mục đích chọn đề tài
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 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ự).
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
GV : Trịnh Văn Thịnh
Trang 2
SKKN: Phương pháp giảng dạy một số nội dung khó trong chương trình tin học 11
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 quá trình tính cũng có thể có nhiều chương trình con lồng ghép vào
nhau.
1.2. Phạm vi nghiên cứu
Nội dung nghiên cứu này sẽ nêu 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
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.
- Liên hệ một số hàm và thủ tục chuẩn đã học:
+ Hàm chuẩn, như hàm sin(x) mà chúng ta đã biết trong chương trước
có thể được xem như một chương trình con kiểu function với tên là sin và tham
số là x.
GV : Trịnh Văn Thịnh
Trang 3
SKKN: Phương pháp giảng dạy một số nội dung khó trong chương trình tin học 11
+ Thủ tục (procedure) không trả lại kết quả thông qua tên của nó, do vậy, ta
không thể viết các thủ tục trong biểu thức. Các lệnh Writeln, Readln trong chương
trước được xem như các thủ tục chuẩn.
* Đối tượng, kế hoạch và nội dung nghiên cứu
Đối tượng: Học sinh lớp 11A1, 11A3, 11A4, 11A5 Trường THPT Ngô Sĩ
Liên
Kế hoạch nghiên cứu: Trực tiếp trong các bài dạy
Nội dung nghiên cứu: Một số nội dung trong chương trình tin học 11
1.3. Thực trạng về thuận lợi và khó khăn
*. Thuận lợi
- Trường THPT Ngô Sĩ Liên nằm ở thị trấn Trảng bom nên đa số học sinh có
hộ khẩu ở thị trấn và một số vùng lân cận, điều đó đã dẫn đến việc có đa số học
sinh đã được tiếp xúc với máy vi tính và một số học sinh đã được học môn tin học
Pascal trong chương trình THCS
- Học sinh trong trường đa số có ý thức học tập tốt, ham học hỏi
- Đội ngũ giáo viên môn tin học nhiệt tình, có trách nhiệm, ham học hỏi.
- Nhà trường có 2 phòng thực hành tin học, mỗi phòng có hơn 30 máy vi
tính và 3 phòng học có ứng dụng CNTT là điều kiện tốt để các em học sinh tiếp
cận dễ dàng hơn với môn tin học nói chung và môn Pascal nói riêng
*. Khó khăn
- Học sinh được tuyển sinh vào lớp 10 với chất lượng đầu vào chưa thật sự
cao dẫn đến tư duy của các em còn nhiều hạn chế đối với những môn học đòi hỏi
tư duy cao.
- Đội ngũ giáo viên môn tin học nhiệt tình có tránh nhiệm tuy nhiên còn trẻ
nên kinh nghiệm giảng dạy chưa nhiều.
- Đặ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ư kiểu mảng, kiểu xâu 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
GV : Trịnh Văn Thịnh
Trang 4
SKKN: Phương pháp giảng dạy một số nội dung khó trong chương trình tin học 11
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 toá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ới nội dung môn Toán học, 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ử 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 hoà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 toá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 toá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 Toá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 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.
GV : Trịnh Văn Thịnh
Trang 5
SKKN: Phương pháp giảng dạy một số nội dung khó trong chương trình tin học 11
2. Nội dung, biện pháp thực hiện các giải pháp của đề tài
2.1. Kiểu mảng
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.
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.
Trên cơ sở đó, giáo viên sẽ đặt câu hỏi để học sinh tự suy nghĩ, trả lời và
thấy được việc cần thiết phải sử dụng một kiểu dữ liệu mới đó là kiểu dữ liệu có
cấu trúc
Cách thức tiến hành giảng dạy có thể được thực hiện trong giáo án qua cụ thể một
số mục đích yêu cầu sau:
* HS biết ý nghĩa và khái niệm được kiểu mảng một chiều
- Giáo viên có thể đặt vấn đề với học sinh thông qua giao tiếp cởi mở mà học sinh
có thể hiểu được vì sao cần phải sử dụng đến kiểu mảng một chiều. Có thể mô tả về sự giao tiếp
đó để bắt đầu vào nội dung bài học như sau:
Các vấn đề mà giáo viên đặt ra
Suy nghĩ và trả lời của học sinh
- Với các chương trình đã học em có - Số lượng biến sử dụng ít, chỉ 1, 2 hoặc
nhận xét gì về số lượng biến sử dụng 3 biến.
trong chương trình?
- Mở rộng: giả sử cần nhập điểm trung - Bằng số lượng học sinh và biến có kiểu
bình của các học sinh trong lớp thì phải thực
khai báo bao nhiêu biến và kiểu dữ liệu
của mỗi biến là gì?
- Khi thực hiện câu lệnh trong chương - Phải viết nhiều câu lệnh lặp lại
trình thì sẽ gặp trở ngại gì? (Đối với học
sinh toàn trường thì sao?)
- Kiểu dữ liệu mà chúng ta đã học khi sử - Không còn phù hợp
GV : Trịnh Văn Thịnh
Trang 6
SKKN: 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ác vấn đề mà giáo viên đặt ra
dụng có còn phù hợp không?
Suy nghĩ và trả lời của học sinh
- Em có nhận xét gì về kiểu dữ liệu của - Có cùng kiểu với nhau
các biến đó?
- Về số lượng biến thì thế nào?
- Nhiều nhưng là số hữu hạn
….
…
- Dựa trên phương pháp vấn đáp đó giáo viên có thể giới thiệu được việc cần
thiết của kiểu mảng một chiều
- HS 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”.
* 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ể
dẫn dắt để 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ắt đầu từ khai báo đã biết
Var : ;
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;
Tuy nhiên trên thực tế thì kiểu DiemTrungBinh chưa có và 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 = array [Kiểu chỉ số] of :
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 = array [Kiểu chỉ số] of ;
Var : ;
Đây là cách thứ nhất để khai báo
Trong đó:
GV : Trịnh Văn Thịnh
Trang 7
SKKN: Phương pháp giảng dạy một số nội dung khó trong chương trình tin học 11
- 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;
Đây chính là cách thứ nhất để khai báo mảng. Tiếp theo đó giáo viên cho
học sinh nhận xét về khai báo trên có đặc điểm giống như tính chất bắc cầu của các
biểu thức. và cho học sinh tự viết ra một cách khác.
HS sẽ nhận xét được . : ;
Mà = array [Kiểu chỉ số] of ;
Nên có thể thay thế câu lệnh trên bằng câu lệnh sau:
Var : array[Kiểu chỉ số] of ;
Đây chính là cách thứ 2 để khai báo:
Như vậy với phương pháp giảng dạy 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. Học sinh sẽ cảm thấy hứng thú và nhớ bài ngay trên lớp.
2.2. 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ần gợi ý để học sinh nhận xét và thấy rõ được đặc
điểm của kiểu xâu. Có thể dựa vào các mô phỏng sau và cho học sinh nhận xét.
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
GV : Trịnh Văn Thịnh
9
3
C
Trang 8
SKKN: Phương pháp giảng dạy một số nội dung khó trong chương trình tin học 11
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
Dãy A và dãy B đã quen thuộc trong các bài tập mảng, còn dãy C có đặc điểm mới
đó là mỗi phần tử trong dãy là một kí tự. Mà một dãy các kí tự thì có thể xem là
một xâu kí tự. Để làm việc với dãy kí tự này thì Pascal hỗ trợ cho người lập trình
sử dụng một kiểu dữ liệu có tính tương đồng với kiểu mảng một chiều là kiểu xâu.
Từ cách dẫn dắt đặt vấn đề trên học sinh có thể hiểu và xem xâu kí tự là một
mảng một chiều mà mỗi phần tử là một kí tự. Điều đó sẽ có ích rất nhiều trong việc
sử dụng các câu lệnh để duyệt qua các kí tự như (While…do…, hay For…to…
do…) và cách để tham chiếu đến một kí tự nào đó trong xâu như (C[3], C[4],…)
Mặc dù xâu có thể xem như mảng một chiều, tuy nhiên khi làm việc với dãy
hữu hạn các kí tự mà xem như một xâu thì người lập trình được sử dụng rất nhiều
câu lệnh cũng như các thủ tục và hàm, điều này sẽ thuận lợi hơn rất nhiều trong khi
viết chương trình. Từ đó có thể nhấn mạnh để học sinh hiểu rõ hơn về vai trò của
kiểu xâu
2.3. Chương trình con:
Ngoài 2 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 biến, 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ể từng phần như sau:
2.3.1. Một số khái niệm về biến
a. Biến toàn cục (global variable): Còn được gọi là biến chung, là biến
được khai báo ở đầu chương trình, nó được sử dụng bên trong chương trình chính
và cả bên trong chương trình con. Biến toàn cục sẽ tồn tại trong suốt quá trình
thực hiện chương trình.
GV : Trịnh Văn Thịnh
Trang 9
SKKN: Phương pháp giảng dạy một số nội dung khó trong chương trình tin học 11
b. Biến cục bộ (local variable): Còn được gọi là biến riêng, là biến được
khai báo ở đầu chương trình con, và nó chỉ được sử dụng bên trong thân chương
trình con hoặc bên trong thân chương trình con khác nằm bên trong nó (các
chương trình con lồng nhau). Biến cục bộ chỉ tồn tại khi chương trình con đang
hoạt động, nghĩa là biến cục bộ sẽ được cấp phát bộ nhớ khi chương trình con
được gọi để thi hành, và nó sẽ được giải phóng ngay sau khi chương trình con kết
thúc.
c. Tham số thực hay còn gọi là Tham trị (actual parameter) là một
tham số mà nó có thể là một biến toàn cục, một biểu thức hoặc một giá trị số
(cũng có thể biến cục bộ khi sử dụng chương trình con lồng nhau) mà ta dùng
chúng khi truyền giá trị cho các tham số hình thức tương ứng của chương trình
con.
d. Tham số hình thức hay còn gọi là Tham biến (formal parameter) là
các biến được khai báo ngay sau Tên chương trình con, nó dùng để nhận giá trị
của các tham số thực truyền đến. Tham số hình thức cũng là một biến cục bộ, ta
có thể xem nó như là các đối số của hàm toán học.
2.3.2. Lời gọi chương trình con
Để chương trình con được thi hành, ta phải có lời gọi đến chương trình con,
lời gọi chương trình con thông qua tên chương trình con và danh sách các tham số
tương ứng (nếu có). Các qui tắc của lời gọi chương trình con:
Trong thân chương trình chính hoặc thân chương trình con, ta chỉ có thể gọi
tới các chương trình con trực thuộc nó.
Trong chương trình con, ta có thể gọi các chương trình con ngang cấp đã được
thiết lập trước đó.
2.3.3. Thủ tục (Procedure):
Thủ tục là một đoạn cấu trúc chương trình được chứa bên trong chương
trình Pascal như là một chương trình con. Thủ tục được đặt tên và có thể chứa
danh sách tham số hình thức (formal parameters). Các tham số này phải được đặt
trong dấu ngoặc đơn ( ). Ta có thể truy xuất thủ tục bằng cách gọi tên của thủ
tục. Chương trình sẽ tự động truy xuất thủ tục đúng tên đã gọi và thực hiện các
GV : Trịnh Văn Thịnh
Trang 10
SKKN: Phương pháp giảng dạy một số nội dung khó trong chương trình tin học 11
lệnh chứa trong thủ tục đó. Sau khi thực hiện thủ tục xong, chương trình sẽ trở lại
ngay lập tức sau vị trí câu lệnh gọi thủ tục đó.
Có 2 loại thủ tục:
+ Thủ tục không tham số
+ Thủ tục có tham số.
* 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) ? ‘ ) ; Readln (yn) ;
End ;
END.
Trong chương trình trên, 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ộ.
GV : Trịnh Văn Thịnh
Trang 11
SKKN: Phương pháp giảng dạy một số nội dung khó trong chương trình tin học 11
Ví dụ2 : nhập vào một mảng 1 chiều gồm n phần tử là các số nguyên tính và đưa
ra màn hình tổng các số nguyên lớn hơn 0.
PROGRAM tong_mang;
Uses crt;
Var a:array[1..100] of integer; n:integer;
PROCEDURE nhap;
Var i:integer;
Begin
Write(‘nhap n=’);
readln(n);
For i:=1 to n do
Begin
Write(‘a[’,i,’]=’);
Readln(a[i]);
End;
End;
Procedure tinhtong;
Var s,i:integer;
Begin
S:=0;
For i:=1 to n do
If a[i]>0 then
s:=s+a[i];
End;
BEGIN
Clrscr;
Nhap;
Tinhtong;
Readln;
END.
Trong chương trình trên a là 1 kiểu mảng, n là 1 kiểu số nguyên, 2 biến đó
là 2 biến toàn cục. thủ tục nhap có vai trò nhập n phần tử từ bàn phím vào mảng a.
Các biến i, s là các biến cục bộ. ở chương trình trên chúng ta thấy phần chương
trình chính nhìn rất gọn gàng nhờ các lời gọi chương trình con. Những công việc
chủ yếu đều đã được giải quyết ở các chương trình con.
GV : Trịnh Văn Thịnh
Trang 12
SKKN: 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ấu trúc của thủ tục có 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 ;
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ị (sẽ học ở phần sau ) thì ta phải viết cách nhau bằng
dấu chấm phẩy (;).
Ví dụ : 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.
GV : Trịnh Văn Thịnh
Trang 13
SKKN: Phương pháp giảng dạy một số nội dung khó trong chương trình tin học 11
- 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.3.4. Hàm (Function) :
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.
Cấu trúc một hàm tự đặt gồm:
FUNCTION () : ;
{ 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 ... }
END ;
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, biểu diễn kết quả giá trị của 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.
GV : Trịnh Văn Thịnh
Trang 14
SKKN: Phương pháp giảng dạy một số nội dung khó trong chương trình tin học 11
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.
Ví dụ :
Bài toán tính giai thừa.
Program giaithua;
Var 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 :
Readln;
END.
x ! = ‘, gt(x));
Khai báo kiểu dữ kiệu cho các tham số hình thức trong thủ tục và hàm, ta
cần phải chú ý điểm sau:
Nếu kiểu dữ liệu của các tham số hình thức là các kiểu dữ liệu có cấu trúc
(kiểu array, string, kiểu record,... ) thì việc khai báo kiểu dữ liệu cho các tham số
hình thức nên được khai báo theo cách gián tiếp, tức là phải thông qua từ khóa
TYPE.
Ví dụ :
Procedure
Xuat1(hoten : string[25]);
Procedure Xuat2(mang: array[1..10] of integer);
Hai chương trình con Xuat1 và Xuat2 đều bị lỗi ở phần khai báo kiểu dữ liệu
cho hai tham số hình thức là hoten và mang.
GV : Trịnh Văn Thịnh
Trang 15
SKKN: Phương pháp giảng dạy một số nội dung khó trong chương trình tin học 11
Để khắc phục lỗi này, ta sẽ khai báo gián tiếp một kiểu dữ liệu str25 và
M10 thông qua từ khóa TYPE như sau:
TYPE
Str25=string[25]; {Str25 là một kiểu chuỗi có độ dài 25}
M10=Array[1..10] of integer; {M10 là một kiểu dữ kiệu mảng có 10 phần tử
nguyên}
Tiếp đến, dùng 2 kiểu dữ liệu mới định nghĩa Str25 và M10 để định kiểu cho
các tham số hình thức hoten và mang như sau:
Procedure Xuat1(hoten : Str25);
Procedure Xuat2(mang: M10);
2.3.5 Truyền tham số cho trương trình con
Khi truyền tham số trong Pascal, đò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. Một số định nghĩa và qui
tắc về truyền tham số trong Pascal:
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
GV : Trịnh Văn Thịnh
Trang 16
SKKN: Phương pháp giảng dạy một số nội dung khó trong chương trình tin học 11
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.
Ví dụ1: Viết chương trình tính lập phương a3.
PROGRAM vidu_thamtri_1;
VAR num: integer;
{num là biến toàn cục}
PROCEDURE LapPhuong(var a:integer);{a là một tham biến}
Begin
a:=a*a*a;
End;
BEGIN
write(‘Nhập số cần tính lập phương num = ‘);
readln(num);
LapPhuong(num); {tham số thực num được truyền cho tham biến a}
writeln(‘Lập phương của số vừa nhập = ‘, num);
readln;
END.
Ví dụ:
PROGRAM vidu_Thamtri_2;
VAR
a, b : integer ; {biến toàn cục }
PROCEDURE thamso (x : integer ; VAR y : integer ) ;{ x: là tham số trị , còn y là
tham số biến}
BEGIN
x := x + 1 ;
y := y + 1 ;
Writeln (‘Trong procedure thamso, ... ‘) ;
Writeln (‘ Hai số của bạn là a = ‘, x : 3, ‘ và b = ‘, y : 3 ) ;
END ;
BEGIN
Write (‘ Nhập vào 2 trị số nguyên a, b : ‘) ;
Readln (a, b) ;
Writeln (‘ Ban đầu, Bạn đã nhập vào a = ‘, a : 3, ‘và b = ‘, b : 3 ) ;
thamso (a, b) ;{tham số thực a truyền cho tham số trị x tham số thực
b truyền cho tham số biến y }
Writeln (‘ Ngoài procedure thamso, ... ‘);
Writeln (‘ Hiện nay, số a là ‘, a : 3, ‘ và b là ‘, b : 3 )
Writeln (‘ Ta thấy, a không đổi và b thay đổi ! ) ;
Readln;
END.
GV : Trịnh Văn Thịnh
Trang 17
SKKN: Phương pháp giảng dạy một số nội dung khó trong chương trình tin học 11
Ví dụ2: giải bài toán phương trình bậc 2 ax2+bx+c=0;
Cách 1: theo phương pháp không dùng chương trình con.
Program giai_pt_bac2;
Uses crt;
Var a, b, c, d: Real;
Begin
Clrscr;
Writeln('Nhap 3 he so cua phuong trinh:');
Write('a = '); Readln(a);
Write('b = '); Readln(b);
Write('c = '); Readln(c);
If a = 0 Then
If b = 0 Then
If c = 0 Then Writeln('Phuong trinh co vo so nghiem!')
Else Writeln('Phuong trinh vo nghiem!')
Else Writeln('Phuong trinh co mot nghiem: x = ',-c/b:0:1)
Else
Begin
d := b * b - 4 * a * c;
If d < 0 Then Writeln('Phuong trinh vo nghiem!')
Else
If d = 0 Then Writeln('Pt co nghiem kep: x1 = x2 = ',-b / (2 * a):0:1)
Else
Begin
Writeln('Phuong trinh co hai nghiem phan biet:');
Writeln('x1 = ',(-b + sqrt(d)) / (2 * a):0:1);
Writeln('x2 = ',(-b - sqrt(d)) / (2 * a):0:1);
End;
End;
Readln;
End.
Cách 2: theo phương pháp dùng chương trình con.
Mục tiêu là chia bài toán ban đầu thành những bài toán nhỏ độc lập. Chẳng hạn:
Ta sử dụng chương trình con thành hai bài toán :
T1: Giải phương trình bậc nhất
T2: Giải phương trình bậc hai
GV : Trịnh Văn Thịnh
Trang 18
SKKN: Phương pháp giảng dạy một số nội dung khó trong chương trình tin học 11
Program giai_pt_bac2;
Uses crt;
Var a, b, c: Real;
Procedure ptb1(m,n:Real);
Begin
If m = 0 Then
If n = 0 Then Writeln('Phuong trinh co vo so nghiem!')
Else Writeln('Phuong trinh vo nghiem!')
Else Writeln('Phuong trinh co mot nghiem: x = ',-n/m:0:1)
End;
Procedure ptb2(x, y, z: Real);
Var d: Real;
Begin
D := y * y - 4 * x * z;
If d < 0 Then Writeln('Phuong trinh vo nghiem!')
Else
If d = 0 Then Writeln('Pt co nghiem kep: x1 = x2 = ',-y / (2 * x):0:1)
Else
Begin
Writeln('Phuong trinh co hai nghiem phan biet:');
Writeln('x1 = ',(-y + sqrt(d)) / (2 * x):0:1);
Writeln('x2 = ',(-y - sqrt(d)) / (2 * x):0:1);
End;
End;
Begin
Clrscr;
Writeln('Nhap 3 he so cua phuong trinh:');
Write('a = '); Readln(a);
Write('b = '); Readln(b);
Write('c = '); Readln(c);
If a=0 Then ptb1(b, c)
Else ptb2(a, b, c);
Readln
End.
Ở đây ta lại thấy trong bài toán trên việc giải phương trình bậc hai có ba trường
hợp xảy ra. Ta nên chia tiếp thành 5 bài toán nhỏ như sau và cách 2 có thế viết lại
như sau:
T1: Giải phương trình bậc nhất
T2: > 0
T3: = 0
T4: < 0
T5: Giải phương trình bậc hai
GV : Trịnh Văn Thịnh
Trang 19
SKKN: Phương pháp giảng dạy một số nội dung khó trong chương trình tin học 11
Var a, b, c, d: Real;
Procedure ptb1(m, n : Real);
Begin
If m = 0 Then
If n = 0 Then Writeln('Phuong trinh co vo so nghiem!')
Else Writeln('Phuong trinh vo nghiem!')
Else Writeln('Phuong trinh co mot nghiem: x = ',-n / m:0:1)
End;
Procedure denta_am;
Begin
Writeln('Phuong trinh vo nghiem!');
End;
Procedure denta_0(p, q: Real);
Begin
Writeln('Phuong trinh co nghiem kep: x1 = x2 = ',-q / (2 * p):0:1)
End;
Procedure denta_duong(i, j: Real);
Begin
Writeln('Phuong trinh co hai nghiem phan biet:');
Writeln('x1 = ',(-j + sqrt(d)) / (2 * i):0:1);
Writeln('x2 = ',(-j - sqrt(d)) / (2 * i):0:1);
End;
Procedure ptb2(x, y, z: Real);
Begin
d := y * y - 4 * x * z;
If d < 0 Then denta_am
Else
If d = 0 Then denta_0(x, y)
Else denta_duong(x, y);
End;
Begin
Writeln('Nhap 3 he so cua phuong trinh:');
Write('a = '); Readln(a);
Write('b = '); Readln(b);
Write('c = '); Readln(c);
If a = 0 Then ptb1(b, c)
Else ptb2(a, b, c);
Readln
End.
GV : Trịnh Văn Thịnh
Trang 20
- Xem thêm -