Giới thiệu về các hàm trong C++

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

doc21 trang | Chia sẻ: lvcdongnoi | Lượt xem: 2701 | Lượt tải: 1download
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 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 , 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 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ù 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 ®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 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 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 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 &------------------------------------------------&-----------------------------------------------& 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µ : -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:

  • docGiới thiệu về các hàm trong C++.doc
Luận văn liên quan