Cấu trúc dữ liệu đầu vào

Một phần của tài liệu (LUẬN văn THẠC sĩ) cài đặt máy turing và ứng dụng máy turing đánh giá độ phức tạp thuật toán (Trang 39 - 43)

Một số quy ước hằng số trong chương trình:

- Trong khuôn khổ luận văn học viên định nghĩa chiều dài của băng là 50000 ô nhớ, nhưng trên thực tế thì độ dài của băng chỉ phụ thuộc vào dung lượng bộ nhớ RAM của máy tính. Vậy độ dài này có thể thay đổi được. Ngoài ra số bước chuyển tối đa mà học viên thiết kế cho một thuật toán là 50000 bước (số bước chuyển này cũng có thể thay đổi tùy vào cấu hình của máy tính).

const int MN = 50000; const int MAXTIME = MN;

- Sau đây là một số kí hiệu đặc biệt dùng trong chương trình: Dấu cách trống:

const char SPACE = ' '; // Dau cach

Kí hiệu kết thúc dòng lệnh:

const char EOL = '\0'; // Het dong lenh

Dấu gạch dưới “_”

const char UDL = '_'; // Undeline

Khoảng cách trống trên băng:

const char BL = '#'; // Dau cach tren bang Turing

Một số kí hiệu khác:

const char NL = '\n'; // New line const char TAB = '\t';

const char RT = '\r'; // RETURN

const char SLASH = '/'; // chu thich

#define Lochar(c) (((c) >= 'a') && ((c) <= 'z')) #define Upchar(c) (((c) >= 'A') && ((c) <= 'Z')) #define Alpha(c) (Lochar(c) || Upchar(c))

#define Num(c) (((c) >= '0') && ((c) <= '9')) #define GOODCHAR(c) ((c) != SPACE && (c)!= TAB && (c) != SLASH)

#define Toint(c) (c)-'0' const char INSET = '{'; const char OUSET = '}';

Các kí hiệu quy định hướng dịch chuyển của đầu đọc: + “L” dịch đầu đọc sang trái một ô.

+ “N” đầu đọc không dịch chuyển.

const char TL = 'L'; // LEFT: Dich dau doc viet qua trai

const char TR = 'R'; // RIGH: Dich dau doc viet qua phai

const char TN = 'N'; // NO MOVED: Khong dich dau doc viet

Một số quy ước của chương trình:

Để dễ dàng trong việc soạn thảo các chương trình học viên quy ước như sau: + Trạng thái bắt đầu của máy Turing là trạng thái “1”.

+ Trạng thái kết thúc của máy là trạng thái “0”.

const int SSTART = 1; // Trang thai xuat phat const int SEND = 0; // Trang thai ket thuc

Các kí hiệu dùng trong tệp chứa mã lệnh máy:

+ Khi máy Turing đọc chương trình từ tệp mã lệnh (tệp mặc định là tệp Prog.tr) gặp kí tự “S” máy sẽ bỏ qua các dòng lệnh sau đó.

+ Máy Turing gặp kí tự “B” sẽ bắt đầu nạp từ dòng lệnh tiếp theo trở đi. + Kí hiệu “E” đánh dấu điểm kết thúc của chương trình được viết bằng mã lệnh.

+ Kí hiệu “F” đánh dấu điểm kết thúc của tệp.

const char SKIPLINE = 'S'; const char BEGINLINE = 'B'; const char ENDLINE = 'E'; const char ENDFILE = 'F';

Quy ước tệp mặc định khi chạy chương trình:

const char * fname = "Prog.tr"; // ten file mac dinh

#define YY SetColor((DARKBLUE<<4)|YELLOW) // = 158 = 1001|1110 #define WW SetColor((DARKBLUE<<4)|WHITE) // = 159 = 1001|1111 #define GG SetColor((DARKBLUE<<4)|GRAY) // = 159 = 1001|1111

enum Color { DARKBLUE = 1, DARKGREEN, DARKTEAL, DARKRED,

DARKPINK, DARKYELLOW, GRAY, DARKGRAY,

BLUE, GREEN, TEAL, RED, PINK,

YELLOW, WHITE };

Các kí tự điều khiển khi chương trình đang thực hiện: Kí tự “$” bật tắt hiển thị quá trình xử lí trung gian. Kí tự “N” chọn tệp mã lệnh do người dùng tạo. Kí tự “L” hiển thị danh sách chương trình có sẵn.

Kí tự “H” mở Help (phần hướng dẫn của chương trình - trợ giúp người dùng).

Kí tự “.” dừng chương trình đang chạy.

const char SHOW = '$'; // Yeu cau hien thi

Mỗi lệnh gồm 5 thành phần (S, C, R, T, Q) trong đó S là trạng thái hiện tại, C là kí tự con trỏ máy đang trỏ vào, R là kí tự viết đè, T là hướng dịch chuyển của con trỏ, Q là trạng thái tiếp theo sau khi thực hiện câu lệnh.

Ví dụ: 1 a b R 2

Trạng thái hiện hành là “1” gặp kí tự “a” trên băng, chuyển thành kí tự “b”, con trỏ máy Turing dịch chuyển sang phải 1 ô, chuyển sang trạng thái “2”.

+ Các lệnh có thể không đầy đủ các thành phần nếu không có thay đổi gì trong các thành phần tương ứng.

Ví dụ : 1 _ b L 2

Trạng thái hiện hành là 1 gặp bất cứ kí tự nào chuyển thành kí tự b, dịch chuyển con trỏ sang trái, chuyển trạng thái sang trạng thái 2.

Định nghĩa cấu trúc lệnh máy Turing:

// Cau truc lenh cua may TR typedef struct Com {

char R; // thay bang ki tu moi char T; // Dich chuyen NLR int Q; // Qua trang thai moi int P;

char D; // Chi thi $ } Com;

Một phần của tài liệu (LUẬN văn THẠC sĩ) cài đặt máy turing và ứng dụng máy turing đánh giá độ phức tạp thuật toán (Trang 39 - 43)