Tải bản đầy đủ (.doc) (20 trang)

De thi va dap an mon nguyen ly nhung ngo

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 (266.96 KB, 20 trang )

Câu 1: Khái niệm và Các yếu tố cấu thành của Ngơn ngữ lập trình:
Ngơn ngữ lập trình là một hệ thống được kí hiệu hóa để miểu tả những tính tốn (qua máy tính) trong một dạng
mà cả con người và máy tính đều có thể đọc và hiểu được.
Ngơn ngữ lập trình = Kí hiệu + quy tắc kết hợp
 Các yếu tố cấu thành của ngôn ngữ lập trình:
o Cú pháp: Sự kết hợp của các kí hiệu ( Dạng của biểu thức, các phát triển, các đơn vị nhỏ của chương trình)
o Ngữ nghĩa: Ý nghĩa cuả sự kết hợp.
o Ngữ dụng: Mối quan hệ của cú pháp,ngữ nghĩa với thế giới bên ngoài
Câu 2 : Phải có ngơn ngữ lập trình mà k dùng ngơn ngữ máy hay ngơn ngữ tự nhiên để lập trình vì  :
 Ngơn ngữ máy là ngơn ngữ trong đó các lệnh được viết bằng các số nhị phân (0 và 1). Nếu một chương trình
được viết bằng ngơn ngữ máy thì chương trình đó sẽ rất dài. Các dịng số này không gợi nên ý nghĩa của lệnh.
Người dùng muốn hiểu và sử dụng chương trình thì phải ghi nhớ một cách máy móc các dịng lệnh.
 Ngơn ngữ tự nhiên là ngôn ngữ đa nghĩa, giàu cảm xúc biểu đạt, đóng về ngữ nghĩa. Nếu dùng ngơn ngữ tự
nhiên để vết chương trình thì máy tính khơng thể xác định được khả năng biểu đạt của ngôn ngữ.
 Phải dùng ngơn ngữ lập trình để làm phương tiện giao tiếp giữa người và máy tính.
Câu 3: Lịch sử phát triển của ngơn ngữ lập trình
 Ngơn ngữ lập trình đầu tiên là ngơn ngữ máy tính (mã nhị phân). Ngơn ngữ máy phụ thuộc tồn bộ vào kiến
trúc phần cứng và những quy ước khắt khe của nhà chế tạo → Khơng có tính khả chuyển
 Từ những năm 1950 hợp ngữ assembly ra đời → là những ngôn ngữ bậc thấp.
 Từ năm 1957 ngôn ngữ bậc cao đầu tiên ra đời. Đây là sản phẩm của IBM đưa ra. Đó là ngơn ngữ Fortran
(Formula Translator). Là ngơn ngữ gần gũi với ngôn ngữ tự nhiên, với cách diễn đạt tốn học (Điều kiện, vịng lặp).
 Đầu những năm 1960 :
COBOL : xử lý dữ liệu.
Algol 60 : có cấu trúc điều khiển hiện đại
Lisp : Ngơn ngữ lập trình hàm đầu tiên, ngơn ngữ xử lí danh sách
 Giữa những năm 1960 :
PL/1 : Kết hợp giữa ngơn ngữ tính tốn số học và ngơn ngữ xử lí dữ liệu.
Simula : Hướng đối tượng
 Từ năm 1970 – 1990 :
Các ngôn ngữ hướng đối tượng : C++
Lập trình Logic (1972)


Lập trình hàm :ML.,miranda
Ada
 Từ năm 1990 đến nay:
Hướng đối tượng + WWW: C#,java
Ngôn ngữ kịch bản + Hướng đối tượng + WWW:PHP
XML
Ngơn ngữ kịch bản phía Client: Java Script
Câu 4 : Các xu hướng phát triển & nghiên cứu chính of các ngơn ngữ lập trình trong giai đoạn hiện nay:
 Moodul hóa, hướng đối tượng.
 Mã nguồn mở, framework.


 Phát hiện lỗi tự động
 Phát triển trình dịch biên.
 Bảo mật
 Lập trình cho di động
 Web 2.0, điện tốn cho đám mây
 Lập trình trí tuệ nhân tạo
Câu 5: Anh chị hãy cho biết tên của 3 ngơn ngữ lập trình được sử dụng phổ biến hiện nay trên thế giới,
và theo anh chị thì vì sao nó lại được sử dụng phổ biến
1.Ngơn ngữ lập trình C#
C# là một ngơn ngữ lập trình hướng đối tượng được phát triển bởi Microsoft, là phần khởi đầu cho kế
hoạch .NET của họ. Tên của ngôn ngữ bao gồm ký tự thăng theo Microsoft nhưng theo ECMA là C#, chỉ bao
gồm dấu số thường. Microsoft phát triển C# dựa trên C++ và Java. C# được miêu tả là ngôn ngữ có được sự cân
bằng giữa C++, Visual Basic, Delphi và Java.
C# được thiết kế chủ yếu bởi Anders Hejlsberg kiến trúc sư phần mềm nổi tiếng với các sản phẩm Turbo
Pascal, Delphi, J++, WFC.
C#, theo một hướng nào đó, là ngơn ngữ lập trình phản ánh trực tiếp nhất đến .NET Framework mà tất cả các
chương trình .NET chạy, và nó phụ thuộc mạnh mẽ vào Framework này. Mọi dữ liệu cơ sở đều là đối tượng,
được cấp phát và hủy bỏ bởi trình dọn rác Garbage-Collector (GC), và nhiều kiểu trừu tượng khác chẳng hạn

như class, delegate, interface, exception, v.v, phản ánh rõ ràng những đặc trưng của .NET runtime.
4. Ngơn ngữ lập trình Java
Java (đọc như "Gia-va") là một ngơn ngữ lập trình dạng lập trình hướng đối tượng (OOP). Khác với phần lớn
ngơn ngữ lập trình thơng thường, thay vì biên dịch mã nguồn thành mã máy hoặc thông dịch mã nguồn khi
chạy, Java được thiết kế để biên dịch mã nguồn thành bytecode, bytecode sau đó sẽ được mơi trường thực thi
(runtime environment) chạy. Bằng cách này, Java thường chạy nhanh hơn những ngôn ngữ lập trình thơng dịch
khác như Python, Perl, PHP,...
Cú pháp Java được vay mượn nhiều từ C & C++ nhưng có cú pháp hướng đối tượng đơn giản hơn và ít tính
năng xử lý cấp thấp hơn.
dự định ngơn ngữ Java thay cho C++, nhưng các tính năng giống Objective C. Khơng nên lẫn lộn Java với
JavaScript, hai ngơn ngữ đó chỉ giống tên và loại cú pháp như C. Công ty Sun Microsystems đang giữ bản
quyền và phát triển Java thường xun.
3.  Ngơn ngữ lập trình PHP
PHP (viết tắt hồi quy "PHP: Hypertext Preprocessor") là một ngơn ngữ lập trình kịch bản hay một loại mã lệnh
chủ yếu được dùng để phát triển các ứng dụng viết cho máy chủ, mã nguồn mở, dùng cho mục đích tổng qt.
Nó rất thích hợp với web và có thể dễ dàng nhúng vào trang HTML. Do được tối ưu hóa cho các ứng dụng web,
tốc độ nhanh, nhỏ gọn, cú pháp giống C và Java, dễ học và thời gian xây dựng sản phẩm tương đối ngắn hơn so
với các ngôn ngữ khác nên PHP đã nhanh chóng trở thành một ngơn ngữ lập trình web phổ biến nhất thế giới.
Ngơn ngữ, các thư viện, tài liệu gốc của PHP được xây dựng bởi cộng đồng và có sự đóng góp rất lớn của Zend
Inc., công ty do các nhà phát triển cốt lõi của PHP lập nên nhằm tạo ra một môi trường chuyên nghiệp để đưa
PHP phát triển ở quy mô doanh nghiệp.
Câu 6: Phân biệt NNLT bậc thấp và NNLT bậc cao


