Function và cách lựa chọn trong Pascal

Thứ tư - 29/07/2020 10:19
Các Function là một chương trình con (CTC) tính toán một giá trị kiểu vô hướng hoặc kiểu con trỏ (sẽ được trình bày sau này), điều đó cũng có nghĩa là kiểu kết qua của Function trong lời khai báo cũng phải ghi là kiểu vô hướng hoặc kiểu con trỏ.
Bên trong Function bắt buộc ta phải có một lệnh gán giá trị kết quả cho Ten_Ham :
Tên_Hàm := <Biểu thức> ;
Hết sức lưu ý là Ten_Ham chỉ nên dùng ở lệnh gán cuối cùng này, còn trong Function nếu cần dùng nhiều lần tên Function thì nên khai báo thêm một biến địa phương. Chú ý rằng, giá trị của hàm chí được phép gán duy nhất một lần khi thực hiện hàm. Điều lưu ý này sẽ được minh họa cụ thể thêm ở ví dụ và các bài tập dùng Function ở dưới đây:

Các bước cần làm khi viết một CTC: Để giúp người mới lập trình có một số quyết định khi lập chương trình con, chúng ta có thể tiến hành qua hai bước sau:

- BƯỚC 1: Đặt câu hỏi “CTC là Procedure hay Function” ?
Giải quyết:
Chương trình con là Function khi và chỉ khi thỏa mãn đồng thời các yêu cầu sau :
* Nếu ta muốn nhận lại một kết quả,
• Kết quả đó là kết quả chính theo chức năng của CTC,
• Kết quả đó phải là kiểu vô hướng hoặc là kiểu con trỏ.
• Có cần dùng tên CTC (chương trình con) đế viết trong các biểu thức không ?
Còn nếu không thỏa mãn các tính chất trên thì CTC là Procedure.
Xét thí dụ đơn giản là CTC tính bình phương của một số.
• Nếu dùng Function, ta có :
FUNCTION BINH-PHUONG (x : Real) : REAL ;
     Begin
         Binh_phuong := x*x ;
     End ;
• Nếu dùng Procedure, ta có :
PROCEDURE BINH_PHUONG (x : Real ; Var x­2 : Real) ;
     Begin
         x2 := x*x ;
     End ;
Trong cả hai trường hợp, ta đều phải chuyến tham số x là tham trị. Còn nếu dùng Function thì bản thân tên của Function đã được dùng làm biến chứa kết quả tính toán. Trong khi đó nếu dùng Procedure thì ta phải dùng hai tham số, trong đó có x2 là tham số biến dùng để chứa kết quả. Hãy xem cách tính c = a2 + b2 trong hai trường hợp :
• Nếu dùng Function :
c := BINH_PHUONG(a) + BINH_PHUONG(b) ;
• Nếu dùng Procedure với một biến trung gian z nào đó :
Binh_phuong(a, c) ; (* := a2)
Binh_phuong(b, z) ; c := c + z ; (* c := a2 + b2)
Rõ ràng cách dùng Function có lợi hơn trong trường hợp này vì nó có thể viết thẳng trong biếu thức tính toán.
Với các ví dụ về cách dùng Function và Procedure kể trên, bạn đã có thể tự nhận xét lấy về cách dùng cũng như sự khác biệt giữa chúng.

- BƯỚC 2 : Giải quyết vấn đề tham số của CTC :
• CTC có cần tham số không ?
Nếu đối tượng của CTC là các biến toàn cục thì các biến này không cần đưa vào làm tham số. Còn nếu CTC phải thực hiện với nhiều đôi tượng theo cùng một qui cách (như thí dụ Procedure Enter ở trên) thì ta phải khai báo tham số (hình thức).
• Nếu có tham số thi tham số biến hay Tham số trị ?
Các tham số đóng vai trò cung cấp “tư liệu đầu vào” sẽ là các tham số giá trị.
Giá trị của tham số cần thiết sau khi thực hiện CTC thì chắc chắn đó là tham biến (xem tham số x2 ở ví dụ trên).
• Lưu ý : Khi viết khai báo CTC, kiểu tham số của CTC phải là kiểu (đã được ngầm định nghĩa sẵn như là kiểu vô hướng) hoặc phải là một kiểu đã được định nghĩa trong phần TYPE trước đây.

- Ví dụ : Không thể viết:
Procedure Vidu (A : array [a..3] of integer) ;
vì ARRAY [1..3] OR INTEGER là kiểu dữ liệu mới được định nghĩa tại chỗ, chưa có sẵn. Phải sửa lại bằng cách đưa định nghĩa kiêu dữ liệu lên phần TYPE như sau:
TYPE
KIEU
KIEU A = ARRAY [1..3] OF INTEGER ;

Procedure Vidu (A : KIEU A) ;

  Ý kiến bạn đọc

THÀNH VIÊN

Hãy đăng nhập thành viên để trải nghiệm đầy đủ các tiện ích trên site
Kênh Bóng đá trực tiếp hôm nay miễn phí
Kênh
90Phut TV full HD ⇔ 32win
69VN ⇔  ⇔ F168 ⇔ 123b ⇔ 566

