算法实验报告
设X[ 0 : n - 1]和Y[ 0 : n – 1 ]为两个数组,每个数组中含有n个已排好序的数利用分治策略试设计一个O (log n)时间的算法求出这2n个数的中位数。
由文件input.txt提供输入数据。文件的第1行中有1个正整数n(ny[m])
{
if(count==1)
return y[m];
else
return mid(x,y+count-m-1,m+1);
}
else
{
if(count==1)
return x[m];
else
return mid(x+count-m-1,y,m+1);
}
长江游艇俱乐部在长江上设置了n个游艇出租站1,2,…,n。游客可在这些游艇出租站租用游艇,并在下游的任何一个游艇出租站归还游艇。游艇出租站i到游艇出租站j之间的租金为r(i,j),1i<jn。试设计一个算法,计算出从游艇出租站1到游艇出租站n所需的最少租金。
MFC实验报告
编写一个如示例WinMain的Windows应用程序,其中窗口的背景色、光标、图标等属性可以设置成自己喜欢的风格。作为该示例的扩展,要求编程实现当在该窗口中单击右键时,播放一曲自己喜欢的音乐。(4学时)
编写一个如示例ExDlgCtl的MFC对话框应用程序,其中必须实现的功能包括:
“对话框”菜单下的模态对话框、非模态对话框和文件对话框;
“控件”菜单下的计算器、动态创建按钮、上网问卷调查、调整对话框背景色等四个对话框。
示例中的其它功能可以根据实际情况决定是否编写。(4学时)
3)编写一个如示例ExMenu的MFC菜单、工具栏和状态栏的应用程序,编写该实验时注意功能的完整性,包括两个菜单的切换、右键弹出式菜单、工具栏的切换、状态栏信息格的添加等功能。(4学时)
4)编写一个如示例ExDraw的MFC绘图应用程序,实现画点、线、矩形、椭圆等图形,并可以根据用户选择的画笔和画刷进行绘制,最后要求实现画笔的功能。(4学时)
LRESULT CALLBACK WinProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
int WINAPI WinMain(
HINSTANCE hInstance, // handle to current instance
HINSTANCE hPrevInstance, // handle to previous instance
LPSTR lpCmdLine, // pointer to command line
int nCmdShow // show state of window
)
{
WNDCLASS wndclas;
wndclas.cbClsExtra=0;
wndclas.cbWndExtra=0;
wndclas.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclas.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclas.hIcon=LoadIcon(NULL,IDI_EXCLAMATION);
wndclas.hInstance=hInstance;
wndclas.lpfnWndProc=WinProc;
wndclas.lpszClassName="ABCD";
wndclas.lpszMenuName=NULL;
wndclas.style=CS_HREDRAW | CS_VREDRAW;
RegisterClass(&wndclas;);
void CTestView::OnDialogModal() //模态对话框
{
// TODO: Add your command handler code here
CTestDlg1 dlg;
dlg.DoModal();
}
void CTestView::OnDialogModalless()//非模态对话框
{
// TODO: Add your command handler code here
CTestDlg2 *pd=new CTestDlg2();
pd->Create(IDD_DIALOG2,this);
pd->ShowWindow(SW_SHOW);
}
void CTestView::OnDialogFile() //文件对话框
{
Column permutation密码编程实现实验报告
密钥的输入和排序;
加密过程,需要按照密钥排出的顺序,将密文按列输出,从而将其进行加密;
解密过程,使用已有的密钥,将密文进行解密,按照密钥的顺序,反加密过程,应用置换原理将明文恢复。
for(p=0;p<MAX;p++)
{
scanf("%c",&pla;_text[p]);
if((pla_text[p]>='a'&&pla;_text[p]<='z')||(pla_text[p]>='A'&&pla;_text[p]<='Z'))
continue;
else
break;
}
if((p%k)!=0)
{
for(m=0;m<(k-(p%k));m++)
{
pla_text[p+m]='q';
}
}
Vigenere的编程实现
Vigenere密码是一个多码加密法,密钥重复循环使用,同一密钥字母可以加密多个明文字母,也可以解密多个密文字母。
加密过程就是给定密钥字母x和明文字母y,密文字母是位于x行和y列的那个字母。这样就决定了加密一条消息需要与消息一样长的密钥字符串,通常,密钥字符串是密钥词的重复。
解密过程就是通过密钥字母确定对应密文字母所在的列,从而找到对应的明文。解密过程中密钥也是重复循环使用的。
while(i<p)
{
for(j=0;j<k;j++)
{
if(key[j]>='a'&&key;[j]<='z')
m=key[j]-'a';
else if(key[j]>='A'&&key;[j]<='Z')
m=key[j]+32-'a';
if(pla_text[i]>='a'&&pla;_text[i]<='z')
n=pla_text[i]-'a';
else if(pla_text[i]>='A'&&pla;_text[i]<='Z')
n=pla_text[i]+32-'a';
i++;
if(i>p)
break;
table(m,n);
}
}
printf("\n");
DES的编程实现(实验报告)
1、用户输入密钥56位(7个ASCII)。
2、每隔7位添加奇偶校验位将密钥变为64位,设该64位为key。(由于奇偶校验位并不会参与加密操作,故本程序没有进行64位的拓展操作。)
3、将key穿过PC-1块(Permuted Choice 1,交换选择2),PC-1块用于提取用户输入的56个位,并56个位的排列方式由表一表示。
4、56个位一分为二,每一半都左移1或2位,具体左移1或2位需要看密钥使用是在DES的哪一轮。
5、新的56位用PC-2压缩抛弃8位后为某个阶段生成一个48位的子密钥。
加密过程:
1、将明文块64位分成左右两部分,分别设为L,R。
2、R部分通过E盒扩展为48位,输出的48位与该轮子key进行异或操作。
3、将48位的R部分进行S盒的替代操作,输出32位的新的部分。
4、输出的新的R32位部分在P盒中进行置换操作从而得到新的R部分。
5、此时的R部分与L部分进行异或操作,得到的结果作为下一轮加密的明文R部分而最原始的R部分则作为下一轮加密的明文的L部分。
int PC1_Key(int k[64],int k1[56]);
int PC2_Key1(int k[56],int k1[56],int a);
int PC2_key2(int k[56],int k1[48]);
int Pla_Text(int p[64]);
int T_T(int R[32],int L[32]);
int E_Box(int R[32],int R1[48]);
int S_Boxes(int R[48],int R1[32]);
int P_Box(int R2[32],int R3[32]);
int XOR(int L[32],int R[32]);
数学建模实验报告完整版
数学建模实验报告 包括线性规划、非线性规划、无约束优化、拟合、插值等matlab代码及相关总结分析
数学建模实验报告(拟合)
用给定的多项式,y=x3-6x2+5x-3,产生一组数据(xi,yi,i=1,2,…,n),再在yi上添加随机干扰(可用rand产生(0,1)均匀分布随机数,或用rands产生N(0,1)分布随机数),然后用xi和添加了随机干扰的yi作的3次多项式拟合,与原系数比较。
如果作2或4次多项式拟合,结果如何?
三次拟合:
x=1:0.5:10;
y=x.^3-6*x.^2+5*x-3;
y1=y;
for i=1:length(y)
y1(i)=y1(i)+rand;
end
数学建模实验报告(插值)
在某海域测得一些点(x,y)处的水深z由下表给出,船的吃水深度为5英尺,在矩形区域(75,200)*(-50,150)里的哪些地方船要避免进入。
x=[129 140 103.5 88 185.5 195 105 157.5 107.5 77 81 162 162 117.5];
y=[7.5 141.5 23 147 22.5 137.5 85.5 -6.5 -81 3 56.5 -66.5 84 -33.5];
z=[4 8 6 8 6 8 8 9 9 8 8 9 4 9];
xi=75:1:200;
yi=-50:1:150;
figure(1)
z=griddata(x,y,z,xi,yi','cubic');
数学建模实验报告(无约束优化)
某酒厂有批新酿的好酒,如果现在就出售,可得总收入=50万元(人民币),如果窖藏起来待来日(第年)按陈酒价格出售,第年末可得总收入(万元),而银行利率为=0.05,试分析这批好酒窖藏多少年后出售可使总收入的现值最大. (假设现有资金万元,将其存入银行,到第年时增值为万元,则称为的现值.)并填下表.
第一种方案:
>>r=0.05;
for n=1:15;
z1(n)=50*(1+r)^n-50;
n=n+1;
end
z1
第二种方案:
>>for n=1:15;
z2(n)=50*exp(sqrt(n)/6)-50;
end
z2
数学建模实验报告(非线性规划)
某厂向用户提供发动机,合同规定,第一、二、三季度末分别交货40台、60台、80台.每季度的生产费用为 (元),其中x是该季生产的台数.若交货后有剩余,可用于下季度交货,但需支付存储费,每台每季度c元.已知工厂每季度最大生产能力为100台,第一季度开始时无存货,设a=50、b=0.2、c=4,问工厂应如何安排生产计划,才能既满足合同又使总费用最低.讨论a、b、c变化对计划的影响,并作出合理的解释..
先建立M-文件 fun.m:
function f=fun(x);
f=14920+0.4*x(1)*x(1)+0.4*x(2)*x(2)+0.4*x(1)*x(2)-64*x(1)-68*x(2);
再建立主程序xx.m:
x0=[0;0];
A=[-1 -1;1 1];
b=[-100;180];
Aeq=[];beq=[];
vlb=[40;0];vub=[100;100];
[x,fval]=fmincon('fun',x0,A,b,Aeq,beq,vlb,vub)
数学建模实验报告(线性规划)
某厂生产甲乙两种口味的饮料,每百箱甲饮料需用原料6千克,工人10名,可获利10万元;每百箱乙饮料需用原料5千克,工人20名,可获利9万元.今工厂共有原料60千克,工人150名,又由于其他条件所限甲饮料产量不超过8百箱.问如何安排生产计划,即两种饮料各生产多少使获利最大.进一步讨论:
1)若投资0.8万元可增加原料1千克,问应否作这项投资.
2)若每百箱甲饮料获利可增加1万元,问应否改变生产计划.
>>c=[-10 -9];
A=[6 5; 10 20;1 0];
b=[60;150;8];
Aeq=[];
beq=[];
vlb=[0;0];
vub=[];
[z0,fval]=linprog(c,A,b,Aeq,beq,vlb,vub)
数据结构实验报告四
掌握静态查找表和动态查找表的抽象数据类型特征。
掌握将台查找表和动态查找表的实现方法。
学会在顺序表、二叉排序树上设计查找算法,学会根据关键字特征设计哈希函数,设计哈希表,并实现哈希表查找过程。
描述你在进行实现时,主要的函数或操作内部的主要算法,分析这个算法的时、空复杂度,并说明你设计的巧妙之处。
主要函数:
void creat();//创建二叉树
void insert(Node *s);//插入元素
void bstsrch(Node *t,int k);//查找关键项;
内部算法:在二叉排序树上进行查找,是一个从根开始,沿某一个分支逐层向下进行比较判等的过程。在二叉排序树中查找关键字,查找过程从根结点开始。如果根指针为NULL,则查找不成功;否则用给定值 x 与根结点的关键字进行比较:如果给定值等于根结点的关键字,则查找成功。 如果给定值小于根结点的关键字,则继续递归查找根结点的左子树;否则。递归查找根结点的右子树。
数据结构实验报告三
(1) 掌握树、图的抽象数据类型的特征。
(2) 掌握树和图的抽象数据类型在计算机中的实现方法。
(3) 学会使用树和图结构解决一些设计问题。
描述你在进行实现时,主要的函数或操作内部的主要算法,分析这个算法的时、空复杂度,并说明你设计的巧妙之处。
主要函数及算法:
void CreatGraph(VNode A[MAX]);//创建邻接表
void DFS(VNode A[MAX]);//实现深度优先搜索
内部算法:确定起始顶点 v 后, 由 v 出发, 访问它的任一邻接顶点 w1; 再从 w1 出发,访问与 w1邻接但还没有访问过的顶点 w2; 然后再从 w2 出发, 进行类似的访问, 如此进行下去, 直至到达所有的邻接顶点都被访问过的顶点 u 为止。接着, 退回一步, 退到前一次刚访问过的顶点, 看是否还有其它没有被访问的邻接顶点。如果有, 则访问此顶点, 之后再从此顶点出发, 进行与前述类似的访问; 如果没有, 就再退回一步进行查找。
void BFS(VNode A[MAX]);//实现广度优先搜索
内部算法:在访问了起始顶点 v 之后, 由 v 出发, 依次访问 v 的各个未被访问过的邻接顶点 w1, w2, …, wt, 然后再顺序访问 w1, w2, …, wt 的所有还未被访问过的邻接顶点。再从这些访问过的顶点出发,再访问它们的所有还未被访问过的邻接顶点,… 如此做下去,直到图中所有顶点都被访问到为止。
数据结构实验报告(二)
一、实验目的
掌握栈、队列、串和数组的抽象数据类型的特征。
掌握栈、队列、串和数组的抽象数据类型在计算机中的实现方法。
学会使用栈、队列来解决一些实际的应用问题。
(1)描述你在进行实现时,主要的函数或操作内部的主要算法,分析这个算法的时、空复杂度,并说明你设计的巧妙之处。
int InitStack(SeqStack *s) //建立栈
char push(SeqStack *s,int x) //入栈
char pop(SeqStack *s) //出栈
int Empty(SeqStack *s) //判断栈是否为空
int correct(char exp[]) //检验是否匹配
算法:
读入表达式
1)凡出现左括弧,则进栈;
2)凡出现右括弧,首先检查栈是否空
若栈空,则表明该“右括弧”多余,
否则和栈顶元素比较,
若相匹配,则“左括弧出栈” ,
否则表明不匹配
3)表达式检验结束时,
若栈空,则表明表达式中匹配正确,
否则表明“左括弧”有余。
数据结构实验报告一
一、实验目的
掌握线性表的基本操作(插入、删除、查找)以及线性表合并等运算在顺序存储结构、链式存储结构上的实现。重点掌握链式存储结构实现的各种操作。
掌握线性表的链式存储结构的应用。
(1)描述你在进行实现时,主要的函数或操作内部的主要算法,分析这个算法的时、空复杂度,并说明你设计的巧妙之处。
主要函数:
void create(Poly &L);
输入并建立多项式L,该函数首相确定多项式的项数,从而容易实现所输入多项式何时结束的判断。
void display(Poly L); //显示输出多项式L,
void sort(Poly &L); //多项式L按指数排序
void add(Poly La,Poly Lb,Poly &Lc;); //多项式La,Lb相加
void subtract(Poly La,Poly Lb,Poly &Ld;); //多项式La减去Lb,结果给Ld
相加和相减两个函数同采用while循环,将pa && pb作为判断条件,从而可在不知道两个多项式项数的情况下,有一个多项式遍历比较结束就会停止,程序继续想下一步进行。
数据结构算法C语言代码
该代码集包含了数据结构课程所涉及的算法的C语言实现代码,以及一些经典的算法C语言实现代码。例如二分查找(截取部分代码):
int search_bin(char *t,char k)
{
int low=1,high=10,mid;
while (low<=high)
{
mid=(low+high)/2;
if (k==t[mid]) return mid;
else if (k<t[mid]) high=mid-1;
else low=mid+1;
}
return 0;
}
汇编实验报告
实验的预习内容
1、循环结构程序设计实验:
学习循环结构程序的组成以及各部分的作用:初始化部分、工作部分、修改部分、控制部分;学习掌握常用的循环控制指令和数据串操作指令及其使用方法;学习掌握常见的循环程序的控制方法,并根据问题需要能够选择合适的控制方法并应用;学习掌握单重循环与多重循环的区别与联系,并熟练应用,并注意在程序设计中循环程序执行的效率问题。
子程序设计实验:
了解子程序的优点,以及子程序设计过程中需要注意的问题;学习掌握子程序定义的伪指令以及调用和返回指令及其使用方法;学习编写子程序说明文件;掌握常用的参数传递方法:约定寄存器法、约定存储单元法、堆栈法、约定参数地址指针法;注意在子程序设计过程中对现场的保护和恢复。
VMware_tools_linux
VirtualBox 可以在 Linux 和 Windows 主机中运行,并支持在其中安装 Windows (NT 4.0、2000、XP、Server 2003、Vista)、DOS/Windows 3.x、Linux (2.4 和 2.6)、OpenBSD 等系列的客户操作系统。
四级成绩计算器
四级710分制计算器 将百分之成绩换算成710分制