- Ngơn ngữ lập trình bậc thấp là một ngơn ngữ lập trình liên quan chặt chẽ đến phần cứng máy tính và khơng
có tính khả chuyển. Từ "thấp" khơng có nghĩa là ngôn ngữ này kém hơn các ngôn ngữ lập trình bậc cao mà điều
này nghĩa là các lệnh của nó rất gần ngôn ngữ máy. Phụ thuộc rất nhiều vào loại máy.
Các ngơn ngữ lập trình bậc thấp thường được chia thành hai loại: thế hệ thứ nhất và thế hệ thứ hai.
+ Ngôn ngữ lập trình thế hệ thứ nhất, hay 1GL, là mã máy. Nó là ngơn ngữ duy nhất mà bộ vi xử lý có thể hiểu.
Hiện nay các lập trình viên hầu như khơng bao giờ viết chương trình trực tiếp bằng ngơn ngữ máy vì nó khơng

chỉ u cầu chú ý nhiều đến các chi tiết mà một ngôn ngữ bậc cao xử lý một cách tự động mà còn yêu cầu ghi
nhớ và tìm những mã lệnh bằng số cho mỗi chỉ thị được sử dụng.
+ Ngơn ngữ lập trình thế hệ thứ hai, hay 2GL, là ngơn ngữ assembly. Nó được xem là ngơn ngữ thế hệ thứ hai
vì mặc dù nó khơng phải là ngơn ngữ máy nhưng lập trình viên vẫn phải hiểu về kiến trúc của bộ vi xử lý (như
các thanh ghi và các lệnh của bộ vi xử lý). Những câu lệnh đơn giản được dịch trực tiếp ra mã máy.
- Ngôn ngữ lập trình bậc cao: Là ngơn ngữ gần với ngơn ngữ tự nhiên nhất. ít phụ thuộc vào loại máy, có tính
độc lập cao và phải có chương trình dịch để dịch sang mã máy thì máy tính mới có thể thực hiện được.
- Cho ví dụ:
+ Ngơn ngữ bậc thấp: Ngôn ngữ máy, Assembly, …
+ Ngôn ngữ lập trình bậc cao: fortran, pascal, C, Cobol….
Câu 7: Họ ngơn ngữ lập trình phổ biến là:
- Ngơn ngữ máy và ngôn ngữ ASSEMBLY: Ngôn ngữ máy là đối tượng thi hành trực tiếp của vi xử lý. Hợp
ngữ Assembly (1950s): chương trình viết bằng hợp ngữ ngắn hơn, chiếm ít bộ nhớ hơn và chạy nhanh hơn so
với ngôn ngữ lập trình bậc cao. Ngơn ngữ Assembly thích hợp cho lập trinh các vi điều khiển (VD vi điều khiển
trên ô tô)
- Họ ngôn ngữ cổ điển (ngôn ngữ cấp cao loại ngôn ngữ thủ tục) gắn chặt với mô hình máy tính cổ điển Von
Neumann: Kiến trúc Von Neumann có 2 đặc điểm đáng chú ý
+ Các lệnh được xử lý tuần tự theo thứ tự sắp xếp trong bộ nhớ
+ Chỉ cho phép đọc ghi mỗi lần 1 từ nhớ (Word Memory)\
VD: Fortran, Pascal, Basic, C, …
- Họ ngơn ngữ hàm: Chương trình của ngơn ngữ hàm bao gồm các đối tượng dữ liệu, các hàm và các phép áp
dụng hàm trên các đối tượng dữ liệu. Sử dụng định nghĩa hàm đệ qui. VD: Lisp, ML, Haskell,…
- Họ ngơn ngữ hướng đối tượng: Chương trình của ngơn ngữ hướng đối tượng là một kịch bản hoạt động của
các đối tượng trong chương trình. Các đối tượng gửi các thông điệp qua lại lẫn nhau. VD: Smalltalk, Eiffel, C+
+, Java,…
- Họ ngơn ngữ lơgic: Chương trình viết trên ngôn ngữ lôgic là tập hợp các quy tắc và các sự kiện, được diễn đạt
bằng các mệnh đề, liên quan đến vấn đề cần giải quyết. Người lập trình chỉ cần đặc tả lơgic của vấn đề, cịn cơ
chế giải quyết vấn đề theo đặc tả đó được cài sẵn trong chương trình dịch. VD: Prolog, VisiCalc,…
Câu 8: Đặc trưng cơ bản của ngơn ngữ lập trình hướng đối tượng:
- Là kĩ thuật lập trình hỗ trợ cơng nghệ đối tượng. OOP được xem là giúp tăng năng suất, đơn giản hóa độ phức

tạp khi bảo trì cũng như mở rộng phần mềm bằng cách cho phép lập trình viên tập trung vào các đối tượng phần
mềm ở bậc cao hơn. Ngồi ra, nhiều người cịn cho rằng OOP dễ tiếp thu hơn cho những người mới học về lập
trình hơn là các phương pháp trước đó.
- Chương trình của ngơn ngữ hướng đối tượng là một kịch bản hoạt động của các đối tượng trong chương trình.
Các đối tượng gửi các thơng điệp qua lại lẫn nhau


- Đặc trưng cơ bản:
- Tính trừu tượng: Đây là khả năng của chương trình bỏ qua hay khơng chú ý đến một số khía cạnh của thơng
tin mà nó đang trực tiếp làm việc lên, nghĩa là nó có khả năng tập trung vào những cốt lõi cần thiết. Mỗi đối
tượng phục vụ như là một "động tử" có thể hồn tất các cơng việc một cách nội bộ, báo cáo, thay đổi trạng thái
của nó và liên lạc với các đối tượng khác mà không cần cho biết làm cách nào đối tượng tiến hành được các
thao tác. Tính chất này thường được gọi là sự trừu tượng của dữ liệu.
Tính trừu tượng cịn thể hiện qua việc một đối tượng ban đầu có thể có một số đặc điểm chung cho nhiều đối
tượng khác như là sự mở rộng của nó nhưng bản thân đối tượng ban đầu này có thể khơng có các biện pháp thi
hành. Tính trừu tượng này thường được xác định trong khái niệm gọi là lớp trừu tượng hay lớp cơ sở trừu
tượng
+ Đóng gói dữ liệu: dữ liệu luôn được tổ chức thành các thuộc tính của lớp đối tượng. Việc truy nhập đến dữ
liệu phải thông qua các phương thức của đối tượng lớp.
+ Sử dụng lại mã nguồn: việc sử dụng lại mã nguồn được thể hiện thông qua cơ chế kế thừa. Cơ chế này cho
phép các lớp đối tượng có thể kế thừa từ các lớp đối tượng khác. Khi đó, trong các lớp kế thừa, có thể sử dụng
các phương thức (mã nguồn) của các lớp bị kế thừa, mà không cần phải định nghĩa lại.
VD: Smalltalk, Eiffel, C++, Java,…
Câu 9: Phân tích 3 u cầu của một ngơn ngữ lập trình:
- Tính dễ viết
+ Ngơn ngữ lập trình phải có tính diễn đạt cao: Cung cấp cho người lập trình những cơng cụ để có thể nghĩ sao
viết vậy (kỹ thuật đệ qui).
+ Ngôn ngữ phải đơn giản để dễ đọc, dễ nhớ và dễ nắm vững (không nên có q nhiều khái niệm. VD ngơn ngữ
C có q nhiều tốn tử, các tốn tử gần giống nhau).
+ Ngơn ngữ phải linh hoạt. VD C linh hoạt hơn Pascal với phát biểu Break, Return

