您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 计算机12312-殷磊-课题3
课程设计说明书计算机组成原理算法实现(三)专业计算机科学与技术学生姓名殷磊班级计算机123学号1210704312指导教师花小朋完成日期2015年7月17日11课程设计目的本课程设计是在学完本课程教学大纲规定的全部内容、完成所有实践环节的基础上,旨在深化学生学习的计算机组成原理课程基本知识,进一步领会计算机组成原理的一些算法,并进行具体实现,提高分析问题、解决问题的综合应用能力。2课程设计内容与要求(1)题目:计算机组成原理算法实现(三);(2)功能:课题③能够实现逻辑运算(逻辑非、逻辑加、逻辑乘、逻辑异)、定点整数的单符号位补码加减运算、定点整数的原码一位乘法运算和浮点数的加减运算。3功能模块详细设计登陆窗口流程图逻辑运算流程图输入密码判断密码计数器加1激活菜单栏隐藏登陆提示显示已登录弹出错误窗口判断计数器值是否小于三结束开始结束开始在输入框中输入二进制数后按相应按钮判断是单目运算还是双目预算将文本框中的二进制数做逻辑非在第三个文本框中输出判断文本框中的数是否为二进制数在相应文本框中显示输入“二进制数”判断文本框中的数是否为二进制数在相应文本框中显示输入“二进制数”判断第二个输入框中的数是否与第一个文本框等长将第一第二文本框中的二进制数做逻辑加在第三个文本框中输出在第二个文本框中显示输入“输入和第一个数等长的数”判断做哪种双目预算将第一第二文本框中的二进制数做逻辑乘在第三个文本框中输出将第一第二文本框中的二进制数做逻辑异在第三个文本框中输出2定点整数单符号位补码加减法流程图定点整数的原码乘法窗体流程图结束开始在输入框中输入二进制数后按相应按钮判断文本框中的数是否为带符号二进制数在相应文本框中显示输入“带符号的二进制数”判断第二个输入框中的数是否与第一个文本框等长间转换后的补码做加法运算在第二个文本框中显示输入“输入和第一个数等长的数”判断做哪种双目预算将文本框中的带符号二进制数转换成补码减数转换两次将文本框中的带符号二进制数转换成补码得到的结果的补码转换成带符号的二进制数在结果文本框中显示结束开始在输入框中输入二进制数后按相应按钮判断文本框中的数是否为带符号二进制数在相应文本框中显示输入“带符号的二进制数”将只能更换后的被乘数源码依次乘以乘数的每一位后相加将文本框中的带符号二进制数转换成原码得到的积的源码转换成带符号的二进制数在结果文本框中显示(1)系统进入(主)窗体的设计:菜单需要在输入口令正确后方可激活使用。如下图:三次口令输入错误应该禁止使用,如下图:3输入密码正确之后,如下图:主要实现代码如下:publicvoidactionPerformed(ActionEvente){Strings=newString(12);if(e.getSource()==button1){while(i==0&&m=3&&(!(text1.getText().equals()))){if(text1.getText().equals(s)){i=1;JOptionPane.showMessageDialog(this,口令正确,请选择菜单栏的操作,正确,JOptionPane.INFORMATION_MESSAGE);text1.setEnabled(false);text1.setVisible(false);a22.setVisible(true);a2.setVisible(false);}else{m++;JOptionPane.showMessageDialog(this,您输入的口令不正确,警告,JOptionPane.WARNING_MESSAGE);text1.setText(null);}}if(m3){JOptionPane.showMessageDialog(this,您三次口令错误,已被禁用,警告,JOptionPane.ERROR_MESSAGE);}}(2)选择主窗体中“逻辑运算”时进入下图所示的窗体:4在上面的窗体中按“输入”按扭时,将输入焦点设置为最上面的一个文本框上。依次输入两个(或一个)二进制数(如11或01)后,按“逻辑非”、“逻辑加”、“逻辑乘”或“逻辑异”按扭中的任一个后,将在第三个文本框中显示对应操作的结果。选择“返回”按扭时回到主窗体。Stringsg=t1.getText();intindex=sg.indexOf(+);intl=sg.length();StringBuffers=newStringBuffer(sg);for(inti=0;il;i++){if(s.charAt(i)=='0'){s.setCharAt(i,'1');}else{s.setCharAt(i,'0');}Stringss=s.substring(index+1);t3.setText(ss);intindex=sg.indexOf(+);StringBuffers=newStringBuffer(sg);StringBuffers2=newStringBuffer(sg2);for(inti=0;isg.length();i++){if(s.charAt(i)=='1'||s2.charAt(i)=='1'){s.setCharAt(i,'1');5}else{s.setCharAt(i,'0');}}intindex=sg.indexOf(+);StringBuffers=newStringBuffer(sg);StringBuffers2=newStringBuffer(sg2);for(inti=0;isg.length();i++){if(s.charAt(i)=='1'&&s2.charAt(i)=='1'){s.setCharAt(i,'1');}else{s.setCharAt(i,'0');}}intindex=sg.indexOf(+);StringBuffers=newStringBuffer(sg);StringBuffers2=newStringBuffer(sg2);for(inti=0;isg.length();i++){if(s.charAt(i)==s2.charAt(i)){s.setCharAt(i,'0');}else{s.setCharAt(i,'1');}}(3)选择主窗体中“定点整数单符号位补码加减”时进入下图所示的窗体:6把输入的数取补码,代码如下:char[]bu(char[]in){charc=in[0];if(c=='1'){charcarry='0';inti;chartemp[]=in;for(i=1;i=temp.length-1;i++)/*除符号位外各位取反*/{if(temp[i]=='0'){temp[i]='1';}elseif(temp[i]=='1'){temp[i]='0';}}if(temp[temp.length-1]=='0'){temp[temp.length-1]='1';carry='0';}/*末位加一*/elseif(temp[temp.length-1]=='1'){temp[temp.length-1]='0';carry='1';}for(i=temp.length-2;i=0;i--)/*各位进位情况*/{if(temp[i]=='0'&&carry=='0'){temp[i]='0';carry='0';}elseif(temp[i]=='0'&&carry=='1'){temp[i]='1';carry='0';}elseif(temp[i]=='1'&&carry=='0'){temp[i]='1';carry='0';}elseif(temp[i]=='1'&&carry=='1'){temp[i]='0';carry='1';}}in=temp;}returnin;7}加法运算的代码如下:char[]jia(char[]in1,char[]in2){char[]out;charcarry[]=newchar[in1.length+1];/*carry[]用来存放每位的进位*/inti=0;out=in1;carry[carry.length-1]='0';/*carry[]最后一位初值为‘’,carry[]长度比输入大一*/for(i=in1.length-1;i=0;i--){if(in1[i]=='0'&&in2[i]=='0'&&carry[i+1]=='0'){out[i]='0';carry[i]='0';}elseif(in1[i]=='0'&&in2[i]=='1'&&carry[i+1]=='0'){out[i]='1';carry[i]='0';}elseif(in1[i]=='1'&&in2[i]=='0'&&carry[i+1]=='0'){out[i]='1';carry[i]='0';}elseif(in1[i]=='1'&&in2[i]=='1'&&carry[i+1]=='0'){out[i]='0';carry[i]='1';}elseif(in1[i]=='0'&&in2[i]=='0'&&carry[i+1]=='1'){out[i]='1';carry[i]='0';}elseif(in1[i]=='0'&&in2[i]=='1'&&carry[i+1]=='1'){out[i]='0';carry[i]='1';}elseif(in1[i]=='1'&&in2[i]=='0'&&carry[i+1]=='1'){out[i]='0';carry[i]='1';}elseif(in1[i]=='1'&&in2[i]=='1'&&carry[i+1]=='1'){out[i]='1';carry[i]='1';}}if(carry[0]!=carry[1])/*当最高数值位进位与符号位进位不同时表溢出*/{Stringtemp=newString(溢出);8out=temp.toCharArray();}returnout;}(4)选择主窗体中“定点整数一位补码乘法”时进入下图所示的窗体:乘法运算代码如下:if((in1[0]=='0'&&in2[0]=='0')||(in1[0]=='1'&&in2[0]=='1')){signal=+;}if((in1[0]=='0'&&in2[0]=='1')||(in1[0]=='1'&&in2[0]=='0')){signal=-;}intcount=beichengshu.length()-1;charc[]=newchar[count+1];for(inti=0;i=count;i++){c[i]='0';}Stringstr[]=newString[beichengshu.length()+1];str[0]=s1+newString(c);for(inti=beichengshu.length();i0;i--){if(in2[i]=='0'){str[i]=newString(c)+newString(c);}elseif(in2[i]=='1'){str[i]=beichengshu+newString(c);}}for(inti=1;i=beichengshu.length();i++){9intk;char[]buwei=newchar[i];for(k=0;ki;k++){buwei[k]='0';}str[i]=newString(buwei)+str[i].substring(0,str[i].length()-i);}temp=newString(c)+newString(c);charresult[]=temp.toCharArray();for(inti=1;istr.length;i++){charjia1[]=str[i].toCharArray();result=jia(result,jia1);}temp=signal+newString(
本文标题:计算机12312-殷磊-课题3
链接地址:https://www.777doc.com/doc-3418366 .html