【大物实验数据处理】分光计的调节与应用,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一年多的我欣然决定写个程序来帮我完成计算任务,谁曾想到,看似简单的计算,我写程序居然花了一个多小时,才写出能跑的屎山式代码(不过好歹能跑)。
  • 再一次感觉,自己编码能力的提升空间还很大。😅

相关文章
|
21天前
|
存储 并行计算 安全
C++多线程应用
【10月更文挑战第29天】C++ 中的多线程应用广泛,常见场景包括并行计算、网络编程中的并发服务器和图形用户界面(GUI)应用。通过多线程可以显著提升计算速度和响应能力。示例代码展示了如何使用 `pthread` 库创建和管理线程。注意事项包括数据同步与互斥、线程间通信和线程安全的类设计,以确保程序的正确性和稳定性。
|
1月前
|
存储 编译器 C++
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
53 2
|
2月前
|
编译器 C++
【C++核心】函数的应用和提高详解
这篇文章详细讲解了C++函数的定义、调用、值传递、常见样式、声明、分文件编写以及函数提高的内容,包括函数默认参数、占位参数、重载等高级用法。
22 3
|
3月前
|
存储 算法 C++
C++ STL应用宝典:高效处理数据的艺术与实战技巧大揭秘!
【8月更文挑战第22天】C++ STL(标准模板库)是一组高效的数据结构与算法集合,极大提升编程效率与代码可读性。它包括容器、迭代器、算法等组件。例如,统计文本中单词频率可用`std::map`和`std::ifstream`实现;对数据排序及找极值则可通过`std::vector`结合`std::sort`、`std::min/max_element`完成;而快速查找字符串则适合使用`std::set`配合其内置的`find`方法。这些示例展示了STL的强大功能,有助于编写简洁高效的代码。
48 2
|
3月前
|
存储 搜索推荐 Serverless
【C++航海王:追寻罗杰的编程之路】哈希的应用——位图 | 布隆过滤器
【C++航海王:追寻罗杰的编程之路】哈希的应用——位图 | 布隆过滤器
36 1
|
3月前
|
存储 编译器 C++
C++多态实现的原理:深入探索与实战应用
【8月更文挑战第21天】在C++的浩瀚宇宙中,多态性(Polymorphism)无疑是一颗璀璨的星辰,它赋予了程序高度的灵活性和可扩展性。多态允许我们通过基类指针或引用来调用派生类的成员函数,而具体调用哪个函数则取决于指针或引用所指向的对象的实际类型。本文将深入探讨C++多态实现的原理,并结合工作学习中的实际案例,分享其技术干货。
74 0
|
3月前
|
JSON Android开发 C++
Android c++ core guideline checker 应用
Android c++ core guideline checker 应用
|
5月前
|
关系型数据库 MySQL 测试技术
技术分享:深入C++时间操作函数的应用与实践
技术分享:深入C++时间操作函数的应用与实践
47 1
|
5月前
|
存储 JavaScript 前端开发
程序与技术分享:C++程序设计实验考试准备资料(2019级秋学期)
程序与技术分享:C++程序设计实验考试准备资料(2019级秋学期)