- Tính dễ đọc
+ GOTO (Pascal) làm chương trình khó đọc
+ Dấu gạch dưới “_” trong danh hiệu làm chương trình dễ đọc hơn
- Tính tin cậy (xác suất chạy đúng cao trong quá trình sử dụng)
+ Ngôn ngữ cần hạn chế sự xuất hiện của các lỗi không thể ngờ được.
VD phát biểu trong FORTRAN
SUM(I,J)= I + J;
+ Hiệu ứng lề (side effect) cũng là một nguồn gây lỗi
+ Ngôn ngữ cần kiểm tra chặt chẽ sự tương hợp kiểu của các biến trong biểu thức và phép gán, sự tương hợp
của danh sách thông số của chương trình con ở nơi gọi và nơi định nghĩa.
+ Các bộ phận của chương trình cần có tính độc lập đối với nhau cao.
+ Tính tin cậy cịn phụ thuộc vào chất lượng của chương trình dịch
Câu 10: Tiêu chuẩn để đánh giá một ngôn ngữ lập trình tốt:
- Tính rõ ràng (clarity), đơn giản (simplicity), nhất quán (unity) của các khái niệm
- Tính rõ ràng của cú pháp chương trình (clarity of program syntax). Khả năng định nghĩa và sử đụng các cấu
trúc hoặc các phép toán phức tạp cho phép bỏ qua các cho tiết.
- Tính tự nhiên đối với các ứng dụng (naturalness for the application)
- Hỗ trợ tính trừu tượng hóa (support for abstraction)


-

- Khả năng của ngơn ngữ lập trình hỗ trợ người lập trình tạo ra các chương trình đúng đắn. Phát hiện và sửa lỗi
và thực hiện tiếp tục mà khơng cần dừng lại.
- Dễ dàng kiểm tra chương trình
- Mơi trường lập trình đơn giản
- Tính khả chuyển của chương trình
- Chi phí sử dụng thấp: chi phí thực thi, dịch, viết, kiểm tra, sử dụng, bảo trì chương trình.
Câu 11. Các thành tố cuả một ngơn ngữ lập trình hiện đại :
-Các dạng câu lệnh: định nghĩa, khai báo, gán giá trị, kết hợp, điều kiện, vòng lặp, gọi (hàm, thủ tục, macro),

các chỉ thị tiền xử lý (#ifndef MY_LIB #include "my_code.h“ #endif trong C/C++), chú giải
 Chương trình con và macro (một khối lệnh được dùng lại nhiều lần)
 Biến, hằng, tham số và đối số
 Từ vựng qui ước: từ khóa, các tên chuẩn hay tên cho trước, các ký hiệu
 Các luật cấm ngoại lệ: lỗi cú pháp, lỗi ý nghĩa
 Ngồi ra cịn 1 số thành tố khác như :
- Giao diện đồ họa
- Điều khiển theo sự kiện
- Thời gian thực
- Hỗ trợ hệ điều hành
Câu 12: Trình bày khái niệm siêu ngơn ngữ (meta language), và cho biết vai trị của siêu ngơn ngữ trong
q trình thiết kế ngơn ngữ lập trình, lấy ví dụ một vài siêu ngơn ngữ.
Khái niệm: Ngơn ngữ dùng để xác định cú pháp (hoặc ngữ nghĩa) của một ngơn ngữ lập trình gọi là siêu ngơn
ngữ (Meta language) 777 Khái niệm ngôn ngữ học của GS. Nguyễn Thiện Giáp (tr.377)
Vai trị: Nó có vai trị quan trọng trong q trình thiết kế ngơn ngữ lập trình:
Cú pháp quy định sự kết hợp giữa các kí hiệu trong bộ từ vựng. Ngữ nghĩa qui định ý nghĩa của mỗi sự kết hợp
đó.Mà trong việc thiết kế ngơn ngữ, ngữ nghĩa hình thức cho phép các nhà thiết kế mơ tả rõ ràng và chính xác
ngữ nghĩa cũng như các đặc tả của ngôn ngữ.
Cú pháp là thành phần quan trọng nhất trong một ngôn ngữ. Cú pháp được biểu diễn bởi một bộ luật cú
pháp. Bộ luật này dùng để mơ tả cấu trúc của chương trình, câu lệnh.
Để lập trình, người lập trình phải nắm được bộ luật cú pháp của ngơn ngữ mà mình định xây dựng
chương trình, để lập trình đúng.
VD: Văn phạm phi ngữ cảnh, BNF,…
Câu 13. Đặc tả từ vựng trong NNLT:
- Ngôn ngữ là tập hợp chuỗi các ký tự từ alphabet (A…Z, a…z, $,@,0..9, +,_,*,/,=,…)
- Token: Một token là một tập hợp các xâu kí tự có một nghĩa xác định. Ví dụ: Các từ khố, định danh, tốn tử,
hằng, xâu kí tự, …
- Pattern: Pattern của một token là các qui tắc kết hợp các kí tự để tạo nên token đó
- Lexeme: Là một chuỗi các kí tự thoả mãn pattern của một token
Câu 14. Biểu thức chính quy:

- Để biểu diễn các token người ta dùng biểu thức chính quy.
- Một biểu thức chính quy là một chuỗi miêu tả một bộ các chuỗi khác, theo những quy tắc cú pháp nhất định
- BTCQ có thể hiểu như là một ngơn ngữ nhỏ dùng cho mục đích: để tìm một chuỗi con trong biểu thức chuỗi
lớn.


Câu 15: Anh/chị hãy cho biết vì sao cần đặc tả cú pháp ngơn ngữ lập trình. Đầu vào và đầu ra của cơng việc
đặc tả cú pháp là gì ?
Phân tích cú pháp có mục đích duyệt chương trình nguồn để phát hiện và thông báo các lỗi không đúng với
quy ước của ngôn ngữ. Các lỗi này làm cho nghĩa của chương trình khơng rõ và do đó khơng thể dịch
đúng được.
Ví dụ trong ngơn ngũ PASCAL ta viết dòng lệnh d := (a+ b)/e-f)+g.
Khi đọc đến dấu ngoặc đóng thứ 2 sau f, ta sẽ khơng hiểu được nguời viết muốn tính gì và đương nhiên cũng
khơng thể dịch được. Lý do làm cho dịng lệnh khơng rõ nghĩa ở đây là thiếu một dấu ngoặc "(" ở phía trước, có
thể là trước chữ e, cũng có thể trước chữ a.
Những lỗi sai với quy ước của ngơn ngữ gọi là lỗi cú pháp.
Q trình phân tích cú pháp cũng tạo ra các thông tin cần thiết về cấu trúc của chương trình và các đối tượng sẽ
dùng trong công việc dịch được mô ta tiếp theo đây.
Trong q trình phân tích cú pháp, danh mục các đối tượng cũng được xây dựng để còn sinh mã chương trình
trong giai đoạn tiếp theo. Cơng việc này gọi là phân tích từ vựng.
-

Đầu vào là chương trình nguồn

-

Đầu ra là
+ Những lỗi cú pháp cần sửa

+ Thông tin cần thiết về cấu trúc của chương trình

Câu 16: Trình bày các đặc điểm của cú pháp cụ thể:
Trả lời:
* Cú pháp của ngôn ngữ được định nghĩa bởi bộ 4 (Văn phạm phi ngữ cảnh: Context – Free Grammar)
- Ký hiệu bắt đầu S Ỵ N(Start symbol)
- Tập các ký hiệu không kết thúc N (Non-terminals)
- Tập các ký hiệu kết thúc S (Terminals)
- Tập các luật sinh P (Production) cú dng: A đ a
Vi A ẻ N v a là chuỗi các ký hiệu kết thúc và không kết thúc
Câu hợp lệ của ngơn ngữ là chuỗi kí hiệu kết thúc được dẫn ra từ kí hiệu khởi đầu S thông qua các luật sinh
trong tập luật sinh P
* BNF là một siêu ngôn ngữ phổ biến để xây dựng cú pháp cụ thể
* Ví dụ: Cú pháp cụ thể dạng BNF cho biểu thức trong PASCAL
- <expression>::= <term> | <expression> <addop> <term>
- <term>
::= <factor> | <term> <multop><factor>
- <factor>
::= <identifier> | <literal> | (<expression>)
- <identifier> ::= a | b | c,….|z
- <literal>
::= 0 | 1 | 2,…|9
- <addop>
::= +, -, or
- <multop>
:: * | / | div | mod | and
Cú pháp cụ thể còn được gọi là cú pháp phi ngữ cảnh (context-free syntax), trong đó
vế trái của mỗi luật sinh chỉ có duy nhất một ký hiệu không kết thúc.
Cú pháp phi ngữ cảnh biểu diễn được cú pháp của mọi ngơn ngữ lập trình cấp cao
hiện nay.



