面对对象程序设计--前三次总结

PTA大作业2--7-2

    题目集7-2的题目是串口字符解析,RS232是串口常用的通信协议,在异步通信模式下,串口可以一次发送5~8位数据,收发双方之间没有数据发送时线路维持高电平,相当于接收方持续收到数据“1”(称为空闲位),发送方有数据发送时,会在有效数据(5~8位,具体位数由通信双方提前设置)前加上1位起始位“0”,在有效数据之后加上1位可选的奇偶校验位和1位结束位“1”。请编写程序,模拟串口接收处理程序,注:假定有效数据是8位,奇偶校验位采用奇校验。

    题目要求:过滤掉空闲、起始、结束以及奇偶校验位之后的数据,数据之前加上序号和英文冒号。

如有多个数据,每个数据单独一行显示。
若数据不足11位或者输入数据全1没有起始位,则输出"null data",
若某个数据的结束符不为1,则输出“validate error”。
若某个数据奇偶校验错误,则输出“parity check error”。
若数据结束符和奇偶校验均不合格,输出“validate error”。
如:11011或11111111111111111。
例如:
1:11101011
2:01001101
3:validate error

整体思路介绍

  1. 该题目要求先判断输入的字符串长度是否小于11,如诺是,则输出"null data"
  2. 再则判断结束符是不是为1,如果不是1的话·,则输出“validate error”,如诺为1,则进行下一步操作。
  3. 再跟据二进制来判断奇偶效验是不是正确,错误的话,则输出“parity check error”。
  4. 如果都不合格,那就输出“validate error”。

度量分析

圈复杂度分析使用SourceMonitor软件

 

核心代码分析

判断长度是否大于11

 

 

 

 

前标计算方法: 

 

判断结束符和二进制算出来的奇偶效验是否正确:

 

 

 

 

 

 

 判断之后进行输出:

 

每十个进行判断:

 

 

 优点

  1. 判断条件清晰,可修改性高。
  2. 把判断输出放一起,看起来比较易懂。

缺点

  1. if-else语句用的太多了,导致太复杂。

 

 

 PTA大作业3--7-1

题目集7-1的题目是:点线形系列1-计算两点之间的距离 。

题目要求:4个double类型的实数,两个点的x,y坐标,依次是x1、y1、x2、y2,两个点的坐标之间以空格分隔,每个点的x,y坐标以英文“,”分隔。例如:0,0 1,1或0.1,-0.3 +3.5,15.6。

若输入格式非法,输出"Wrong Format"。
若输入格式合法但坐标点的数量超过两个,输出“wrong number of points”。

 

整体思路介绍

1.该题目要求输入四个数,也就是两个点的坐标;

2.判断输入是否合法,不合法则输出"Wrong Format"。

3.诺合法,判断输入的坐标点的个数,如果超过两个,输出“wrong number of points”。

4.通过两坐标点之间的计算公式,计算输入的两个坐标点之间的距离公式。

 

 

 

度量分析

圈复杂度分析使用SourceMonitor软件

 

核心代码:

空格分离

String[] s2=s1.split(" ");

判断合法:

for(int i=0;i<s2.length;i++)

        {

        String[] s3=s2[i].split(",");//逗号分离

            if(s3.length>2)

                flag=1;

            for(int j=0;j<s3.length;j++)

            {

                index=0;

                for(int k=0;k<s3[j].length();k++)

                {

                    if(s3[j].charAt(k)=='.'){

                    index++;

                        if(s3[j].length()==k+1)

                            flag=1;

                }

            }

            if(index>=2){

                flag=1;

            }

        if(s3[j].charAt(0)=='-'||s3[j].charAt(0)=='+')

        {

            if(s3[j].charAt(1)<'0'||s3[j].charAt(1)>'9')

                flag=1;

            if(s3[j].charAt(1)=='0'&&s3[j].charAt(2)!='.')

                flag=1;

        }

                if(s3[j].charAt(0)=='0'&&s3[j].charAt(1)!='.')

                flag=1;

            }

 

        }

