版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、. 實(shí)習(xí)報(bào)告 題目:編制一個魔王語言解釋的程序 班級:06052711 姓名:曹旭 學(xué)號:06057104 完成日期:2007.11.27一、 需求分析問題描述 有一個魔王總是使用自己的一種非常精練而抽象的語言講話,沒人能聽的懂。但他的語言是可以逐步解釋成人能懂得語言的,因?yàn)樗恼Z言是由以下兩種形式的規(guī)則由人的語言逐 步抽象上去的: (1)->12.n(2)(12.n)->nn-1.1 在這兩種形式中,從左到右均表示解釋;從右到左表示抽象。試寫一個魔王解釋系統(tǒng),把 他的話解釋成人能聽懂得話
2、。 基本要求 用下述兩條具體規(guī)則和上述規(guī)則形式(2)實(shí)現(xiàn)。設(shè)大寫字母表示魔王語言的詞匯;小寫字 母表示人的語言詞匯;希臘字母(a,b1,s,y1等)表示可以用大寫或小寫字母代換的變量。 魔王語言可含人的詞匯。 (1)B->tAdA (2) A->sae 測試數(shù)據(jù) B(einxgz)B 解釋成 tsaedsa
3、eezegexeneietsaedsae 若將小寫字母與漢字建立下表所示的對應(yīng)關(guān)系,則魔王說的話是“天上一個鵝地上一個鵝 鵝追鵝趕鵝下鵝蛋鵝恨鵝天上一個鵝地上一個鵝。” t d s a e z G x n i 天 地 上
4、一個 鵝 追 趕 下 蛋 恨 實(shí)現(xiàn)提示 將魔王的語言自右至左進(jìn)棧,總是處理?xiàng)m敗H羰情_括號,則逐一出棧,將字母順序入隊(duì) 列,直至閉括號出棧,并按規(guī)則要求逐一出隊(duì)列再處理后入棧。其他情形較簡單,請讀者 思考如何處理,應(yīng)首先實(shí)現(xiàn)棧和隊(duì)列的基本運(yùn)算二、 概要設(shè)計(jì) 為實(shí)現(xiàn)上述程序功能,應(yīng)以棧和隊(duì)列來表示。1. 設(shè)定棧的抽象數(shù)據(jù)類型定義為: ADT Stack 數(shù)據(jù)對象:D=ai | aiCharSet,I=1,2,.,n,n0 數(shù)據(jù)關(guān)系:R1=< ai-1,ai > |ai-1,
5、aiD,I=1,2,.,n 基本操作: ListInitiate (&S) 操作結(jié)果:構(gòu)造一個空棧S。StackEmpty(S)初始條件:棧S已經(jīng)存在。操作結(jié)果:若棧S為空棧,則返回TRUE,否則返回FALSE。Push(&S,e)初始條件:棧S已經(jīng)存在。操作結(jié)果:在棧S的棧頂插入新的棧頂元素e。Pop(&S,&e)初始條件:棧S已經(jīng)存在。操作結(jié)果:刪除S的棧頂元素,并以e返回其值。 ADT Stack2. 設(shè)定隊(duì)列的抽象數(shù)據(jù)類型定義為:ADTQueue 數(shù)據(jù)對象:D=ai | aiElemSet,I=1,2,.,n,n0 數(shù)據(jù)關(guān)系:R1=< ai-1,a
6、i > |ai-1,aiD,I=1,2,.,n 基本操作: ListInitiate (&Q) 操作結(jié)果:構(gòu)造一個空隊(duì)列Q。StackEmpty(Q)初始條件:隊(duì)列Q已經(jīng)存在。操作結(jié)果:若隊(duì)列Q為空棧,則返回TRUE,否則返回FALSE。EnQueue(&Q,e)初始條件:隊(duì)列Q已經(jīng)存在。操作結(jié)果:插入元素e為Q的新的隊(duì)尾元素。DeQueue(&Q,&e)初始條件:隊(duì)列Q已經(jīng)存在。操作結(jié)果:刪除Q的對頭元素,并以e返回其值。 ADT Queue2. 程序包含四個模塊:1) 主程序模塊:Void main()初始化;For()接受處理命令;接受處理;2) 棧
7、模塊實(shí)現(xiàn)棧的抽象數(shù)據(jù)類型;3) 隊(duì)列模塊實(shí)現(xiàn)隊(duì)列的抽象數(shù)據(jù)類型。4) 魔王語言解釋模塊定義線性表的結(jié)點(diǎn)結(jié)構(gòu)。各模塊的之間的調(diào)用關(guān)系如下: 主程序模塊 魔王語言解釋模塊 棧模塊隊(duì)列模塊三、 詳細(xì)設(shè)計(jì)1. 站類型typedef structchar *base;char *top;int stacksize;stack;2. 隊(duì)列類型typedef struct QNodechar data;struct QNode *next;QNode,*LinkQueueNode;typedef structLinkQueueNode front;LinkQueueNode re
8、ar;LinkQueue;3.棧的基本操作int Initstack(stack &s) s.base=(char*)malloc(100*sizeof(char); if(!s.base)exit(0); s.top=s.base; s.stacksize=100; return 1;int IsEmpty(stack s) if(s.top=s.base)return 1;return 0;void push(stack &s,char e)if(s.top-s.base>=s.stacksize)s.base=(char*)realloc(s.base,(s.sta
9、cksize+10)*sizeof(char);if(!s.base)exit(0);s.top=s.base+s.stacksize;s.stacksize+=10;*s.top+=e;int pop(stack &s,char &e)if(s.top=s.base)exit(0);e=*-s.top;return 1;4隊(duì)列的基本操作int initQueue(LinkQueue &Q)Q.front=Q.rear=(LinkQueueNode)malloc(sizeof(LinkQueueNode);if(!Q.front)exit(-1);Q.front->
10、;next=NULL;return 1;int Isempty(LinkQueue Q)if(Q.front=Q.rear)return 1;return 0;int EnQueue(LinkQueue &Q,char e)LinkQueueNode p;p=(LinkQueueNode)malloc(sizeof(QNode);if(!p)exit(-1);p->data=e;p->next=NULL;Q.rear->next=p;Q.rear=p;return 1;char DeQueue(LinkQueue &Q,char &e) LinkQue
11、ueNode p;if(Q.front=Q.rear)return 0;p=Q.front->next;e=p->data;Q.front->next=p->next;if(Q.rear=p)Q.rear=Q.front;free(p);return e;5.求魔王語言解釋的偽碼算法:void transmite(stack S) LinkQueue Q; initQueue(Q); char c,e,ch; char A3='s','a','e' char B8='t','s','
12、a','e','d','s','a','e' printf("魔王要說的話是:"); while(!IsEmpty(S) pop(S,e); if(e='B') printf("tsaedsae"); else if(e='A') printf("sae"); else if(e='(') while(pop(S,e)&&e!=')') EnQueue(Q,e); pu
13、sh(S,e); DeQueue(Q,c); while(!Isempty(Q) DeQueue(Q,e); push(S,c); push(S,e); push(S,c); while(!IsEmpty(S) pop(S,e); if(e=')')break; else if(e='B')printf("tsaedsae");else if(e='A') printf("sae");else printf("%c",e); else printf("%c",e);
14、printf("n");6.主函數(shù)和其他函數(shù)的算法:void main() bool flag=1; char str,c; while(flag=1) stack S; Initstack(S); char a100; printf("魔王說話了:"); int i=0; cin>>a; while(ai)i+; for(int k=i;k>=0;k-) push(S,ak); transmite(S);printf("n是否需要繼續(xù)?是的話請按y: ");scanf("%c",&str
15、);if(str='y')flag=1;else flag=0;c=getchar(); 7調(diào)用函數(shù)關(guān)系圖反映了演示程序的層次結(jié)構(gòu): main Initiate transmiteInitiate pop push EnQueue DeQueue Isempty四調(diào)試分析1.對&的用法明白了許多。原來有點(diǎn)看不懂標(biāo)識符&,使調(diào)試程序時費(fèi)了我不少的時間。通過本次實(shí)驗(yàn)調(diào)試,讓我明白了&用法。2.函數(shù)調(diào)用。函數(shù)調(diào)用是語言中一塊十分重要部分,它可以把一個程序分成若干部分,然后進(jìn)行配置,所以這塊內(nèi)容一定要學(xué)好。3,棧和隊(duì)列問題比較簡單。4,由于考慮不周,如果同樣的字母出現(xiàn)時,規(guī)則
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 團(tuán)購房屋購買合同模板
- 技術(shù)保密協(xié)議格式范本
- 旅游景區(qū)合作開發(fā)協(xié)議書
- 校園無線網(wǎng)絡(luò)接入規(guī)定
- 掃描合同法律效力評估
- 通信工程施工合同
- 店面出租轉(zhuǎn)讓合同模板
- 2024年二手房買賣合同協(xié)議書
- 塔式起重機(jī)拆卸安全合同示范文本
- 工程地質(zhì)勘察借款合同
- 2024年新華社招聘筆試參考題庫附帶答案詳解
- 2024年全國統(tǒng)一高考數(shù)學(xué)試卷(新高考Ⅱ)含答案
- 2024年中小學(xué)學(xué)生防范電信網(wǎng)絡(luò)詐騙知識競賽題庫及答案
- (正式版)QBT 8027-2024 家用和類似用途電動洗鞋烘鞋機(jī)
- 數(shù)字化時代背景下教師角色的思考
- 醫(yī)院績效考核分配方案及實(shí)施細(xì)則
- 護(hù)照加急辦理申請
- 乙炔的理化性質(zhì)及危險特性表
- 汽車場地越野賽突發(fā)事件應(yīng)急預(yù)案
- 神奇的世界文檔
- 頭痛的鑒別診斷--ppt課件完整版
評論
0/150
提交評論