Câu 17: Anh/chị hãy phân tích vai trị của đặc tả ngữ nghĩa ngơn ngữ lập trình. Đầu vào, đầu ra của cơng
việc đặc tả ngữ nghĩa là gì ?
- Đặc tả ngữ nghĩa hình thức cho phép:
+ Chứng minh tính đúng đắn của chương trình
+ Kiểm tra tính đúng đắn của chương trình dịch
- Cú pháp và ngữ nghĩa hình thức được dùng để hiện thực và thiết kê ngơn ngữ lập trình.
+ Cú pháp hình thức được sử dụng để tạo ra bộ phân tích cú pháp của ngơn ngữ
+ Ngữ nghĩa hình thức giúp cho q trình sinh tự động các trình thơng dịch và biên dịch của ngôn ngữ.
+ Trong việc thiết kế ngôn ngữ, ngữ nghĩa hình thức cho phép nhà thiết kế mơ tả rõ ràng và chính xác ngữ
nghĩa cũng như các đặc tính của ngơn ngữ.
- Đặc tả ngữ nghĩa hình thức thơng qua bộ phân tích ngữ nghĩa.
- Bộ phân tích ngữ nghĩa (BPTNN) thực hiện
+ Kiểm tra lỗi ngữ nghĩa: kiểm tra kiểu; kiểm tra phạm vi của hằng, biến; kiểm tra việc sử dụng tên
+ Thu nhận thông tin thuộc tính cho các từ tố (token), ví dụ như thông tin về giá trị, thông tin về loại hằng,
biến hay hàm cho tên.
+ BPTNN phân tích ý nghĩa của các cấu trúc cú pháp tạo nên chương trình nguồn.
VD trong biểu thức gán c:=a+b*7, BPTNN xác định ý nghĩa của các tác vụ :=, +, *, kiểm tra xem các tác vụ có
nhận các đối số thuộc các kiểu thích hợp hay khơng dựa vào bảng ký hiệu.
Câu 18: Anh/chị hãy cho biết đặc điểm của quá trình biên dịch lấy VD về các ngôn ngữ biên dịch mà
anh/chị biết
Trả lời:
* Đặc điểm của quá trình biên dịch:
Chương trình nguồn được trình biên dịch chuyển sang chương trình đích, thường ở dạng mã máy (hoặc
assembly), sau đó chương trình đích mới được thực thi. Trong hệ thống biên dịch dữ liệu và chương trình
nguồn
được
xử


hai

thời
điểm
khác
nhau.
Trong đó:
- Chương trình nguồn viết bằng ngơn ngữ nguồn
- Chương trình đối tượng được thể hiện trên ngôn ngữ đối tượng
- Thời gian chuyển đổi từ chương trình nguồn sang chương trình đối tượng goi là thời gian dịch (compile time)
- Thời gian diễn ra sự thực thi chương trình đối tượng trên máy tính gọi là thời gian thực thi (execution time
hoăc run time)


* Ví dụ về ngơn ngữ biên dịch:
Ngơn ngữ biên dịch là ngơn ngữ mà chương trình dịch cho nó là chương trình biên dịch.
Ví dụ như Fortran: , Pascal, C, C++…
Câu 19:
- Thay vì chuyển đổi tồn bộ chương trình nguồn như trình biên dịch, trình thơng dịch chỉ chuyển đổi một mệnh
đề của chương trình và thực hiện đoạn mã kết quả ngay, sau đó nó tiếp tục chuyển đổi mệnh đề thứ 2 rồi thi
hành đoạn mã kết quả thứ 2 và cứ thế.
- Khi sử dụng trình thơng dịch, mỗi lần chạy chương trình là mỗi lần chương trình nguồn được thơng dịch sang
ngơn ngữ máy. Khơng có chương trình đối tượng nào được tạo ra.
Ưu điểm:
- có thể chạy một chương trình vẫn cịn lỗi cú pháp. Chỉ đến lúc thông dịch đến câu lệnh có lỗi cú pháp, q
trình thi hành chương trình mới bị ngừng lại và trình thơng dịch sẽ thơng báo lỗi.
- Do khơng có chường trình đối tượng nào được tao ra ==> tốn ít dung lượng đĩa
- Có thể chạy trên mọi hệ điều hành
Nhược điểm:
-

Trong thơng dịch thì chương trình đích khơng được lưu lại nên mỗi lần thực hiện phải dịch lại từ đầu.

(ngược lại với trình biên dịch)

 Một số ngôn ngữ thông dịch:
vbscript, javascript, shell script, sql script.
Câu 20: Anh( chị) hãy liệt kê các giai đoạn của trình biên dịch, đầu vào đầu ra của các giai đoạn?
Trả lời:
Chương trình dịch chia làm 6 giai đoạn:
- Phân tích từ vựng
- Phân tích cúa pháp
Phân
- Phân tích ngữ nghĩa
tích
- Sinh mã trung gian
- Tối ưu mã
- Sinh mã đích

Tổng
hợp

* Phân tích từ vựng:
- Đầu vào: chương trình nguồn là 1 chuỗi các kí hiệu
- Đầu ra: các kí hiệu trong chuỗi chương trình nguồn được gom lại thành các nhóm kí hiệu có ý nghĩa gọi là các
token, như từ khóa, tên biến, hằng, kí hiệu tác vụ.
* Phân tích cú pháp
- Đầu vào: chuỗi các token do bộ phân tích từ vựng cung cấp


- Đầu ra: cấu trúc phức tạp hơn của chương trình nguồn như: biểu thức, phát biểu, chương trình con. Các cấu
trúc được thể hiện dưới dạng cây cú pháp với nút lá là các token.
* Phân tích ngữ nghĩa:

- Đầu vào: Các cấu trúc cú pháp tạo nên chương trình nguồn
- Đầu ra: phát hiện các lỗi ngữ nghĩa, thơng tin thuộc tính cho các từ tố (token) cho ra chương trình nguồn đã
sửa lỗi
* Sinh mã trung gian
- Đầu vào: Chương trình nguồn có ở bước trên
- Đầu ra: dạng biểu diễn mã trung gian (mã bộ tứ, mã 3 địa chỉ) của chương trình nguồn
* Tối ưu mã
-- Đầu vào: Mã trung gian vừa được sinh ra ở bước trên
- Đầu ra: chương trình đích tối ưu về tốc độ thực thi và bộ nhớ sử dụng
* Sinh mã đích
- Đầu vào: mã trung gian đã được tối ưu
- Đầu ra: mã đích thơng thường ở dạng mã máy hay mã Assembly
Câu 21: Anh/chị hãy trình bày nội dung của q trình phân tích từ vựng.

Source
program

Lexical
analyzer

Token

Parser

Get next token
Symbol
table

1.


Source program: Chương trình nguồn đối với chương trình dịch chỉ là một chuỗi kí hiệu

2.
Lexical analyzer: Bộ phân tích từ vựng dị các kí hiệu trong chuỗi kí hiệu chương trình nguồn, và gom
chúng lại thành các nhóm kí hiệu có ý nghĩa gọi là các Token: như từ khóa, tên biến, hằng, kí hiệu tác vụ.
3.

VD phân tích từ vựng phép gán: c:=a+b*7 thu được:
c ident(định danh)
b ident(định danh)
:= becomes(kí hiệu tác vụ gán)
* times (kí hiệu tác vụ nhân)
a ident(định danh)
7 number (số/hằng)
+ plus(kí hiệu tác vụ cộng)
Chuỗi tokens thu được: id1:=id2+id3*7
(ident, c) becomes (ident, a) plus (ident, b) times (number, 7)