字符型转换为浮点型

double[] a=new double[4];

        for(int i=0;i<s2.length;i++){

        String[] s3=s2[i].split(",");

            if(i==0){

        for(int j=0;j<4;j++){

            a[j]=Double.parseDouble(s3[i]);

        }

            }

                if(i==1){

            for(int j=2;j<4;j++){

            a[j]=Double.parseDouble(s3[i]);

                }

        }

 

            }

判断合法和长度后输出

if(flag==1){

            System.out.printf("Wrong Format");

            }

        else if(s2[].length>2){

            System.out.printf("wrong number of points");

 

        }

合法并且长度对之后,赋值计算输出:

    else{

                    double x1=a[0];

                    double y1=a[1];

                    double x2=a[2];

                    double y2=a[3];

            double distance=Math.sqrt(((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)));

        System.out.println(distance);

 

                }

PTA大作业2--7-2

    题目集7-2的题目是点线形系列2-线的计算,

题目要求:用户输入一组选项和数据,进行与直线有关的计算。选项包括:

1:输入两点坐标,计算斜率,若线条垂直于X轴,输出"Slope does not exist"。
2:输入三个点坐标,输出第一个点与另外两点连线的垂直距离。
3:输入三个点坐标,判断三个点是否在一条线上,输出true或者false。
4:输入四个点坐标,判断前两个点所构成的直线与后两点构成的直线是否平行,输出true或者false.
5:输入四个点坐标,计算输出前两个点所构成的直线与后两点构成的直线的交点坐标,x、y坐标之间以英文分隔",",并输出交叉点是否在两条线段之内(不含四个端点)的判断结果(true/false),判断结果与坐标之间以一个英文空格分隔。若两条线平行,没有交叉点,则输出"is parallel lines,have no intersection point"。

 

 

 整体思路介绍

  1.  五种情况,每种情况做一次判断 

 

度量分析

圈复杂度分析使用SourceMonitor软件

 

 核心代码

坐标分离

 

 

 第一种

 

 第二种:

 

 第三种:

 

 

 

 缺点:很多if-else语句;然后很多地方不易理解,毕竟代码不全

 

 

PTA大作业2--7-3

    题目集7-3的题目是点线形系列3-三角形的计算

题目需求:用户输入一组选项和数据,进行与三角形有关的计算。选项包括:
1:输入三个点坐标,判断是否是等腰三角形、等边三角形,判断结果输出true/false,两个结果之间以一个英文空格符分隔。
2:输入三个点坐标,输出周长、面积、重心坐标,三个参数之间以一个英文空格分隔,坐标之间以英文","分隔。
3:输入三个点坐标,输出是钝角、直角还是锐角三角形,依次输出三个判断结果(true/false),以一个英文空格分隔,
4:输入五个点坐标,输出前两个点所在的直线与三个点所构成的三角形相交的交点数量,如果交点有两个,则按面积大小依次输出三角形被直线分割成两部分的面积。若直线与三角形一条线重合,输出"The point is on the edge of the triangle"
5:输入四个点坐标,输出第一个是否在后三个点所构成的三角形的内部(输出in the triangle/outof triangle)。
必须使用射线法,原理:由第一个点往任一方向做一射线,射线与三角形的边的交点(不含点本身)数量如果为1,则在三角形内部。如果交点有两个或0个,则在三角形之外。若点在三角形的某条边上,输出"on the triangle"

 

 

整体思路介绍

 

  1.  五种情况,每种情况做一次判断 

 

 

 

度量分析

 

圈复杂度分析使用SourceMonitor软件

核心代码

坐标分离

 

 

判断

 

 

 

 

 

 

第三题没做出来

 

posted @ 2022-04-10 20:59  不乂氼  阅读(128)  评论(0)    收藏  举报