Vmax ⇔ 78Win ⇔ https://xn88.bio/
GK88 ⇔ SHBET ⇔ nh88 ⇔ u888 ⇔ 789f
fo88vic88 ⇔ u888 ⇔ 888p ⇔ 69vn
BL555 ⇔ 99OK ⇔ KJC ⇔ Link MB66
mv66af88 ⇔ 8x bet ⇔ 88AA
789BET ⇔ LC88 ⇔ BL555 ⇔ 789f
OKFUN ⇔ 789F ⇔ MB66 ⇔ 8xbet
https://789betcom0.com/ ⇔ https://hi88.baby/
UU88 ⇔ au88 ⇔ win678 ⇔ https://xx88.ink/
zo88 ⇔ ev99 ⇔ 888b ⇔ go88 ⇔ kèo nhà cái
cm88 ⇔ 88aa ⇔ Kkwin ⇔ tv88 ⇔ 77win
mb66.racing ⇔ u888 ⇔ FO88 ⇔ 88xx
188v ⇔ f168 ⇔ QQ88 ⇔ bk8 ⇔ bk8
 ⇔ iwinclub ⇔ Subnhanh ⇔ Bluphim
m88 ⇔ Nettruyenviet ⇔ P3 ⇔ 8s
vn23 ⇔ SHBET ⇔ kubet ⇔ 888new
NOHU ⇔ hi88 ⇔ https://fun88.social/
thabet ⇔ SV88 ⇔ https://vnalo789c.com/
https://qq88.fun/ ⇔ f168 ⇔ 888New ⇔ QQ88
daga ⇔ SHBET ⇔ keo nha cai ⇔ bl-555.site
https://bshbet.com/ ⇔ https://uk88.rocks
kkwin ⇔ KUWIN ⇔ 8xbet ⇔ RR88 ⇔ 188v
mb6678win ⇔ https://hello8880.net/
tv88UU88 ⇔ HM88 ⇔ MB66 ⇔ TV88
NOHU ⇔ 77ball ⇔ 32win ⇔ Kuwin
ek333 ⇔ xoso66 ⇔ nổ hũ ⇔ SUN WIN
X88 ⇔ 78win ⇔ Jun88 ⇔ uu88
NOHU ⇔  KINGFUN ⇔ https://789club24.com/
https://98winlive.com/ ⇔ https://789win.voyage/
https://bet88yk.com/ ⇔ https://alo789apk.app/
https://33win100.com/ ⇔ https://u888ny.com/
69vn ⇔ vn88 ⇔ OK8386 ⇔ x88 ⇔ SHBET
https://hi88.voyage/ ⇔ https://79kings.blue/
https://dom88.jp.net/ ⇔ https://hello880.net/
https://789club60.com/ ⇔ https://blc88.net/
23win ⇔ 6ff ⇔ f168 ⇔ xoso66 ⇔ bomwin
nhatvip ⇔ https://789club24.com/ ⇔ 789 bet
win68 ⇔ 8xbet ⇔ go99 ⇔ 78win ⇔ QQ88
XX88 ⇔ ev99 ⇔ 69vn ⇔ rr88 ⇔ rr88
Uu88 ⇔ win456 ⇔ Tài xỉu online ⇔ XN88
https://33win101.com/ ⇔ oxbet ⇔ Slot365
78wind.com ⇔ https://shbet.gg/ ⇔ XX88
daga ⇔ SV388 ⇔ OKFUN ⇔ ee88 ⇔ 12bet
hitclub ⇔ Kkwin ⇔ VankhanhTV ⇔ Hay 88
3WIN ⇔ WIN678 ⇔ https://58winbank.com/
68 game bàiEE88 ⇔ 77BET ⇔ 12BET
vmaxVMAX ⇔ ok9 football ⇔ K8CC
https://hi88o.com/ ⇔ https://hi88.gives/
https://qq88.co.com/ ⇔ https://f168.law/
8xbet ⇔ https://shbetk.net/ ⇔ RIKVIP ⇔ rikvip
https://mm88.us.com/ ⇔ 79king
ww88 ⇔ https://78win.bot/ ⇔ https://13win.vegas/
https://lc88o.com/ ⇔ https://hi88.uno/
https://58win1.info/ ⇔ j88 ⇔ j88 ⇔ 69vn
Slot365 ⇔ alo88 ⇔ UU88 ⇔ 32 win
888TO ⇔ wstar77 ⇔ 73bet ⇔ 888b
11uu ⇔ 123B ⇔ 78win ⇔ Slot365
789f ⇔ mv88 ⇔ 789f ⇔ Bsport
888New ⇔  ⇔ Vmax ⇔ sunwin
tỷ lệ kèo nhà cái hôm nay ⇔ BIN88
 ⇔ https://qq88.studio/
