 
			Giới Thiệu Về Prolog và Ứng Dụng Vào Hệ Giải Toán (Part2)
March 9, 2019Chương II: Ứng Dụng Vào Hệ Giải Toán
Các phép toán đơn giản
Bài toán 1: Các phép toán số học cơ bản: + , – , *, /,mod.
Yêu cầu bài toán.
Cho 2 toán hạng a và b. Tính tổng, hiệu, tích, thương và chia lấy dư của 2 toán hàng đó.
- Input: Cho 2 số a và b.
- Output: Tính
- Tổng: a + b = ?
- Hiệu: a – b = ?
- Tích: a * b = ?
- Thương: a / b = ?
- Chia lấy phần dư: a mod b =?.
Ý tưởng giải thuật.
Xây dựng luật tính tổng, hiệu, tích , thương , chia lấy dư dựa trên các phép toán chuẩn số học trong Prolog:
| Ký hiệu | Phép toán | 
| + | Cộng ( addition) | 
| – | Trừ (subtraction) | 
| * | Nhân (multiplication) | 
| / | Chia số thực (real division) | 
| mod | Chia lấy phần dư (modulus) | 
Luật đước viết dưới dạng “ tenluat(E,F,KQ) ”. Trong đó: E, F lần lượt là các số a,b và KQ là kết quả phép toán của luật đó.
Cài đặt Prolog:
Ta có chương trình Prolog định nghĩa các phép tính như sau:
% Phép cộng
cong(F,E,KQ):-
	KQ is F + E.
% Phép trừ
tru(F,E,KQ):-
	KQ is F - E.
% Phép nhân
nhan(F,E,KQ):-
      KQ is F * E.
% Phép chia
chia(F,E,KQ):-
	E=\=0,
	KQ is F / E.
chia(F,E,KQ):- %Trường hợp số bị chia = 0 nên không chia được
	E==0,
	write('Cannot divide by zero').
%Phép chia lấy dư
du(F,E,KQ):-
	F >0,
	KQ is F mod E.
du(F,E,KQ):-
	F <0,
	M is F mod E,
	KQ is -M. 
Cấu trúc lệnh hỏi.
Kết quả chạy Prolog như sau:
1 ?- cong(28,9,X). X = 37. 2 ?- tru(625,451,X). X = 174. 3 ?- nhan(-26,5,X). X = -130. 4 ?- chia(45,2,X). X = 22.5 . 5 ?- chia(5,0,X). Cannot divide by zero true. 6 ?- du(35,4,X). X = 3.
Xử lý giao diện.
– Hàm xữ lý phép tính:
private string XuLy(string input)
        {
            querystring.Load_file("TongHop.pl");
            string output = "";
            float soA, soB,soC,soD;
            string dau;
            string[] split = input.Split(' ');
            if (split.Length == 3)
            {
                dau = split[1];
                soA = float.Parse(split[0]);
                soB = float.Parse(split[2]);
                switch (dau)
                {
                    case "+":
                        output = querystring.Query("cong(" + soA + "," + soB + ",X).");
                        break;
                    case "-":
                        output = querystring.Query("tru(" + soA + "," + soB + ",X).");
                        break;
                    case "*":
                        output = querystring.Query("nhan(" + soA + "," + soB + ",X).");
                        break;
                    case ":":
                        if (soB == 0)
                            output = "Cannot divide by zero";
                        else
                        output = querystring.Query("chia(" + soA + "," + soB + ",X).");  
                        break;
                    case "mod":
                        output = querystring.Query("du(" + soA + "," + soB + ",X).");
                        break;
                    default:
                        break;
                }
            }
            return output;
        }
– Xuất kết quả:
private void btnEqual_Click(object sender, EventArgs e)
        {
            tam = "";
            chuoi = txtInput.Text.ToString().Trim();
            if (mode)
            {
                equal++;
                txtInput.Text += " , ";
                if (equal == 4)
                {
                    txtInput.Text = "";
                    txtOutput.Text = XuLy(chuoi);
                }
            }
            else
            {
                  tam = XuLy(chuoi);
                  string[] split = tam.Split(';');
                  if (split.Length == 2)
                  {
                      tam = split[0];
                      txtOutput.Text = split[0];
                  }
           }
        }
– Kết quả test:

Hình 1: Kết quả phép tính cộng (28 + 9 =37 )

Hình 2:Kết quả phép tính trừ (625 – 451=174 )

Hình 3:Kết quả phép tính nhân (-26 * 5 = -130 )

Hình 4: Kết quả phép tính chia (45 : 2 = 22.5 )

Hình 5: Kết quả phép tính chia (Số bị chia bằng 0 không chia được )

Hình 6:Kết quả phép tính chia lấy dư (35 mod 4 = 3)

