Docstoc

VanLuong.Blogspot.Com_TE531

Document Sample
VanLuong.Blogspot.Com_TE531 Powered By Docstoc
					              Website: http://www.docs.vn Email : lienhe@docs.vn Tel : 0918.775.368




                                      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.

                                                1
        Website: http://www.docs.vn Email : lienhe@docs.vn Tel : 0918.775.368




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


                                          2
         Website: http://www.docs.vn Email : lienhe@docs.vn Tel : 0918.775.368


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);




                                           3
            Website: http://www.docs.vn Email : lienhe@docs.vn Tel : 0918.775.368


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 log(2.718=1282
                    x
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<stdio.h>
  int square(int);
  void       main()
  {
  int i;
  for (i=1;i<=10;i++)
  cout<<” “,square(I);

                                              4
         Website: http://www.docs.vn Email : lienhe@docs.vn Tel : 0918.775.368


    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¶ .




                                           5
       Website: http://www.docs.vn Email : lienhe@docs.vn Tel : 0918.775.368


  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 tr-ng 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 ,

                                         6
        Website: http://www.docs.vn Email : lienhe@docs.vn Tel : 0918.775.368


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
<asset.h>         C¸c macro vµ th«ng tin trî gióp lËp tr×nh
                  debbug
<ctype.h>         C¸c hµm nguyªn m©u vµ c¸c hµm kiÓm tra


                                          7
       Website: http://www.docs.vn Email : lienhe@docs.vn Tel : 0918.775.368


                 thuéc tÝnh ký tù
<errno.h>        C¸c macro biÓu thi th«ng tin vÒ lçi
<float.h>        C¸c giíi hµn vÒ sè dÊu phÈy ®éng cña hÖ
                 thèng
<limits.h>       C¸c giíi h¹n cña hÖ thèng
<locale.h>       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
<math.h>         C¸c hµm nguyªn mÉu cña c¸c hµm th- viÖn
                 to¸n häc
<stdio.h>        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
<stdlib.h>       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 .
<string.h>       C¸c hµm nguyªn mÉu cña hµm xö lý x©u
<time.h>         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


                                         8
       Website: http://www.docs.vn Email : lienhe@docs.vn Tel : 0918.775.368


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 l-u 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ù



                                         9
       Website: http://www.docs.vn Email : lienhe@docs.vn Tel : 0918.775.368


kh¸c nahu ®ã thÓ hiÖn ë ph¹m vi sö dông , thêi gian tån
t¹i vµ cÊp l-u 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 l-u 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 l-u 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 l-u 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
nh-ng 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 l-u 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


                                        10
         Website: http://www.docs.vn Email : lienhe@docs.vn Tel : 0918.775.368


®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 l-u 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 l-u 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 nh-ng 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



                                          11
       Website: http://www.docs.vn Email : lienhe@docs.vn Tel : 0918.775.368


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-



                                        12
       Website: http://www.docs.vn Email : lienhe@docs.vn Tel : 0918.775.368


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 nh-ng ®¬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<stdio.h>
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));
}




                                        13
        Website: http://www.docs.vn Email : lienhe@docs.vn Tel : 0918.775.368


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
&----------------------------------------------&---------
----------------------------------------&



                                         14
       Website: http://www.docs.vn Email : lienhe@docs.vn Tel : 0918.775.368


#ifndef __LIB_H
#define __LIB_H


#ifndef __IOSTREAM_H
#include <iostream.h>
#endif

#ifndef __GRAPHICS_H
#include <graphics.h>
#endif

#ifndef __MATH_H
#include <math.h>
#endif

#ifndef __CONIO_H
#include <conio.h>
#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)



                                        15
         Website: http://www.docs.vn Email : lienhe@docs.vn Tel : 0918.775.368


{ 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)


                                          16
         Website: http://www.docs.vn Email : lienhe@docs.vn Tel : 0918.775.368


{ 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;


                                          17
         Website: http://www.docs.vn Email : lienhe@docs.vn Tel : 0918.775.368




    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;




                                          18
         Website: http://www.docs.vn Email : lienhe@docs.vn Tel : 0918.775.368


    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;


                                          19
          Website: http://www.docs.vn Email : lienhe@docs.vn Tel : 0918.775.368


 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;


                                           20
           Website: http://www.docs.vn Email : lienhe@docs.vn Tel : 0918.775.368


    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 ;



                                            21
       Website: http://www.docs.vn Email : lienhe@docs.vn Tel : 0918.775.368


 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<<"       1: TINH TONG 1 -> N     "<<endl;
 cout<<"       2: TINH TONG 1*1 -> 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<<" Tong 1 -> "<<n<<" := "<<t;

 }

 if (dk == 2)
 {     t = 1;
  for( int i=1; i <= n;i++)
  t = t+i*i;
  cout<<" Tong binh phuong 1-> "<<n<<" := "<<t;
 }
getch();


                                        22
         Website: http://www.docs.vn Email : lienhe@docs.vn Tel : 0918.775.368




}
#endif

&------------------------------------------------&-------
----------------------------------------&

ch-ong 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µ : <LIB.H>
-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<lib.h>
#include<graphics.h>
main()
{
    vetamgiac();
}




                                          23
          Website: http://www.docs.vn Email : lienhe@docs.vn Tel : 0918.775.368


    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<lib.h>
#include<graphics>
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




                                           24

				
DOCUMENT INFO
Shared By:
Categories:
Tags:
Stats:
views:0
posted:6/20/2012
language:
pages:24
Bui Van Luong Bui Van Luong
About vanluong.blogspot.com