4.
Parser: Bộ phân tích cú pháp nhận các kí hiệu có ý nghĩa gọi là các Token trong chuỗi kí hiệu từ bộ
phân tích từ vựng, sau đó bộ phân tích từ vựng lấy token kế (Get next token) từ bộ phân tích cú pháp.
5.
Bảng danh hiệu (symbol table)
c

….

a


….

b



Danh hiệu

Thuộc tính

Câu 22: Anh chị hãy cho biết bảng danh hiệu (Symbol table) dùng để làm gì? Và vai trị của nó trong
q trình biên dịch chương trình?
* Bảng danh hiệu (symbol table) là một cấu trúc dữ liệu dùng để lưu trữ tất cả định danh (bao gồm các trường
lưu giữ ký hiệu và các thuộc tính của nó) là thơng tin của chương trình Các thơng tin này được tập hợp từ các
giai đoạn phân tích của trình biên dịch và được sử dụng bởi giai đoạn tổng hợp để sinh mã đích
* Vai trị của bảng danh hiệu (Symbol table) trong quá trình biên dịch chương trình là:
- Là cơ sở dữ liệu cho toàn bộ hệ thống biên dịch
- Trong quá trình chạy chương trình chỉ cần lấy
lại thông tin từ bảng Symbol table mà không cần
kiểm tra lại thơng tin
- Khi chạy chương trình lần thứ 2 mà dữ liệu
nguồn khơng có gì thay đổi thì nó sẽ chạy trực
tiếp trên file đích đã chứa sẵn bảng Symbol
table1 lần biên dịch mà thực thi được nhiều
lầnthời gian chạy chương trình nhanh
Câu 23: Anh chị hãy trình bày nội dung của
q trình phân tích cú pháp
- Bộ phân tích cú pháp phân tích chuỗi các token
do bộ phân tích từ vựng cung cấp, để thu được
các cấu trúc phức tạp hơn của chương trình

nguồn như: biểu thức, phát biểu, chương trình con. Các cấu trúc được thể hiện dưới dạng cây cú pháp với nút lá
là các token.
- Ví dụ cây cú pháp thu được của phát biểu gán “c:=a+b*7“
Câu 24: Anh chị hãy trình bày nội dung của q trình phân tích ngữ nghĩa
-Bộ phân tích ngữ nghĩa (BPTNN) thực hiện:
– Kiểm tra lỗi ngữ nghĩa: kiểm tra kiểu; kiểm tra phạm vi của hằng, biến; kiểm tra việc sử dụng tên


– Thu nhận thơng tin thuộc tính cho các từ tố (token), ví dụ như thơng tin về giá trị, thông tin về loại hằng, biến
hay hàm cho tên.
-BPTNN phân tích ý nghĩa của các cấu trúc cú pháp tạo nên chương trình nguồn. VD trong biểu thức gán
c:=a+b*7, BPTNN xác định ý nghĩa của các tác vụ :=, +, *, kiểm tra xem các tác vụ có nhận các đối số thuộc
các kiểu thích hợp hay khơng dựa vào bảng ký hiệu.
-Việc phân tích ngữ nghĩa phải dựa vào các luật ngữ nghĩa đi kèm với từng luật cú pháp để thực hiện chức năng
sinh thuộc tính cho các từ tố và kiểm tra lỗi ngữ nghĩa.
Câu 25: Anh chị hãy cho biết các lỗi của chương trình được phát hiện như thế nào trong quá trình biên
dịch chương trình
*/ Xử lý lỗi cú pháp
Chương trình nguồn có thể chứa các lỗi ở nhiều mức độ khác nhau:
- Lỗi từ vựng như danh biểu, từ khóa, tốn tử viết không đúng.
- Lỗi cú pháp như ghi một biểu thức tốn học với các dấu ngoặc đóng và mở khơng cân bằng.
- Lỗi ngữ nghĩa như một toán tử áp dụng vào một tốn hạng khơng tương thích.
- Lỗi logic như thực hiện một lời gọi đệ qui không thể kết thúc.
Phần lớn việc phát hiện và phục hồi lỗi trong một trình biện dịch tập trung vào giai đọan phân tích cú pháp. Vì
thế, bộ xử lý lỗi (error handler) trong q trình phân tích cú pháp phải đạt mục đích sau:
ƒ Ghi nhận và thơng báo lỗi một cách rõ ràng và chính xác.
ƒ Phục hồi lỗi một cách nhanh chóng để có thể xác định các lỗi tiếp theo.
ƒ Khơng làm chậm tiến trình của một chương trình đúng.
*/ Các chiến lược phục hồi lỗi
Phục hồi lỗi là kỹ thuật vượt qua các lỗi để tiếp tục q trình dịch. Nhiều chiến lược phục hồi lỗi có thể dùng

trong bộ phân tích cú pháp. Mặc dù khơng có chiến lược nào được chấp nhận hồn tồn, nhưng một số trong
chúng đã được áp dụng rộng rãi. Ởđây, chúng ta giới thiệu một số chiến lược :
a. Phương thức "hoảng sợ" (panic mode recovery): Ðây là phương pháp đơn giản nhất cho cài đặt và có thể
dùng cho hầu hết các phương pháp phân tích. Khi một lỗi được phát hiện thì bộ phân tích cú pháp bỏ qua từng
ký hiệu một cho đến khi tìm thấy một tập hợp được chỉ định của các token đồng bộ (synchronizing tokens),
các token đồng bộ thường là dấu chấm phẩy (;) hoặc end.
b. Chiến lược mức ngữ đoạn (phrase_level recovery): Khi phát hiện một lỗi, bộ phân tích cú pháp có thể
thực hiện sự hiệu chỉnh cục bộ trên phần còn lại của dòng nhập. Cụ thể là thay thế phần đầu cịn lại bằng một
chuỗi ký tự có thể tiếp tục. Chẳng hạn, dấu phẩy (,) bởi dấu chấm phẩy (;), xóa một dấu phẩy lạ hoặc thêm vào
một dấu chấm phẩy.
c. Chiến lược dùng các luật sinh sửa lỗi (error production): Thêm vào văn phạm của ngôn ngữ những luật
sinh lỗi và sử dụng văn phạm này để xây dựng bộ phân tích cú pháp, chúng ta có thể sinh ra bộ đốn lỗi thích
hợp để chỉ ra cấu trúc lỗi được nhận biết trong dòng nhập.
d. Chiến lược hiệu chỉnh toàn cục (global correction): Một cách lý tưởng là trình biên dịch tạo ra một số thay
đổi trong khi xử lý một lỗi. Có những giải thuật để lựa chọn một số tối thiểu các thay đổi để đạt được một hiệu
chỉnh có chi phí tồn cục nhỏ nhất. Cho một chuỗi nhập có lỗi x và một văn phạm G, các giải thuật này sẽ tìm
được một cây phân tích cú pháp cho chuỗi y mà số lượng các thao tác chèn, xóa và thay đổi token cần thiết để
chuyển x thành y là nhỏ nhất. Nói chung, hiện nay kỹ thuật này vẫn cịn ở dạng nghiên cứu lý thuyết.
Câu 26: Anh chị hãy cho biết nội dung và ý nghĩa của việc khai báo đối tượng dữ liệu


- ND: Khai báo là một phát biểu trong chương trình dùng để chuyển tới bộ dịch, thơng tin về số lượng, kiểu của
ÐTDL và tên đối tượng dữ liệu; cần thiết trong quá trình thực hiện chương trình
- Sự khai báo có thể chỉ rõ thời gian tồn tại của ÐTDL
- Một số NNLT không cần khai báo biến trước khi sử dụng
- Ưu điểm : mềm dẻo, khuyết điểm : khó quản lý
Ý Nghĩa: của kiểu dữ liệu
- Cung cấp ngữ cảnh hoàn hảo (implicit context) cho các tác vụ, do đó programmer khơng cần chỉ ra ngữ cảnh
cụ thể cho các tác vụ
- Cho phép trình biên dịch phát hiện tồn bộ các lỗi thơng thường của programmer

