Bài giảng Kỹ thuật lập trình - Chương 2: Một số vấn đề trong kỹ thuật lập trình - Lương Mạnh Bá
Chương II
Mꢀt sꢁ vꢂn đꢃ trong KTLT
(6LT – 2BT)
Last update 8-2010
SE-SoICT
KTLT-2.1
Chương II
1. Tꢄ chꢅc chương trꢆnh
2. Biꢇn cꢈc bꢀ/Biꢇn toꢉn cꢈc
3. Cꢂu trꢊc dꢋ liꢌu đꢀng
4. Cꢂp phꢍt tꢎnh vꢉ cꢂp phꢍt
đꢀng
Last update 8-2010
SE-SoICT
KTLT-2.2
2.1 Tꢄ chꢅc CT
• Khi giꢀi quyꢁt BT, theo phương phꢂp tiꢁp cꢃn
cꢄu trꢅc, BT đưꢆc phân chia thꢇnh cꢂc BT con
vꢇ cꢂc CT con sꢈ đꢀm nhiꢉm. Quꢂ trꢊnh phân rꢋ
cꢌ tiꢁp tꢍc đꢁn 1 mꢌc đꢎ chi tiꢁt.
• Mꢏi NNLT đꢐu cung cꢄp phương tiꢉn đꢑ tꢒ
chꢌc chương trꢊnh con.
• Gꢏi lꢇ CT con đꢑ phân biꢉt vꢓi CT ꢔ mꢌc ngoꢇi
(main) đưꢆc gꢀi thꢁc hiꢂn bꢃi ND.
• CT con cꢕ cꢄu trꢅc giꢖng như main song đưꢆc
gꢀi vꢄ cꢅ thꢆ gꢀi cꢇc CT con khꢇc.
Last update 8-2010
SE-SoICT
KTLT-2.3
CT con (tiꢇp)
• CT con thưꢗng gꢘm 2 loꢙi tꢚy theo cꢂch sꢛ
dꢍng:
– CT con Hꢇm
– CT con Thꢎ tꢍc
• CT con Hꢇm lꢇ CT con dꢚng đꢑ thꢜc hiꢉn 1 tꢝnh
toꢂn vꢇ trꢀ vꢐ 1 giꢂ trꢞ cꢎa 1 kiꢑu DL hꢆp lꢉ qui
đꢞnh bꢔi NNLT đꢕ.
• CT con thꢎ tꢍc thꢜc hiꢉn 1 nhiꢉm vꢍ phꢌc tꢙp
hơn (không nhꢄt thiꢁt lꢇ tꢝnh toꢂn) vꢇ không trꢀ
vꢐ 1 kꢁt quꢀ nꢇo.
• Trong C không phân biꢉt 2 khꢂi niꢉm nꢇy. Tuy
nhiên vꢟn đưꢆc dꢚng theo phong cꢂch chung .
Last update 8-2010
SE-SoICT
KTLT-2.4
Thꢏ dꢈ CT con (tiꢇp)
• CT con Hꢇm trong C
int GT(int n)
{ if ( n==0) return 1;
else return n * GT(n-1);
}
• CT con thꢎ tꢍc trong C
void nhapmang(Mang V, int n)
{int i;
for (i=0;i <n;i++)
{ printf("\n V[ %d ]=",i);
scanf("%d",&V[i]);
}
}
Last update 8-2010
SE-SoICT
KTLT-2.5
CT con (tiꢇp)
• Trong hꢇm, đꢑ trꢀ vꢐ kꢁt quꢀ tꢝnh toꢂn ngưꢗi ta
dꢚng lꢉnh/biꢑu thꢌc. Lꢉnh/biꢑu thꢌc phꢍ thuꢠc
vꢇo NNLT. Trong C, lꢉnh trꢀ vꢐ kꢁt quꢀ tꢝnh
toꢂn: return <bt trꢞ>
• Trong thꢎ tꢍc không trꢀ vꢐ kꢁt quꢀ nên dꢚng
dꢙng “void” cꢕ nghꢡa lꢇ rꢢng, không cꢕ: không
cꢕ giꢂ trꢞ, không cꢕ tham sꢖ.
• Thꢝ dꢍ void main(void) == main()
• Lꢉnh gꢏi CT con hꢇm xuꢄt hiꢉn trong bt; lꢉnh
gꢏi CT con thꢎ tꢍc lꢇ 1 lꢉnh hꢆp lꢉ.
Last update 8-2010
SE-SoICT
KTLT-2.6
Tham sꢁ thꢐc vꢉ tham
sꢁ hꢆnh thꢅc
• Tham sꢖ thꢜc lꢇ tham sꢖ xuꢄt hiꢉn trong lꢗi gꢏi
CT con.
• Tham sꢖ hꢊnh thꢌc lꢇ tham sꢖ xuꢄt hiꢉn trong
chꢣ kꢤ (header) cꢎa CT con.
N lꢉ tham sꢁ hꢆnh thꢅc
int GT(int n)
{ if ( n==0) return 1;
else return n * GT(n-1);
}
….
3 lꢉ tham sꢁ thꢐc
Printf(“\3!= %d”,GT(3));
Last update 8-2010
SE-SoICT
KTLT-2.7
Quan hꢌ giꢋa CT gꢑi vꢉ
CT đưꢒc gꢑi
• Khi CT con gꢏi (calling) 1 CT con khꢂc (called) “giꢇ trꢈ”
cꢎa tham sꢖ thꢜc sꢈ truyꢐn cho tham sꢖ hꢊnh thꢌc.
• Như vꢃy mꢖi quan hꢉ “gꢏi & đưꢆc gꢏi” thông qua tham
sꢖ (cꢂch thꢌc chuꢥn trong LT).
• Cꢕ nhiꢐu cꢂch truyꢐn tham sꢖ:
•Truyꢐn trꢞ (by val): giꢂ trꢞ cꢎa th/sꢖ thꢜc sꢈ truyꢐn
cho th/sꢖ hꢊnh thꢌc. Mꢏi thay đꢒi giꢂ trꢞ cꢎa tham sꢖ
hꢊnh thꢌc trong CT con không lꢇm thay đꢒi giꢂ trꢞ cꢎa
tham sꢖ thꢜc khi quay vꢐ CT gꢏi.
• Cꢅ phꢂp, ngꢣ nghꢡa cꢎa Th/sꢖ hꢊnh thꢌc!!!
Last update 8-2010
SE-SoICT
KTLT-2.8
Quan hꢌ giꢋa CT gꢑi vꢉ
đưꢒc gꢑi (tiꢇp)
• Truyꢐn theo tham chiꢁu (by reference) hay đꢞa chꢦ
(address) hay …: đꢞa chꢦ cꢎa th/sꢖ thꢜc truyꢐn cho th/sꢖ
hꢊnh thꢌc. Mꢏi thay đꢒi giꢂ trꢞ cꢎa th/sꢖ hꢊnh thꢌc trong
CT con sꢈ tꢂc đꢠng đꢁn th/sꢖ thꢜc khi quay vꢐ CT con
gꢏi (hiꢉu ꢌng lꢐ – side effect).
•=> Cꢅ phꢂp, ngꢣ nghꢡa cꢎa Th/sꢖ thꢜc!!!
• TD: Minh hꢀa 1 sꢉ vꢊ dꢋ
• Truyꢐn theo tên (macro)
• Trong NN C chꢦ cꢕ 1 kiꢑu truyꢐn lꢇ theo trꢞ. Tuy nhiên
LTV vꢟn cꢕ thꢑ dꢚng thꢎ thuꢃt đꢑ truyꢐn theo đꢞa chꢦ
(xem phꢧn sau).
Last update 8-2010
SE-SoICT
KTLT-2.9
Tham sꢖ truyꢐn trꢞ
#include <stdio.h>
#include <conio.h>
swap (int a, int b);
{ int temp = a;
a = b;
Kꢇt quꢓ in ra
c = 5 d = 7
b= temp);
}
main()
{ int c = 5;
int d = 7;
clrscr();
swap (c,d);
printf("\n c= %d d=%d",c,d);
getch();
}
Last update 8-2010
SE-SoICT
KTLT-2.10
Tham sꢖ truyꢐn theo đꢞa chꢦ
#include <stdio.h>
#include <conio.h>
swap (int *a, int *b);
{ int temp = *a;
*a = *b;
Kꢇt quꢓ in ra
c = 7 d = 5
*b= temp;
}
main()
{ int c = 5;
int d = 7;
clrscr();
swap (&c,&d);
printf("\n c= %d d=%d",c,d);
getch();
}
Last update 8-2010
SE-SoICT
KTLT-2.11
Tꢄ chꢅc CT con
• Đꢑ tiꢉn sꢛ dꢍng CT con đưꢆc tꢒ chꢌc theo nhiꢐu
hꢊnh thꢌc khꢂc nhau:
1. Trong cùng 1 chương trình với CT chꢊnh
2. Ghép thꢄnh đơn vꢈ CT
3. Ghép thꢄnh mô đun (đơn thꢆ chương trình)
• Cꢂch tꢒ chꢌc thꢌ 2 vꢇ 3 tiꢉn dꢍng hơn vꢊ tꢝnh tꢂi sꢛ
dꢍng. Cꢂc CT con cꢎa ND cꢕ thꢑ chuyꢑn vꢇo Thư
Viꢉn chương trꢊnh cꢎa NNLT đꢕ (cꢂc NNLT đꢐu cꢕ
công cꢍ hꢢ trꢆ viꢉc nꢇy.
• TD: minh hꢏa qua C/ Pascal.
Last update 8-2010
SE-SoICT
KTLT-2.12
Chương II
1. Tꢄ chꢅc chương trꢆnh
2. Biꢇn cꢈc bꢀ/Biꢇn toꢉn cꢈc
3. Cꢂu trꢊc dꢋ liꢌu thay đꢄi
4. Cꢂp phꢍt tꢎnh vꢉ cꢂp phꢍt
đꢀng
Last update 8-2010
SE-SoICT
KTLT-2.13
2.2 Biꢇn cꢈc bꢀ (local) vꢉ
toꢉn cꢈc (global)
• Khi 1 CT đưꢆc gꢏi nꢕ đưꢆc nꢙp vꢇo bꢠ nhꢓ vꢇ thưꢗng
trꢅ trong bꢠ nhꢓ đꢁn khi kꢁt thꢅc thꢜc hiꢉn. Đꢕ chꢝnh lꢇ
vòng đꢗi cꢎa CT => Do vꢃy cꢂc đꢙi lưꢆng đꢞnh nghꢡa
trong CT đꢕ cũng kꢁt thꢅc vòng đꢗi cꢎa mꢊnh. => Nꢀy
sinh khꢂi niꢉm biꢁn cꢍc bꢠ vꢇ biꢁn toꢇn cꢍc.
• Biꢁn cꢍc bꢠ (local variables): Cꢂc biꢁn đưꢆc đꢞnh nghꢡa
trong 1 CT vꢇ chꢦ đưꢆc sꢛ dꢍng trong CT con đꢕ. Nꢅ cꢅ
cùng vòng đời với CT sinh ra nꢅ. Khꢂi niꢉm cꢍc bꢠ cũng
lꢇ tương đꢖi vꢇ phꢍ thuꢠc vꢇo cꢂch tꢒ chꢌc CT. Nꢕ lꢇ
cꢍc bꢠ cꢎa CT con đꢕ song lꢇ toꢇn cꢍc vꢓi CT con cꢎa
nꢕ.
Last update 8-2010
SE-SoICT
KTLT-2.14
Biꢇn cꢈc bꢀ vꢉ toꢉn cꢈc
(tiꢇp)
• Biꢁn toꢇn cꢍc (global variables): Cꢂc biꢁn đưꢆc đꢞnh
nghꢡa trong 1 CT vꢇ đưꢆc sꢛ dꢍng trong CT con đꢕ vꢇ
cꢂc CT con cꢎa nꢕ. => Đ/n ꢔ 1 nơi vꢇ sꢛ dꢍng ꢔ nơi
khꢂc.
• Mꢠt loꢙi nꢣa lꢇ static: Nꢕ lꢇ cꢍc bꢠ cꢎa 1 CT song lꢙi
duy trꢊ vòng đꢗi cꢚng vꢓi mꢌc cao nhꢄt: Khi CT nơi nꢕ
đ/n kꢁt thꢅc (loꢙi khỏi bꢠ nhꢓ) nꢕ vꢟn còn tꢘn tꢙi. => Ưu
điꢑm: trꢂnh hiꢉu ꢌng lꢐ.
• Chꢅ ꢤ cꢂch dꢚng
Last update 8-2010
SE-SoICT
KTLT-2.15
Thꢏ dꢈ
int V[…];
void inmang(int n)
{
Biꢇn cꢈc bꢀ cꢔa CT con inmang
int i;
for (i=0;i <n;i++)
printf(" %4d",V[i]);
}
Biꢇn cꢈc bꢀ cꢔa main
main ()
{int i,j,n, tam;
clrscr();
printf(" So Phan tu cua mang:\n");
scanf("%d",&n);
nhapmang(n);
printf("\n Day so vua nhap:");
inmang(n);
}
Last =up>daLteư8u-20ꢤ10sꢛ dꢍng biꢁn toꢇn cꢍc đꢑ liên kꢁt vꢓi CT con!!!
SE-SoICT
KTLT-2.16
Chương II
1. Tꢄ chꢅc chương trꢆnh
2. Biꢇn cꢈc bꢀ/Biꢇn toꢉn cꢈc
3. Cꢂu trꢊc dꢋ liꢌu thay đꢄi
4. Cꢂp phꢍt tꢎnh vꢉ cꢂp phꢍt
đꢀng
Last update 8-2010
SE-SoICT
KTLT-2.17
2.3 Cꢂu trꢊc dꢋ liꢌu thay
đꢄi
• Trong quꢂ trinh lꢃp trꢊnh nhiꢐu khi ta cꢧn cꢕ kiꢑu dꢣ
liꢉu đꢂp ꢌng đưꢆc tꢊnh huꢖng cꢍ thꢑ. TD:
1. Hꢏc sinh phꢀi hꢏc cꢂc môn hꢏc văn hꢕa như
nhau. Tuy nhiên viꢉc hꢏc nghꢐ lꢙi phꢍ thuꢠc vꢇo giꢓi
tꢝnh: Nam hꢏc Mꢠc, Cơ khꢝ; Nꢣ hꢏc Thêu, Cꢨm
hoa,… Vꢃy cꢄu trꢅc nꢇo hꢢ trꢆ biꢑu diꢩn đꢂp ꢌng
tꢊnh huꢖng trên.
• Pascal: cꢄu trꢅc mꢟu tin thay đỏi
• C: dꢚng cꢄu trꢅc Union
Last update 8-2010
SE-SoICT
KTLT-2.18
Mꢕu tin biꢇn thꢖ
struct WORDREGS {
unsigned int ax, bx, cx, dx, si, di, cflag, flags;
};
struct BYTEREGS {
unsigned char al, ah, bl, bh, cl, ch, dl, dh;
};
union REGS {
struct WORDREGS x;
struct BYTEREGS h;
};
Last update 8-2010
SE-SoICT
KTLT-2.19
Mꢕu tin biꢇn thꢖ (tiꢇp)
Typedef union {
struct { long abscisse ;
long ordonne;
}cart;
struct {
float rho;
float theta;
}pol;
coord p1,p2;// đꢞnh nghꢡa 2 điꢑm p1 vꢇ p2
=> Truy nhꢃp tꢓi thꢇnh phꢧn cꢎa cꢂc điꢑm:
P1.cart.abscisse, p2.pol.theta
Last update 8-2010
SE-SoICT
KTLT-2.20
Tải về để xem bản đầy đủ
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Kỹ thuật lập trình - Chương 2: Một số vấn đề trong kỹ thuật lập trình - Lương Mạnh Bá", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
File đính kèm:
bai_giang_ky_thuat_lap_trinh_chuong_2_mot_so_van_de_trong_ky.ppt

