《计算机原理课程设计.doc》由会员分享,可在线阅读,更多相关《计算机原理课程设计.doc(22页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、课程设计说明书计算机组成原理算法实现(四)专业计算机科学与技术学生姓名王亚飞班级D计算机132学号指导教师花小朋完成日期2016年1月22日1 课程设计目的本课程设计是在学完本课程教学大纲规定的全部内容、完成所有实践环节的基础上,旨在深化学生学习的计算机组成原理课程基本知识,进一步领会计算机组成原理的一些算法,并进行具体实现,提高分析问题、解决问题的综合应用能力。2 课程设计内容与要求2.1 题目 计算机组成原理算法实现(四)2.2 功能能够实现机器数的真值还原(定点小数)、定点小数的单符号位补码加减运算、定点小数的补码乘法运算和浮点数的加减运算。 (1) 系统进入(主)窗体的设计:菜单需要在
2、输入口令正确后方可激活使用。口令输入错误时要给出重新输入口令的提示。 (2) 选择主窗体中“定点小数真值还原”时进入下图所示的窗体:在上面的窗体中按“输入”按扭时,将输入焦点设置为最上面的一个文本框上。输入一个定点小数形式的机器数(如:1.1001)后,按“原真值”、“反真值”、“补真值”或“移真值”按钮中的任一个后,将在第二个文本框中显示对应的真值。选择“返回”按钮时回到主窗体。 (3)选择主窗体中的“定点小数单符号位补码加减运算”时进入如下图所示的窗体:操作时首先选择“输入”按钮输入参与运算的数据,然后再选操作按钮。当单击“加法”、“减法”第三、四个文本框显示对应的结果。选择“返回”按钮时
3、回到主窗体。 (4)选择主窗体中的“定点小数原码乘法”时进入如下图所示的窗体:操作时首先选择“输入”按钮输入参与运算的数据,然后再选操作按钮。当单击“乘法”时第三个文本框显示对应的结果。选择“返回”按钮时回到主窗体。 (5)选择主窗体中的“浮点数的加减运算”时进入下图所示的窗体:先选择“输入”按钮输入参与运算的数据,再选操作按钮。当单击“加法”和“减法”时下列文本框显示对应的结果:加法的阶码和尾数、减法的阶码和尾数。选择“返回”按钮时回到主窗体。 (6)选择主窗体中的“帮助”进入下图所示的窗体:阅读完文字后,可使用“关闭”按钮返回主窗口。3 功能模块详细设计3.1 功能介绍计算机组成原理算法实
4、现(四)输入口令机器数的真值还原(定点小数)定点小数的单符号位补码加减运算定点小数的原码乘法浮点数的加减运算输入一个机器数原真值反真值补真值移真值返回依次输入两个数加法结果显示减法结果显示依次输入两个数原码乘法结果显示依次输入两个数的阶码,尾数加法阶码显示加法尾数显示减法阶码显示减法尾数显示返回返回返回3.2实现方法(1)登录界面设计思路界面:整个布局使用了LinearLayout,设置 android:orientation=vertical就可以让所有控件以水平方式来排列,LinearLayout作为容器来承载控件,布局中第一个控件是TextView,值为“计算机组成原理算法实现(4)”,
5、第二个控件是EditText,EditText是文本输入框,最后一个控件是Button控件,用于确定来绑定事件。功能:Buttton绑定了一个监听点击的一个事件,在这个方法体中,主要写了,获得EditText的字符串消息和Intnet跳转,Intent是Android中的一个类,用于控件不同地Activity跳转,从而实现可以在手机上看到不同的画面,这里的Intent跳转到主界面,这也是程序的唯一入口地址。当口令正确,就可以进入主界面,如果连续三次错误程序将被锁死,无法打开。(2) 主界面设计思路界面:在主界面中使用了NavigationView,NavigationView采用最Google
6、最新的Material Design,它是一个很新并且重要的Material Design组件。在Material Design中,Navigation drawer导航抽屉,被设计用于应用导航,提供了一种通用的导航方式,体现了设计的一致性。而NavigationView的典型用途就是配合之前v4包的DrawerLayout,作为其中的Drawer部分,即导航菜单的本体部分。NavigationView是一个导航菜单框架,使用menu资源填充数据,使我们可以更简单高效的实现导航菜单。它提供了不错的默认样式、选中项高亮、分组单选、分组子标题、以及可选的Header。功能:这里的导航菜单设置了四个
7、ITEM,分别是“机器数的真值还原”,“定点小数符号位的补码加减运算”,“定点小数原码的乘法运算”和“浮点数的加减运算”,点击对应的ITEM分别会跳到相应的界面,从而实现了界面的跳转,具体的操作将会在别人Activity处理。(3) 机器数的真值还原设计思路界面:在这个UI中,设置了较多的控件,首先第一个是EditText,用于输入信息,第二个和第三个控件都是TextView,不同的是第一个只是用来提示用户下面是真值,所以这里的Text属性就被设置了“真值是”,第三个真正用来显示所求的结果的,然后依次放了几个Button,用来触发事件。功能:第一个Button是原码求真值的,我们所输入的是定点
8、小数所以是符合原码的不用再做处理,第二个Button是“反码-真值”,当得到所输入的数据后,对这个定点小数小数点以后的数据进行取反,取反的数据再与符号位连接起来就得到“反码-真值”的值了。第三个Button是用来“补码-真值”,因为补码是在反码基础上取反加1就好,所以可以复用求反码的方法,在此基础上加1,便取到补码到真值的值了。第四个Button是“移码”复用第三个Button的方法,只要对符号位替换掉就好了。(4) 定点小数的单符号位的补码加减运算开 始选择要运算的形式加 法减 法返 回从键盘依次输入两个二进制数求补码X 补+Y 补x 补+-y 补符号位进位C,数值位最高位进位Cf,若C=C
9、f,则不溢出,否则溢出补码还原,真值输出或输出结果溢出设计思路界面:UI布居中,有两个EditText,分别输入两个定点小数,两个TextView用来显示求和的结果,和相减的结果,四个Button按钮用来触发事件。功能:点击“减法”会获得两个输入框中补码相加的结果,在TextView中显示,点击“加法”会对两个输入框的值进行相加,加的结果会显示在TextView中,以供用户观察。点击“返回”会直接退出这个界面,回到主界面,点击“清除”会清除输入框中的值。代码处理首先是取得两个ExitText中的值,程序得到的值会进行判断是正是负,如果是正的直接处理,如果是负的会把它写成加一个负数的形式,调用相
10、加的方法,最后加上符号位,最后返回一个字符串。(5) 定点小数原码乘法运算设计思路界面:UI中有两个EditText,一个TextView以及三个Button。功能:点击输入会获得第一个EditText的焦点,点击乘法会对两个输入框的值进行相乘,乘的结果会显示在TextView中,以供用户观察。点击“返回”会直接退出这个界面,回到主界面。定点小数原码乘法的原理是,符号位相同得正,不同为负,然后对后边字符串中的内容进行遍历,第一个数的最后一位依次与第二个数的个个位置的数相乘,保存在一个字符串数组中,最后对这个数组进行二进制加法运算,返回这个结果。(6) 浮点数的加减运算设计思路界面:UI布居中,
11、有四个EditText,分别输入两个浮点小数,四个TextView用来显示求和的结果,和相减的结果,四个Button按钮用来触发事件。功能:点击“输入”会获得第一个EditText的焦点,点击乘法会对四个输入框的值进行浮点数加减,乘的结果会显示在TextView中,以供用户观察。点击“返回”会直接退出这个界面,回到主界面。4 设计小结为期一周的课程设计就这样结束了。在程序设计的时也遇到了很多的问题,刚刚看到这个题目时觉得挺简单,后来慢慢的发现并非如此。当你真正要去做一个东西的时候,会面临比平常多的问题。经过本次课程设计,发现做软件真的需要做很多工作,不仅仅是敲代码。通过此次课程设计,使我更加扎
12、实的掌握了有关Android方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。 过而能改,善莫大焉。在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获取。最终的检测调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。这次课程设计终于顺利完成了,在设计中遇到了很多问题。在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的
13、事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可! 课程设计诚然是一门专业课,给我很多专业知识以及专业技能上的提升,同时又是一门讲道课,一门辩思课,给了我许多道,给了我很多思,给了我莫大的空间。同时,设计让我感触很深。使我对抽象的理论有了具体的认识。参考文献1 白中英. 计算机组成原理(第五版)M. 北京: 科学出版社, 2010.2耿祥义Java2实用教程M.北京:清华大学出版社 2006.08部分代码Util.javapackage com.wyf.king.myapplication;public class Util
14、 /* * 求补码 * param str String * * return String */public String getBuMa(String str)String buMa;if(NotRight(str)return 数据不会法!;else if(str.charAt(0)=0)System.out.println(我是正数);return str;else buMa=str.substring(0, 2)+QuFan(str.substring(2,str.length();System.out.println(前两个是+str.substring(0, 2);System.
15、out.println(我是负数);return buMa;/* * 对字符串取反 * param str String * return String */public String QuFan(String str)System.out.println(取反的字符串是+str);str=str.replace(1,*);str=str.replace(0,1);str=str.replace(*,0);System.out.println(取反后是:+str);return str;public boolean NotRight(String str) /Pattern pattern =
16、 Ppile(0-1);/Matcher matcher = pattern.matcher(str);/if (matcher.find() /return true;/return false;/* * 定点小数加法运算 * param one String * param two String * return String */public String DingJiaJian(String one,String two) one=getBuMa(one);two=getBuMa(two);String result=;int len;String temp=null;if(one.l
17、ength()=0;i-)if(one.charAt(i)=.)jinweii=true;result=.+result;continue;int sum=(int)(one.charAt(i)+two.charAt(i);System.out.println(sum);System.out.println(one的值是+one.charAt(i)+two的值 是+two.charAt(i)+sum是+sum);System.out.println(2);if(sum=98)jinweii=true;if (i+1)two.length()&jinweii+1) temp=1+result;r
18、esult=temp;else temp=0+result;result=temp;else if (sum=97)if (i+1)two.length()&jinweii+1=true) temp=0+result;result=temp;jinweii=true;else temp=1+result;result=temp;jinweii=false;else if (sum=96) if(jinweii+1)temp=1+result;result=temp;else temp=0+result;result=temp;jinweii=false;else if(i=0)if(jinwe
19、i0&jinwei2|!jinwei0&!jinwei2)return result;return 内存溢出;public String DingJianFa(String one,String two)System.out.println(two is+two);if(two.charAt(0)=0)two=1+two.substring(1);else two=0+two.substring(1);return DingJiaJian(one, two);/* * 原码乘法运算 * param one String * param two String * return String */
20、public String YuanCheng(String one,String two) String result;String temp=;/保留正负号if(one.charAt(0)=two.charAt(0)result=0.;else result=1.;String a=result;result=0;one=one.substring(2);two=two.substring(2);char first=one.toCharArray();char second=two.toCharArray();int len1=first.length;int len2=second.l
21、ength;char aa=new char100; if(len1len2) aa=first; first=second; second=aa; String meiHang=new Stringsecond.length*second.length; int len=first.length; for(int i=0;ilen;i+) for(int j=0;jsecond.length;j+) if(firsti=1&secondi=1) temp=1+temp; else temp=0+temp; for(int j=1;j=i;j+) temp=temp+0; meiHangi=t
22、emp;temp=;System.out.println(每行的数据:+meiHangi);result=ErJiaFa(meiHangi,result); return a+result;/*二进制加法器*/public String ErJiaFa(String one,String two) String result=;int len=0;String temp=null;if(one.length()two.length()temp=one;one=two;two=temp;boolean jinwei=new booleanone.length()+2;int len1=one.l
23、ength();int len2=two.length();for (int i = 0; i =0; i-) char a=one.charAt(i);char b=two.charAt(i);if(a=1&b=1&(jinweii+1=true)result=1+result;jinweii=true;else if(a=1&b=1&jinweii+1=false)result=0+result;jinweii=true;else if(a=0&b=0&jinweii+1=true)result=1+result;else if(a=0&b=0&jinweii+1=false)result
24、=0+result;else if(jinweii+1=true&(a=1&b=0|a=0&b=1) result=0+result;jinweii=true;else if(jinweii+1=false&(a=1&b=0)|(a=0&b=1) result=1+result;jinweii=false;System.out.println(我错了+result);System.out.println(result +result);if (jinwei0) result=1+result;return result;FuDianShuUtil.javapackage com.wyf.kin
25、g.myapplication;/* * Created by King on 2016/1/20. */public class FuDianShuUtil public String FuDianShuJia(String j1 ,String j2,String t1,String t2) String result1=null,result2=null; String s2_=t1; char b1_=new chars2_.length()-1; s2_.getChars(0,2,b1_,0); s2_.getChars(3,s2_.length(),b1_,2); C.原_补(b1
26、_); String s2=new String(b1_); String s4_=t2; char b2_=new chars4_.length()-1; s4_.getChars(0,2,b2_,0); s4_.getChars(3,s4_.length(),b2_,2); C.原_补(b2_); String s4=new String(b2_); String s1=j1; char a1=s1.toCharArray(); C.原_补(a1); String s3=j2; char a2=s3.toCharArray(); C.原_补(a2); B.减(a1,a2,a1); /对阶
27、C.原_补(a1); int p=C.二_十(new String(a1,2,3); char b1=new charp+s2.length(); for(int i=0;ip+s2.length();i+) b1i=0; char b2=new charp+s4.length(); for(int i=0;i=1;i-) b1i=b1i-1; C.加一(a1); else if(s.startsWith(00) /左规 int t=s.indexOf(1)-2 ; for(int i=0;ib1.length-t;i+) b1i=b1i+t; /左移 for(int i=b1.length-
28、t;ib1.length;i+) b1i=0; String t_=Long.toBinaryString(t); char a1_=new char5; for(int i=0;i5;i+) a1_i=0; t_.getChars(0,t_.length(),a1_,a1.length-t_.length(); B.减(a1, a1_, a1); else if(s.startsWith(11) int t=s.indexOf(0)-2 ; for(int i=0;ib1.length-t;i+) b1i=b1i+t; for(int i=b1.length-t;ib1.length;i+)
29、 b1i=0; String t_=Long.toBinaryString(t); char a1_=new char5; for(int i=0;i=1;i-) ci=ci-1; C.加一(a1); if(a10=0&a11=1|a10=1&a11=0) return 结果溢出结果溢出; else C.原_补(a1); if(a10=0) a10= ; a11=(char)(+); else a10= ; a10=(char)(-); String code1=new String(a1); / result1=code1; C.原_补(b1); if(b10=0) b11=0; b10=(
30、char)(+); else b11=0; b10=(char)(-); StringBuffer code2_=new StringBuffer(new String(b1); code2_.insert(2,.); String code2=new String(code2_); / result=code2; return code1+code2; public String FuDianShuJian(String j1 ,String j2,String t1,String t2) String result=null; String s2_=t1; char b1_=new cha
31、rs2_.length()-1; s2_.getChars(0,2,b1_,0); s2_.getChars(3,s2_.length(),b1_,2); C.原_补(b1_); String s2=new String(b1_); String s4_=t2; char b2_=new chars4_.length()-1; s4_.getChars(0,2,b2_,0); s4_.getChars(3,s4_.length(),b2_,2); C.原_补(b2_); String s4=new String(b2_); String s1=j1; char a1=s1.toCharArray(); C.原_补(a1); String s3=j2; char a2=s3.toCharArray(); C.原_补(a2); B.减(a1,a2,a1); /对阶 C.原_补(a1); int p=C.二_十(new String(a1,2,3); char b1=new charp+s2.length(); for(int i=0;ip+s2.length();i+) b1i=
限制150内