- Kiểm tra kiểu không thể ngăn ngừa hết các tác vụ vô nghĩa
Câu 27: Anh chị hãy cho biết đặc điểm của kiểm tra kiểu tĩnh, ưu và nhược điểm của kiểm tra kiểu tĩnh
- Thông tin về kiểu của các ĐTDL phải được cung cấp cho bộ dịch. Bộ biên dịch tập hợp thông tin từ khai báo
trong chương trình vào trong bảng danh biểu (symbol table) nơi chứa thơng tin về kiểu của các biến và chương
trình con
- Ưu điểm: tất cả các nhánh chương trình, các phép tốn đều được kiểm tra nên khơng bỏ sót các lỗi về kiểu.
Mặt khác thông tin về kiểu không gắn với ĐTDL tại thời điểm thực thi chương trình nên tiết kiệm bộ nhớ và
tăng tốc độ chạy chương trình
- Nhược điểm: khơng mềm dẻo, cụ thể người lập trình phải cân nhắc và xác định kiểu cho ĐTDL một cách rõ
ràng
- Các ngôn ngữ kiểm tra kiểu tĩnh: Pascal, C, …
Câu 28: Anh chị hãy cho biết đặc điểm của kiểm tra kiểu động, ưu và nhược điểm của kiểm tra kiểu
động
-Để kiểm tra kiểu động cần phải lưu trữ thông tin về kiểu của mỗi một ĐTDL cùng với ĐTDL đó. Trước khi
thực hiện một phép tốn thông tin về kiểu của mỗi một đối số sẽ được kiểm tra
-Ưu điểm: mềm dẻo khi viết chương trình, không cần khai báo kiểu dữ liệu và kiểu của ĐTDL có thể thay đổi
trong q trình thực thi chương trình
-Nhược điểm: có khả năng bỏ sót lỗi về kiểu; yêu cầu bộ nhớ lớn do phải lưu trữ thông tin kiểu dữ liệu trong
quá trình thực hiện chương trình; làm chậm q trình thực thi do vừa phải tính tốn vừa phải kiểm tra kiểu
-Các ngơn ngữ kiểm tra kiểu động: SNOBOL4, LISP, APL…
Câu 29: Anh chị hãy cho biết có mấy cách chuyển đổi kiểu và lấy ví dụ về mỗi cách
- Trong quá trình kiểm tra kiểu nếu khơng có sự tương thích về kiểu thì có 2 lựa chọn có thể:
– Báo lỗi khơng tương thích kiểu
– Thực hiện chuyển đổi kiểu
- Có 2 cách chuyển đổi kiểu
– Bằng tập hợp các hàm đã được xây dựng. VD Lệnh ROUND trong Pascal chuyển số thực àsố nguyên
– Ép kiểu tự động. VD trong Pascal các đối số của phép tốn số học ‘+’ có lẫn số thực và số nguyên thì số
nguyên được chuyển đổi tự động sang kiểu số thực
Câu 30: Anh chị hãy phân biệt các loại phép gán khác nhau
- Là tác vụ cơ bản để thay đổi giá trị của đối tượng dữ liệu.

- Đặc tả tác vụ gán
:= : type1 x type2  void
= : type1 x type2  type3


Z := X + Y

Z = X + (Y = W  2)
A=B=C
Ngôn ngữ Pascal
Ngôn ngữ C
- Các NNLT khác nhau thì có phép gán khác nhau
-Khác nhau về cú pháp
-Khác nhau về kết quả trả về của phép gán giá trị (pascal trả về kiểu void; C/C++ trả về một kiểu giá trị mới)
-Khác nhau về cách thức tiến hành gán giá trị: sao chép ĐTDL khi gán, sao chép tự trỏ đến ĐTDL khi gán

Câu 31: Anh chị hãy cho biết khởi tạo giá trị là gì và ý nghĩa của việc khởi tạo giá trị?
Khởi tạo một biến là gán cho biến đó một giá trịđầu tiên.
Ý nghĩa:
 Một biến khi được tạo ra thì sẽđược cấp phát ơ nhớ nhưng nó vẫn chưa được khởi tạo. Khi nó được gán một
giá trịđầu tiên thì mới được khởi tạo.
 Các biến chưa được khởi tạo là nguồn gốc của các lỗi lập trình. Khi một biến được cấp phát ơ nhớ mà chưa
được khởi tạo thì trong ô nhớ của nó cũng có một giá trị ngẫu nhiên nào đó. Thường là một giá trị rác (Khi một
ĐTDL nào trước đó đã bị hủy bỏ nhưng giá trị của ĐTDL này trong ơ nhớ vẫn cịn, giá trị này gọi là giá trị rác).
Ðiều nguy hiểm là giá trị rác này vẫn là một giá trị hợp lệ. Vì thế chương trình có thể xử lý trên giá trị rác này
một cách bình thường và chúng ta khơng thể kiểm sóat được kết quả xử lý đó.
 Vì tính chất nghiêm trọng như đã nói trên của biến chưa được khởi tạo, các ngơn ngữ lập trình có thể sử dụng
các giải pháp sau để khắc phục:
.- Nếu biến chưa được khởi tạo thì sẽ có giá trị NULL: Khi một biến mới được tạo ra, ô nhớ cấp phát cho nó
phải chứa một dãy các bit biểu diễn cho một giá trị “NULL”.

Tùy thuộc vào kiểu của biến mà giá trị NULL này sẽ có một giá trị cụ thể, ví dụ nếu là biến số thì NULL là 0,
nếu là biến chuỗi kí tự thì NULL là chuỗi rỗng, nếu biến là logic thì NULL là FALSE...
- Khởi tạo biến ngay sau khi nó vừa được tạo ra là một cách lập trình tốt và trong một số ngôn ngữ mới đều
cung cấp phương tiện để làm điều này một cách dễ dàng.
Trong ngôn ngữ Pascal một biến được khởi tạo đồng thời với việc khai báo được gọi là biến có giá trịđầu hay
cịn gọi là hằng định kiểu.
Ví dụ:
const i:integer=10;
a: ARRAY[1..3,1..2] Of Integer = ((11, 12), (21, 22), (31, 32));
var j:integer;
begin
writeln(i); i:= i+1; writeln(i);
for i:=1 to 3 do begin


for j:=1 to 2 do write(a[i,j]:5);
writeln;
end; end.
Câu 32: Trình bày cách đặc tả đối tượng dữ liệu kiểu số nguyên?
1)Đặc tả các thuộc tính: Một ÐTDL của kiểu số nguyên khơng có thuộc tính nào khác ngồi kiểu của nó.
2)Đặc tả giá trị: Tập hợp các giá trị nguyên được xác định theo dạng là một tập hợp con có thứ tự hữu hạn của
tập vô hạn các số nguyên đã được nghiên cứu trong toán học.
Giá trị nguyên lớn nhất đôi khi được biểu diễn như là một hằng xác định. Ví dụ trong
Pascal là hằng MaxInt. Miền giá trị của kiểu số nguyên là tập các số nguyên từ - MaxInt đến
MaxInt. Giá trị MaxInt được lựa chọn phản ánh giá trị nguyên lớn nhất có thể biểu diễn được trong phần cứng.
3)Ðặc tả các phép toán:
- Các phép tính số học :
cộng (+), trừ (-), nhân (*), chia (/ hoặc DIV), lấy phần dư (MOD) hoặc một số phép toán tương tự khác.
âm (-), dương (+).
- Các phép toán quan hệ

