第一篇:串的模式匹配問題實(shí)驗(yàn)總結(jié)(用C實(shí)現(xiàn))
串的模式匹配問題實(shí)驗(yàn)總結(jié)
1實(shí)驗(yàn)題目:
實(shí)現(xiàn)Index(S,T,pos)函數(shù)。其中,Index(S,T,pos)為串T在串S的第pos個(gè)字符后第一次出現(xiàn)的位置。
2實(shí)驗(yàn)?zāi)康模?/p>
熟練掌握串模式匹配算法。
3實(shí)驗(yàn)方法:
分別用樸素模式匹配和
KMP快速模式匹配來實(shí)現(xiàn)串的模式匹配問題。具體方法如下:
樸素模式匹配:輸入兩個(gè)字符串,主串S和子串T,從S串的第pos個(gè)位置開始與T的第一個(gè)位置比較,若不同執(zhí)行 i=i-j+2;j=1兩個(gè)語句;若相同,則執(zhí)行語句 ++i;++j;一直比較完畢為止,若S中有與T相同的部分則返回主串(S字符串)和子串(T字符串)相匹配時(shí)第一次出現(xiàn)的位置,若沒有就返回0。
KMP快速模式匹配:構(gòu)造函數(shù)get_next(char *T,int *next),求出主串S串中各個(gè)字符的next值,然后在Index_KMP(char *S,char *T,int pos)函數(shù)中調(diào)用get_next(char *T,int *next)函數(shù)并調(diào)用next值,從S串的第pos 位置開始與T的第一個(gè)位置進(jìn)行比較,若兩者相等或j位置的字符next值等于0,則進(jìn)行語句++i;++j;即一直向下進(jìn)行。否則,執(zhí)行語句 j=A[j];直到比較完畢為止。若S中有與T相同的部分則返回主串(S字符串)和子串(T字符串)相匹配時(shí)第一次出現(xiàn)的位置,若沒有就返回0
4實(shí)驗(yàn)過程與結(jié)果:
(1)、選擇1功能“輸入主串、子串和匹配起始位置”,輸入主串S:asdfghjkl, 輸入子串T:gh,輸入pos的值為:2。選擇2功能 “樸素的模式匹配算法”,輸出結(jié)果為 5; 選擇3功能 “KMP快速模式匹配算法”,輸出結(jié)果為 5; 選擇0功能,退出程序。截圖如下:
(2)、選擇1功能“輸入主串、子串和匹配起始位置”,輸入主串S:asdfghjkl, 輸入子串T:wp, 輸入pos的值為:2。選擇2功能 “樸素的模式匹配算法”,輸出結(jié)果為 0; 選擇3功能 “KMP快速模式匹配算法”,輸出結(jié)果為 0; 選擇1功能“輸入主串、子串和匹配起始位置”,輸入主串S:asdfghjkl, 輸入子串T:sd, 輸入pos的值為:4。選擇2功能 “樸素的模式匹配算法”,輸出結(jié)果為 0; 選擇3功能 “KMP快速模式匹配算法”,輸出結(jié)果為 0;
選擇0功能,退出程序。截圖如下:
5實(shí)驗(yàn)體會(huì)與收獲:
(1)C語言中無法用string型直接定義字符串,所以要用char型的數(shù)組來實(shí)現(xiàn)字符串的定義。
(2)在char S[]數(shù)組,數(shù)組的首位即S[0]表示數(shù)組長度,用stolen()計(jì)算長度,輸入的字符串逐步后移一位,此時(shí)S[1]存放第一個(gè)字符。
(3)在主函數(shù)中,用get(S+1);get(T+1);兩個(gè)語句無法同時(shí)實(shí)現(xiàn)字符的輸入,最后改用C++語句 cin>>S+1;cin>>T+1;使字符的輸入得到了實(shí)現(xiàn)。(4)程序用有必要的文字說明,以便運(yùn)行時(shí)更加清晰明了。
第二篇:求解Josephus問題實(shí)驗(yàn)總結(jié)(用C語言循環(huán)單鏈表實(shí)現(xiàn))
求解Josephus問題實(shí)驗(yàn)總結(jié)
1實(shí)驗(yàn)題目: josephus問題可描述如下:
設(shè)有n個(gè)人圍成一個(gè)環(huán),現(xiàn)從第s個(gè)人開始報(bào)數(shù),數(shù)到第m的人出列,然后從出列的下一個(gè)人從新開始報(bào)數(shù),數(shù)到第m的人又出列,如此重復(fù),直至所有人均出列為止。求這些人出列的順序。
2實(shí)驗(yàn)?zāi)康模?/p>
熟練掌握線性表的順序?qū)崿F(xiàn)和鏈?zhǔn)綄?shí)現(xiàn)的基本操作。
3實(shí)驗(yàn)方法:
通過運(yùn)用已學(xué)的向量和循環(huán)單鏈表編寫程序,并在電腦上運(yùn)行,實(shí)現(xiàn)josephus問題的求解。4實(shí)驗(yàn)過程與結(jié)果:
(1)輸入n值為6,s值為3,m值為2,輸入A[i]的值為1 2 3 4 5 6 輸出結(jié) 果為:4 6 2 5 3 1 截圖如下:
(2)
1、輸入n值為-1, s值為3,m值為2,顯示:ERROR。截圖如下:
2、輸入n值為6, s值為0,m值為3,顯示:ERROR。截圖如下:
3、輸入n值為6, s值為3,m值為0,顯示:ERROR。截圖如下
:
5試驗(yàn)體會(huì)與收獲:
(1)寫程序是要隨時(shí)注意縮進(jìn),使得程序?qū)哟吻逦?,便于尋找錯(cuò)誤,同時(shí)也讓別人看的更加方便。(2)構(gòu)造循環(huán)單鏈表,要以單鏈表為單元指針指向把最后個(gè)單元與第一個(gè)即可(3)建立好循環(huán)單鏈表后,通過三個(gè)指針(p,q,tmp)的指示,來確定報(bào)數(shù),出列人的位置,得以完成。具體過程如下:p指向head頭指針,通過s次循環(huán)將p指向報(bào)數(shù)的起始位置s,用q記錄p的位置,再經(jīng)過m次循環(huán)另p指向出列者的位置,將其數(shù)值保存在一維數(shù)組中,并將其從鏈表中刪除,p指向下一次起始位置,結(jié)束時(shí)返回?cái)?shù)組A[j]。(4)刪除節(jié)點(diǎn)時(shí),注意要釋放節(jié)點(diǎn)。
(5)構(gòu)造函數(shù)時(shí),一定要明確函數(shù)的類型,即返回行還是不返回型,以免出現(xiàn)不必要的錯(cuò)誤。
第三篇:實(shí)驗(yàn)二 用Mathematica實(shí)現(xiàn)單純形法
實(shí)驗(yàn)二 用Mathematica實(shí)現(xiàn)單純形法
一、實(shí)驗(yàn)?zāi)康?/p>
(1)學(xué)習(xí)并學(xué)會(huì)使用Mathematica軟件。(2)掌握單純形法的計(jì)算機(jī)實(shí)現(xiàn)的方法。
二、實(shí)驗(yàn)原理
算法的具體步驟如下:書30頁 Matnmatica中基本語法的補(bǔ)充:
(一)LinnearProgramming[c,m,b],其中c是行向量,b是列向量,m是矩陣,自變量用列向量x表示,在滿足mx>=b且x>=0的區(qū)域,求cx的最小值點(diǎn)。需要注意的幾點(diǎn)是>=號(hào),以及目標(biāo)函數(shù)求最小值。
舉例說明:
minf?x 3?2x?3x12?x1?x2?x3?6??x1?2x2?4x3?1s.t.?3x?2x?4x?20
23?1?x1,x2,x3?0?
分析與求解:
第三個(gè)式子可以改造成兩個(gè)
3x1?2x2?4x3?2和03x1?2x2?4x3?20
??x1?x2?x3??6?x?2x2?4x3?12?1?最后得到用于編寫程序的表示形式為??3x1?2x2?4x3??20?3x?2x?4x?2023?1??x1,x2,x3?0
輸入c={1,-2,-3};b={-6,12,20,-20};A={{-1,-1,-1},{1,-2,4},{3,2,4},{-3,-2,-4}};LinearProgramming[c,A,b] 得到最優(yōu)解x={0,2,4} f=-16
(二)通用表的生成函數(shù)Table.表是存儲(chǔ)多個(gè)數(shù)、變量或算式等對(duì)象的一種數(shù)據(jù)結(jié)構(gòu)。一個(gè)表用一對(duì)花括號(hào)表示,它的成員在括號(hào)內(nèi)用逗號(hào)隔開,同一個(gè)表的成員可以有不同的數(shù)據(jù)類型,表的成員還可以是一個(gè)表(子表)。可以用“t[[n]]”來提取表t中的第n個(gè)元素。Mathematica中常用的建表函數(shù)是“Table”,其調(diào)用格式如下:
Table[f,{i,imin,imax,stepi},{j,jmin,jmax,stepj}] 表的通項(xiàng)為f(f是變量i和j的函數(shù)),min,max,step規(guī)定了初值、終值、步長,min和step的默認(rèn)值為1。例如
輸入命令Table[n^3,{n,1,20,2}] 則輸出 {1,27,125,343,729,1331,2197,3375,4913,6859} 輸入命令Table[x*y,{x,3},{y,3}] 則輸出 {{1,2,3},{2,4,6},{3,6,9}}
(三)表作為向量和矩陣
一層表在線性代數(shù)中表示向量, 二層表表示矩陣.例如,矩陣
?2??4?
3??5??
可以用數(shù)表{{2,3},{4,5}}表示.輸入A={{2,3},{4,5}} 則輸出{{2,3},{4,5}} 命令MatrixForm[A]把矩陣A顯示成通常的矩陣形式.例如,輸入命令: MatrixForm[A] 則輸出
?2??4?3??5??
注:一般情況下,MatrixForm[A]所代表的矩陣A不能參與運(yùn)算.(四)求矩陣A的轉(zhuǎn)置的命令:Transpose[A].(五)求方陣A的逆的命令:Inverse[A]
(六)()圓括號(hào)表示項(xiàng)的結(jié)合順序,如(x+(y^x+1/(2x)));[]方括號(hào)表示函數(shù),如Log[x],BesselJ[x,1];{}大括號(hào)表示一個(gè)“表”(一組數(shù)字、任意表達(dá)式、函數(shù)等的集合),如{2x,Sin[12 Pi],{1+A,y*x}};[[]]雙方括號(hào)表示“表”或“表達(dá)式”的下標(biāo),如a[[2,3]]、{1,2,3}[[1]]=1。
(七)每次運(yùn)行完成后程序會(huì)自動(dòng)在輸入的式子前面加上In[n],n表示輸入命令的序列號(hào),在輸出的答案上自動(dòng)加上out[n]。
三、單純形法解題
maxZ?70x1?120x2?100x3?100x4?150x5?8x1?4x2?5x3?3x4?2x5?360?4x?5x2?7x3?6x4?3x5?200?1??3x1?10x2?9x3?5x4?9x5?300s.t.??6x1?9x2?5x3?8x4?9x5?150?8x?4x?5x?3x?2x?10012345???x1,x2,x3,x4,x5?0
編寫程序如下
A={{8,4,5,3,2,1,0,0,0,0}, {4,5,7,6,3,0,1,0,0,0}, {3,10,9,5,9,0,0,1,0,0}, {6,9,5,8,9,0,0,0,1,0}, {8,4,5,3,2,0,0,0,0,1}};c={70,120,100,100,150,0,0,0,0,0};b={360,200,300,150,100};a2=Length[b];a3=Dimensions[A][[2]];b1=Table[i+a3-a2,{i,a2}];b2=Table[i,{i,a3-a2}];b3=Table[i,{i,a3}];x=Table[0,{i,a3}];b4=Table[0,{i,a2}];c1=c[[b2]]-c[[b1]].Inverse[Transpose[Transpose[A][[b1]]]].Transpose[Transpose[A][[b2]]];
Label[100];For[i=1,i≤Length[b2],i=i+1,{ c1=c[[b2]]-c[[b1]].Inverse[Transpose[Transpose[A][[b1]]]].Transpose[Transpose[A][[b2]]];If[c1[[i]] ≤0,{Goto[endif]},{ For[j=1,j≤a2,j=j+1,{ If[(Inverse[Transpose[Transpose[A][[b1]]]].Transpose[A][[b2[[i]]]])[[j]] ≤0,{b4[[j]]=∞}, {b4[[j]]=((Inverse[Transpose[Transpose[A][[b1]]]].b)[[j]])((Inverse[Transpose[Transpose[A][[b1]]]].Transpose[A][[b2[[i]]]])[[j]])}] }];For[j=1,j≤a2,j=j+1,{ If[b4[[j]]==Min[b4],{m=b2[[i]];b2[[i]]=b1[[j]];b1[[j]]=m;Goto[100]}] }] }];Label[endif] }];x[[b1]]=Inverse[Transpose[Transpose[A][[b1]]]].b;Print[“the optimization is : ”];Print[N[x,4]];Print[“the optimization value is : ”];Print[N[c.x]];
實(shí)驗(yàn)練習(xí): 1.設(shè)??1?A??1??11?12?2A1??3??1?,B??0??3???12421??1?,??4?求3AB?2A及ATB.則輸出3AB及ATB的運(yùn)算結(jié)果分別為
10244?14???14???33???10?
?4???2
??4??1??04212?4???8???10??2??52.設(shè)A??0??3?121233412??3??1?,求A.6?5??3.minf=-0.75x1+150x2-0.02x3+6x4
?6x20?0.x3?04x?9?0.2x514??9x20?0.x3?02x?3?0.5x014s.t?
x?13??x1,x2,x,x?034?
00
第四篇:c語言迷宮問題代碼實(shí)現(xiàn)
C語言迷宮問題代碼如下:
#include
#include
#define LEN sizeof(SEAT)
#define MAXSIZE 100
#define LENGTH 30
typedef struct
{
int x;//橫坐標(biāo)
int y;//縱坐標(biāo)
int di;//表示方向,0-3分別表示東南西北。
}SEAT;
struct StackList
{
SEAT stack[MAXSIZE];
int top;
}*Stack;
int EmptyStack(StackList*Stack)//判斷是否為空棧
{
if(Stack->top==0)
return 0;
else
return 1;
}
int Move[4][2]={{0,1},{1,0},{0,-1},{-1,0}};//分別表示向東、西、南、北需要加上的坐標(biāo)
int Mase[LENGTH][LENGTH]={0};//初始化為0
int length,width;
void InitMase()//在迷宮的外圍添加一層“墻壁”(賦值為1),使得迷宮的任意一點(diǎn)都有四個(gè)方向
{
int i,j;
for(i=0;i { for(j=0;j Mase[i][j]=1; } for(i=0;i { for(j=0;j Mase[j][i]=1; } } void InitStack(StackList*Stack)//初始化 { Stack->top=0; return; } int PushStack(StackList*Stack,SEAT CurSeat)//進(jìn)棧 { if(Stack->top==MAXSIZE-1) return false; else { Stack->stack[Stack->top].x=CurSeat.x; Stack->stack[Stack->top].y=CurSeat.y; Stack->stack[Stack->top].di=CurSeat.di; Stack->top++; return true; } } int PopStack(StackList*Stack)//出棧 { if(Stack->top==0) return false; else { Stack->top--; return true; } } int Pass(SEAT p)//判斷當(dāng)前是否可行 { if(Mase[p.x][p.y]==0) { return true; } else return false; } SEAT NextSeat(SEAT CurSeat)//查找下一個(gè)點(diǎn),并返回 { SEAT temp; temp.x=CurSeat.x+Move[CurSeat.di][0]; temp.y=CurSeat.y+Move[CurSeat.di][1]; return temp; } void Mark(SEAT p)//標(biāo)記已經(jīng)走過的點(diǎn),避免重復(fù) { Mase[p.x][p.y]=-1; } int PathWay(SEAT start,SEAT end)//找路線 { Stack=(struct StackList*)malloc(sizeof(struct StackList)); InitStack(Stack); SEAT CurSeat; CurSeat.x=start.x+1;//由于多加了一層墻壁,因此坐標(biāo)的值要加1 CurSeat.y=start.y+1;// CurSeat.di=start.di;// do { if(Pass(CurSeat)) { PushStack(Stack,CurSeat); Mark(CurSeat); if(CurSeat.x==end.x+1&&CurSeat.y==end.y+1)//如果找到出口,返回{ return true; } else { int find=0; while(CurSeat.di<3&&find==0)//找下一個(gè)結(jié)點(diǎn)的方向 { CurSeat.di++; SEAT temp; temp=NextSeat(CurSeat); if(Mase[temp.x][temp.y]==0) { temp.di=-1; CurSeat=temp; find =1; } } } } else { if(EmptyStack(Stack))//當(dāng)前的點(diǎn)不能走,出棧 PopStack(Stack); if(EmptyStack(Stack))//當(dāng)前的點(diǎn)變?yōu)榍耙粋€(gè)點(diǎn) { CurSeat=Stack->stack[Stack->top-1]; } while(CurSeat.di==3&&EmptyStack(Stack))////當(dāng)前的點(diǎn)找不到下一個(gè)點(diǎn),出棧 { PopStack(Stack); CurSeat=Stack->stack[Stack->top-1];//當(dāng)前的點(diǎn)變?yōu)榍耙粋€(gè)點(diǎn)} if(EmptyStack(Stack)) { int find=0; while(CurSeat.di<3&&find==0)////找下一個(gè)結(jié)點(diǎn)的方向 { CurSeat.di++; SEAT temp; temp=NextSeat(CurSeat); if(Mase[temp.x][temp.y]==0) { temp.di=-1; CurSeat=temp; find =1; } } } } }while(EmptyStack(Stack)); return false; } void PrintStack(StackList*Stack)//輸出路線 { if(Stack->top==0) printf(“There is no route can be out of the mazen”); else { int i; for(i=0;i { if(i!=0) printf(“->(%d,%d)”,Stack->stack[i].x-1,Stack->stack[i].y-1); else printf(“(%d,%d)”,Stack->stack[i].x-1,Stack->stack[i].y-1); } } } void PrintMase()//輸出迷宮 { int i,j; for(i=1;i { for(j=1;j { if(j!=1) printf(“ %d”,Mase[i][j]); else printf(“%d”,Mase[i][j]); } printf(“n”); } } int main() { int n; SEAT start,end; printf(“Please enter the maze of the length and width:n”); scanf(“%d%d”,&length,&width); printf(“Please enter the number of the maze wall unit(0 printf(“Please enter the labyrinth of the coordinates of the wall unit(0<=row,column):n”);while(--n>=0) { int x,y; scanf(“%d%d”,&x,&y); Mase[x+1][y+1]=1; } InitMase(); PrintMase(); printf(“Please enter the coordinates entrance(0<=x<%d,0<=y<%d):n”,length,width); scanf(“%d%d”,&start.x,&start.y); start.di=-1; printf(“Please enter the coordinates exports(0<=x<%d,0<=y<%d):n”,length,width); scanf(“%d%d”,&end.x,&end.y); end.di=0; if(PathWay(start,end)) PrintStack(Stack); else printf(“There is no route can be out of the mazen”);return 0; } of the of the maze maze 用c語言實(shí)現(xiàn)單純形法的編程 #include “stdio.h” #include “math.h” #include 文檔為doc格式 《軟件開發(fā)基礎(chǔ)(Java)》 綜合性實(shí)驗(yàn)報(bào)告 題目: MVC實(shí)驗(yàn) 圖書管理系統(tǒng) 班級(jí): 學(xué)生學(xué)號(hào): 學(xué)生姓名:指導(dǎo)老師: 提交時(shí)間: 2016年1月14日 數(shù)學(xué)與信息學(xué)院 一、實(shí)驗(yàn)?zāi)康?掌握基于MVC...... 2012年下學(xué)期C語言實(shí)驗(yàn)實(shí)習(xí)總結(jié) 賀秀山 在科技高度發(fā)展的今天,計(jì)算機(jī)在人們之中的作用越來越突出。而c語言作為一種計(jì)算機(jī)的語言,我們學(xué)習(xí)它,有助于我們更好的了解計(jì)算機(jī),與計(jì)算...... 用 “三步九法”模式實(shí)現(xiàn)“少教多學(xué)”理念 西河初級(jí)中學(xué) 余亞軍 我校處于城鄉(xiāng)結(jié)合部,由于地理位置特殊,學(xué)生流動(dòng)大,生源質(zhì)量差。為了提高教學(xué)質(zhì)量,在校領(lǐng)導(dǎo)的帶領(lǐng)下,我校將教學(xué)改...... 一、《ERP軟件與應(yīng)用》操作中碰到的問題及解決 在本次ERP軟件實(shí)驗(yàn)中,通過對(duì)軟件的實(shí)踐學(xué)習(xí),我們進(jìn)一步增強(qiáng)了我們的軟件操作能力和分析能力。實(shí)驗(yàn)過程中,雖然組內(nèi)成員相互監(jiān)督,...... 數(shù)據(jù)結(jié)構(gòu) 課程設(shè)計(jì)報(bào)告 主題:教學(xué)計(jì)劃編制問題 學(xué)號(hào):20091003768 班級(jí):計(jì)科四班 姓名:熊金蓮 指導(dǎo)老師:郭艷內(nèi)容概要 (1) 題目要求 (2) 教學(xué)計(jì)劃編制問題的要點(diǎn) (3) 函數(shù)模塊及各函數(shù)可...... “四段式”教學(xué)模式教學(xué)實(shí)驗(yàn)總結(jié) 陳秋彬 四段教學(xué)模式,將課堂分四個(gè)時(shí)段:即第一時(shí)段教師精講在教師只有少講,學(xué)生才能多學(xué);教師只有精講,學(xué)生才能多得。這個(gè)看上去與傳統(tǒng)教學(xué)相...... 實(shí)施“三環(huán)教學(xué)模式”的教學(xué)實(shí)驗(yàn)總結(jié)大王五中唐 勝 莊 隨著新課程的實(shí)施不斷推向深入,我們廣大的教育工作者也越來越清楚地認(rèn)識(shí)到,教育教學(xué)質(zhì)量的提高需要高效課堂、新課程實(shí)...... 課堂教學(xué)模式改革實(shí)驗(yàn)活動(dòng)總結(jié) 聚焦課堂教學(xué)改革 提高校本研修實(shí)效性一、困惑迷茫,引發(fā)思變xx年11月30日,在教育局的支持和鼓勵(lì)下,在進(jìn)修學(xué)校的指導(dǎo)下,我校七年級(jí)啟動(dòng)課堂教學(xué)模......第五篇:用c語言實(shí)現(xiàn)單純形法的編程
Dn[K])K=i;for(i=0;i
聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會(huì)在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。 JavaWeb用MV模式C實(shí)現(xiàn)簡(jiǎn)單的圖書管理系統(tǒng)報(bào)告資料(最終定稿)
C語言實(shí)驗(yàn)實(shí)習(xí)總結(jié)
用“三步九法”模式實(shí)現(xiàn)少教多學(xué)
ERP實(shí)驗(yàn)問題總結(jié)
教學(xué)編制問題 c語言 數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)[五篇范例]
“四段式”教學(xué)模式教學(xué)實(shí)驗(yàn)總結(jié)
教學(xué)模式實(shí)驗(yàn)總結(jié)材料(5篇范例)
課堂教學(xué)模式改革實(shí)驗(yàn)活動(dòng)總結(jié)大全