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

简介: 效果演示

效果演示

1d0f4c0b814f4bf79108ca6015c6b93c.png

实验部分简介

  • 实验原理

62b519cf3243425da79e5260c91b217e.jpg

数据处理要求屏幕截图 2023-12-28 161129.png

  • 问题
  • 公式中绝对值的值不能大于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一年多的我欣然决定写个程序来帮我完成计算任务,谁曾想到,看似简单的计算,我写程序居然花了一个多小时,才写出能跑的屎山式代码(不过好歹能跑)。
  • 再一次感觉,自己编码能力的提升空间还很大。😅

目录
打赏
0
0
0
0
4
分享
相关文章
基于 C++ 语言的迪杰斯特拉算法在局域网计算机管理中的应用剖析
在局域网计算机管理中,迪杰斯特拉算法用于优化网络路径、分配资源和定位故障节点,确保高效稳定的网络环境。该算法通过计算最短路径,提升数据传输速率与稳定性,实现负载均衡并快速排除故障。C++代码示例展示了其在网络模拟中的应用,为企业信息化建设提供有力支持。
46 15
从集思录可转债数据探秘:Python与C++实现的移动平均算法应用
本文探讨了如何利用移动平均算法分析集思录提供的可转债数据,帮助投资者把握价格趋势。通过Python和C++两种编程语言实现简单移动平均(SMA),展示了数据处理的具体方法。Python代码借助`pandas`库轻松计算5日SMA,而C++代码则通过高效的数据处理展示了SMA的计算过程。集思录平台提供了详尽且及时的可转债数据,助力投资者结合算法与社区讨论,做出更明智的投资决策。掌握这些工具和技术,有助于在复杂多变的金融市场中挖掘更多价值。
63 12
【C++面向对象——继承与派生】派生类的应用(头歌实践教学平台习题)【合集】
本实验旨在学习类的继承关系、不同继承方式下的访问控制及利用虚基类解决二义性问题。主要内容包括: 1. **类的继承关系基础概念**:介绍继承的定义及声明派生类的语法。 2. **不同继承方式下对基类成员的访问控制**:详细说明`public`、`private`和`protected`继承方式对基类成员的访问权限影响。 3. **利用虚基类解决二义性问题**:解释多继承中可能出现的二义性及其解决方案——虚基类。 实验任务要求从`people`类派生出`student`、`teacher`、`graduate`和`TA`类,添加特定属性并测试这些类的功能。最终通过创建教师和助教实例,验证代码
72 5
C++多线程应用
【10月更文挑战第29天】C++ 中的多线程应用广泛,常见场景包括并行计算、网络编程中的并发服务器和图形用户界面(GUI)应用。通过多线程可以显著提升计算速度和响应能力。示例代码展示了如何使用 `pthread` 库创建和管理线程。注意事项包括数据同步与互斥、线程间通信和线程安全的类设计,以确保程序的正确性和稳定性。
106 5
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
123 2
|
6月前
|
【C++核心】函数的应用和提高详解
这篇文章详细讲解了C++函数的定义、调用、值传递、常见样式、声明、分文件编写以及函数提高的内容,包括函数默认参数、占位参数、重载等高级用法。
61 3
C++ STL应用宝典:高效处理数据的艺术与实战技巧大揭秘!
【8月更文挑战第22天】C++ STL(标准模板库)是一组高效的数据结构与算法集合,极大提升编程效率与代码可读性。它包括容器、迭代器、算法等组件。例如,统计文本中单词频率可用`std::map`和`std::ifstream`实现;对数据排序及找极值则可通过`std::vector`结合`std::sort`、`std::min/max_element`完成;而快速查找字符串则适合使用`std::set`配合其内置的`find`方法。这些示例展示了STL的强大功能,有助于编写简洁高效的代码。
95 2
【C++航海王:追寻罗杰的编程之路】哈希的应用——位图 | 布隆过滤器
【C++航海王:追寻罗杰的编程之路】哈希的应用——位图 | 布隆过滤器
59 1
Android c++ core guideline checker 应用
Android c++ core guideline checker 应用
程序与技术分享:C++程序设计实验考试准备资料(2019级秋学期)
程序与技术分享:C++程序设计实验考试准备资料(2019级秋学期)