Các chức năng của chương trình

Một phần của tài liệu BIỂU DIỄN TRI THỨC TRÊNMÔ HÌNH COKB VÀ ỨNG DỤNG (Trang 48)

1. Chương trình sử dụng thư viện System.Text.RegularExpressions để hỗ trợ cho quá trình phân tích đọc các file txt.

#Phương thức lấy về danh sách các object trong đoạn text

private List<string> GetItemFromRegexPattern(string input, string regexPattern) {

MatchCollection matchedObjectList = null; List<string> lstItem = new List<string>();

matchedObjectList = Regex.Matches(input,regexPattern);

if (matchedObjectList != null && matchedObjectList.Count > 0) {

foreach (Match match in matchedObjectList) {

foreach (Capture capture in match.Captures) { lstItem.Add(capture.Value); } } } return lstItem; }

#Phương thức lấy số objects trong đoạn text.

private int GetQuantityItemFromRegexPattern(string input, string regexPattern) {

MatchCollection matchedObjectList = null;

{

return matchedObjectList.Count; }

return 0; }

2. Đọc các giá trị của giả thiết

private List<Dientro> GetFirstDefaultValue(ref List<Dientro> lstDientro, string

giathiet) {

List<string> tempIList = GetItemFromRegexPattern(giathiet, iPattern); List<string> tempUList = GetItemFromRegexPattern(giathiet, uPattern); List<string> tempRList = GetItemFromRegexPattern(giathiet, rPattern); for (int i = 1; i <= lstDientro.Count; i++)

{ //I

string temp = "I" + i + "="; foreach (string item in tempIList) {

string tempI = item.Replace(temp, "");

if (COElectric_Utilities.CheckIsNumberValue(tempI)) {

lstDientro[i-1].I = float.Parse(tempI); }

} //U

temp = "U" + i + "=";

foreach (string item in tempUList) {

string tempU = item.Replace(temp, "");

if (COElectric_Utilities.CheckIsNumberValue(tempU)) {

lstDientro[i-1].U = float.Parse(tempU); }

} //R

temp = "R" + i + "=";

foreach (string item in tempRList) {

string tempR = item.Replace(temp, "");

if (COElectric_Utilities.CheckIsNumberValue(tempR)) {

lstDientro[i-1].R = float.Parse(tempR); }

} }

return lstDientro; }

3. Gọi suy diễn

private List<Dientro> DeduceFromFirstDefaultValue(ref List<Dientro> lstDientro) {

foreach (Dientro d in lstDientro) {

d.Deduce(); }

return lstDientro; }

4. Các tính toán trong suy diễn

//Doc gia thiet

string giathiet = txtDebai.Text.Trim();

lstDientro = GetFirstDefaultValue(ref lstDientro, giathiet); //Suy dien tu gia thiet

lstDientro = DeduceFromFirstDefaultValue(ref lstDientro);

//Doc so do mach dien

string soDoMachDien = txtMachDien.Text.Trim();//O1*(O2*O3)

List<string> lstSoDoMachDien = new List<string>(); while (soDoMachDien.IndexOf("(")>0)

{

int startIndex = soDoMachDien.IndexOf("(");

int endIndex = soDoMachDien.IndexOf(")", startIndex + 1); string result = soDoMachDien.Substring(startIndex, endIndex - startIndex + 1);

lstSoDoMachDien.Add(result);

soDoMachDien = soDoMachDien.Replace(result, ""); }

lstSoDoMachDien.Add(soDoMachDien); //Xu ly ket qua

Dientro dienTrotd = new Dientro(); dienTrotd.Name = "Điện trở tương đương"; foreach (string soDo in lstSoDoMachDien) {

string toantu = soDo; //remove dau ngoac

toantu = toantu.Replace("(", ""); toantu = toantu.Replace(")", "");

//Kiem tra xem co dien tro nao trong so do mach dien

foreach (var d in lstDientro) { if(soDo.Contains(d.Name)) { toantu = toantu.Replace(d.Name, ""); } }

if (toantu.Trim() == "*") //noi tiep

{

List<string> tempListDt = GetItemFromRegexPattern(soDo, objectPattern);

Dientro[] arrTemp = new Dientro[tempListDt.Count]; for (int i = 0; i < arrTemp.Length; i++)

{

arrTemp[i] = GetItemFromList(lstDientro, tempListDt[0]); }

//Tinh dien tro tuong duong

dienTrotd.I = EvalMapleStatement(arrTemp[0].I

foreach (var dt in arrTemp) {

dienTrotd.U = EvalMapleStatement(dt.U); dienTrotd.R = EvalMapleStatement(dt.R); }

}

else if (toantu == "||") //song song

List<string> tempListDt = GetItemFromRegexPattern(soDo, objectPattern);

Dientro[] arrTemp = new Dientro[tempListDt.Count]; for (int i = 0; i < arrTemp.Length; i++)

{

arrTemp[i] = GetItemFromList(lstDientro, tempListDt[0]); }

//Tinh dien tro tuong duong

dienTrotd.U = EvalMapleStatement(arrTemp[0].U

foreach (var dt in arrTemp) {

dienTrotd.I = EvalMapleStatement(dt.I); }

dienTrotd.R = EvalMapleStatement(arrTemp[0].R * arrTemp[1].R) / (arrTemp[0].R + arrTemp[1].R));

} else {

MessageBox.Show("Lỗi khi đọc sơ đồ mạch điện!", "Lỗi",

MessageBoxButtons.OK, MessageBoxIcon.Error);

}

5. Đối tượng Điện trở trong C#

public class Dientro {

private string name; private float u; private float i; private float r; private float p; public float P { get { return p; } set { p = value; } } public float U { get { return u; } set { u = value; } } public float I { get { return i; } set { i = value; } } public float R { get { return r; } set { r = value; } } public Dientro() { U = -1; I = -1; R = -1; P = -1; }

public string Name {

set { name = value; } }

}

6. Hàm gọi hỗ trợ tính toán Maple

public string EvalMapleStatement() {

try

{

kv = MapleEngine.StartMaple(2, argv, ref cb, IntPtr.Zero, IntPtr.Zero, err); } catch (DllNotFoundException e) { throw e; } catch (EntryPointNotFoundException e) { throw e; } if (kv.ToInt64() == 0) {

throw new System.InvalidProgramException("Fatal error, could not start maple: " + System.Text.Encoding.ASCII.GetString(err,0,Array.IndexOf(err,(byte)0))); }

IntPtr val = MapleEngine.EvalMapleStatement(kv, Encoding.ASCII.GetBytes(expr + ";"));

return result; }

Một phần của tài liệu BIỂU DIỄN TRI THỨC TRÊNMÔ HÌNH COKB VÀ ỨNG DỤNG (Trang 48)

Tải bản đầy đủ (PDF)

(57 trang)