bằng, khác, nhỏ hơn, lớn hơn, nhỏ hơn hoặc bằng, lớn hơn hoặc bằng. Phép toán quan hệ so sánh hai giá trị dữ
liệu đối số và trả về kết quả là một đối tượng dữ liệu logic (đúng hoặc sai).
- Gán trị:
Cũng như phép gán tổng quát, phép gán của số nguyên có thể trả về hoặc không trả về một giá trị.
Sự cài đặt
Kiểu dữ liệu nguyên hầu hết được cài đặt một cách trực tiếp bằng cách dùng sự biểu
diễn bộ nhớ được xác định bởi phần cứng và tập hợp các phép tính số học, các phép
toán quan hệ nguyên thuỷ trong phần cứng cho các số nguyên. Thông thường sự biểu
diễn này sử dụng một từ trong bộ nhớ hoặc một dãy các bytes để lưu trữ một số nguyên. Chẳng
hạn ngôn ngữ Pascal đã sử dụng biểu diễn số nguyên bởi 1 từ (word) trong phần cứng của máy tính để biểu diễn
cho một số integer.
Câu 33. Đặc tả đối tượng dữ liệu kiểu số thực dấu chấm động:
1.
Các kiểu số thực: Real (6 byte), Single( 4 byte), Double (8 byte), Extended (10byte),..
2.
Dạng lưu trữ của kiểu số thực dấu chấm động là một chuỗi bít được phân làm hai phần là phần mũ và
phần định trị.
3.
Các phép toán cộng, trừ, nhân, chia trên số thực dấu chấm động có thể được trang bị sẵn ở phần cững
cịn phép tốn mũ thường được thực hiện bằng phần mềm
Câu 34. Đặc tả đối tượng dữ liệu kiểu ký tự:
Kiểu kí tự thường được hiện thực bằng một byte hoặc một word chứa giá trị bằng mã của kí tự mà byte hoặc
word đó biểu diễn; mã của kí tự được xác định trong bộ kí tự mà ngơn ngữ sử dụng.
Các tác vụ trên kí tự thật sự là các tác vụ trên các giá trị mã này\
Các phép toán
Các phép toán quan hệ (relational operations)
Phép gán
Câu 35. Dạng lưu trữ tuần tự:
- Đối tượng dữ liệu được lưu trữ trong một khối liên tục, chứa cả phần mô tả kiểu và các thành phần của kiểu



Dạng tuần tự thích hợp cho kiểu dữ liệu cấu trúc kích thước cố định, nhất là trong trường hợp các thành phần
dữ liệu thuộc cùng một kiểu.
- Nhược điểm: Cần có khối lưu trữ liên tục đủ lớn và khơng thể dùng cho kiểu dữ liệu cấu trúc có kích thước
thay đổi như danh sách
Câu 36. Dạng lưu trữ liên kết:
- Ưu điểm: Dạng liên kết thường được dùng cho kiểu dữ liệu cấu trúc có kích thước thay đổi như danh sách,
cho phép tận dụng được các khối lưu trữ dữ liệu rời rạc trong bộ nhớ
- Đối tượng dữ liệu được lưu trữ ở nhiều khối rời rạc của bộ nhớ như một danh sách liên kết; phần tử đầu của
danh sách chứa phần mô tả kiểu, các phần tử còn lại chứa các thành phần của kiểu
- Nhược điểm: tốc độ truy xuất thành phần chậm, do tác vụ lựa chọn trên dạng lưu trữ này là tuần tự.
- Ưu điểm: tốc độ truy xuất đối tượng dữ liệu cao, do có thể thực hiện tác vụ lựa chọn trực tiếp
Câu 37. Đặc điểm lưu trữ của kiểu vector :
Địa chỉ nền 

Vector
LB

Kiểu thành phần
Kích thýớc của thành
phần

A[LB
A[LB] +
1]

A[UB]

UB
E


var A: array [1..10] of
integer;
loc A[I] =  + D + (I - LB) x E
D: kích thýớc của phần mô tả
LB: Giá trị cận dýới
UB: Giá trị cận trên
E: kích thýớc của kiểu thành
phần

Câu 38: Anh chị hãy cho biêt đặc điểm dạng lưu trữ kiểu bản ghi có kích thước cố định
1)Định nghĩa bản ghi
Bản ghi là một CTDL bao gồm một số cố định các phần tử có kiểu khác nhau. Như vậy, bản ghi là một
CTDL có kích thước cố định và khơng đồng nhất. Các phần tử của bản ghi được gọi là các trường. j
2) Sự đặc tả và cú pháp
Đặc tả thuộc tính
Các thuộc tính của một bản ghi phải được chỉ rõ trong phép khai báo, chúng bao gồm:
1. Số lượng các phần tử.
2. Kiểu dữ liệu của các phần tử (Các phần tử có thể có kiểu khác nhau).
3. Mỗi phần tửđược cho bởi tên phần tử (tên trường).
Cú pháp khai báo bản ghi của Pascal:
Nhan_vien: RECORD
Ma: Integer; {Mã nhân viên}
Ho_ten: String[25];
Tuoi: Integer; {Tuổi}
Luong: Real; {Hệ số lương}
END


Việc khai báo này đặc tả một bản ghi có 4 phần tử của các kiểu Integer, Real và String.

Mỗi phần tử có một tên: Ma, Ho_ten, Tuoi và Luong. Ðể chọn một phần tử của mẩu
tin ta sử dụng tên của phần tử (trường) đó, chẳng hạn trong Pascal, Nhan_vien.Luong
là để truy xuất tới phần tử Luong của bản ghi Nhan_vien.
Đặc tả phép toán
-Lựa chọn một phần tử là phép toán cơ bản cuả bản ghi. Phép toán này được thực hiện
bằng cách chỉ ra tên trực kiện của phần tử. Phép toán lựa chọn một phần tử của bản ghi là sựlựa chọn trực tiếp.
- Phép gán các mẩu tin có cùng cấu trúc là một phép
tốn phổ biến được các ngôn ngữđưa vào.
Sự cài đặt
Biểu diễn bộ nhớ
Biểu diễn bộ nhớtuần tựđược sử dụng để lưu trữ một bản ghi. Một khối liên tục các
ô nhớđược dùng để lưu trữ cho một bản ghi, trong khối đó, mỗi ơ biểu diễn cho một
trường. Có thể cũng cần sử dụng bộ mô tả riêng cho từng trường để lưu trữ thuộc tính
của các trường đó. Do các trường có kiểu khác nhau nên ơ nhớ dành cho chúng cũng
có kích thước khác nhau.
Câu 39. Đặc điểm của dạng lưu trữ kiểu chuỗi ký tự có chiều dài thay đổi có giới hạn:

Kiểu chuỗi ký tự phân làm ba loại dựa trên đặc tính về chiều dài của chuỗi
– Chiều dài cố định
– Chiều dài thay đổi có giới hạn
– Chiều dài thay đổi không giới hạn:Dạng liên kết

5

Chiều dài hiện
tại

‘A’

Kiểu chuỗi chiều dài thay đổi không giới

hạn

‘B’
‘C’

‘D’
‘E’
Câu 40: Anh chị hãy cho biết đặc điểm của dạng lưu trữ kiểu tệp tin
- Đối tượng dữ liệu tập tin là một cấu trúc dữ liệu bao gồm nhiều thành phần được sắp xếp liên tiếp nhau. Kích
thước lưu trữ của tệp tin thay đổi theo số lượng thành phần của tập tin.
- Tập tin được lưu trữ ở bộ nhớ phụ như băng từ hoặc đĩa từ.
- Thời gian sống của tập tin có thể dài hơn thời gian thực thi của chương trình tạo ra nó.
- Các thành phần của tập tin được truy xuất thông qua con trỏ vị trí tập tin.


Câu 41: Anh chị hãy cho biết đặc điểm, ưu điểm và nhược điểm của biến tĩnh
 Đặc điểm
- Khai báo một cách tường minh
- Thời gian tồn tại của biến tĩnh cũng là thời gian tồn tại của khối chương trình chứa khai báo biến này.
- Biến được cấp phát vùng nhớ trong vùng dữ liệu (data segment) hoặc là stack.
- Kích thước của biến khơng thay đổi trong suốt q trình sống.
- Các biến tĩnh có một định danh được kết nối với địa chỉ vùng nhớ lưu trữ biến và được truy xuất trực tiếp
thông qua định danh đó.
 Ưu điểm
- Khai báo tường minh.
- Biến tĩnh tồn tại trong suốt thời gian thực thi chương trình.
- Kích thước của biến khơng thay đổi trong suốt q trình sống.
 Nhược điểm
- Cấp phát ơ nhớ dư, gây ra lãng phí ơ nhớ.
- Cấp phát ơ nhớ thiếu, chương trình thực thi bị lỗi.

