intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Phân tích, thiết kế và lập trình hướng đối tượng_phụ lục 4

Chia sẻ: Nguyễn Hoàng Trung | Ngày: | Loại File: PDF | Số trang:8

100
lượt xem
7
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Tham khảo tài liệu 'phân tích, thiết kế và lập trình hướng đối tượng_phụ lục 4', công nghệ thông tin, kỹ thuật lập trình phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả

Chủ đề:
Lưu

Nội dung Text: Phân tích, thiết kế và lập trình hướng đối tượng_phụ lục 4

  1. Phô lôc 4 Hµm víi ®èi sè bÊt ®Þnh trong C Trong c¸c gi¸o tr×nh C th­êng chØ h­íng dÉn c¸ch x©y dùng hµm víi c¸c ®èi cè ®Þnh. Mçi ®èi cÇn cã mé t tham sè (cïng kiÓu víi nã) trong lêi gäi hµm. Tuy nhiªn mét vµi hµm chuÈn cña C l¹i kh«ng nh­ vËy, m µ linh ho¹t h¬n, ch¼ng khi dïng hµm printf hay scanf th× sè tham sè mµ ta cung cÊp cho hµm lµ kh«ng cè ®Þnh c¶ vÒ sè l­îng lÉn kiÓu c¸ch. VÝ dô trong c©u lÖnh: printf(“\n Tæng = %d “ , 3+4+5) ; cã 2 tham sè, nh­ng trong c©u lÖnh: printf(“\n Hµ Néi“ ) ; chØ cã mét tham sè. Nh­ vËy cÇn ph©n biÖt c¸c kh¸i niÖm sau: - §èi sè cè ®Þnh ®­îc khai b¸o trong dßng ®Çu cña hµm, nã cã tªn vµ kiÓu - Tham sè øng víi ®èi sè cè ®Þnh gäi lµ tham sè cè ®Þnh - §èi bÊt ®Þnh ®­îc khai b¸o bëi ba dÊu chÊm: bÊt ®Þnh c¶ vÒ sè l­îng vµ kiÓu - Tham sè bÊt ®Þnh (øng víi ®èi bÊt ®Þnh) lµ mét danh s¸ch gi¸ trÞ víi sè l­îng vµ kiÓu tuú ý (kh«ng x ¸c ®Þnh) Trong phô lôc nµy sÏ tr×nh bÇy c¸ch x©y dùng c¸c hµm víi ®èi sè bÊt ®Þnh. C«ng cô chñ yÕu ®­îc dïng lµ con trá vµ danh s¸ch. 1. BiÕn con trá BiÕn con trá (hay con trá) dïng ®Ó chøa ®Þa chØ cña biÕn, m¶ng, hµm, ... Cã nhiÒu kiÓu ®Þa chØ, v× vË y còng cã nhiÒu kiÓu con trá. BiÕn con trá ®­îc khai b¸o theo mÉu: KiÓu *Tªn_biÕn_con_trá ; VÝ dô: float px ; // px lµ con trá thùc C¸c phÐp to¸n quan träng trªn con trá gåm: 561 562 + G¸n ®Þa chØ mét vïng nhí cho con trá (dïng to¸n tö g¸n, phÐp lÊy ®Þa chØ, c¸c hµm cÊp ph¸t bé nhí)
  2. + Truy nhËp vµo vïng nhí th«ng qua con trá, dïng phÐp to¸n: *Tªn_con_trá (§Ó ý ë ®©y cã 2 vïng nhí: vïng nhí cña biÕn con trá vµ vïng nhí mµ ®Þa chØ ®Çu cña nã chøa trong biÕn con trá) + Céng ®Þa chØ ®Ó con trá chøa ®Þa chØ cña phÇn tö tiÕp theo, dïng phÐp to¸n: ++ Tªn_con_trá hoÆc Tªn_con_trá ++ Chó ý r»ng c¸c phÐp to¸n trªn chØ cã thÓ thùc hiÖn ®èi víi con trá cã kiÓu. 2. Danh s¸ch kh«ng cïng kiÓu Dïng con trá cã kiÓu chØ qu¶n lý ®­îc mét danh s¸ch gi¸ trÞ cïng kiÓu, vÝ dô dÉy sè thùc, dÉy sè ngu yªn, dÉy c¸c cÊu tróc,.... Khi cÇn qu¶n lý mét danh s¸ch c¸c gi¸ trÞ kh«ng cïng kiÓu ta ph¶i dïng con trá kh«ng kiÓu (void) kha i b¸ o nh­ sau: void * Tªn_con_trá ; Con trá void cã thÓ chøa c¸c ®Þa chØ cã kiÓu bÊt kú, vµ dïng ®Ó trá ®Õn vïng nhí chøa danh s¸ch cÇn qu¶n lý. Mét chó ý quan träng lµ mçi khi göi vµo hay lÊy ra mét gi¸ trÞ tõ vïng nhí, th× tuú theo kiÓu gi ¸ trÞ mµ ta ph¶i dïng phÐp chuyÓn kiÓu thÝch hîp ®èi víi con trá. VÝ dô sau minh ho¹ c¸ch lËp mét danh s¸ch gåm mét sè nguyªn, mét sè thùc vµ mét chuçi ký tù. Chóng ta cÇn mét bé nhí ®Ó chøa sè nguyªn, sè thùc vµ ®Þa ch Ø chuçi vµ dïng c¸c con trá void ®Ó qu¶n lý vïng nhí nµy. void *list , *p ; // Con trá list trá tíi ®Çu danh s¸ch // p dïng ®Ó duyÖt qua c¸c phÇn tö cña danh s¸ch list=malloc(sizeof(int) + sizeof(float)+ sizeof(char*) ); p=list; *((int*)p) = 12; // §­a sè nguyªn 12 vµo danh s¸ch ((int*)p)++ ; // ChuyÓn sang phÇn tö tiÕp theo *((float*)p) = 3.14; // §­a sè thùc 3.14 vµo danh s¸ch ((float*)p)++ ; // ChuyÓn sang phÇn tö tiÕp theo
  3. *((char**)p) = “HA NOI”; // §­a ®Þa chØ chuçi “HA NOI” // vµo danh s¸ch // NhËn c¸c phÇn tö trong danh s¸ch p=list; // VÒ ®Çu danh s¸ch int a = *((int*)p); // NhËn phÇn tö thø nhÊt ((int*)p)++ ; // ChuyÓn sang phÇn tö tiÕp theo float x= *((float*)p); // NhËn phÇn tö thø hai ((float*)p)++ ; // ChuyÓn sang phÇn tö tiÕp theo char *str = *((char**)p) ; // NhËn phÇn tö thø ba 3. Hµm víi ®èi sè bÊt ®Þnh + §èi bÊt ®Þnh bao giê còng ®Æt sau cïng vµ ®­îc khai b¸o b»ng dÊu ba chÊm. VÝ dô vÝ dô hµm void f(int n, char *s, ...) ; cã 2 ®èi cè ®Þnh lµ n, s vµ ®èi bÊt ®Þnh. + §Ó nhËn ®­îc c¸c tham sè bÊt ®Þnh trong lêi gäi hµm ta cÇn l­u ý c¸c ®iÓm sau: - C¸c tham sè bÊt ®Þnh chøa trong mét danh s¸ch. §Ó nhËn ®­îc ®Þa chØ ®Çu danh s¸ch ta dïng mét con tr á void vµ phÐp g¸n sau: void *list ; list = ... ; - Dïng mét tham sè cè ®Þnh kiÓu chuçi ®Ó quy ®Þnh sè l­îng vµ kiÓu cña mçi tham sè trong danh s¸ch, vÝ dô: “3i” hiÓu lµ : tham sè bÊt ®Þnh gåm 3 gi¸ trÞ int “3f” hiÓu lµ : tham sè bÊt ®Þnh gåm 3 gi¸ trÞ float “fiss” hiÓu lµ cã 4 tham sè bÊt ®Þnh cã kiÓu lÇn l­ît lµ float, int, char*, char* Mét khi ®· biÕt ®­îc ®Þa chØ ®Çu danh s¸ch, biÕt ®­îc sè l­îng vµ kiÓu cña mçi tham sè , th× dÔ dµng nhËn ®­îc gi¸ trÞ c¸c tham sè ®Ó sö dông trong th©n hµm. 563 564 VÝ dô sau ®©y minh ho¹ c¸ch x©y dùng c¸c hµm víi tham sè bÊt ®Þnh. Hµm dïng ®Ó in c¸c gi¸ t rÞ kiÓu int, float vµ char. Hµm cã mét tham sè cè ®Þnh ®Ó cho biÕt cã bao nhiªu gi¸ trÞ vµ kiÓu c¸c gi¸ trÞ cÇn i n. KiÓu quy
  4. ®Þnh nh­ sau: i lµ int, f lµ float, s lµ char*. Tham sè cã 2 c¸ch viÕt: lÆp (gåm mét h»ng sè nguyªn vµ mét ch÷ c¸i ®Þnh kiÓu) vµ liÖt kª (mét dÉy c¸c ch÷ c¸i ®Þnh kiÓu). VÝ dô: “4s” cã nghÜa in 4 chuçi “siif” cã nghÜa in mét chuçi, 2 gi¸ trÞ nguyªn vµ mét gi¸ trÞ thùc: #include #include #include #include #include #include void InDanhSachGiaTri(char *st,...) { void *list ; int gt_int ; float gt_float; char *gt_str; int n,i ; char kieu; int lap; list = ... ; // list tro toi vung nho chua danh sach dia chi cac // tham so lap = isdigit(st[0]) ; if (lap) n=st[0] - '0' ; else n=strlen(st);
  5. printf("\n n= %d lap = %d",n,lap); getch(); for(i=0;i
  6. ((char**)list)++ ; printf("\nGia tri %d = %s",i,gt_str); 565 566 } } } void main() { float x=3.14; int a=123; char *tp="HAI PHONG"; InDanhSachGiaTri("4i",a); InDanhSachGiaTri("4s","HA NOI"); InDanhSachGiaTri("ifsssffii", a, x, tp, tp,"QUY NHON", x, 6.28, a, 246); InDanhSachGiaTri("4f",6.28); getch(); } 4. Hµm kh«ng ®èi vµ hµm víi ®èi bÊt ®Þnh NhiÒu ng­êi nghÜ hµm khai b¸o nh­ sau void f(); lµ hµm kh«ng ®èi trong C. Trong C++ th× hiÓu nh­ thÕ lµ ®óng, cßn trong C th× ®ã lµ hµm cã ®èi bÊt ® Þnh (hµm kh«ng ®èi trong C khai b¸o nh­ sau: f(void) ). Do kh«ng cã ®èi cè ®Þnh nµo cho biÕt vÒ sè l­îng vµ kiÓu cña c¸c tham sè bÊt ®Þnh, nªn gi¶i ph¸p ë ®©y lµ dïng c¸c biÕn toµn bé. Râ rµng gi¶i ph¸p nµy kh«ng kh«ng th uËn tiÖn cho ng­êi dïng v× ph¶i khai b¸o ®óng tªn biÕn toµn bé vµ ph¶i khëi g¸n gi¸ trÞ cho nã tr­íc khi gäi hµm. VÝ dô tr×nh bÇy mét hµm chØ cã ®èi bÊt ®Þnh dïng ®Ó tÝnh max vµ min cña c¸c gi¸ trÞ thùc. C¸c tham sè bÊt ®Þnh ®­îc
  7. ®­a vµo theo tr×nh tù sau: §Þa chØ chøa max, ®Þa chØ chøa min, c¸c gi¸ trÞ nguyªn cÇn tÝnh max, min. Ch­¬ng tr×nh dïng biÕn toµn bé N ®Ó cho biÕt sè gi¸ trÞ nguyªn cÇn tÝnh max, min. int N; void maxmin() { void *lt = ... ; float *max, *min , tg; int i; max = *((float**)lt)++; min = *((float**)lt)++; *max = *min = (float) *((double*)lt)++; for(i=1;i *max) *max = tg; if(tg < *min) *min = tg; } }
  8. 567
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2