人工智能課內實驗報告 (8次)
學
院:
自動化學院
班
級:
智能1501
姓
名:
劉少鵬(34)
學
號:
目 錄 課內實驗 1: 猴子摘香蕉問題得 VC 編程實現„„„„„„„„1 課內實驗 2: 編程實現簡單動物識別系統得知識表示„„„5 課內實驗 3:盲目搜索求解8數碼問題„„„„„„„„„18 課內實驗 4:回溯算法求解四皇后問題„„„„„„„„„33 課內實驗 5:編程實現一字棋游戲„„„„„„„„„„„37 課內實驗 6:字句集消解實驗„„„„„„„„„„„„ „46
課內實驗 7:簡單動物識別系統得產生式推理„„„„„„66
課內實驗8:編程實現D-S證據推理算法„„„„„„„ „78
人工智能課內實驗報告 實驗 1:猴子摘香蕉問題得 VC 編程實現 學
院:
自動化學院
班
級:
智能 1501
姓
名:
劉少鵬 (33)
學
號:
06153034
日
期: 2017—3—8 10:15-12:00
實驗 1: 猴子摘香蕉問題得 C VC 編程實現
一、實驗目得 (1)熟悉謂詞邏輯表示法; (2)掌握人工智能謂詞邏輯中得經典例子—-猴子摘香蕉問題得編程實現. 二、編程環境 VC 語言 三、問題描述 房子里有一只猴子(即機器人),位于 a 處。在c處上方得天花板上有一串香蕉,猴子想吃,但摘不到。房間得 b 處還有一個箱子,如果猴子站到箱子上,就可以摸著天花板。如圖1 所示,對于上述問題,可以通過謂詞邏輯表示法來描述知識。要求通過 VC 語言編程實現猴子摘香蕉問題得求解過程。
圖 1
猴子摘香蕉問題 四、源代碼 #include〈stdio、h〉 unsigned int i; void Monkey_Go_Box(unsigned char x, unsigned char y) {
猴示表x//;)y ,x ,i++ ,"n\c%到走c%從yeknom:d% petS"(ftnirp?子得位置,y為箱子得位置 } void Monkey_Move_Box(char x, char y)
{
printf("Step %d:monkey把箱子從%c運到%c\n", ++i, x, y);//x表示箱子得位置,y為香蕉得位置 } void Monkey_On_Box() {
printf(”Step %d:monkey爬上箱子\n", ++i); } void Monkey_Get_Banana() {
printf(”Step %d:monkey摘到香蕉\n", ++i); } void main() {
;ananaB ,xoB ,yeknoM
rahc dengisnu?
;)"n\**********班1051能智********”(ftnirp?
printf(”********06153034************\n”);
;)"n\**************鵬少劉********”(ftnirp?
;)"n\置位得蕉香子箱子猴示表來c b a用請"(ftnirp?
;)”n\ananabt\xobt\yeknoM”(ftnirp?
scanf(”%c”, &Monkey);
;)(rahcteg?
;)”t\”(ftnirp?scanf(”%c", &Box);
getchar();
;)"t\t\"(ftnirp?
;)ananaB& ,”c%"(fnacs?
getchar();
printf("\n操作步驟如下\n”);
)xoB =! yeknoM( fi?
{
;)xoB ,yeknoM(xoB_oG_yeknoM?
}
if (Box != Banana)
{
?
;)ananaB ,xoB(xoB_evoM_yeknoM? }
?
Monkey_On_Box();
;)(ananaB_teG_yeknoM?
printf(”\n");
;)(rahcteg?} 五、實驗結果相關截圖
六、心得體會
通過本次實驗,我初步了學會了使用VC得新建工程,并且進行簡單得程序編寫。此外我還學會如何使用一些謂詞來解決生活中得一些簡單問題,并且用VC 編程給出具體得操作步驟,感覺對 VC 編程有了新得認識。在實驗中我也遇到過許多問題,比如在我寫完代碼進行編譯時總就是會出現一個錯誤“ fatal error C1010: 在查找預編譯頭時遇到意外得文件結尾,就是否忘記了向源中添加“#include ‘stdafx、h’”關于這個錯誤我我問了幾個同學得不出答案后,我決定通過上網查找,最終找到了解決方法,需要在該項目得每一個cpp結尾得文件屬性中設置不使用預編譯頭即可。在這個過程中也鍛煉了自己解決問題得能力。
人工智能課內實驗報告 實驗 2:編程實現簡單動物識別系統得知識表示 學
院:
自動化學院
班
級:
智能1501
姓
名:
劉少鵬(33)
學
號:
06153034
日
期: 2017-3—13 10:15—12:00
實驗2:編程實現 簡單動物識別系統得知識 表示
一、實驗目得 1、理解與掌握產生式知識表示方法; 2、能夠通過 VC 編程語言實現產生式系統得規則庫。
二、實驗內容 1、以動物識別系統得產生式規則為例; 2、用選定得編程語言建造規則庫與綜合數據庫,并能對它們進行增加、刪除與修改操作. 三、實驗步驟 1、確定需要識別得動物及其屬性 本次實驗得簡單動物識別系統總共能識別 7 種動物,即:老虎、金錢豹、斑馬、長頸鹿、企鵝、鴕鳥與信天翁。
2、建立識別七種動物識別系統得規則 3、選定編程語言并確定綜合數據庫與規則庫結構 (1)選用C語言作為編程語言
(2)綜合數據庫得建立
(3)規則庫得建立 四、程序源代碼 #include 〈iostream〉 #include <string> using namespace std; struct RULES ??
?
{
int count;
;]552[erp rahc?
;]552[kcab rahc?
int mark; }; void check(); RULES r[100] = { ”,1 {
,} 0,"物動乳哺","發毛有?
?
//所有規則靜態數據庫 ”,1 {
,} 0,"物動乳哺”,"奶有?",1 {
,} 0,"鳥”,”毛羽有?
”,2 {
,} 0,"鳥","&蛋下&飛會?
{ 1,”吃肉","食肉動物”,0 }, ”,3 {
,} 0,”物動肉食",”&方前著盯睛眼&爪有&齒牙得利鋒有?",2 {
,} 0,”物動乳哺類蹄有”,”&蹄有&物動乳哺?”,2 {
,} 0,”物動乳哺類蹄偶有”,”&芻反&物動乳哺?”,4 {
,} 0,"豹錢金”,"&斑暗有&色褐黃&物動肉食&物動乳哺?
{ 4,"哺乳動物&食肉動物&黃褐色&黑色條紋&”,"老虎”,0 },
{ 4,"有蹄類哺乳動物&有長脖子&有長腿&有暗斑&","長頸鹿",0 }, ”,2 {
,} 0,"馬斑","&紋條黑&物動乳哺類蹄有?{ 5,"鳥&不會飛&有長脖子&有長腿&黑白色&","鴕鳥",0 }, ",4 {
,} 0,”鵝企”,"&色白黑&泳游會&飛會不&鳥?
{ 2,"鳥&會飛&","信天翁”,0 }, ”,1 {
} 0,"物動乳哺","芻反?}; int number; int m; int cat = 15; int a; int length; ? ?? //輸入得事實長度 string f[255]; //?組數實事得入輸?void input()
{
while (1)
{
?
cat++;
cout 〈〈 ”number" <〈 endl;
?
cin 〉> r[cat]、count;
cout 〈< "輸入事實,兩種以上得事實請在每個事實后加上‘&’符號" 〈< endl;
cin 〉> r[cat]、pre;
?
cout 〈< ”輸入結果” 〈〈 endl;
cin >〉 r[cat]、back;
;0 = kram、]tac[r??
)1( elihw?? ?
{
?? cout << ”輸入“1"繼續添加規則,輸入“2”查瞧規則庫" 〈< endl; ?;p tni?
;p >〉 nic?
)1 == p( fi?? ?? {
?
? input();
}??? ?
else
{???
? if (p == 2)
??
{
??
? check();
?
}
?
esle?? ?
? {
?
;ldne 〈〈 "入輸新重,誤錯入輸" 〈< tuoc? }???? }
??? ?
}
} }
void delate() {
cout 〈< "輸入要刪除得條數" 〈< endl;
;rab tni?
;rab >> nic?
for (int t = 0; t 〈= cat; t++)
{
? ?
r[bar — 1] = r[bar];
bar++;
}
;——tac?
;)(kcehc?} void check() {
cout 〈< endl <〈 ”規則庫如下” 〈< endl;
for (int i = 0; i 〈= cat; i++)
{
?
cout << i + 1 << ”、” << "由" 〈〈 r[i]、pre 〈< ”可得" 〈< r[i]、back <〈 endl;
}
;ldne << tuoc?
)1( elihw?
{
cout <〈 ”輸入“1”繼續添加規則,輸入“3”刪除選定得規則" <〈 endl;
;m >> nic?
)1 == m( fi??
{ ? ?
input();
}
esle??
{
? ?
if (m == 3)
?
;)(etaled?
}
}
?} int find_rule(int s)
// 則規得用使可有還否是就中庫則規找查?{
)++i ;51 =< i ;0 = i tni( rof? ;kram、]i[r*s = s?? //cout<〈”find_rule結果”<<s<<endl;
;s nruter?} int pare1(RULES r)
//當前提條件為1時 {
int j = 0, i = 1;
string str, str2;
str = r、pre;
while (i 〈= length)
{? ? if (f[i] == str)
? {
? str2 = r、back;
f[length + 1] = str2; ?
//加入事實庫 ?;++htgnel?
?
//事實庫得長度加1
?
;1 = kram、r?
// 過用使已則規記標?? ?? break;
}?
else
?
;++i? }
;kram、r nruter?} int pare2(RULES r)
// 1為不件條提前?{
string b[10];
string str, str2;
;0 = mun ,1 = j ,i tni? ;0 = a tni? str = r、pre;
組數換轉//
)i++ ;01 =!
i ;0 = i( rof? {?
b[i] = ”";
}
)i++ ;)(htgnel、rts =! i ;0 = i( rof? {?
)"&" =! )i(ta、rts( fi??
{ ?;)i(ta、rts =+ ]j[b?
}? esle?? ? {
j++;
? }
}? ;1 = i? )tnuoc、r =< i( elihw? {
)++j ;1 + htgnel =!
j ;1 = j( rof?
{? ?? if (f[j] == b[i])
{???
? a += 1;
}??? ? }
;++i? }? )tnuoc、r == a( fi? {
str2 = r、back; ?
;2rts = ]1 + htgnel[f?? //加入事實庫
? length++; ?? ? //事實庫得長度加1
;1 = kram、r?
//標記規則已使用過
}
;kram、r nruter?} void result()
{
;0 = m ,1 = i tni? while (i != length + 1)
{
)"豹錢金” == ]i[f( fi??
{? ?
cout <〈 ”該動物就是金錢豹" <〈 endl;
?
;1 = m? ?
;kaerb? ? }
? else
)”虎老" == ]i[f( fi??
{??
?
? cout 〈< "該動物就是老虎" 〈〈 endl;
;1 = m?? ?
;kaerb?? ?
}? ?
else )"鹿頸長” == ]i[f( fi??
? {
? cout 〈< "該動物就是長頸鹿" <〈 endl;
;1 = m?? ?
;kaerb?
? }
?esle? ?
? if (f[i] == "斑馬”)
?? {
?
;ldne << "馬斑是就物動該" << tuoc? ??
?
;1 = m? ?
break;
?
?
}? esle?? ?
? if (f[i] == "鴕鳥")
??
?? {
?
?
;ldne 〈〈 "鳥鴕是就物動該" 〈〈 tuoc? ? ;1 = m??
??
;kaerb?
} ???? ???
esle? ??? ?)"鵝企” == ]i[f( fi? ?
?
{??? ?
?
;ldne 〈< "鵝企是就物動該” 〈〈 tuoc?
??? m = 1;
??
? break;
?
?
}??
??
esle?? ??
???
)"翁天信" == ]i[f( fi? ?
??
?? {
?
?
? cout << "信天翁" 〈〈 endl;
??
??
;1 = m? ??
???
? break;
?
?
}
???esle?
?
?
? i++;
}
)0 == m( fi? ? cout << ”沒有符合得動物,請確認特征,重新輸入” << endl;
} void idetify() {
;0 = u ,0 = i tni? 則規得用使未有還中庫則規果如//
)0 == )u(elur_dnif( fi?//{ ;ldne<<"則規得用使未有還"〈〈tuoc? ;htgnel = mun tni??/)61〈i( elihw??/???歷遍始開則規條一第從?
{ ?? )0 == kram、]i[r( fi?
// 用使未則規條該果如?
? {
if (r[i]、count == 1)
?
//該條規則前提數為1
??? {
??
u = pare1(r[i]);
?
if (u == 1)
???;1 = kram、]i[r? ?
? if (r[i]、mark == 1)
{??? ?
cout << ”使用規則" <〈 i + 1;
?
;ldne 〈< kcab、]i[r 〈〈 ”為實事新得入加且” 〈〈 tuoc? ???
}
?
? }
?
esle? ?
{? ???
;)]i[r(2erap = u?
?
)1 == u( fi?? ?
?? r[i]、mark = 1;
if (r[i]、mark == 1)
??
? {
??? cout << ”使用規則” << i + 1;
??
? cout 〈< "且加入得新事實為" <〈 r[i]、back 〈< endl;
??
}
?
? }
? }
?
if (i == 15)
?
{? ??
if (num != length)
{? ? ?;0 = i????;htgnel = mun?
}? ?
else
???
i = 16;
?
}
?? else
?? {
? i++;
?
}
}
}
esle? {?
cout 〈〈 ”所有得規則都已使用” 〈〈 endl;
}? ;)(tluser?} /*主函數*/ void main()
{
;ldne 〈〈 ”********班1051能智******" 〈< tuoc? ;ldne 〈< ”**********43035160******" 〈< tuoc? cout <〈 ”******劉少鵬************” << endl;
cout 〈< ”進行動物識別請輸入7” 〈< endl;
cout 〈〈 ”進行規則庫操作請輸入8" << endl;
;a 〉> nic? )8 == a(
elihw? {
while (1)
? {
;ldne 〈〈 ”"2‘入輸則規有已瞧查,’1‘入輸則規加添” 〈〈 tuoc?? ?
cin >> m;
?
if (m == 1)
{? ?
input();
}
esle?? ?
{
?)2 == m( fi? ?
{
? check();
?
}? ?
? else
?
;ldne <〈 ”入輸新重請誤錯入輸” <〈 tuoc?
? }
}
}
if
(a == 7)
{?
int u = 0;
;ldne 〈< "數征特得物動入輸請" <〈 tuoc? ? cin 〉〉 length;
? cout << "請輸入動物得特征” 〈< endl;
)++i ;htgnel =〈 i ;1 = i tni( rof? ?
;]i[f 〉〉 nic? ? idetify(); }
;)”esuap”(metsys?} 五、實驗結果相關截圖 1、程序總體結構
2、 規則庫操作→查瞧規則庫
3、 規則庫操作→添加規則→添加袋鼠規則
4、 規則庫操作→刪除規則→刪除袋鼠規則
5、動物識別→識別長頸鹿
六、心得體會
通過本次實驗我深刻得理解與掌握產生式知識表示方法,并且能夠通過 VC 編程語言實現產生式系統得規則庫.本次實驗我同樣遇到許多問題,我通過自己查閱資料,與同學們
討論,逐步得將自己得問題解決,在這個過程中提高了我得問題解決能力。最后因為本次實驗只有對數據庫有清楚得掌握,同時熟悉規則才能合理編程,因此我在平時得學習中應當加大數據庫與數據結構得學習力度,提高自己得編程能力。
人工智能課內實驗報告 實驗 3:盲目搜索求解八數碼問題 學
院:
自動化學院
班
級:
智能 1501
姓
名:
劉少鵬 (33)
學
號:
06153034
日
期:
2017-03—30 10:15—12:00
人工智能課內實驗 3: 盲目搜索求解 8 8 數碼問題
1、實驗目得 (1)熟悉人工智能系統中得問題求解過程; (2)熟悉狀態空間中得盲目搜索策略; (3)掌握盲目搜索算法,重點就是寬度優先搜索與深度優先搜索算法. 2、實驗要求 用 VC 語言編程,采用寬度優先搜索與深度優先搜索方法,求解 8 數碼問題 3、實驗內容 (1)采用寬度優先算法,運行程序,要求輸入初始狀態 假設給定如下初始狀態 S 0
2
8
3 1
6
4
7
0
5
與目標狀態 S g
2
1
6
4
0
8
7
5
3
驗證程序得輸出結果,寫出心得體會。
(2)對代碼進行修改( 選作),實現深度優先搜索求解該問題 提示: :每次選擴展節點時,從數組得最后一個生成得節點開始找,找一個沒有被擴展得節點。這樣也需要對節點添加一個就是否被擴展過得標志。
4 源代碼及實驗結果截圖 (1)
實驗源代碼
#include 〈stdlib、h〉 #include <stdio、h> Typedef struct Node { int num[9]; //棋盤狀態
int deepth; //派生得深度 g(n)
int diffnum; //不在位得數目 h(n)
int value; //耗散值 f(n)=g(n)+h(n)
struct Node * pre;
;txen * edoN tcurts?
struct Node * parent; }numNode;
/* -- end of struct numNode —— */ int origin[9]; //棋盤初始狀態 int target[9]; //棋盤目標狀態 int numNode_num, total_step; numNode *open, *close; //Open表與 Close 表 numNode *create_numNode() {
;))edoNmun(foezis(collam)* edoNmun( nruter?}
numNode *open_getfirst(numNode *head); //返回第一項,并從 Open表中刪除 void open_insert(numNode *head, numNode *item); //向 Open表中按序插入新節點 void close_append(numNode *head, numNode *item); //向 Close 表中插入新節點 int expand(numNode *item); //擴展節點 int print_result(numNode *item); //打印結果 numNode *copy_numNode(numNode *orgin); char isNewNode(numNode *open, numNode *close, int num[9]); //就是否在 Open 表或 Close表中 void print_num(int num[9]); //打印棋盤狀態 int diff(int num[9]); //求不在位棋子得個數 void init(); //初始化,獲得棋盤初始狀態與目標狀態 void s *a, int *b); int operate(int num[], int op); void free_list(numNode *head); //* Name: 主函數 //* Description:
程序入口 int main(int argc, char *argv[])
{
//初始化 Open表與Close 表
;)"n\****1051 能智*****”(ftnirp?
printf("*****劉少鵬******\n”);
;)”n\****43035160*****"(ftnirp?
;)(edoNmun_etaerc = nepo?
close = create_numNode();
= txen〉—esolc = erp>—esolc = txen>-nepo = erp〉-nepo?NULL;
態狀標目與始初入輸戶用由// ;)(tini? ? // 點節始初化始初?
;1p* edoNmun?
;)(edoNmun_etaerc = 1p?
;LLUN = tnerap〉-1p?
;0 = htpeed〉—1p?
;0 = i tni?
for (i = 0; i〈9; i++)
{
?
;]i[nigiro = ]i[mun>—1p?? }
?
open_insert(open, p1);
numNode_num = 1;
p1 = open_getfirst(open);
while (p1 != NULL)
{
;)1p ,esolc(dneppa_esolc??
))1p(dnapxe( fi?
;SSECCUS_TIXE nruter?
p1 = open_getfirst(open);
}
;)"n\!noitulos oN”(ftnirp?
return EXIT_SUCCESS; }
/* -—----—--- end of function main -——--——--— */ void init()
{
while (1)
{?
printf(”Please input opriginal status:\nFor example:123456780 stands for\n"
\3
2
1” ”n?
? ”4
5
6\n”
? \0
8
7” ;)”n?
;]01[pmet rahc? ;)pmet& ,"s%”(fnacs??
int i = 0;
]i[pmet && 0 =〉 ’0’ - ]i[pmet && 9〈i ;0 = i( rof?- "0’ 〈= 8; i++)
{??
origin[i] = temp[i] - "0';
? }
printf("Please input target status:\n”);
;)pmet& ,"s%"(fnacs? ;0 = j tni??' - ]j[pmet && 0 =〉 "0" - ]j[pmet && 9〈j ;0 = j( rof??0' <= 8; j++)
? {
;’0’ — ]j[pmet = ]j[tegrat??
}?
;)"slc"(metsys?
if (i == 9 && j == 9)
{
?
;kaerb?
}
} }
/* —--—— end of function init —-—-— */ void open_insert(numNode *head, numNode *item)
{
;q* ,p* edoNmun? ;txen>—daeh = p? q = head;
)eulav〉-p 〉 eulav>—meti && LLUN =! p( elihw? {
;p = q??
;txen〉-p = p? }
q—>next = item;
;q = erp〉-meti? ;p = txen>-meti? if (p != NULL)
{? ;meti = erp>—p?? }?}
/* —-—-— end of function open_insert —--—- */ numNode *open_getfirst(numNode *head) {
;p* edoNmun? )LLUN == txen〉-daeh( fi? {?
;LLUN nruter? }? p = head—〉next;
;txen>-p = txen>-daeh? if (p—〉next != NULL)
{? ? p—>next—〉pre = head;
}
p—〉pre = NULL;
p->next = NULL;
;p nruter?
}
/* -—-—— end of function open_getfirst -———— */ void close_append(numNode *head, numNode *item)
{
;txen〉—daeh = txen〉-meti? ;daeh = erp>—meti? head-〉next = item;
)LLUN =!
txen>-meti( fi? {
;meti = erp>—txen>-meti?? }?}
/* ————- end of function close_append -—-—- */ int expand(numNode *p1) {
numNode * p2;
int op = 1;
)++po ;4 =< po ;1 = po( rof? {?
p2 = copy_numNode(p1);
;)po ,mun〉—2p(etarepo??
if (isNewNode(open, close, p2-〉num)
== ’N")
{???;1p = tnerap〉—2p? ?
p2->deepth = p1—>deepth + 1;
?
;)mun>-2p(ffid = munffid〉-2p?
;munffid〉—2p + htpeed>—2p = eulav〉—2p??)0 == munffid〉-2p( fi?
{?
total_step = print_result(p2);
?
;)pets_latot ,"n\d% :pets latoT"(ftnirp?
;)nepo(tsil_eerf?
?? free_list(close);
? return 1;
?
}?
esle?? {???
;++mun_edoNmun?
open_insert(open, p2);
} ??
}? ? else
free(p2);
}
return 0; }
/* ——--— end of function expand -—-—- */ int operate(int m[], int op) {
;knalb tni? blank = 0;
while (m[blank] != 0 && blank<9)
? ++blank;
if (blank == 9)
;1 nruter?? { )po( hctiws? case 1:
/* up */
)2〉knalb( fi?
;)3 - knalb + m ,knalb + m(paws?
break;
case 2: /* down */
)6〈knalb( fi???;)3 + knalb + m ,knalb + m(paws? ? break;
/* tfel */ :3 esac?
if (blank != 0 && blank != 3 && blank != 6)
?
swap(m + blank, m + blank — 1);
;kaerb? case 4:
/* right */
if (blank != 2 && blank != 5 && blank != 8) ?;)1 + knalb + m ,knalb + m(paws? ? break;
default: return 1;
}
return 0; } void s *a, int *b)
{
int c;
c = *a;
*a = *b; * ;c = b?} numNode * copy_numNode(numNode *origin) {
numNode *p;
;)(edoNmun_etaerc = p? p—>deepth = origin—〉deepth;
p-〉diffnum = origin—>diffnum;
;eulav〉-nigiro = eulav〉-p? int i;
)++i ;9<i ;0 = i( rof? {
? (p->num)[i] = (origin->num)[i];
}
;p nruter?}
/* -—-—— end of function copy_numNode ——--— */ int diff(int num[9])
{
;0 = munffid ,i tni? )++i ;9〈i ;0 = i( rof?
)]i[tegrat =!
]i[mun( fi? ?
diffnum++;
return diffnum; }
/* ——--— end of function diff —--—- */ char isNewNode(numNode *open, numNode *close, int num[9]) {
numNode *p;
int i = 0;
;txen>-nepo = p? while (p != NULL)
{? ? for (i = 0; i<9; i++)
? {
?
if (p—>num[i] != num[i])
?
;kaerb? }?? ? if (i == 9)
return ’O’; //Open
? p = p->next;
}? ;txen〉—esolc = p? while (p != NULL)
{? )++i ;9<i ;0 = i( rof??
{
)]i[mun =! ]i[mun>-p( fi?
break;
? }
? if (i == 9)
esolC// ;"C" nruter?
p = p->next;
}
;’N’ nruter?}
/* -—-—— end of function isNewNode --—-- */ void free_list(numNode *head) {
numNode *p, *q;
p = head—〉next;
while (p != NULL)
{ ;txen〉-p = q? ? free(p);
? p = q;
}? free(head); }
/* -———— end of function free_list —--—- */ void print_num(int num[9])
{
int i;
for (i = 0; i<9; i++)
?{ ;)]i[mun ,"t\d%”(ftnirp?
)2 == )3 % i(( fi?
;)”n\"(ftnirp?? }?}
/* —-—-- end of function print_num ---—- */ int print_result(numNode *item)
{
numNode *p;
int step;
;meti = p? if (p != NULL)
{
? step = print_result(p->parent);
;)1 + pets ,"n\:d% petSn\"(ftnirp?? ;)mun>-p(mun_tnirp?? ? return step + 1;
}? else
{
? return -1;
}?} (2)實驗截圖
5 心得體會
本次實驗對我最大得收獲就就是我再解決問題得過程中提高了C語言編程能力,對用編程解決實際問題有了更加深刻得認識。此次實驗我采用了寬度優先算法,成功得完成了本次實驗,我對寬度優先算法有了更為深刻得理解,我相信我再經過幾次寬度優先算法得練習,我就可以用它來解決一些生活中得實際問題。
人工智能課內實驗報告 實驗 4:回溯算法求解四皇后問題 學
院:
自動化學院
班
級:
智能 1501
姓
名:
劉少鵬 (33)
學
號:
06153034
日
期:
2017-04-05 10:15—12:00
實驗4
回溯算法求解四皇后問題 1 實驗目得: 理解搜索得概念,掌握回溯搜索算法,用回溯算法求解四皇后問題、 2 實驗要求:
用 VC 編程實現求解四皇后問題得回溯過程,根據實驗結果寫出回溯算法得總結、 3 實驗結果分析:
回朔算法總結: 回朔算法就是從一條路往前走,能進則進,不能進則退回來,換一條路再試。本次四皇后就就是回溯算法,第一步按照順序放一個皇后,然后第二步符合要求放第 2 個皇后,如果沒有位置符合要求,那么就要改變第一個皇后得位置,重新放第 2 個皇后得位置,直到找到符合條件得位置就可以了。
回朔算法就是一個既帶有系統性又帶有跳躍性得得搜索算法。它在包含問題得所有解得解空間樹中,按照深度優先得策略,從根結點出發搜索解空間樹。算法搜索至解空間樹得任一結點時,總就是先判斷該結點就是否肯定不包含問題得解.如果肯定不包含,則跳過對以該結點為根得子樹得系統搜索,逐層向其祖先結點回溯。否則,進入該子樹,繼續按深度優先得策略進行搜索。回溯法在用來求問題得所有解時,要回溯到根,且根結點得所有子樹都已被搜索遍才結束。而回朔算法在用來求問題得任一解時,只要搜索到問題得一個解就可以結束。這種以深度優先得方式系統地搜索問題得解得算法稱為回溯法,它適用于解一些組合數較大得問題。
4 實驗得心得體會:
通過本次實驗我理解了搜索得概念,掌握了回溯搜索算法,學會了用回溯算法求解四皇后問題。實驗中我遇到了很多問題,但就是通過自己得努力,與同學得幫助,我順利得完成了實驗,在此過程中我有了很大得收獲,我對回朔算法有了更深刻得理解,我在此次實驗結束后,我想回朔算法可以求解四皇后問題,那么八皇后,十皇后,N 皇后問題該怎么解決,我想通過自己得不斷學習這些問題都將一一解決。
參考示例代碼:
#include 〈stdio、h> #define bool int #define false 0 #define true 1 int Num=1; //用來記錄有幾種實現方法 int q[5]; bool C[5];//C[1]~C[4],布爾型變量,當前列就是否安全
bool L[9]; //L[2]~L[8],布爾型變量,(i-j)對角線(從左上角到右下角)就是否安全
2〈=(i—j)+5〈=8; bool R[9]; //R[2]~R[8],布爾型變量,(i+j)對角線(從右上角到左下角)就是否安全 2〈=i+j<=8 int qipan[4][4]={{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}; void Try(int i)
//皇后放置函數 {
int j,k,n,m;
)++j;5〈j;1=j(rof? {
列 j 第 行 i 第示表//))eurt==]j+i[R(&&)eurt==]5+j-i[L(&&)eurt==]j[C((fi?就是安全得
? {
q[i] = j;
//
第一件事,既然 i 行,j 列安全,就放置皇后在(i,j)處
?
C[j] = false;
// i 行,j列 放置皇后后不再安全
?
全安再不將線角對得角下右到角上左從得在所)j,i( //
;eslaf = ]5+j-i[L?
;eslaf = ]j+i[R?
后皇個 4 完放否是就斷判,事件二第//
)4<i(fi? {??? ??
個一下放著接則,后皇個四完放未//
;)1+i(yrT? }???
? else
//四個皇后已經放完
?? {
?
Num++;
??
printf("方案:%d\n”,Num);
for(k=1;k〈5;k++)
?
{
?
qipan[k—1][q[k]—1]=1;//輸出棋盤,皇后用 1 表示,0表示該位置無皇后
}
?
)++m;4<m;0=m(rof??
? {
?
for(n=0;n〈4;n++)
??
printf("%d\t",qipan[m][n]);
???
printf(”\n");
?
? }
for(m=0;m〈4;m++)
//棋盤再次初始化
?)++n;4〈n;0=n(rof?
?
qipan[m][n]=0;
?? }
?
溯回,志標得全安改修,事件三第//
;eurt=]j[C? ?? L[i—j+5]=true; ?;eurt=]j+i[R? }?? } } int main(void) {
int i;
;0 = muN? printf(”****實驗四 回溯算法四皇后******\n”);
printf("****智能 1501 班****\n");
;)”n\******43035160****”(ftnirp? ;)”n\********鵬少劉****”(ftnirp? ;)"n\后皇無置位該示表0,后皇有置位該示表1"(ftnirp? )++i;5〈i;1=i(rof? {?
C[i]=true;
}? for(i=0;i<9;i++)
{
;eurt = ]i[R = ]i[L?? }? Try(1);
return 0; }
人工智能課內實驗報告 實驗5: 編程實現一字棋游戲
學
院:
自動化學院
班
級:
智能 1501
姓
名:
劉少鵬 (33)
學
號:
06153034
日
期:
2017-04—11 10:15-12:00
實驗5 編程實現一字棋游戲 1 1 實驗目得 :
(1)理解與掌握博弈樹得啟發式搜索過程;
(2)熟悉博弈中兩種最基本得搜索方法——極大極小過程與過程;
(3)能夠用 VC 編程語言設計簡單得博弈游戲. 2實驗要求 :
用VC 編程實現一字棋,根據實驗結果寫出總結。
3 實驗結果 分析 : 3、1 實驗代碼 #include 〈iostream> #include <windows、h> #include 〈conio、h〉 #include <string> #include <ctime> using namespace std; #define
MAX_NUM 1000
//計算機獲勝得標志 #define
NO_BLANK —1001//人獲勝得標志 #define
TREE_DEPTH 3
//遞歸深度 #define
NIL 1001
//根節點得函數走步評估值 class State
//棋盤狀態節點,一個State實例就就是一個棋盤得狀態節點,從而形成一顆樹狀結構 { public:
int QP[3][3];
//當前棋盤數組
int e_fun;
//評分結果
點節態狀有所得步一后得下態狀盤棋前當//
;]9[dlihc tni?
int parent;
//當前棋盤狀態下得父母節點下標
標下點節得優最nuf_e里]9[dlihc在//
;dlihCtseb tni?}; class Tic { public:
盤棋時臨得歸遞層于用// ;]3[]3[PQpmt tni? static int s_count;//葉子節點得靜態總數
組數點節態狀盤棋//;]MUN_XAM[setatS etatS? Tic()
}{? void init() //初始化棋盤,將各個位置得棋盤都置為
{? ;0 = tnuoc_s?? ? for (int i = 0; i<3; i++)
)++j ;3〈j ;0 = j tni( rof? {??? ?
;0 = ]j[]i[PQ、]0[setatS? ?
}
? States[0]、parent = NIL;
}
示顯面界盤棋//)(PQtnirP diov? {?
)++i ;3〈i ;0 = i tni( rof?
{? ?
)++j ;3〈j ;0 = j tni( rof? ?
{
;’t\’ <〈 ]j[]i[PQ、]0[setatS 〈〈 tuoc?? ?? }
?
;ldne <〈 tuoc? }?? }? 勝獲方一何任令有否是就態狀盤棋得前當斷判// )s etatS(niWsI tni? {
;0 = i tni?
)++i ;3〈i ;0 = i( rof?
{
nruter)1 == ]2[]i[PQ、s && 1 == ]1[]i[PQ、s && 1 == ]0[]i[PQ、s( fi??1; ?nruter)1- == ]2[]i[PQ、s && 1— == ]1[]i[PQ、s && 1- == ]0[]i[PQ、s( fi?-1;
}?
)++i ;3<i ;0 = i( rof?
{
?
if (s、QP[0][i] == 1 && s、QP[1][i] == 1 && s、QP[2][i] == 1)return 1; ?)1- == ]i[]2[PQ、s && 1— == ]i[]1[PQ、s && 1- == ]i[]0[PQ、s( fi?return -1;
? }
? if ((s、QP[0][0] == 1 && s、QP[1][1] == 1 && s、QP[2][2] == 1) || (s、QP[2][0] == 1 && s、QP[1][1] == 1 && s、QP[0][2] == 1))return 1;
== ]2[]2[PQ、s && 1— == ]1[]1[PQ、s && 1— == ]0[]0[PQ、s(( fi??—1)
|| (s、QP[2][0] == —1 && s、QP[1][1] == —1 && s、QP[0][2] == -1))return -1;
return 0;
}
數函價評定判能智器機//)s etatS(nuf_e tni? {
? bool flag = true;
int i = 0;
? for (i = 0; i〈3; i++)
for (int j = 0; j〈3; j++)
?
if (s、QP[i][j] == 0)flag = false;
;KNALB_ON nruter)galf( fi?
if (IsWin(s)
== -1)return -MAX_NUM;
;MUN_XAM nruter)1 == )s(niWsI( fi? ;0 = tnuoc tni?? )++i ;3<i ;0 = i( rof??
for (int j = 0; j<3; j++)
?
if (s、QP[i][j] == 0)tmpQP[i][j] = 1;
;]j[]i[PQ、s = ]j[]i[PQpmt esle? ?
for (i = 0; i〈3; i++) ???;3 / )]2[]i[PQpmt + ]1[]i[PQpmt + ]0[]i[PQpmt( =+ tnuoc?
?
)++i ;3〈i ;0 = i( rof? ?
?? count += (tmpQP[0][i] + tmpQP[1][i] + tmpQP[2][i]) / 3;
?
;3 / )]2[]2[PQpmt + ]1[]1[PQpmt + ]0[]0[PQpmt( =+ tnuoc? ??? count += (tmpQP[2][0] + tmpQP[1][1] + tmpQP[0][2]) / 3;
??
for (i = 0; i〈3; i++)
)++j ;3〈j ;0 = j tni( rof??
???
;1- = ]j[]i[PQpmt)0 == ]j[]i[PQ、s( fi? ??
else tmpQP[i][j] = s、QP[i][j];
??
)++i ;3<i ;0 = i( rof? ?
?
;3 / )]2[]i[PQpmt + ]1[]i[PQpmt + ]0[]i[PQpmt( =+ tnuoc??
? ?)++i ;3〈i ;0 = i( rof? ?
?
count += (tmpQP[0][i] + tmpQP[1][i] + tmpQP[2][i]) / 3;
??
count += (tmpQP[0][0] + tmpQP[1][1] + tmpQP[2][2])
/
3;
?
?
count += (tmpQP[2][0] + tmpQP[1][1] + tmpQP[0][2]) / 3;
?
;tnuoc nruter? }? )(enoDotuA loob lautriv? {? ;eslaf nruter?? }? 入輸得戶用取獲//)(tupnIresU diov? {
;y ,x ,sop tni?? L1: cout 〈〈 ”請輸入棋子得坐標xy: ”;
cin 〉> pos;
? x = pos / 10, y = pos % 10;
? if (x>0 && x<4 && y〉0 && y<4 && States[0]、QP[x - 1][y — 1] == 0)
States[0]、QP[x — 1][y — 1] = -1;
esle?
{
cout << ”非法輸入!";
;1L otog?? }?? } }; int Tic::s_count = 0;//初始化棋盤狀態節點總數,剛開始置為 class demo : public Tic { public:
)(omed? {}
)(egduJ loob? {? ? int i, j, a = 0;
)++i ;3<i ;0 = i( rof???)++j ;3<j ;0 = j( rof?;++a )0 == ]j[]i[PQ、]0[setatS( fi?? ? if (a == 0)return true;
;eslaf
nruter? }? virtual bool AutoDone()
{?
int a, b, i, j, m, n, max, min, x, y;
if (IsWin(States[0])
== —1)
{??
?
cout <〈 ”恭喜您獲勝!" 〈< endl; ?;eurt nruter?
}? ? a = 0, b = 0;
;00001— = xam?
)++x ;3〈x ;0 = x( rof?
)++y ;3〈y ;0 = y( rof?
?? States[11]、QP[x][y] = States[0]、QP[x][y];
)++i ;3〈i ;0 = i( rof? ?? for (j = 0; j<3; j++)
? {
?? if (States[0]、QP[i][j] == 0)
??
{? ? ?;1 = a? ?
? for (x = 0; x〈3; x++)
???
)++y ;3<y ;0 = y( rof??
?
;]y[]x[PQ、]0[setatS = ]y[]x[PQ、]a[setatS??
?
States[a]、QP[i][j] = 1;
?;00001 = nim?
)++m ;3〈m ;0 = m( rof? ?
)++n ;3〈n ;0 = n( rof?? ???
{? ??
? if (States[a]、QP[m][n] == 0)
{? ???? ?? ;1 = b??
)++x ;3〈x ;0 = x( rof?? ?
???
? for (y = 0; y〈3; y++)
?
??
?
;]y[]x[PQ、]a[setatS = ]y[]x[PQ、]01[setatS?
???
States[10]、QP[m][n] = —1;
??
States[10]、e_fun = e_fun(States[10]);
?
?
if (States[10]、e_fun〈min) min = States[10]、e_fun;
?
??
? }
?? }
?
;nim = nuf_e、]a[setatS? ?
?
if (States[a]、e_fun>max)
?
?? {
?
??
max = States[a]、e_fun;
??
?
)++x ;3〈x ;0 = x( rof? ?
???
for (y = 0; y〈3; y++)
? ???;]y[]x[PQ、]a[setatS = ]y[]x[PQ、]11[setatS? ?
}?? ??
}
}?
? for (x = 0; x<3; x++)
? for (y = 0; y<3; y++)
??
;]y[]x[PQ、]11[setatS = ]y[]x[PQ、]0[setatS? ? cout <〈 "計算機走棋” 〈< endl;
;)(PQtnirP? ? if (IsWin(States[0]) == 1)
{? ?
cout 〈〈 ”抱歉您輸了,計算機獲勝!” 〈< endl;
;eurt nruter? }??
else if (IsWin(States[0]) == —1)
{
cout << ”恭喜您獲勝!” << endl;
?? return true;
}
;eslaf nruter? } }; void main() {
cout 〈< "****項目名稱:一字棋游戲得實現****" << endl;
;ldne << ”****
1 0 5 1 能 智:級
班****" << tuoc? ;ldne << "****鵬
少
劉:名
姓****" << tuoc? ;ldne 〈〈 ”**** 4 3 0 3 5 1 6 0:號
學****” << tuoc?
cout <〈 ”****說
明:—1代表人落子位置,1代表電腦落子位置,0代表該位置無棋子 ****" 〈〈 endl;
;)”戲游小能智棋子# eltit”(metsys? ;)”2A roloc"(metsys? char IsFirst;
bool IsFinish;
;ldne 〈〈 ”:’N’入輸請,之反!'Y’入輸請,手先為您若" 〈〈 tuoc? ;tsriFsI 〉〉 nic? ;)(omed wen = p* omed? p-〉init();
;ldne << ":態狀始初得盤棋” 〈< tuoc? ;)(PQtnirP>—p? { od?
))(egduJ〉—p!( fi? ? { ?)"Y" == tsriFsI( fi?
{??
? p-〉UserInput(); p—>PrintQP();
))(egduJ>-p!( fi?
{?
?;)(enoDotuA〉—p = hsiniFsI?
?
}?
? }
?
else if (IsFirst == "N')
{?? ?
IsFinish = p->AutoDone();
?
if (!p-〉Judge())
{????
?
if (!IsFinish) { p—〉UserInput(); p-〉PrintQP(); }
}
}???
}
if (p—〉Judge()) IsFinish = true;
} while (!IsFinish);
if ((p->IsWin(p—>States[0])
== 0)
&& p->Judge())
{
cout 〈< "平局” 〈< endl;
}? system(”pause"); } 3、2、實驗運行結果截圖
4、實驗心得 本次實驗,我通過學習用 VC 編程語言設計簡單得博弈游戲,從而理解與掌握博弈樹得啟發式搜索過程,熟悉博弈中兩種最基本得搜索方法——極大極小過程與過程。并且將這種思想通過代碼表現出來。
本次實驗我最大得收獲不僅僅就是學到了課本上得知識,更就是學會了如何主動得求解問題得答案。實驗中我遇到了許多困難,不僅僅就是有關編程算法方面得,還有一些代碼邏輯流程得設計。這些困難我通過上網與去圖書館查找資料或者向同學請教等方式,逐一解決了困難,我收獲良多。
?人工智能課內實驗報告 實驗 6: 子句集消解實驗
學
院:
自動化學院
班
級:
智能 1501
姓
名:
劉少鵬 (33)
學
號:
06153034
日
期:
2017-05—8 10:15-12:00
實驗 6 子句集消解實驗
一、實驗目得
(1)熟悉子句集化簡得九個步驟; (2)理解消解規則,能把任意謂詞公式轉換成子句集。
二、編程環境
Visual Studio 2017
三、實驗原理
在謂詞邏輯中,任何一個謂詞公式都可以通過應用等價關系及推理規則化成相應得子句集。
其化簡步驟如下:
(1) 消去連接詞“→”與“↔” 反復使用如下等價公式:
P→Q ⇔﹁ P∨Q
P↔Q ⇔ (P∧Q)∨(﹁P∧﹁Q) 即可消去謂詞公式中得連接詞“→”與“↔”。
(2) 減少否定符號得轄域 反復使用雙重否定率
﹁(﹁P)
⇔ P
摩根定律
﹁(P∧Q) ⇔﹁P∨﹁Q
﹁(P∨Q) ⇔﹁P∧﹁Q
量詞轉換率
﹁ (∀x)P(x∃x)
﹁P(x)
﹁ (∃x)P(x) ⇔ (∀x)¬P(x) 將每個否定符號“﹁”移到僅靠謂詞得位置,使得每個否定符號最多只作用于一個謂詞上。
(3) 對變元標準化 在一個量詞得轄域內,把謂詞公式中受該量詞約束得變元全部用另外一個沒有出現過得任意變元代替,使不同量詞約束得變元有不同得名字.
(4) 化為前束范式 化為前束范式得方法:把所有量詞都移到公式得左邊,并且在移動時不能改變其相對順序。
(5) 消去存在量詞 (6) 化為Skolem標準形
對上述前束范式得母式應用以下等價關系
P∨(Q∧R) ⇔ (P∨Q)∧(P∨R) (7) 消去全稱量詞 (8) 消去合取詞 在母式中消去所有合取詞,把母式用子句集得形式表示出來。其中,子句集中得每一個元素都就是一個子句。
(9) 更換變量名稱 對子句集中得某些變量重新命名,使任意兩個子句中不出現相同得變量名。
四、實驗結果及代碼
//化簡子句集得九步法演示 //作者:劉少鵬 //時間:2017、5 #include<iostream> #include<sstream> #include〈stack〉 #include〈queue> using namespace std; //一些函數得定義 void initString(string &ini);//初始化 string del_inlclue(string temp);//消去蘊涵符號 string dec_neg_rand(string temp);//減少否定符號得轄域 string standard_var(string temp);//對變量標準化 string del_exists(string temp);//消去存在量詞 string convert_to_front(string temp);//化為前束形 string convert_to_and(string temp);//把母式化為合取范式 string del_all(string temp);//消去全稱量詞 string del_and(string temp);//消去連接符號合取% string change_name(string temp);//更換變量名稱
?
?? //輔助函數定義 bool isAlbum(char temp);//就是字母 string del_null_bracket(string temp);//刪除多余得括號 string del_blank(string temp);//刪除多余得空格 void checkLegal(string temp);//檢查合法性 char numAfectChar(int temp);//數字顯示為字符
?
?? //主函數
void main() { —-—-----———示演法步九集句子求—-----————----——-—” 〈< tuoc?—-----———--—” << endl;
;)"A0 roloc”(metsys?// ;")y(P(~%)y,x(Q" = ngiro?// ;”)P〉)y(P()x(” = ngiro?// ;”)x(y)x#(~” = ngiro?// ;”))x(b!x)x((~” = ngiro? //orign = "~(x!y)”;
//orign = "~(~a(b))";
string orign, temp;
char mand, mand0, mand1, mand2, mand3, mand4, mand5,
mand6, mand7, mand8, mand9, mand10; ====================================================//?=========================
cout 〈〈 ”請輸入(Y/y)初始化謂詞演算公式" << endl;
cin >〉 mand;
if (mand == ’y’ || mand == ’Y')
;)ngiro(gnirtStini? esle?
;)0(tixe?===========================================================//?==================
cout 〈〈 ”請輸入(Y/y)消除空格" 〈< endl;
cin 〉> mand0;
)"Y’ == 0dnam || "y’ == 0dnam( fi? {?
//del_blank(orign);//undone
cout << "消除空格后就是" 〈〈 endl
<〈?
;ldne <〈 ngiro? }? else
;)0(tixe? //=============================================================================
;ldne 〈< ”項涵蘊去消)y/Y(入輸請” <〈 tuoc? cin >〉 mand1;
if (mand1 == 'y’ || mand1 == "Y’)
{?
orign = del_inlclue(orign);
ldne <〈 ”是就后項涵蘊去消" 〈〈 tuoc? <<?;ldne << ngiro? }
else
exit(0);
//=============================================================================
;ldne << "域轄得號符定否少減)y/Y(入輸請" << tuoc? cin >> mand2;
)’Y' == 2dnam || ’y" == 2dnam( fi? {?
od? {???
;ngiro = pmet??;)ngiro(dnar_gen_ced = ngiro? }
;)ngiro =! pmet( elihw? ldne 〈< ”是就后域轄得號符定否少減” <〈 tuoc?? <〈
;ldne 〈< ngiro?? }
esle?
exit(0); ==========================================================//?=================== ? cout 〈〈 ”請輸入(Y/y)對變量進行標準化” << endl;
cin >> mand3;
if (mand3 == "y' || mand3 == 'Y')
{?
;)ngiro(rav_dradnats = ngiro?
cout 〈〈 "對變量進行標準化后就是” 〈〈 endl
<〈 ;ldne << ngiro?? }? esle?
;)0(tixe?=========================================================//?==================== ? cout << ”請輸入(Y/y)消去存在量詞" 〈< endl;
;4dnam 〉> nic? )"Y" == 4dnam || "y" == 4dnam( fi? {
orign = del_exists(orign);
ldne <〈 ")數函 melokS 個一是就)x(g = w(是就后詞量在存去消” 〈〈 tuoc?
? 〈< orign <〈 endl;
}
else
;)0(tixe? //============================================================================= ?
cout << "請輸入(Y/y)化為前束形" << endl;
cin 〉> mand5;
)’Y’ == 5dnam || "y' == 5dnam( fi? {
;)ngiro(tnorf_ot_trevnoc = ngiro?
cout <〈 ”化為前束形后就是” <〈 endl
<<
;ldne 〈< ngiro?? }? else
;)0(tixe? //============================================================================= ? cout 〈< ”請輸入(Y/y)把母式化為合取方式" 〈< endl;
;6dnam >> nic? )"Y’ == 6dnam || "y' == 6dnam( fi? {?
;)ngiro(dna_ot_trevnoc = ngiro?
ldne 〈〈 "是就后式方取合為化式母把" <〈 tuoc? 〈<?
;ldne 〈< ngiro? }
else
;)0(tixe?===========================================================//?==================
cout 〈< "請輸入(Y/y)消去全稱量詞” 〈〈 endl;
;7dnam >〉 nic? if (mand7 == ’y’ || mand7 == "Y’)
{
;)ngiro(lla_led = ngiro?
ldne << "是就后詞量稱全去消” << tuoc?
<< ;ldne 〈< ngiro?? }? esle? ;)0(tixe?? //=============================================================================
cout 〈< ”請輸入(Y/y)消去連接符號” 〈〈 endl;
;8dnam 〉〉 nic? if (mand8 == ’y" || mand8 == ’Y")
{
;)ngiro(dna_led = ngiro?
cout 〈< "消去連接符號后就是” <〈 endl
〈<?;ldne 〈〈 ngiro? }
esle?
;)0(tixe?=======================================================//?======================
cout 〈〈 "請輸入(Y/y)變量分離標準化” <〈 endl;
;9dnam >> nic? )’Y’ == 9dnam || "y" == 9dnam( fi? {?
;)ngiro(eman_egnahc = ngiro?
ldne 〈〈 ")x 量變替代 3x,2x,1x(是就后化準標離分量變" 〈〈 tuoc?
〈< ;ldne 〈〈 ngiro?? }? else
;)0(tixe? //============================================================================ ---——--—--—畢完--—-—---—---—————---————-" << tuoc?-—-————-——-—-—-—-—-—--—-" << endl;
cout 〈< "(請輸入 Y/y)結束” << endl;
od? {
} ;))(rahcteg == ’Y" || )(rahcteg == ’y’( elihw? exit(0); } void initString(string &ini)
{
;bdnam ,adnam rahc? ;ldne 〈〈 "式公詞謂得換轉要需所您入輸請” 〈< tuoc? cout <〈 "需要查瞧輸入幫助(Y/N)? ” <〈 endl;
cin >〉 manda;
)"y’ == adnam || ’Y’ == adnam( fi? ne 〈〈 ”,#為詞量在存,為詞量稱全,〉為號符涵蘊時入輸定規程例本" 〈〈 tuoc?dl ” 〈<< ”母字個一用請名數函,) 、 (為別分號括右左,%為取合,!為取吸,~為反取??〈 endl;
;ldne <〈 "義定自戶用否是就擇選)n/y(入輸請” <〈 tuoc? cin 〉> mandb;
if (mandb == ’Y' || mandb == "y')
;ini >〉 nic? esle?
ini = ”(x)(P(x)>((y)(P(y)>P(f(x, y)))%~(y)(Q(x,y)〉P(y))))";
cout 〈< "原始命題就是” << endl
〈< ini 〈〈 endl; }
string del_inlclue(string temp)//消去>蘊涵項 {
//a〉b 變為~a!b
char ctemp[100] = { ”” };
;tuptuo gnirts? int length = temp、length();
;0 = glaf ,0 = tekcarb_thgir ,0 = i tni? stack<char〉 stack1, stack2, stack3;
;))(rts_c、pmet ,pmetc(s_ypcrts? )1 - htgnel =〈 i && ’0\" =!
]i[pmetc( elihw? {?
stack1、push(ctemp[i]);
if (’〉' == ctemp[i + 1])//如果就是 a〉b則用~a!b 替代
{
;1 = glaf???出彈]i[pmetc把則母字是就果如//))]i[pmetc(mublAsi( fi? {? ?
?
stack1、pop();
?
stack1、push(’~’);
?? stack1、push(ctemp[i]);
;)"!’(hsup、1kcats??
? i = i + 1;
}??
? else if (’)" == ctemp[i])
{? ?
;++tekcarb_thgir?
?
do
{ ???
if (’(’ == stack1、top()) ????
;--tekcarb_thgir? ? ?
stack3、push(stack1、top());
;)(pop、1kcats??
?? } while ((right_bracket != 0));
?
;))(pot、1kcats(hsup、3kcats???
;)(pop、1kcats???
;)"~’(hsup、1kcats?
?
))(ytpme、3kcats!( elihw?
?? {
?
;))(pot、3kcats(hsup、1kcats?
?
;)(pop、3kcats??
}??
;)"!’(hsup、1kcats?? ?;1 + i = i? } ??
}
;++i?? }? while (!stack1、empty())
{
stack2、push(stack1、top());
;)(pop、1kcats?? }? ))(ytpme、2kcats!( elihw? {
;)(pot、2kcats =+ tuptuo??
;)(pop、2kcats? }? )1 == glaf( fi?
;tuptuo nruter? esle? ;pmet nruter??} string dec_neg_rand(string temp)//減少否定符號得轄域 {
char ctemp[100], tempc;
;tuptuo gnirts? int flag2 = 0;
;)(htgnel、pmet = htgnel ,0 = tekcarb_tfel ,0 = i tni? ;2kcats ,1kcats >rahc〈 kcats? queue <char〉 queue1;
中組數符字到制復//;))(rts_c、pmet ,pmetc(s_ypcrts? while (ctemp[i] != "\0’ && i 〈= length - 1)
{
;)]i[pmetc(hsup、1kcats?? 做不都么什則否~是就果如//)’~" == ]i[pmetc( fi?? {??
;]2 + i[pmetc = of rahc??
做不都么什則否,(是就果如//)’(" == ]1 + i[pmetc( fi?
? {
?
if (fo == "’ || fo == "#’)//如果就是全稱量詞
{???
?
;1 = 2galf??
?
? i++;
?;)(pop、1kcats?
?
;)]i[pmetc(hsup、1kcats?
??
)"’ == of( fi?
??
? stack1、push(’#");
?
esle?
???;)’’(hsup、1kcats?
;)]2 + i[pmetc(hsup、1kcats?
;)]3 + i[pmetc(hsup、1kcats?????
;)’('(hsup、1kcats?
?;)’~’(hsup、1kcats?
?
if (isAlbum(ctemp[i + 4]))
??
{?
??
;)]4 + i[pmetc(hsup、1kcats...
推薦訪問: 人工智能 實驗 報告上一篇:Java,GUI實驗報告
下一篇:數據庫實驗報告,(3)
同志們:今天這個大會,是市委全面落實黨要管黨、從嚴治黨要求的一項重大舉措,也是對縣市區委書記履行基層黨建工作第一責任人情況的一次集中檢閱,同時是對全市基層黨建工作的一次再部署、再落實的會議。前面,**
***年,我認真履行領班子、帶隊伍、抓黨員、保穩定的基層黨建工作思路,以學習貫徹習近平新時代中國特色社會主義思想和黨的十九大歷次全會精神為主線,以市局基層黨建工作考核細則為落腳點,落實全面從嚴治黨主體
根據會議安排,現將2022年履行抓基層黨建工作職責情況報告如下:一、履職工作特色和亮點1 突出政治建設,著力在思想認識上提高。牢固樹立抓黨建就是抓政績的理念,以“黨建工作抓引領、社區治理求突破,為民服
2022年以來,在**黨委的正確領導下,堅持以習近平新時代中國特色社會主義思想為指導,深入學習宣傳貫徹黨的二十大精神,以黨建工作為統領,扎實開展夯實“三個基本”活動,以“四化四力”行動為抓手,聚力創建
各位領導,同志們:根據會議安排,現就2022年度抓基層黨建工作情況匯報如下:一、主要做法及成效(一)強化政治引領。一是不斷強化理論武裝。堅持通過黨組會、中心組學習會和“三會一課”,第一時間、第一議題學
2022年度抓基層黨建工作述職報告按照黨委工作部署,現將本人2022年度抓基層黨建工作情況報告如下:一、2022年度抓基層黨建工作情況(一)旗幟鮮明講政治將旗幟鮮明講政治放在全局發展首要位置,積極開展
2022年,是我在數計系黨總支書記這個新崗位上度過的第一個完整的工作年度。回首一年來在校黨委的正確領導下,與數計系領導班子和全體師生共同走過的日子,艱辛歷歷在目,收獲溫潤心田。作為黨總支書記,我始終牢
按照考核要求,現將本人一年來,作為統戰部長履行職責、廉潔自律等方面情況報告如下:一、著眼增強政治素質,不斷深化理論學習堅持把旗幟鮮明講政治作為履職從政的第一位要求,帶領統戰系統干部堅決擁護“兩個確立”
**年,緊緊圍繞黨工委、管委會的決策部署,全體人員團結協作、凝心聚力,緊扣黨工委“**”基本工作思路,全力開拓進取,認真履職盡責,圓滿完成各項工作任務。一、個人思想政治狀況檸檬文苑www bgzjy
按照縣委關于開展抓基層黨建述職評議會議的有關要求,經請示縣委組織部同意,今天,我們在此召開2022年度基層黨組織書記抓基層黨建述職評議會議。1 首先,請**黨委書記,**同志述職。**黨委能夠主動研究