【大物实验数据处理】分光计的调节与应用,C++

导读:本篇文章讲解 【大物实验数据处理】分光计的调节与应用,C++,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

效果演示

在这里插入图片描述

实验部分简介

  • 实验原理
    在这里插入图片描述

  • 数据处理要求
    由测得的

    φ

    1

    ,

    φ

    2

    ,

    φ

    1

    ,

    φ

    2

    \varphi_1,\varphi_2,\varphi_1′,\varphi_2′

    φ1,φ2,φ1,φ2 计算相应的

    φ

    α

    \varphi、 \alpha

    φα 的值,并分别求出

    φ

    α

    \varphi、 \alpha

    φα 的平均数。

  • 计算公式

    φ

    =

    1

    2

    (

    φ

    1

    φ

    1

    +

    φ

    2

    φ

    2

    )

    \varphi=\frac 1 2(|\varphi_1′-\varphi_1|+|\varphi_2′-\varphi_2|)

    φ=21(φ1φ1+φ2φ2)

    α

    =

    18

    0

    φ

    \alpha=180^。-\varphi

    α=180φ

  • 问题

    • 公式中绝对值的值不能大于180度,否则应用360度减去该角度后再进行计算。
    • 数据要求精确到,而的换算率是60(这给我编写程序造成了不小的麻烦)。
    • 本来十分简单的加减乘除,我却需要创造一个新的数据类型,然后还要给它定义四则运算。

代码实现(C++)

#include<iostream>
using namespace std;

class jd{
public:
	int du;//度
	int fen;//分
	jd():du(0), fen(0){}
	
	jd operator+(jd x){
		x.du = du + x.du;
		x.fen = fen + x.fen;
		if(x.fen >= 60){
			x.fen = x.fen - 60;
			x.du++;
		}
		return x;
	}
	//当前角度除以x
	void chu(int x){
		fen = fen + du % x * 60;
		fen = fen / x;
		du = du / x;
	}
	//角度相减并取绝对值,保证不大于180度
	jd jian(jd x, jd y){
		jd z;
		z.du = x.du - y.du;
		z.fen = x.fen - y.fen;
		if(z.du < 0){
			z.du = -z.du;
			z.fen = -z.fen;
		}
		if(z.fen < 0){
			z.du = z.du - 1;
			z.fen = z.fen + 60;
		}
		//不能大于180度 
		if(z.du >= 180){
			z.du = 359 - z.du;
			if(z.fen == 0){
				z.du = z.du + 1;
			}
			else {
				z.fen = 60 - z.fen;
			}
		}
		return z;
	}
};

int main(){
	int m = 0;//数据的组数
	cin >> m;
	jd t_sum;
	jd a_sum;
	
	for(int i = 0; i < m; i++){
		printf("----第 %d 组----\n", i+1);
		jd x1, x2;
		jd y1, y2;
		jd z1, z2;
		jd a;
		cout << "第一边:\n";
		cin >> x1.du >> x1.fen;
		cin >> x2.du >> x2.fen;
		cout << "第二边:\n";
		cin >> y1.du >> y1.fen;
		cin >> y2.du >> y2.fen;
	

		z1 = z1.jian(x1, y1);
		z2 = z2.jian(x2, y2);
		z1 = z1 + z2;
		z1.chu(2);
		t_sum = t_sum + z1;
		cout << "光学面法线夹角值:" << z1.du << "度 " << z1.fen << "分" << endl;
	
		a.du = 180;
		a = a.jian(a, z1);
		a_sum = a_sum + a;
	
		cout << "顶角值:" << a.du << "度 " << a.fen << "分" << endl << endl;
	} 
	
	t_sum.chu(m);
	a_sum.chu(m);
	cout << "法线夹角平均值:" << t_sum.du << "度 " << t_sum.fen << "分" << endl;
	cout << "顶角平均值:" << a_sum.du << "度 " << a_sum.fen << "分" << endl;
	
	return 0;
}
/*测试数据
4
115 4
295 6
235 11
55 5
104 39
284 41
224 37
44 32
95 49
275 55
215 59
35 53
84 20
264 23
204 25
24 12
*/

小结

  • 实验要求测四组数据,而且是精确到分,我感觉算起来挺麻烦的。于是写bug一年多的我欣然决定写个程序来帮我完成计算任务,谁曾想到,看似简单的计算,我写程序居然花了一个多小时,才写出能跑的屎山式代码(不过好歹能跑)。
  • 再一次感觉,自己编码能力的提升空间还很大。😅

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/114781.html

(0)
Java光头强的头像Java光头强

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!