Giới thiệu về các hàm trong C++
Lời nói đầu
Cho đến nay, có rất nhiều ngôn ngữ lập trình được sử dụng để thiết kế các chương trình máy tính. Trong đó, C++ là một ngôn ngữ được sử dụng nhiều nhất trong việc thiết kế các chương trình ứng dụng cũng như thiết kế phần mềm hệ thống. Tuy nhiên, trong C++ việc xây dựng hàm trong thư viện là công việc khó khăn đối với người lập trình .Do đó, em chọn đề tài "Nêu cách xây dựng các hàm trong C++,minh hoạ và hướng dẫn người sử dụng các hàm trước khi dùng" nhằm tạo lập một thư viện các hàm và ứng dụng các hàm trong việc xử lý .
Nội dung đề tài gồm ba chương:
Chương I - Giới thiệu về các hàm trong C++
Chương II - Khai báo và định nghĩa hàm
Chương III - Tham số trong gọi hàm và phạm vi của đối tượng
Chương IV - Chương trình xây dựng hàm
Chương V - Hưỡng dẫn sử dụng hàm cho người dùng
Mục đích chủ yếu của em trong đề tài này là học tập, nghiên cứu và đưa ra các ý tưởng giải thuật của mình. Do đó phần ứng dụng các hàm chỉ áp dụng đối với các hàm đã được xây dựng ở trong thư viên hàm .
Do hạn chế về trình độ, thời gian thực hiện đề tài trên do đó không tránh khỏi những thiếu sót. Em mong được sự góp ý của các Thày, các Cô và các bạn sinh viên.
Chương I
Khái quát về các hàm trong trong C++
1.1. Tổng quan về chương trình con
Các chương trình con cho phép lập trình viên mô đun hoá chương trình .Nói chung , các biến định nghĩa trong chương trình con là các biến cục bộ , chúng chỉ được biết trong bản thân chương trình con tại đó chúng được định nghĩa .Hỗu hết chương trình con đều có tham số .Các tham số cung cấp thông tin truyền giữa các chương trình con .Các tham số của chương trinhg con nói chung cũng được xem như các biến cục bộ.
1.2. Các Mô đun chương trình trong C++.
Các Môđun trong C++ được gọi là hàm. Chúng ta sẽ bàn đến cả hai laọi hàm trên trong chương này .Các hàm chuẩn trong thư viện cảu C++ cung cấp rấy nhiều các thao tác tính toán ,thao tác trên xâu ký tự,thao tác ký tự ,vào/ra và nhiều thao tác thông dụng khác .Chúng làm cho công việc của lập trình viên dễ dàng hơn vì các hàm này đưa ra rất nhiều khả năngcho các lập trình viên.Mặc dù các hàm trong thư viện chuẩn không phải là một phần trong ngôn ngữ lập trình C++,theo chuẩn ANSI C++ chúng hàm không thay đổi trong các chương trình dịch C++ khác nhau.
Lập trình viên có thể viết các hàm thao tác các công việc xác định dùng tại nhiều nơi trong chương trình .Các hàm loại này đôi khi còn được gọi là “Hàm người dùng định nghĩa” .Các câu lệnh cài đặt cụ thể hàm này chỉ phải viết một lần ,chúng được ẩn bên trong và có thể dùng lại nhiều lần
21 trang |
Chia sẻ: lvcdongnoi | Lượt xem: 2737 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Giới thiệu về các hàm trong C++, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Lêi nãi ®Çu
Cho ®Õn nay, cã rÊt nhiÒu ng«n ng÷ lËp tr×nh ®îc sö dông ®Ó thiÕt kÕ c¸c ch¬ng tr×nh m¸y tÝnh. Trong ®ã, C++ lµ mét ng«n ng÷ ®îc sö dông nhiÒu nhÊt trong viÖc thiÕt kÕ c¸c ch¬ng tr×nh øng dông còng nh thiÕt kÕ phÇn mÒm hÖ thèng. Tuy nhiªn, trong C++ viÖc x©y dùng hµm trong th viÖn lµ c«ng viÖc khã kh¨n ®èi víi ngêi lËp tr×nh .Do ®ã, em chän ®Ò tµi "Nªu c¸ch x©y dùng c¸c hµm trong C++,minh ho¹ vµ híng dÉn ngêi sö dông c¸c hµm tríc khi dïng" nh»m t¹o lËp mét th viÖn c¸c hµm vµ øng dông c¸c hµm trong viÖc xö lý .
Néi dung ®Ò tµi gåm ba ch¬ng:
Ch¬ng I - Giíi thiÖu vÒ c¸c hµm trong C++
Ch¬ng II - Khai b¸o vµ ®Þnh nghÜa hµm
Ch¬ng III - Tham sè trong gäi hµm vµ ph¹m vi cña ®èi tîng
Ch¬ng IV - Ch¬ng tr×nh x©y dùng hµm
Ch¬ng V - Hìng dÉn sö dông hµm cho ngêi dïng
Môc ®Ých chñ yÕu cña em trong ®Ò tµi nµy lµ häc tËp, nghiªn cøu vµ ®a ra c¸c ý tëng gi¶i thuËt cña m×nh. Do ®ã phÇn øng dông c¸c hµm chØ ¸p dông ®èi víi c¸c hµm ®· ®îc x©y dùng ë trong th viªn hµm .
Do h¹n chÕ vÒ tr×nh ®é, thêi gian thùc hiÖn ®Ò tµi trªn do ®ã kh«ng tr¸nh khái nh÷ng thiÕu sãt. Em mong ®îc sù gãp ý cña c¸c Thµy, c¸c C« vµ c¸c b¹n sinh viªn.
Ch¬ng I
Kh¸i qu¸t vÒ c¸c hµm trong trong C++
1.1. Tæng quan vÒ ch¬ng tr×nh con
C¸c ch¬ng tr×nh con cho phÐp lËp tr×nh viªn m« ®un ho¸ ch¬ng tr×nh .Nãi chung , c¸c biÕn ®Þnh nghÜa trong ch¬ng tr×nh con lµ c¸c biÕn côc bé , chóng chØ ®îc biÕt trong b¶n th©n ch¬ng tr×nh con t¹i ®ã chóng ®îc ®Þnh nghÜa .Hçu hÕt ch¬ng tr×nh con ®Òu cã tham sè .C¸c tham sè cung cÊp th«ng tin truyÒn gi÷a c¸c ch¬ng tr×nh con .C¸c tham sè cña ch¬ng trinhg con nãi chung còng ®îc xem nh c¸c biÕn côc bé.
1.2. C¸c M« ®un ch¬ng tr×nh trong C++.
C¸c M«®un trong C++ ®îc gäi lµ hµm. Chóng ta sÏ bµn ®Õn c¶ hai laäi hµm trªn trong ch¬ng nµy .C¸c hµm chuÈn trong th viÖn c¶u C++ cung cÊp rÊy nhiÒu c¸c thao t¸c tÝnh to¸n ,thao t¸c trªn x©u ký tù,thao t¸c ký tù ,vµo/ra vµ nhiÒu thao t¸c th«ng dông kh¸c .Chóng lµm cho c«ng viÖc cña lËp tr×nh viªn dÔ dµng h¬n v× c¸c hµm nµy ®a ra rÊt nhiÒu kh¶ n¨ngcho c¸c lËp tr×nh viªn.MÆc dï c¸c hµm trong th viÖn chuÈn kh«ng ph¶i lµ mét phÇn trong ng«n ng÷ lËp tr×nh C++,theo chuÈn ANSI C++ chóng hµm kh«ng thay ®æi trong c¸c ch¬ng tr×nh dÞch C++ kh¸c nhau.
LËp tr×nh viªn cã thÓ viÕt c¸c hµm thao t¸c c¸c c«ng viÖc x¸c ®Þnh dïng t¹i nhiÒu n¬i trong ch¬ng tr×nh .C¸c hµm lo¹i nµy ®«i khi cßn ®îc gäi lµ “Hµm ngêi dïng ®Þnh nghÜa” .C¸c c©u lÖnh cµi ®Æt cô thÓ hµm nµy chØ ph¶i viÕt mét lÇn ,chóng ®îc Èn bªn trong vµ cã thÓ dïng l¹i nhiÒu lÇn.
1.3 Giíi thiÖu th viÖn c¸c hµm to¸n häc
Th viÖn c¸c hµm to¸n häc cho phÐp lËp tr×nh viªn thùc hiÖn c¸c thao t¸c to¸n häc c¬ b¶n . Mét vµi hµm trong th viÖn c¸c hµm to¸n häc cña C++ ®îc tæng kÕt trong b¶ng(1). Chóng ta sÏ sö dông th viÖn c¸c hµm to¸n häc ë ®©y ®Ó giíi thiÖu c¸c kh¸i niÖm hµm .
Vi dô:
Ta sö dông hµm nh sau:
char *dkt1,*dkt2;
cout<<"\n Nhap day ky tu 1 :";
cin.get(dkt1 , 24);
cin.ignore();
cout<<"\n Nhap day ky tu 2 :";
cin.get(dkt2 , 24);
B¶ng c¸c hµm thêng dïng trong th viÖn chuÈn
Hµm
M« t¶
Vi dô
sqrt(x)
C¨n bËc hai
sqrt(9)=3
exp(x)
Hµm mò ex
exp(1)=2.718282
log(x)
Hµm logarit tù nhiªn c¶u x
log(2.718=1282
sin(x)
sin cña x
sin(0.0)=0.0
cos(x)
cos cña x
cos(0.0)=1.0
tan(x)
tan cña x
tan(0.0)=0.0
pow(x,y)
X mò y
pow(2,7)=128
Ch¬ng ii
2.1 Mét sè vÝ dô
Mçi ch¬ng tr×nh ®Òu cã mét hµm chÝnh main() . Hµm nµy gäi c¸c hµm khi ®Ó thùc hiÖn c«ng viÖc cña ch¬ng tr×nh..
#include
int square(int);
void main()
{
int i;
for (i=1;i<=10;i++)
cout<<” “,square(I);
cin>>square;
}
int square(int x);
{
int y;
y=x*x;
return y;
}
2.2 Tæng quan vÒ ch¬ng tr×nh con
Khu©n d¹ng cña phÇn cµi ®Æt hµm cã d¹ng
{kiÓu – gi¸ trÞ – tr¶ vÒ} tªn hµm
{
C¸c khai b¸o
……………
C¸c c©u lÖnh
}
Trong ®ã ,tªn hµm lµ bÊt kú tªn hîp lÖ nµo ,kiÓu – gi¸ tri – tr¶ vÒ lµ kiÓu d÷ liÖu cña kÕt qu¶ tr¶ l¹i cho hµm gäi nã.Kh¸c víi Pascal ,C++ kh«ng cho phÐp tr¶ vÒ gi¸ trÞ lµ mét biÕn m¶ng , cßn mäi kiÓu d÷ liÖu hîp lÖ kh¸c ®Òu cã thÓ sö dông ®Ó m« t¶ kiÓu gi¸ trÞ tr¶ vÒ cho hµm . KiÓu gi¸ trÞ tr¶ vÒ lµ void th× hµm kh«ng tr¶ l¹i gi¸ trÞ nµo c¶ .
NÕu kh«ng x¸c ®in hÞnh kiÓu gi¸ trÞ tr¶ vÒ th× tr×mh biªn dÞch sÏ ngÇm ®Þnh coi ®ã lµ int. Danh s¸ch tham sè m« t¶ kiÓu d÷ kiÖu cïng thø tù cña c¸c tham sè hµm nhËn ®îc khi nã ®îc gäi. T¬ng øng víi mçi tham sè cã mét tham sè h×nh thøc cïng víi kiÓu t¬ng øng . C¸c tham sè h×nh thøc ph©n c¸ch nhau b»ng dÊu phÈy “,” . Còng nh kiÓu gi¸ trÞ tr¶ vÒ , C++ kh«ng ®a ra h¹n chÕ g× vÒ kiÓu gi¸ trÞ cña tham sè .Nã cã thÓ lµ kiÓu d÷ liÖu c¬ së hay kiÓu d÷ liÖu cã cÊu tróc , cã thÓ khai b¸o trùc tiÕp c¸c tham sè víi kiÓu cã cÊu tróc trong ®Þnh nghÜa cña hµm . NÕu hµm kh«ng nhËn tham sè nµo c¶ ,danh- s¸ch –tham so lµ void . KiÓu cña tõng tham sè cÇn ghi râ ra , nÕu kh«ng ghi kiÓu , tr×nh biªn dÞch sÏ ngÇm hiÓu lµ kiÓu int.
2.3 Hµm nguyªn mÉu
Mét trong nh÷ng ®Æc trng quan träng cña ANSI C++ lµ hµm nguyªn mÉu . Hµm nguyªn m©u th«ng b¸o cho ch¬ng tr×nh biªn dÞch biÕt kiÓu d÷ liÖu hµm tr¶ l¹i, sè lîng , kiÓu vµ thø tù cña c¸c tham sè chuyÒn cho hµm . Ch¬ng tr×nh biªn dÞch dïng hµm nguyªn mÉu ®Ó kiÓm tra c¸c lêi gäi hµm . C¸c phiªn b¶n tríc ®Êy kh«ng thùc hiÖn qu¸ tr×nh kiÓm tra nµy nªn cã thÓ xÈy ra nhiÒu lçi thù hiÖn øng dông rÊt khã ph¸t hiÖn.
2.4 C¸c tÖp tiªu ®Ò
Mçi mét th viÖn chuÈn t¬ng øng cã mét tÖp tiªu ®Ò chøa c¸c khai b¸o cña tÊt c¶ c¸c hµm trong th viÖn nµy cïng víi c¸c ®Þnh nghÜa c¸c kiÓu d÷ liÖu kh¸c nhau , c¸c h»ng dïng trong c¸c hµm ®ã , liÖt kª c¸c tÖp tiªu ®Ò cã thÓ dïng trong ch¬ng tr×nh .Kh¸i niÖm macro dïng trong b¶ng sÏ ®îc m« t¶ chi tiÕt trong phÇn tiÒn xö lý.
Mét trong nh÷ng khã kh¨n lín nhÊt khi míi häc ng«n ng÷ C++ lµ kh«ng biÕt c¸ch sö dông c¸c hµm th viÖn chuÈn trong C++ . Cã rÊt nhiÒu c¸ch ®Ó vît qua khã kh¨n nµy . Thø nhÊt lµ ®äc c¸c tµi liÖu vÌ ng«n ng÷ . Tuy nhiªn theo kinh nghiÖm , viÖc sö dông c¸c c«ng cô trî góp ®i kÌm c¸c ch¬ng tr×nh dÞch tá ra hiÖu qu¶ h¬n nhiÒu . §Ó thùc hiÖn ®iÒu nµy cã hai c¸ch :
NÕu biÕt tªn hµm : Trong mµm h×nh so¹n th¶o cña ch¬ng tr×nh biªn dÞch C++ ta ®¸nh vµo tªn hµm cÇn tra cøu, mµn h×nh trî gióp cña C++ sÏ cho ta biÕt c¸c th«ng tin liªn quan liªn quan ®Õn hµm nh lµ : C¸c tÖp tiªu ®Ò cÇn gép vµo qua chØ thÞ tiÒn xö lý #include khi sö dông hµm , d¹ng khai b¸o cña hµm ,vµ thËm chØ cßn cã thÓ cã nh÷ng ch¬ng tr×nh vÝ dô rÊt thó vÞ vÒ hµm cÇn tra cøu.
T×m hiÓu néi dung mét tÖp tiªu ®Ò :Trong trêng hîp nµy mµn h×nh trî gióp hiÓn thÞ cho ta danh s¸ch c¸c hµm , h»ng , biÕn khai b¸o bªn trong tÖp tiªu ®Ò .ViÖc tra cøu c¸c hµm ,h»ng ,biÕn ®îc thùc hiÖn b»ng viÖc di chuyÓn vÖt s¸ng trªn mµn h×nh trî gióp vµ Ên Enter ®Ó xem.
B¶ng c¸c tÖp tiªu ®Ò cña c¸c th viÖn chuÈn
TÖp *.h
Néi dung
C¸c macro vµ th«ng tin trî gióp lËp tr×nh debbug
C¸c hµm nguyªn m©u vµ c¸c hµm kiÓm tra thuéc tÝnh ký tù
C¸c macro biÓu thi th«ng tin vÒ lçi
C¸c giíi hµn vÒ sè dÊu phÈy ®éng cña hÖ thèng
C¸c giíi h¹n cña hÖ thèng
C¸c hµm vµ c¸c th«ngc tin liªn quan ®Õn viÖc thay ®æi ng«n ng÷ vµ m· níc
C¸c hµm nguyªn mÉu cña c¸c hµm th viÖn to¸n häc
C¸c hµm nguyªn mÉu vµ c¸c th«ng tin cña th viÖn hµm vµo /ra chuÈn
C¸c hµm nguyªn mÉu vµ c¸c th«ng tin liªn quan cña c¸c hµm chuyÓn kiÓu .
C¸c hµm nguyªn mÉu cña hµm xö lý x©u
C¸c hµm gnuyªn mÉu vµ kiÓu d÷ liÖu cho thao t¸c thêi gian
Ch¬ng III
3.1 Mét sè kh¸i niÖm
Tham sè h×nh thøc:Kh¸i niÖm nµy chØ ®Õn c¸c tham sè ®îc khai b¸o trong phÇn danh s¸ch tham sè trong ®Þnh nghÜa hµm. Ta gäi ®©y lµ tham sè h×nh thøc v× thùc tÕ chóng chØ ®ãng vai trß “ ngêi ®¹i diÖn ”cho c¸c tham sè thùc trong c¸c lêi gäi hµm . Mçi tham sè h×nh thøc sÏ t¬ng øng ®¹i diÖn cho c¸c tham sè thùc . KiÓu d÷ liÖu cña tham sè sÏ quyÕt ®Þnh kiÓu gi¸ trÞ cho tham sè thùc t¬ng øng .
Tham sè thùc: Kh¸i niÖm nµy chØ ®Õn c¸c th«ng tin ®îc truyÒn cho hµm trong cac lêi gäi hµm . Mçi tham sè thùc t¬ng øng víi mét tham sè h×nh thøc.
Liªn quan ®Õn viÖc truyÒn th«ng tin cho hµm,ta ph©n biÖt : truyÒn theo trÞ vµ truyÒn theo tham biÕn . Khi c¸c tham sè ®îc truyÒn theo trÞ , mét b¶n sao gi¸ trÞ cña tham sè thùc ®îc t¹o ra vµ g¸n cho c¸c tham sè h×nh thøc c¶u hµm. V× vËy mäi sù thay ®æi trong hµm trªn b¶n sao sÏ kh«ng ¶nh hëng ®Õn gi¸ trÞ ban ®Çu cña biÕn n»m trong hµm gäi . Khi tham sè ®îc truyÒn theo tham biÕn , hµm gäi sÏ truyÒn trùc tiÕp tham sè ®ã cho µhm ®ùc gäi. Trong trêng hîp nµy tham sè h×nh thøc vµ tham sè thùc lµ mét . Nh vËy ,nÕu bªn trong hµm bÞ gäi cã thay ®æi ®Õn tham sè h×nh thøc th× nh÷ng thay ®æi ®ã còng cã t¸c dông trªn c¸c tham sè thùc t¬ng øng . §iÒu nµy ®«i khi dÉn ®Õn ¶nh híng hiÖu øng phô.
3.2 Tham sè h×nh thøc cña hµm lµ con trá
Khi tham sè h×nh thøc cña hµm lµ con trá th× tham sè thùc t¬ng øng ph¶i lµ mét ®Þa chØ , cã thÓ lµ ®Þa chØ cña mét biÕn hoÆc tªn c¶u mét biÕn m¶ng. Khi truyÒn ®Þa chØ cña biÕn cho hµm ngêi ta cã thÓ tuú thÝch thay ®æi gi¸ trÞ cña biÕn víi viÖc kahi b¸o tham sè h×nh thøc nh mét m¶ng : thø nhÊt tiÕt kiÖm ®îc thêi gian sao chÐp sè liÖu , thø hai cã thÓ thay ®æi gia trÞ c¶u c¸c phÇn tö trong biÕn m¶ng ®îc truyÒn vµo .
3.3 CÊp lu tr÷ vµ ph¹m vi caqñ c¸c ®èi tîng
Ta biÕt rÇng mçi ®èi tîng sö dông trong mét ch¬ng tr×nh cÇn ph¶i cã c¸c khai b¸o . C¸c khai b¸o c¸o thÓ ®îc ®Æt ë ngoµi tÊt c¶ c¸c hµm hoÆc ë bªn trong mét hµm nµo ®ã . C¸c khai b¸o ®Æt ë c¸c vÞ trÝ kh¸c nhau lµm cho ®èi tîng ®îc khai b¸o cã c¸c tÝnh chÊt kh¸c nhau. Sù kh¸c nahu ®ã thÓ hiÖn ë ph¹m vi sö dông , thêi gian tån t¹i vµ cÊp lu tr÷ .
Ph¹m vi c¶u mét ®èi tîng lµ phÇn ch¬ng tr×nh mµ ®èi tîng cßn ®îc nh×n thÊy cã thÓ sö dông bëi phÇn ch¬ng tr×nh ®ã . Ph¹m vi cã thÓ lµ trong mét khèi lÑnh , mét hµm hoÆc mét tÖp nguån hoÆc thÓ ch¬ng tr×nh .
Mét sè ®èi tîng cã thêi gain tån t¹i rÊt ng¾n , mét sè th× liªn tôc ®îc t¹o ra råi xo¸ ®Þ, mét sè kh¸c tån t¹i trong suèt thêi gian thùc hiÖn ch¬ng tr×nh. Sau khi mét ®èi tîng ®· ®îc khai b¸o m¸y tÝnh sÏ cung cÊp cho biÕn hoÆc hµm vïng nhí thêng trùc hay ®éng trong thêi gian thùc hiÖn ch¬ng ch×nh . Nh vËy , mét ®èi tîng cã thÓ cã thêi gian tån t¹i l©u dµi hay t¹m thêi.
CÊp lu tr÷ cña ®èi tîng ®îc x¸c ®Þnh dùa theo vïng bé nhí ®îc cÊp ph¸t . C¸c ®èi tîng ®îc cÊp ph¸t bé nhí thêng trùc th× cã cÊp lu tr÷ cè ®Þnh . Thuéc lo¹i nµy bao gåm c¸c hµm vµ c¸c biÕn kahi b¸o bªn ngoµi c¸c hµm . Bªn c¹nh ®ã còng cã mét sè biÕn côc bé cã thuéc tÝnh nµy , chóng ta sÏ xem xÐt vÊn ®Ò nµy sau . C¸c ®ãi tîng cã cÊp lu tr÷ cè ®Þnh tån t¹i ngay khi ch¬ng tr×nh b¾t ®µu thùc hiÖn . §èi víi biÕn hµm , tªn cña hµm còng tån t¹i ngay khi ch¬ng tr×nh b¾t ®Çu thùc hiÖn . Tuy nhiªn , mÆc dï biÕn vµ tªn hµm tån t¹i ngay khi b¾t ®Çu ch¬ng tr×nh nhng kh«ng cã nghÜa lµ ®èi tîng nµy cã thÓ dïng bÊt cø ®©u trong ch¬ng tr×nh .
C¸c biÕn c¸p lu tr÷ ®éng ®îc t¹o ra khi vµo khèi mµ chóng ®îc khai b¸o , chóng tån t¹i khi ®iÒu khiÓn cßn ®ang trong khèi ®ã vµ chóng sÏ bÞ x¸o quyÒn ®iÒu khiÓn tho¸t ra khái khèi.
Ph¹m vi vµ thêi gian tån t¹i vµ cÊp lu tr÷ cña mét ®èi tîng ®îc x¸c ®Þnh b»ng c¸ch tæ hîp c¸c tõ kho¸ chØ dÞng cÊp lu tr÷ víi c¸c khai b¸o cïng vÞ trÝ bªn trong hay bªn ngoµi hµm hay mét khèi lÖnh.
Ng«n ng÷ C++ cung cÊp 4 tõ kh¸o sau : auto, extern,static, register ®Ó chØ ®Þnh ph¹m vi vµ thêi gian tån t¹i cña c¸c biÕn . Chóng cã thÓ chia thµnh hai nh÷ng theo thêi gian tån t¹i hay ph¹m vi .
3.4 con trá hµm
MÆc dï mét hµm kh«ng ph¶i lµ mét biÕn nhng nã vÉn chiÕm vÞ trÝ trong bé nhí vµ ta cã thÓ g¸n vÞ trÝ cña nã cho mét laäi biÕn con trá . Con trá nµy trá ®Õn ®iÓm x©m nhËp vµo hµm . ta gäi ®ay alf con trá hµm . Con trá hµm cã thÓ sö dông thay cho tªn hµm vµ viÖc sö dông con trá cho phÐp c¸c hµm còng ®îc truyÒn nh lµ tham sè cho c¸c hµm kh¸c.
§Ó hiÓu ®îc c¸c con trá hµm lµm viÖc nh thÕ nµo , ta cÇn hiÓu mét chót vÒ c¸ch biªn dÞch vµ gäi mét hµm . Khi biªn dÞch hµm , tr×nh biªn dÞch chuyÓn ch¬ng tr×nh nguån sang d¹ng m· m¸y vµ thiÐt lËp mét ®iÓm x©m nhËp vµo hµm . Khi cã lêi gäi thùc hiÖn hµm, m¸y tÝnh sÏ thùc hiÖn mét chØ thÞ call chuyÓn ®iÒu khiÓn ®Õn ®iÓm x©m nhËp nµy . Trong trêng hîp gäi hµm b»ng tªn hµm th× ®iÓm xam nhËp nµy lµ trÞ tøc thêi , c¸ch gäi hµm nµy gäi lµ c¸ch gäi hµm trùc tiÕp . Tr¸i l¹i , khi gäi hµm gi¸n tiÕp th«ng qua mét biÕn con trá th× biÕn trá ®ã pahØ trá tíi chØ thÞ m· m¸y ®Çu tiªn cña hµm ®ã . C¸ch gäi hµm th«ng qua biÕn trá hµm gäi lµ c¸ch gäi hµm gi¸n tiÕp.
C¸ch khai b¸o biÐn con trá:
[kiÓu_gi¸_trÞ] (*tªn_biÕn_trá_hµm) ([danh_s¸ch_tham_sè]);
3.5 §Ö qui
C¸c ch¬ng tr×nh ®· xÐt ®Òu cã chung cÊu tróc ph©n cÊp gi÷a hai hµm gäi vµ hµm bÞ gäi . Tuy nhiªn trong mét sè bµi to¸n , viÖc gäi hµm ngay chÝnh nã rÊt h÷u dông . Cã thÓ ®Þnh nghÜa hµm ®Ö qui lµ hµm sÏ gäi ®Õn chÝnh nã trùc tiÕp hay gi¸n tiÐp th«ng qua c¸c hµm kh¸c. VÊn ®Ò ®Ö qui lad mét vÊn ®Ò rÊt phøc t¹p, v× vËy trong phÇn nµy chØ giíi thiÖu nh÷ng khÝa c¹nh cïng víi nh÷ng vÝ dô ®¬n gi¶n nhÊt cña vÊn ®Ò ®Ö qui. Tríc tiªn ta xem xÐt kh¸i niÖm ®Ö qui , sau ®ã kiÓm tra trªn mét vµi ch¬ng rt×nh cã chøac¸c hµm ®Ö qui . C¸ch tiÕn hµnh gi¶i mét bµi to¸n ®Ö qui nh×n chung cã nh÷ng ®iÓm chung sau :
Hµm ®Ö qui thùc ra chØ gi¶i bµi to¸n trong trêng hîp ®¬n gi¶n nhÊt hay cßn gäi lµ trêng hîp c¬ së . Khi hµm ®Ö qui ®îc gäi trong trêng hîp c¬ së , hµm chØ cÇn tr¶ l¹i kÕt qu¶ . NÕu hµm ®îc gäi trong c¸c trêng hîp phøc t¹p h¬n , hµm ®Ö qui sÏ chia c«ng viÖc cÇn gi¶i quyÕt thµnh hai phÇn . Mét phÇn hµm biÕt c¸ch gi¶i quyÕt nh thÕ nµo , cßn phÇn kia vÉn kh«ng biÕt c¸ch gi¶i quyÕt nh thÕ nµo tuy nhiªn ®Ó ®îc gäi lµ cã kh¶ n¨ng ®Ò qui , phÇn sau ph¶i gièng víi bµi to¸n ban ®Çu nhng ®¬n gi¶n h¬n hay nhá h¬n bµi to¸n ban ®Çu . Bëi v× bµi to¸n míi gièng nh bµi to¸n ban ®Çu nªn hµm sÏ thùc hiÖn gäi chÝnh nã ®Ó gi¶i quyÕt coong viÖc ®¬n gi¶n nµy - ®©y chÝnh lµ lêi gäi ®Ö qui hay cßn gäi lµ mét bíc ®Ö qui . §Ó ®¶m b¶o viÖc ®Ö qui cã kÕt thóc , mçi mét lÇn gäi ®Ö qui th× bµi to¸n ph¶i ®¶m b¶o d¬n gi¶n vµ c¸c bíc ®Ö qui nµy cßn thùc hiÖn tiÕp cho ®Õn khi nµo bµi to¸n ®¬n gi¶n dÇn , ®¬n gian tíi møc trë thµnh trêng hîp c¬ së . Ta nhËn thÊy hµm ®Ö qui xö lý trêng hîp c¬ së ®Ó tr¶ l¹i kÐt qu¶ tÝnh ®îc cho c¸c hµm møc phøc t¹p h¬n n÷a ....cø nh vËy cho ®Õn lêi gäi hµm ban ®Çu . Tríc khi ®÷ ra c¸c nhËn xÐt tiÕp , ta xem xÐt vÝ dô sau:
TÝnh gaii thõa n!
#include
long giaithua(long);
void main()
{
int i;
for (i=0;i<=n;i++)
cout<<” “,i,giaithua(i);
//®Þnh nghÜa hµm giaithua
long giaithua(long number)
{
if (number=0)
return 1;
else
return (number *giaithua(number-1));
}
ch¬ng IV
C¸c hµm em sÏ x©y dùng trong ®Ò ¸n nh sau:
-X©y dùng hµm vÏ tam gi¸c t« s½n mµu nÒn
-X©y dùng hµm vÏ h×nh trßn t« s½n mµu nÒn
-X©y dùng hµm vÏ h×nh ch÷ nhËt t« s½n mµu nÒn
-X©y dùng hµm vÏ h×nh trßn néi tiÕp trong h×nh vu«ng
-X©y dùng hµm tÝnh c¸c ®¹i lîng trong tam gi¸c khi biÕt t¹o ®é 3 ®Ønh (A,B,C):
+DiÖn tÝch
+Chu vi
+ma
+ha
+la
+r
+R
Vµ th«ng b¸o : +Tam gi¸c c©n
+Tam gi¸c vu«ng
+Tam gi¸c vu«ng c©n
+Tam gi¸c ®Òu
+Tam gÝc b×nh thêng.
-X©y dùng hµm tÝnh giai thõa: n!
-X©y dùng hµm tÝnh tæng: 1+....+n vµ 12 +....+n2
Ch¬ng tr×nh chÝnh
-Chêng tr×nh chÝnh em lÊy tªn lµ : LIB.H
&----------------------------------------------&-------------------------------------------------&
#ifndef __LIB_H
#define __LIB_H
#ifndef __IOSTREAM_H
#include
#endif
#ifndef __GRAPHICS_H
#include
#endif
#ifndef __MATH_H
#include
#endif
#ifndef __CONIO_H
#include
#endif
//*******************************************************************
void vetamgiac(void);
void vehinhtron(void);
void vehinhchunhat(void);
void vehinhtronnoitiep(void);
void tinhtamgiac(void);
void tinhgiaithua(void);
void tinhtong(void);
//*******************************************************************
void vetamgiac(void)
{ typedef struct { int x,y; } typepoint;
typepoint a[3];
int x,y,color;
clrscr();
for ( int i = 0; i < 3; i++ )
{
cout<<" DINH "<< i<<" := ";
cin>>a[i].x >>a[i].y;
}
cout<<"Mau tam giac := ";
cin>>color;
int gdriver = DETECT, gmode;
initgraph(&gdriver,&gmode, "..\\Bgi");
setcolor(color);
line(a[0].x,a[0].y,a[1].x,a[1].y);
line(a[0].x,a[0].y,a[2].x,a[2].y);
line(a[2].x,a[2].y,a[1].x,a[1].y);
x = (a[0].x + a[1].x + a[2].x) /3;
y = (a[0].y + a[1].y + a[2].y) /3;
setfillstyle(1,color);
floodfill(x,y,color);
getch();
closegraph();
}
//**********************************************************************
void vehinhtron(void)
{ typedef struct { int x,y; } typepoint;
typepoint a;
int color,size;
clrscr();
cout<<" TAM HINH TRON := ";
cin>>a.x >>a.y;
cout<<" BAN KINH HINH TRON := ";
cin>>size;
cout<<"MAU HINH TRON := ";
cin>>color;
int gdriver = DETECT, gmode;
initgraph(&gdriver,&gmode, "..\\Bgi");
setcolor(color);
circle(a.x,a.y,size);
setfillstyle(1,color);
floodfill(a.x,a.y,color);
getch();
closegraph();
}
//******************************************************************
void vehinhchunhat(void)
{ typedef struct { int x,y; } typepoint;
typepoint a[2];
int x,y,color;
clrscr();
cout<<" DINH DAU := ";
cin>>a[0].x >>a[0].y;
cout<<" DINH CUOI := ";
cin>>a[1].x >>a[1].y;
cout<<"Mau hinh chu nhat := ";
cin>>color;
int gdriver = DETECT, gmode;
initgraph(&gdriver,&gmode, "..\\Bgi");
setcolor(color);
rectangle(a[0].x,a[0].y,a[1].x,a[1].y);
x = (a[0].x + a[1].x ) /2;
y = (a[0].y + a[1].y ) /2;
setfillstyle(1,color);
floodfill(x,y,color);
getch();
closegraph();
}
//******************************************************************
void vehinhtronnoitiep(void)
{ typedef struct { int x,y; } typepoint;
typepoint a[2];
int x,y,r,color;
clrscr();
cout<<" DINH DAU := ";
cin>>a[0].x >>a[0].y;
cout<<" DINH CUOI := ";
cin>>a[1].x >>a[1].y;
cout<<"Mau hinh tron := ";
cin>>color;
int gdriver = DETECT, gmode;
initgraph(&gdriver,&gmode, "..\\Bgi");
setcolor(color+1);
bar(a[0].x,a[0].y,a[1].x,a[1].y);
setcolor(color);
x = (a[0].x + a[1].x ) / 2;
y = (a[0].y + a[1].y ) / 2;
r = abs(a[0].x - a[1].x) /2;
circle(x,y,r);
setfillstyle(1,color);
floodfill(x,y,color);
getch();
closegraph();
}
//******************************************************************
void tinhtamgiac(void)
{ typedef struct { int x,y; } typepoint;
typepoint A[3];
double ha,la,ma,p,s,a,b,c,dk,cosa,r,R;
const double e = 0.0000001;
clrscr();
for ( int i = 0; i < 3; i++ )
{
cout<<" DINH "<< i<<" := ";
cin>>A[i].x >>A[i].y;
}
a = double(sqrt((A[0].x -A[1].x)*(A[0].x -A[1].x) + (A[0].y-A[1].y)*(A[0].y-A[1].y)));
b = double(sqrt((A[0].x -A[2].x)*(A[0].x -A[2].x) + (A[0].y-A[2].y)*(A[0].y-A[2].y)));
c = double(sqrt((A[2].x -A[1].x)*(A[2].x -A[1].x) + (A[2].y-A[1].y)*(A[2].y-A[1].y)));
p = double((a+b+c)/2);
s = double(sqrt(p*(p-a)*(p-b)*(p-c)));
ma = sqrt(((b*b +c*c)*2 -a*a)/4);
ha = (s*2)/a;
cosa = sqrt(((b*b + c*c - a*a )/(2*b*c)+1)/2);
la = (2*b*c*cosa)/(b+c);
R = (a*b*c)/(4*s);
r = (s/p);
cout<<"dien tich := "<< s <<endl;
cout<<" chu vi := "<< p*2<<endl;
cout<<" ma := "<< ma<<endl;
cout<<" ha := "<< ha<<endl;
cout<<" la := "<< la<<endl;
cout<<" r := "<< r<<endl;
cout<<" R := "<< R<<endl;
if ((a == b)&&(b==c)) cout<<" Tam giac la tam giac deu /n"<<endl;
else
{
if ((int(a) == int(b))&&(int(b)!= int(c))) cout<<"Tam giac la tam giac can"<<endl;
if ((int(c) == int(b))&&(int(b)!= int(a))) cout<<"Tam giac la tam giac can"<<endl;
if ((int(a) == int(c))&&(int(a)!= int(b))) cout<<"Tam giac la tam giac can"<<endl;
}
if ( abs(a*a + b*b - c*c ) < e ) cout<<"Tam giac la tam giac vuong"<<endl;
if ( abs(a*a + c*c - b*b ) < e ) cout<<"Tam giac la tam giac vuong"<<endl;
if ( abs(c*c + b*b - a*a ) < e ) cout<<"Tam giac la tam giac vuong"<<endl;
getch();
}
//**********************************************************************
void tinhgiaithua(void)
{ int n ;
long double gt;
clrscr();
cout <<" N := ";
cin>>n;
gt = 1;
if (n != 0)
for (int i = 1; i<=n ; i++) gt = gt *i;
cout<<n<<" giai thua := "<< gt;
getch();
}
void tinhtong(void)
{ int n,i,t,dk;
clrscr();
cout N "<<endl;
cout N*N "<<endl;
cin>>dk;
cout<<" N := ";
cin>>n;
if (dk == 1)
{ t = 1;
for( int i=1; i <= n;i++)
t = t+i;
cout "<<n<<" := "<<t;
}
if (dk == 2)
{ t = 1;
for( int i=1; i <= n;i++)
t = t+i*i;
cout "<<n<<" := "<<t;
}
getch();
}
#endif
&------------------------------------------------&-----------------------------------------------&
chong v
Minh ho¹ vµ hìng dÉn ngêi sö dông c¸c hµm ®îc x©y dùng ë trªn:
-C¸c hµm cÇn dïng ®Òu ®îc x©y dùng ®Ó trongth viÖn chuÈn cã tªn lµ :
-ViÖc khai b¸o c¸c hµm ®îc x©y dùng ®îc viÕt nh sau:
+Vetamgiac();
+Vehinhtron();
+Vehinhchunhat();
+Vehinhtronnoitiep();
+Tinhtamgiac();
+Tinhgiaithua();
+Tinhtong();
VÝ dô minh ho¹:
#include
#include
main()
{
vetamgiac();
}
Khi ch¹y ch¬ng tr×nh ,tríc tiªn ta ph¶i nhËp t¹o ®é 3 ®Ønh (A,B,C) vµ mµu nÒn
tam gi¸c cÇn dùng.
#include
#include
main()
{
tinhtamgiac();
}
Khi chay ,ch¬ng tr×nh sÏ ®ßi hái ph¶i nhËp t¹o ®é 3 ®Ønh (A,B,C) khi nhËp xong Ên Enter th× cho c¸c kÕt qu¶:
+DiÖn tÝch
+Chu vi
+ma
+ha
+la
+r
+R
Vµ tam gÝac ®ã lµ tam gi¸c +C©n
+Vu«ng
+Vu«ng c©n
+§Òu
+B×nh thêng
Các file đính kèm theo tài liệu này:
- Giới thiệu về các hàm trong C++.doc