Nhỏnh của cõu lệnh (Branch)

Một phần của tài liệu Đồ án tốt nghiệp đại học xây DỰNG hệ THỐNG hỗ TRỢ sửa lỗi CHƯƠNG TRÌNH sử DỤNG THUẬT TOÁN ‘rút gọn CHƯƠNG TRÌNH’ (Trang 57 - 62)

2. Ngụn ngữ lập trỡnh Visual C#

2.8.3Nhỏnh của cõu lệnh (Branch)

Trong việc xử lý cỏc cõu lệnh việc phỏt hiện ra cỏc cõu lệnh khụng cựng thuộc trong cựng một nhỏnh của một cõu lệnh rẽ nhỏnh hoặc ngược lại là rất quan trọng trong việc thiết lập mối quan hệ giữa cỏc cõu lệnh. Trong phần này chỳng tụi xin trỡnh bày một khỏi niệm quan trọng liờn quan nữa đú là khỏi niệm chỉ số nhỏnh của cõu lệnh.

Một cấu trỳc rẽ nhỏnh sẽ cú ớt nhất là một nhỏnh và số nhỏnh là khụng hạn chế, trong cấu trỳc đú cỏc nhỏnh được đỏnh chỉ số tăng dần một đơn vị theo thứ tự từ 0 đến nhỏnh cuối cựng, chỉ số này được gọi là chỉ số cục bộ(kớ hiệu là Lindex).

Nhỏnh của một cấu trỳc rẽ nhỏnh là một khối lệnh, núi chớnh xỏc hơn nhỏnh của một cấu trỳc rẽ nhỏnh cũng là một cấu trỳc điều khiển. Vỡ thế nhỏnh cũng cú Predicate của nú, chỉ số Predicate thuộc nhỏnh kớ hiệu là

Gọi X là một cấu trỳc rẽ nhỏnh của chương trỡnh P nào đú; X1, X2…Xn là cỏc nhỏnh của X, khi đú trong chương trỡnh P quy ước đỏnh chỉ số của cỏc nhỏnh như sau:

o Chỉ số của nhỏnh theo chương trỡnh P gọi là chỉ số chung (Kớ hiệu Gindex).

o Chỉ số chung là bộ ba số nguyờn dương được ghép lại bởi chỉ số Predicate thuộc nhỏnh (Bindex) chỉ số cục bộ (Lindex) và chỉ số của Predicate thuộc X(kớ hiệu là Index) theo cụng thức:

GIndex = ([Index], [LIndex], [BIndex]).

Vớ dụ:

Nếu Bindex = 5; Index = 1; LIndex = 2 Gindex = (1, 2, 5); Nếu Bindex = 7; Index = 2; Lindex = 14Gindex = (2, 14, 7); Nhỏnh của cõu lệnh được định nghĩa qua chỉ số nhỏnh của cỏc nhỏnh thuộc cấu trỳc rẽ nhỏnh như sau:

o Thuộc tớnh nhỏnh chỉ tớnh cho những cõu lệnh nằm trong cỏc nhỏnh của cấu trỳc rẽ nhỏnh.

o Chỉ số nhỏnh của cõu lệnh bằng chỉ số nhỏnh trong cựng chứa cõu lệnh đú.

Vớ dụ: Xét chương trỡnh sau:

Cõu lệnh Nhỏnh của cõu lệnh

1.if(x >0) (1,0,1) 2.{ (1,0,1) 3. If(a <0) (3,0,3) 4. { (3,0,3) 5. x = -a*a; (3,0,3) 6. y = -a*b; (3,0,3) 7. } (3,0,3) 8. else if(a==0) (3,1,8) 9. { (3,1,8) 10. x = 0; (3,1,8) 11. y = 0; (3,1,8) 12. } (3,1,8) 13.} (1,0,1)

2.9 Cỏc vṍn đề khỏc

o Mảng: trong C# cú hai loại mảng, mảng tĩnh và mảng động.

o Tham số và truyền tham số: Cú hai cỏch truyền tham số cho cỏc phương thức đú là truyền giỏ trị và truyền địa chỉ. Truyền nếu truyền bằng giỏ trị thỡ giỏ trị của biến khi ra khỏi hàm sẽ khụng bị thay đổi trong khi truyền bằng địa chỉ thỡ giỏ trị của biến dựng để truyền cú thể bị thay đổi.

o Trong C# cú cỏc biến đối tượng. So với cỏc biến bỡnh thường chỉ thay đổi giỏ trị khi cú cõu lệnh gỏn, nhưng đối với cỏc biến đối tượng chỳng cú thể bị thay đổi giỏ trị khi chỳng tự gọi đến một phương thức của bản thõn đối tượng đú.

3. Kỹ thuật chuẩn húa chương trỡnh

