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

Bài giảng Programming technique: Chương 2 - Lương Mạnh Bá

Chia sẻ: Nguyên Phương | Ngày: | Loại File: PDF | Số trang:72

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

Bài giảng "Programming technique - Chương 2: Mộ số vấn đề trong kỹ thuật lập trình" trình bày các nội dung: Tổ chức chương trình, biến cục bộ/Biến toàn cụ, cấu trúc dữ liệu động, cấp phát tĩnh và cấp phát động. Hi vọng đây sẽ là một tài liệu hữu ích dành cho các bạn sinh viên Công nghệ thông tin và những ai quan tâm đến lĩnh vực này dùng làm tài liệu học tập và nghiên cứu.

Chủ đề:
Lưu

Nội dung Text: Bài giảng Programming technique: Chương 2 - Lương Mạnh Bá

  1. Chương II Một số vấn đề trong KTLT (6LT – 2BT) Last update 8-2010 SE-SoICT KTLT-2.1
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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 • 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
  7. 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
  8. 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
  9. 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
  10. Tham số truyền trị #include #include swap (int a, int b); { int temp = a; a = b; b= temp); Kết quả in ra } main() c=5 d=7 { 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
  11. Tham số truyền theo địa chỉ #include #include swap (int *a, int *b); { int temp = *a; *a = *b; *b= temp; Kết quả in ra } main() c=7 d=5 { 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
  12. 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
  13. 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
  14. 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
  15. 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
  16. Thí dụ int V[…]; void inmang(int n) { Biến cục bộ của CT con inmang int i; for (i=0;i Lưu ý sử dụng biến toàn cục Last update 8-2010 để liên kết với CT con!!! SE-SoICT KTLT-2.16
  17. 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
  18. 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
  19. 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
  20. 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
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

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