版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
魔王語言解釋程序一、問題引入問題描述有一個(gè)魔王總是使用自已的一種格外精練而抽象的語言講話,沒有人能聽得懂。但他的語言是可以逐步解釋成人能懂的語言的逐步抽象上去的:〔1〕α→β1β2…βm〔2〕(θβ1β2…βm)→(θβm…β2θβ1θ)在這兩種形式中,從左到右均表示解釋。寫一個(gè)魔王解釋程序,將魔王的話解釋成人能聽懂的話。根本要求用下述兩種規(guī)章和下述規(guī)章〔2〕實(shí)現(xiàn)。設(shè)大寫字母表示魔王語言的詞匯,小寫字母表B→tAdAA→sae測試數(shù)據(jù)B(einxgz)B解釋成tsaedsaeezegexeneietsaedsaet天d地t天d地s上a一只e鵝z追g趕x下n蛋h恨實(shí)現(xiàn)提示將魔王的語言自右至左進(jìn)棧,總是處理?xiàng)m斪址?。假設(shè)是開括號(hào),則逐一出棧,將字母挨次入隊(duì)列,直至閉括號(hào)出棧,并按規(guī)章要求逐一出隊(duì)列在處理后入棧。本程序承受的是挨次棧。根本操作列表:(1)據(jù)括號(hào)的個(gè)數(shù)設(shè)一個(gè)標(biāo)記。登記括號(hào)的位置。(2)依據(jù)標(biāo)記來執(zhí)行依次的操作。2輸出人的語言。有括號(hào),分為括號(hào)內(nèi)的和括號(hào)外的的從左到右入棧,并且依次插入括號(hào)內(nèi)的第一個(gè)字符。據(jù)翻譯函數(shù)2出棧并且翻譯。二、需求分析a’-‘z’寫字母A和B。且允許消滅重復(fù)字符或非法字符,程序運(yùn)用時(shí)自動(dòng)過濾去,輸出的運(yùn)算結(jié)果中將不含重復(fù)字符和非法字符。魔王語言遵守如下規(guī)章:〔θδ1δ2δ3…δn〕θδnθδn-1…θδ1θBtAdAAsae演示程序以用戶和計(jì)算機(jī)對(duì)話的形式進(jìn)展,即在計(jì)算機(jī)終端中顯示提示信息之后,有用戶自行選擇下一步命令,相應(yīng)輸入數(shù)據(jù)和運(yùn)算結(jié)果在其后顯示。程序的執(zhí)行命令有:1〕選擇操作 2〕任意鍵完畢數(shù)據(jù)測試B(ehnxgz)Btsaedsaeezegexenehetsaedsaet天d地st天d地s上a一只e鵝z追g趕x下n蛋h恨三、概要設(shè)計(jì)為實(shí)現(xiàn)上述功能,需要棧和隊(duì)列兩個(gè)抽象數(shù)據(jù)類型。棧抽象數(shù)據(jù)類型定義ADTstack{數(shù)據(jù)對(duì)象:D={ai|ai∈Elemset,i=1,2,3,…n,n>=0}數(shù)據(jù)關(guān)系:R1={<ai-1,ai>|ai-1,ai∈D,i=2,…n}根本操作:InitStack(&s)操作結(jié)果:構(gòu)造一個(gè)空棧s。Push(&s,e)初始條件:棧s操作結(jié)果:插入元素e為的棧頂元素。Pop(&s,&e)初始條件:棧s已存在且非空。操作結(jié)果:刪除棧s的棧頂元素,并用eStackLenth(&s)初始條件:棧s操作結(jié)果:返回s的元素個(gè)數(shù),即棧的長度。ClearStack(&s)初始條件:棧s已存在。操作結(jié)果:將sDestoryStack(&s)初始條件:棧s操作結(jié)果:棧sStackEmpty(&s)初始條件:棧s操作結(jié)果:假設(shè)是為空棧,則返回TRUE,否則返回FALSE。Traverse(&s,void(*visit))初始條件:棧s操作結(jié)果:依次遍歷棧s中的元素,依次調(diào)用函數(shù),一旦失敗,則操作失敗。}ADTstack隊(duì)列抽象數(shù)據(jù)類型定義ADTQueue{數(shù)據(jù)對(duì)象:D={ai|ai∈Elemset,i=1,2,3,…n,n>=0}數(shù)據(jù)關(guān)系:R1={<ai-1,ai>|ai-1,ai∈D,i=2,…n}根本操作:InitQueue(&q)操作結(jié)果:構(gòu)造一個(gè)空隊(duì)列Q。EnQueue(&q,e)初始條件:隊(duì)列Q已存在。操作結(jié)果:插入元素e為QQueueLenth(&q)初始條件:隊(duì)列已存在。操作結(jié)果:返回Q的元素個(gè)數(shù),即隊(duì)列的長度。DeQueue(&q,&e)初始條件:隊(duì)列已存在。操作結(jié)果:刪除Q的隊(duì)尾元素,并用eQueueEmpty(&q)初始條件:隊(duì)列Q已存在。操作結(jié)果:假設(shè)Q為空隊(duì)列,則返回TRUE,否則返回FALSE.ClearQueue(&q)初始條件:隊(duì)列Q操作結(jié)果:清空隊(duì)列Q。DestoryQueue(&q)初始條件:隊(duì)列Q已存在。操作結(jié)果:隊(duì)列Q被銷毀。不再存在。QueueTraverse(&q,Status(*visit))初始條件:隊(duì)列Q操作結(jié)果:依次遍歷隊(duì)列Q的元素,依次調(diào)用函數(shù),一旦失敗,則操作失敗。}ADTQueue流程圖如下:本程序主要包括以下幾個(gè)模塊:主程序模塊:intmain{GhostLanage;printf(“\n\t\n\n“);}各子程序模塊:/*初始化棧*/voidInitStack(SeqStack*s){s->top=-1;}/*進(jìn)棧操作*/voidPush(SeqStack*s,StackElementTypex){if(s->top==Stack_Size-1)printf(“\n\telse{s->top++;s->elem[s->top]=x;}}/*出棧操作*/voidPop(SeqStack*s,StackElementType*x){if(s->top==-1)printf(“\n\telse{*x=s->elem[s->top];s->top--;}}/*取棧頂元素*/voidGetTop(SeqStack*s,StackElementType*x){if(s->top==-1)printf(“\n\telse*x=s->elem[s->top];}/*推斷棧是否為空*/intIsEmpty(SeqStack*s){if(s->top==-1)return(0);elsereturn(1);}/*魔王語言翻譯函數(shù)*/voidGhostLanage{SeqStackB,A,s,B1,A1,r,M;StackElementTypech,ch1,ch2,x;charaa[100];intchoice,i=0,n;InitStack(&B);InitStack(&A);InitStack(&s);InitStack(&r);InitStack(&M);printf(“魔王語言的轉(zhuǎn)換形式:B->tAdA A->sae“);Push(&B,”t”);Push(&B,”A”);Push(&B,”d”);Push(&B,”A”);Push(&A,”s”);Push(&A,”a”);Push(&A,”e”);printf(“\n:\n“);scanf(“%s“,aa);for(i=0;aa[i]!=”\0”;i++)Push(&s,aa[i]);while(IsEmpty(&s)){Pop(&s,&ch);if(ch==”B”){B1=B;while(IsEmpty(&B1)){Pop(&B1,&ch1);if(ch1==”A”){A1=A;while(IsEmpty(&A1)){Pop(&A1,&ch2);Push(&r,ch2);}}elsePush(&r,ch1);}}elseif(ch==”A”){A1=A;while(IsEmpty(&A1)){Pop(&A1,&ch2);Push(&r,ch2);}}elseif(ch==”)”){Pop(&s,&ch2);while(ch2!=”(”){Push(&M,ch2);Pop(&s,&ch2);}GetTop(&M,&ch2);x=ch2;Pop(&M,&ch2);while(IsEmpty(&M)){Push(&r,x);Pop(&M,&ch2);Push(&r,ch2);}Push(&r,x);}elsePush(&r,ch);}M=r;printf(“\n\n\twhile(IsEmpty(&M)){Pop(&M,&ch);printf(“%c“,ch);}printf(“\n\n\t是否連續(xù)翻譯為漢語〔10scanf(“%d“,&n);if(n==1){printf(“\n\n\t\n\n\t“);M=r;while(IsEmpty(&M)){Pop(&M,&ch);if(ch==”t”)printf(“天“);elseif(ch==”d”)printf(“地“);elseif(ch==”s”)printf(“上“);elseif(ch==”a”)printf(“一只“);elseif(ch==”e”)printf(“鵝“);elseif(ch==”z”)printf(“追“);elseif(ch==”g”)printf(“趕“);elseif(ch==”x”)printf(“下“);elseif(ch==”n”)printf(“蛋“);elseif(ch==”h”)printf(“恨“);}printf(“\n“);}else;}模塊間的關(guān)系是:主程序主程序棧模塊翻譯函數(shù)12四、具體設(shè)計(jì)本程序中的主要函數(shù)有:voidInitStack(SeqStack*s);/*初始化棧*/voidPush(SeqStack*s,StackElementTypex);/*進(jìn)棧操作*/voidPop(SeqStack*s,StackElementType*x);/*出棧操作*/voidGetTop(SeqStack*s,StackElementType*x);/*取棧頂元素*/intIsEmpty(SeqStack*s);/*推斷棧是否為空*/voidGhostLanage;/*魔王語言翻譯函數(shù)*/〔初始化棧,進(jìn)棧,出棧,取棧頂元素,推斷棧空,以此來實(shí)現(xiàn)整個(gè)程序的運(yùn)行。//1.程序的頭文件及全局變量的定義#include<stdio.h>#include<stdlib.h>#defineStackElementTypechar#defineStack_Size100//2.棧類型及其根本操作typedefstruct{StackElementTypeelem[Stack_Size];inttop;}SeqStack;voidInitStack(SeqStack*s);/*初始化棧*/voidPush(SeqStack*s,StackElementTypex);/*進(jìn)棧操作*/voidPop(SeqStack*s,StackElementType*x);/*出棧操作*/voidGetTop(SeqStack*s,StackElementType*x);/*取棧頂元素*/intIsEmpty(SeqStack*s);/*推斷棧是否為空*/voidGhostLanage;/*魔王語言翻譯函數(shù)*///3.主函數(shù)intmain{system(“color1b“);GhostLanage;printf(“\n\t\n\n“);}/*初始化棧*/voidInitStack(SeqStack*s){s->top=-1;}/*進(jìn)棧操作*/voidPush(SeqStack*s,StackElementTypex){if(s->top==Stack_Size-1)printf(“\n\telse{s->top++;s->elem[s->top]=x;}}/*出棧操作*/voidPop(SeqStack*s,StackElementType*x){if(s->top==-1)printf(“\n\telse{*x=s->elem[s->top];s->top--;}}/*取棧頂元素*/voidGetTop(SeqStack*s,StackElementType*x){if(s->top==-1)printf(“\n\telse*x=s->elem[s->top];}/*推斷棧是否為空*/intIsEmpty(SeqStack*s){if(s->top==-1)return(0);elsereturn(1);}//4.魔王語言翻譯函數(shù)voidGhostLanage{SeqStackB,A,s,B1,A1,r,M;StackElementTypech,ch1,ch2,x;charaa[100];intchoice,i=0,n;InitStack(&B);InitStack(&A);InitStack(&s);InitStack(&r);InitStack(&M);printf(“\t\t*************魔王語言翻譯程序***************\n“);printf(“\t\t*********\t\t\t************\t\n“);printf(“\t\t*********\t\t\t************\t\n“);printf(“\t\t*********\t\t\t************\t\n“);Push(&B,”t”);Push(&B,”A”);Push(&B,”d”);Push(&B,”A”);Push(&A,”s”);Push(&A,”a”);Push(&A,”e”);printf(“\n\t\t\tscanf(“%s“,aa);for(i=0;aa[i]!=”\0”;i++)Push(&s,aa[i]);while(IsEmpty(&s)){Pop(&s,&ch);if(ch==”B”){B1=B;while(IsEmpty(&B1)){Pop(&B1,&ch1);if(ch1==”A”){A1=A;while(IsEmpty(&A1)){Pop(&A1,&ch2);Push(&r,ch2);}}elsePush(&r,ch1);}}elseif(ch==”A”){A1=A;while(IsEmpty(&A1)){Pop(&A1,&ch2);Push(&r,ch2);}}elseif(ch==”)”){Pop(&s,&ch2);while(ch2!=”(”){Push(&M,ch2);Pop(&s,&ch2);}GetTop(&M,&ch2);x=ch2;Pop(&M,&ch2);while(IsEmpty(&M)){Push(&r,x);Pop(&M,&ch2);Push(&r,ch2);}Push(&r,x);}M=r;
}elsePush(&r,ch);printf(“\n\n\twhile(IsEmpty(&M)){Pop(&M,&ch);printf(“%c“,ch);}printf(“\n\n\t是否連續(xù)翻譯為漢語〔10scanf(“%d“,&n);if(n==1){printf(“\n\n\t\n\n\t“);M=r;while(IsEmpty(&M)){Pop(&M,&ch);if(ch==”t”)printf(“天“);elseif(ch==”d”)printf(“地“);elseif(ch==”s”)printf(“上“);elseif(ch==”a”)printf(“一只“);elseif(ch==”e”)printf(“鵝“);elseif(ch==”z”)printf(“追“);elseif(ch==”g”)printf(“趕“);elseif(ch==”x”)printf(“下“);elseif(ch==”n”)printf(“蛋“);elseif(ch==”h”)printf(“恨“);}printf(“\n“);}else;}五、調(diào)試分析結(jié)果。所以進(jìn)展調(diào)試,覺察應(yīng)當(dāng)從右到左入棧,依據(jù)出棧的挨次,先進(jìn)后出,正好可以到達(dá)相應(yīng)的結(jié)果。11,結(jié)果未相反。與規(guī)章11不會(huì)重復(fù)第一個(gè)字符的輸出。以,經(jīng)過調(diào)試,也生疏了這兩個(gè)符號(hào)的用法。六、用戶手冊(cè)第一步:啟動(dòng)魔王語言.exe應(yīng)用程序,進(jìn)入程序界面,如下:其次步:輸入要翻譯的魔王語言后按Enter鍵確認(rèn),結(jié)果如下:第三步:程序?qū)⑤斎敕g為魔王語言后會(huì)再次詢問要不要翻譯為漢語,假設(shè)要翻譯為漢語,1,按Enter第四步:翻譯完畢后按任意鍵退出程序。七、測試結(jié)果輸入的魔王語言為:B(ehnxgz)B翻譯的結(jié)果為:tsaedsaeezegexenehetsaedsae翻譯為漢語的結(jié)果為:天上一只鵝地上一只鵝鵝追鵝趕鵝下鵝蛋鵝恨鵝天上一只鵝地上一只鵝結(jié)論:此程序能夠依據(jù)給定的翻譯規(guī)章解釋魔王語言。八、完畢語通過這個(gè)試驗(yàn)。特別是試驗(yàn)中對(duì)棧的應(yīng)用,讓我更深入的了解了棧的特性,更加了解了缺乏,期望在今后的學(xué)習(xí)中,不斷努力,使程序更加的完善。九、附錄程序源代碼如下:#include<stdio.h>#include<stdlib.h>#defineStackElementTypechar#defineStack_Size100typedefstruct{StackElementTypeelem[Stack_Size];inttop;}SeqStack;voidInitStack(SeqStack*s);/*初始化棧*/voidPush(SeqStack*s,StackElementTypex);/*進(jìn)棧操作*/voidPop(SeqStack*s,StackElementType*x);/*出棧操作*/voidGetTop(SeqStack*s,StackElementType*x);/*取棧頂元素*/intIsEmpty(SeqStack*s);/*推斷棧是否為空*/voidGhostLanage;/*魔王語言翻譯函數(shù)*//*主函數(shù)*/intmain{system(“color1b“);GhostLanage;printf(“\n\t\n\n“);}/*初始化棧*/voidInitStack(SeqStack*s){s->top=-1;}/*進(jìn)棧操作*/voidPush(SeqStack*s,StackElementTypex){if(s->top==Stack_Size-1)printf(“\n\telse{s->top++;s->elem[s->top]=x;}}/*出棧操作*/voidPop(SeqStack*s,StackElementType*x){if(s->top==-1)printf(“\n\telse{*x=s->elem[s->top];s->top--;}}/*取棧頂元素*/voidGetTop(SeqStack*s,StackElementType*x){if(s->top==-1)printf(“\n\telse*x=s->elem[s->top];}/*推斷棧是否為空*/intIsEmpty(SeqStack*s){if(s->top==-1)return(0);elsereturn(1);}/*魔王語言翻譯函數(shù)*/voidGhostLanage{SeqStackB,A,s,B1,A1,r,M;StackElementTypech,ch1,ch2,x;charaa[100];intchoice,i=0,n;InitStack(&B);InitStack(&A);InitStack(&s);InitStack(&r);InitStack(&M);printf(“\t\t*************魔王語言解釋程序***************\n“);printf(“\t\t*********\t\t************\t\n“);printf(“\t\t*********\t\t********\t\n“);printf(“\t\t*********\t\t**************\t\n“);Push(&B,”t”);Push(&B,”A”);Push(&B,”d”);Push(&B,”A”);Push(&A,”s”);Push(&A,”a”);Push(&A,”e”);printf(“\n\t\tscanf(“%s“,aa);for(i=0;aa[i]!=”\0”;i++)Push(&s,aa[i]);whil
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年職業(yè)暴漏試題及答案
- 猜詞有趣課件
- 茶藝師中級(jí)試卷及答案
- 財(cái)務(wù)實(shí)務(wù)題庫及答案
- 項(xiàng)目統(tǒng)籌的質(zhì)量驗(yàn)收標(biāo)準(zhǔn)
- 校園安全宣傳教育月度總結(jié)
- 物資供應(yīng)管理課件
- 酒類的發(fā)酵課件
- 社工醫(yī)護(hù)崗面試題及答案
- 物權(quán)概述課件
- 俄羅斯易貨貿(mào)易操作手冊(cè)2024年
- 個(gè)體工商戶入股協(xié)議書
- DB37-T 3080-2022特種設(shè)備作業(yè)人員配備要求
- DL∕T 1878-2018 燃煤電廠儲(chǔ)煤場盤點(diǎn)導(dǎo)則
- 科學(xué)精神與科學(xué)研究方法智慧樹知到期末考試答案2024年
- JB-T 14509-2023 反滲透海水淡化設(shè)備技術(shù)規(guī)范
- 種豬場人工授精技術(shù)推廣與應(yīng)用樣本
- 景觀模型設(shè)計(jì)與制作課件
- 工傷認(rèn)定申請(qǐng)表
- 信息化建設(shè)情況調(diào)查表
- 靜脈導(dǎo)管常見并發(fā)癥臨床護(hù)理實(shí)踐指南1
評(píng)論
0/150
提交評(píng)論