Tải bản đầy đủ (.ppt) (72 trang)

MỘT số vấn đề TRONG kỹ THUẬT lập TRÌNH (kỹ THUẬT lập TRÌNH SLIDE)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (235.56 KB, 72 trang )

Chương II
MỘT SỐ VẤN ĐỀ TRONG
KỸ THUẬT LẬP TRÌNH
(6LT – 2BT)
KTLT-2.1


Chương II
1.
2.
3.
4.

Tổ chức chương trình
Biến cục bộ/Biến toàn cục
Cấu trúc dữ liệu động
Cấp phát tĩnh và cấp phát
động
KTLT-2.2


2.1 Tở chức CT
• Khi giải qú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.
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 .
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 { printf("\n V[ %d ]=",i);
scanf("%d",&V[i]);
}
}
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ệ.
KTLT-2.6


Tham sớ thực và tham
sớ hình thức

• Tham sớ thực là tham sớ x́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.

int GT(int n)

N là tham số hình thức

{ if ( n==0) return 1;
else return n * GT(n-1);
}
….
Printf(“\3!= %d”,GT(3));

3 là tham số thực

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ẽ trù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 ch̉n trong LT).
• Có nhiều cách trùn tham sớ:
•Trù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!!!
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í du
• 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).
KTLT-2.9


Tham số truyền trị
#include <stdio.h>
#include <conio.h>
swap (int a, int b);
{ int temp = a;
a = b;
b= temp);
}
main()
{ int c = 5;

int d = 7;
clrscr();
swap (c,d);
printf("\n c= %d d=%d",c,d);
getch();
}

Kết quả in ra
c=5

d=7

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;
*b= temp;
}
main()
{ int c = 5;
int d = 7;
clrscr();
swap (&c,&d);
printf("\n c= %d d=%d",c,d);
getch();

}

Kết quả in ra
c=7

d=5

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.
KTLT-2.12



Chương II
1.
2.
3.
4.

Tổ chức chương trình
Biến cục bộ/Biến toàn cục
Cấu trúc dữ liệu thay đổi
Cấp phát tĩnh và cấp phát
động
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ó.
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

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 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);
}
=> Lưu ý sử dụng biến toàn cục để liên kết với CT con!!!

KTLT-2.16


Chương II
1.
2.
3.
4.

Tổ chức chương trình
Biến cục bộ/Biến toàn cục
Cấu trúc dữ liệu thay đổi
Cấp phát tĩnh và cấp phát
động
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ụ tḥ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
h́ng trên.
•Pascal: cấu trúc mẫu tin thay đỏi
•C: dùng cấu trúc Union

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;
};
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
KTLT-2.20


Tệp (file)
2- Trong CT đê lưu các thông tin lâu dài,
người ta sử dụng các tệp.


Có nhiều loại tệp khác nhau: tệp văn
bản (text file), tệp có cấu trúc thí dụ như
tệp lưu danh sách SV 1 lớp, tệp nhị phân
khơng cấu trúc (tệp ảnh, tệp mã máy).

• Cũng có thê cùng 1 kiêu tệp song do cách
dùng khác nhau mà ta coi chúng khác
nhau.
• Trong C chỉ có 2 loại tệp là text file và tệp
nhị phân (binary file).
KTLT-2.21


TD đọc ghi tệp nhị phân
void main()
{ int i , j, n;
mang A, B;
FILE *fp;

char filename[]="Mang.Txt";
clrscr();
if ((fp=fopen(filename,"w+"))==NULL)
printf("\n Khong mo duoc tep!");
else
{ do
{ printf("\n so phan tu (1 scanf("%d",&n);
} while ((n < 1) ||(n>10));
printf("\n nhap cac phan tu:");
for (i =0;ifor (j=0;j{printf("\n A[%d,%d]=",i,j);
scanf("%d",&A[i][j]);
}
fwrite(&A,sizeof(int), MAX * MAX,fp);
KTLT-2.22


TD đọc ghi tệp nhị phân
if ((fp=fopen(filename,"r+"))==NULL)
printf("\n Khong mo duoc tep!");
else
{ fread(&B,sizeof(int), MAX * MAX,fp);
fclose(fp);
}// ket thuc else
printf("\n Mang doc ra tu tep:");
for (i = 0;i{ for (j = 0;jprintf("\ %d ",B[i][j]);

printf("\n");
}

KTLT-2.23


TD đọc ghi tệp văn bản
void main()
{ char c;
FILE *fv, *fr;
char *filename="D_ghitep.cpp";
clrscr();
if ((fv=fopen(filename,"r+"))==NULL)
printf("\n Khong mo duoc tep!");
else
{
filename= "D_ghitep.Txt";
if ((fr = fopen(filename,"w+")) == NULL);
do { c = fgetc(fv);
fputc(c,fr);
} while (c != EOF);
fclose(fv);
fclose(fr); }
KTLT-2.24


Chương II
1.
2.
3.

4.

Tổ chức chương trình
Biến cục bộ/Biến toàn cục
Cấu trúc dữ liệu thay đổi
Cấp phát tĩnh và cấp phát
động
KTLT-2.25


×