https://nh8811.com/ ⇔ Leo88 ⇔ 78win
88CLB ⇔ SV388 ⇔ https://cakhiatv88.net/
7m ⇔ i9 Bet ⇔ Tv88 ⇔ hi88 ⇔ 888To
socolive trực tiếp74bet ⇔ VN168
Bong88 ⇔ socolive ⇔ bet88 ⇔ 555WIN
https://au88.black/ ⇔ trực tiếp bóng đá
https://king88clb.com/ ⇔ https://f168hi.com/
sv66ax88 ⇔ 88clb ⇔ Nn88
https://32win.vc/ ⇔ 888new ⇔ PG88 ⇔ PG88
EE88 ⇔ SanClub ⇔ F168 ⇔ QQ88
hb88 ⇔ Vin777 ⇔ SV388 ⇔ MV66 ⇔ 23WIN
https://vankhanhtvv.com/ ⇔ Nhà Cái LC88
https://789fnew.com/ ⇔ https://u888lm.com/
https://sv66.coupons/ ⇔ https://f168.tech/
https://8kbetbh.com/ ⇔ https://ta88club.kim/
socolivemv88 ⇔ https://rr88.com.se/
https://bet168.com.co/ ⇔ https://8kbet.co/
https://888b-link.cc/ ⇔ https://sunwinn.deal/
88gokingfun ⇔ https://bong88vn.wiki/
SHBET ⇔ https://shbet.racing/
RR99 ⇔ U888 ⇔ OK8386 ⇔
MM88 ⇔ 33win ⇔ BL555 ⇔ 69vn
 ⇔ https://w88link1.com/
xocdia88 ⇔ 77ball ⇔ vuabet88 ⇔ betvisa
https://fun88link0.com/ ⇔ https://fun88link1.com/
https://188betlink0.com/ ⇔ https://188betlink1.com/
https://188betlink2.com/ ⇔ https://w88link0.com/
thabet ⇔  ⇔  ⇔  ⇔ 789F
QQ88 COM ⇔ https://xx88.sale/ ⇔ 78win
https://bet88.pictures/ ⇔ https://xo88.group/
https://86bet.tech/ ⇔ https://nohu90.consulting/
789BET ⇔ https://i9betz4.com/ ⇔ đá gà 88
w88link2.com ⇔ w88link3.com ⇔ luck8
https://8dayvip.mobi/ ⇔ https://8dayvip.com/
QQ88 Com ⇔ af88 ⇔ https://79kingsr.com/
https://pg99yk.com/ ⇔  hm88.com ⇔ J88
https://luongson161.tv/ ⇔ 78WIN ⇔ MB66
78win ⇔ U888 ⇔ nn88 ⇔ 99win ⇔ hi88
https://8kbettt.com/ ⇔ https://hi88.biz/
https://thabetcasino.us.com/ ⇔ 789Win ⇔ vn88
https://hello88net.com/ ⇔ https://pg88.jpn.com/
https://az8888.org/ ⇔ https://fly88.gifts/
lc88 ⇔ VN88 ⇔ 69vn ⇔ nh88 ⇔ vn88
GO8 ⇔ 888new ⇔ sv388 ⇔ KWIN
tỷ lệ kèo nhà cái 88 ⇔ PG66 ⇔ 68win
BL555 ⇔ 23win ⇔ SV388 ⇔ SHBET ⇔ hitclub
Game bài đổi thưởng ⇔ https://saobet.shop/
https://99ok99ok.com/ ⇔ UU88 ⇔ HM88
https://bet88.ventures/ ⇔ bongdalu22.com
zx88 ⇔ ev99 ⇔ 8s ⇔ bet8s ⇔ QQ88
https://f168.name/ ⇔ https://13wincom.io/
Nhà cái vn88 ⇔ Nhà Cái QQ88
https://fb888.in.net/ ⇔ https://kjc.ac/
https://onbet.in.net/ ⇔ link vn88 ⇔ HZ88
http://58win.trading/ ⇔ https://qq88.gives/
bong88 ⇔ sky88 ⇔ Cổng game rikvip ⇔ ev99
79KING ⇔ Bet88 ⇔ XN88 ⇔ i9bet ⇔ VN23
https://kkwin.fan/ ⇔ https://555win.bike/
https://f8bet.courses/ ⇔ https://go8play.com/
https://lc88.bar/ ⇔ 789f ⇔ abc8 ⇔ good88
789win ⇔ Hitclub ⇔ https://f8bet80.one/
lương sơn tv ⇔ vwin ⇔ sut88 ⇔ vua88
hb88 ⇔ https://okfun.center/ ⇔ 68win
LC88 ⇔ 79king ⇔ https://hi88.tours/
https://ok9.charity/ ⇔ https://kkwin68.info/
https://ee88com.me/ ⇔ https://new88blog.org
nổ hũ ⇔ https://uu88vn.com ⇔ LC88
nohu ⇔ lc88 com ⇔ 69VN ⇔ Ok365 ⇔ 6FF
Nohu90 ⇔ go8 ⇔ 22vip ⇔ af88 ⇔ YO88
five88 ⇔ 68win ⇔ 11uu ⇔ https://go8.beer/
đánh bài tiến lên ⇔  ⇔  ⇔
Bạn đã không sử dụng Site, Bấm vào đây để duy trì trạng thái đăng nhập. Thời gian chờ: 60 giây