Câu 42: Anh chị hãy cho biết đặc điểm, ưu điểm và nhược điểm của biến động
 Đặc điểm
- Không được khai báo một cách tường minh
- Có thể được cấp phát hoặc giải phóng bộ nhớ khi người sử dụng yêu cầu.
- Biến được cấp phát vùng nhớ trong Heap.
- Kích thước của biến có thể thay đổi trong suốt q trình sống.
- Việc truy nhập các biến động được tiến hành nhờ các biến con trỏ.
- Các biến con trỏ được định nghĩa như là biến tĩnh và được dùng để chứa địa chỉ của các biến động.
 Ưu điểm
- Biến động chỉ phát sinh trong quá trình thực hiện chương trình chứ khơng phát sinh lúc bắt đầu chương trình.
- Khi chạy chương trình, kích thước của biến, vùng nhớ và địa chỉ vùng nhớ được cấp phát cho biến có thể thay
đổi.
- Sau khi dùng xong có thể giải phóng để tiết kiệm chỗ trong bộ nhớ
 Nhược điểm
- Không được khai báo 1 cách tường minh.


- Biến động khơng có địa chỉ nhất định nên ta không thể truy cập đến chúng được.
Câu 43: Anh chị hãy trình bày khái niệm biến con trỏ và những lưu ý khi sử dụng biến con trỏ
 Khái niệm: Biến con trỏ là biến dùng để chứa địa chỉ của ô nhớ trong bộ nhớ.
 Lưu ý khi sử dụng biến con trỏ
- Khi gán địa chỉ của biến tĩnh cho con trỏ cần chú ý đến kiểu dữ liệu của chúng.
- Biến con trỏ không chứa dữ liệu mà chỉ chứa địa chỉ của dữ liệu hay chứa địa chỉ của ơ nhớ chứa dữ liệu.
- Kích thước của biến con trỏ không phụ thuộc vào kiểu dữ liệu, ln có kích thước cố định là 2 byte
Câu 44: Anh chị hãy cho quá trình cấp phát vùng nhớ cho bản hoạt động của chương trình con diễn ra
như thế nào? Các thành phần của bản hoạt động của chương trình con
 Quá trình cấp phát vùng nhớ cho bản hoạt động của CTC
- Trong thời gian thực thi chương trình, CTC được gọi, một bản hoạt động của CTC được tạo ra.
- Bản hoạt động của CTC được tạo ra bởi lệnh CALL – lệnh gọi CTC thực hiện.
- Khi CTC được gọi, nó sẽ được cấp phát một khối lưu trữ. Khối này chứa các thông tin về dữ liệu và điều

khiển của CTC tương ứng với lần gọi này. Khối nhớ được giải phóng khi CTC kết thúc.
- Bản hoạt động của CTC kết thúc ở lệnh RETURN, trở về nơi gọi CTC.
 Các thành phần của bản hoạt động của CTC
- Phần tĩnh: phần đoạn mã chứa mã thực thi của CTC và các hằng. Nội dung của phần này không thay đổi trong
thời gian thực thi và như nhau ở tất cả các bản hoạt động của 1 CTC
- Phần động: bản ghi hoạt động chứa các thơng số hình thức, kết quả của CTC hàm, dữ liệu cục bộ, điểm trở
về…Cấu trúc phần này cố định nhưng nội dung thay đổi trong thời gian thực thi cũng như ở các bản hoạt động
CTC.
Câu 45: Anh chị hãy cho biết thế nào là hiệu ứng lề, lấy ví dụ về trường hợp hiệu ứng lề mà anh chị biết
 Khái niệm: Hiệu ứng lề là 1 hiệu ứng phát sinh khi thực thi 1 phép tốn có trả về kết quả ẩn, kết quả ẩn được
trả về này sẽ làm thay đổi giá trị được lưu trữ của các đối tượng dữ liệu (ĐTDL) khác mà người lập trình khó
kiểm sốt được.
 Các phép tốn có thể gây ra hiệu ứng lề:
+Khai báo biến toàn cục trùng với các biến cục bộ trong hàm con.
+Phép gán có trả về 1 giá trị.
+Các chương trình con mà tham số được truyền bằng quy chiếu.
+Phép toán được xác định trên nhiều hơn một miền xác định.
 Ví dụ:
Var x: Integer;
Procedure P;
Begin
x:= 0;
End;
Begin
{1} x:=10;
{2} P;
{3} Writeln(x);
End.



Trong ví dụ trên, chương trình con P thực hiện việc gán giá trị 0 cho biến toàn cục x.
Trong chương trình chính, mặc dù ta mới gán 10 cho x (lệnh 1), nhưng sau khi gọi thủ tục P (lệnh 2) thì ở lệnh
3, x lại có giá trị 0.
 Việc chương trình con sử dụng biến khơng cục bộ như vậy sẽ dễ gây ngộ nhận cho người lập trình rằng x có
giá trị 10, đặc biệt khi thủ tục P được định nghĩa ở một đoạn nào đó, xa đoạn chương trình chính.
Câu 46: Anh chị hãy cho biết cơ chế chung cho việc đặc tả thiết kế các cấu trúc điều khiển trình tự (phát
biểu goto, phát biểu ghép, phát biểu điều kiện, phát biểu lặp) dựa trên cơ chế xử lý của các tác vụ thanh
ghi máy tính.
Câu 47: Anh chị hãy cho biết các đặc điểm của cấu trúc gọi trở về đơn giản của chương trình con
- Khi chương trình được thực thi, chương trình chính được thực hiện đầu tiên. Trong thời gian thực thi, chương
trình chính có thể gọi các CTC thực hiện. Và mỗi CTC này, đến lượt nó, lại có thể gọi các chương trình con
khác thực hiện.
- CTC khơng được đệ qui.
- Cần có các phát biểu gọi tường minh.
- CTC phải được hoàn thành ở mỗi lần gọi.
- Điều khiển được chuyển ngay tức thời ở điểm gọi.
- Trình tự thực thi đơn.
- Các bản ghi hoạt động của cùng 1 CTC tạo ra trong mỗi lần gọi có thể sử dụng chung 1 khối lưu trữ.
Câu 48: Anh chị hãy cho biết các đặc điểm của cấu trúc gọi đệ quy của chương trình con
- Với gọi đệ qui, nhiều bản hoạt động của cùng 1 CTC có thể cùng tồn tại trong bộ nhớ, trong thời gian thực thi
chương trình.
- Để gọi đệ qui CTC phải cấp phát động khối lưu trữ cho các bản hoạt động trong thời gian thực thi chương
trình.Việc cấp phát thực hiện theo cơ chế chồng.
- Khi thực thi, bản ghi hoạt động của CT chính được cấp phát ở đáy chồng.
- Khi kết thúc trả điều khiển thì bản ghi hoạt động được giải phóng.
Câu 49: Anh chị hãy phân biệt các loại mơi trường tham khảo của chương trình con
Mơi trường tham khảo có 4 thành phần
- Mơi trường cục bộ
- Mơi trường khơng cục bộ
- Mơi trường tồn cục

- Môi trường được định nghĩa trước.
Câu 50: Anh chị hãy cho biết đặc điểm của phương pháp truyền tham chiếu và những trường hợp nào
cần sử dụng phương pháp truyền tham chiếu cho chương trình con
 Khái niệm
- Tham số hình thức là tham số vào – ra, có nghĩa vụ nhận giá trị vào cho CTC và trả kết quả về cho CT gọi.
Tham số hình thức là 1 con trỏ.
- Tham số thực tế là 1 biến
- Phương pháp thực hiện : Tại thời điểm gọi, con trỏ của tham số thực tế được sao chép cho tham số hình thức .
Trong QT thực hiện CTC, mọi thao tác trên tham số hình thức là sự thao tác trên ô nhớ của tham số thực tế.


- Khi CTC kết thúc, mọi thay đổi giá trị của tham số hình thức đều làm giá trị của tham số thực tế thay đổi
theo.



×