Với hệ thống hụ̃ trợ sửa lụ̃i chương trỡnh, yờu cầu đầu tiờn đú là chương trỡnh đầu vào phải là một chương trỡnh đỳng hoàn toàn về mặt cỳ phỏp. Điều này cũng dờ hiểu vỡ việc sửa lụ̃i cỳ phỏp đó được hụ̃ trợ rất nhiều trong cỏc “mụi trường phỏt triển tớch hợp” IDE (Intergrated Development

Environment) tương ứng với cỏc ngụn ngữ lập trỡnh. Hệ thống hụ̃ trợ sửa

lụ̃i chương trỡnh mà chỳng tụi đang xõy dựng với mục tiờu là hụ̃ trợ cho lập trỡnh viờn để họ cú thể dờ dàng tỡm ra cỏc lụ̃i về mặt ngữ nghĩa của chương trỡnh chỉ ỏp dụng cho những chương trỡnh khụng còn lụ̃i về mặt cỳ phỏp.

phải chuõ̉n húa chương trỡnh? Và chương trỡnh như thế nào thỡ được gọi là một chương trỡnh chuõ̉n để hệ thống cú thể xử lý bước tiếp theo?

Trước khi trỡnh bày chuõ̉n húa chương trỡnh chỳng tụi xin đưa ra một số qui ước cho chương trỡnh như sau:

Keyword: Tập cỏc từ khúa trong ngụn ngữ lập trỡnh, vớ dụ như cỏc từ

khúa “int”, “float”, “double”, “static”… chẳng hạn. Xem chi tiết cỏc từ khúa tại bảng cỏc từ khúa của C#.

Operator: Tập cỏc phép toỏn số học, phép toỏn logic của ngụn ngữ lập

trỡnh; chi tiết cỏc phép toỏn được liệt kờ dưới bảng sau:

Loại phộp toỏn Chi tiết loại phộp toỏn

Tớnh toỏn + - * / % ++ -- += -= =+ =- ( )

So sỏnh < <= > >= == != (adsbygoogle = window.adsbygoogle || []).push({});

Logic ! && ||

Dịch bit ^

Variable: Biến chương trỡnh là biến do lập trỡnh viờn khai bỏo trong

quỏ trỡnh lập trỡnh.

Assignment:Phép gỏn, trong C# phép gỏn được biểu thị bởi dấu “=”.

Expression: thành phần chứa cỏc thành phần Keyword, Variable và

một số kớ tự đặc biệt, thành phần này chỉ thuộc một trong hai vế của phép gỏn; vớ dụ như cõu lệnh “int a = b + c” sẽ bao gồm hai biểu thức “int a” và “b + c”. Cỏc Expression cú thể lồng lẫn nhau, vỡ thế chỳng ta cú thể cú nhiều Expression trong một cõu lệnh.

Khỏi niệm chương trỡnh chuõ̉n mà chỳng tụi trỡnh bày ở đõy chỉ cú ý nghĩa trong phạm vi đề tài này, vỡ thế khỏi niệm chương trỡnh chuõ̉n ở đõy

khụng nờn dựng cho cỏc nghiờn cứu liờn quan đến chương trỡnh mỏy tớnh khỏc.

Một chương trỡnh C# chuõ̉n là một chương trỡnh thỏa món cỏc điểm sau:

 Là một chương trỡnh đỳng hoàn toàn về mặt cỳ phỏp.  Chỉ cú duy nhất một cõu lệnh trờn một dòng chương trỡnh.

 Cỏc kớ tự ‘{‘ và ‘}’ cũng được xem là một cõu lệnh khi chỳng nằm biệt lập và vỡ thế chỳng cũng phải nằm trờn một dòng chương trỡnh.

 Một cõu lệnh là một tổ hợp của cỏc Keyword, Variable, Operator, Assignment hoặc giữa cỏc Expression với Assignment (Vớ dụ cõu lệnh sau: “float a = (float)(x+y)/z”). Giữa cỏc Keyword, Variable, Assignment chỉ được phõn tỏch bởi một kớ tự khoảng trắng.

 Giữa Operator và cỏc thành phần khỏc phải liền nhau, tức là khụng cú khoảng trắng làm phõn cỏch. Vớ dụ như nếu ta viết a + b là đỳng cỳ phỏp nhưng khụng đỳng chuõ̉n, đỳng chuõ̉n phải là a+b.

Chuõ̉n húa chương trỡnh qua một số bước cơ bản như sau:

Bước 1: Đưa chương trỡnh về dạng một dòng chương trỡnh chứa một cõu lệnh.

Bước 2: Loại bỏ khoảng trắng trước và sau kớ tự phép toỏn của mụ̃i cõu lệnh.

Vớ dụ: “int c = (a + b ) / d;” chuyển thành int “c = (a+b)/d;”

Một phần của tài liệu Đồ án tốt nghiệp đại học xây DỰNG hệ THỐNG hỗ TRỢ sửa lỗi CHƯƠNG TRÌNH sử DỤNG THUẬT TOÁN ‘rút gọn CHƯƠNG TRÌNH’ (Trang 57 - 62)