- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我必须编写一个能够读取 .txt 文件的程序。在此 .txt 文件中是传感器上激光束的测量结果,传感器前面有 Blade 阻挡光束。慢慢地, Blade 下降并测量光强度。我必须编写一个程序,用 txt 文件中的测量值计算激光束的宽度(给出了公式,(((0,9*max)-(0,1*max))/1,28 )。
但是如果我在没有函数的情况下执行此操作,它就可以正常工作。但这个程序有一些要求。我必须使用函数。你可能会认为我的程序有点狡猾,但这主要是因为我必须这样做。如果有些事情令人困惑,请向我询问更多解释,我会立即给您。
这是我当前的程序:
#include <stdio.h>
#define ROW 45
#define COLUMN 2
FILE *measurements;
float x,width, intensity, a[ROW][COLUMN]={0}, total_2 = 0, maximum = 0;
float max = 0, min = 0, difference_1 = 0, difference_2 = 0, w = 0;
float background=0, amount=0, total_1=0;
int menu=0, check_1 = 0, check_2 = 0, min_2 = 0, max_2 = 0;
//Functions
float background_radiation(float a[ROW][COLUMN]);
float average_maximum(float a[ROW][COLUMN]);
float beam_width(float a[ROW][COLUMN], float maximum);
//Integers for loops
int i = 0, r = 0, k = 0, d = 0;
main()
{
measurements = fopen("PATH\\TO\\TEXT\\FILE\\.txt", "r");
rewind(measurements);
//Menu
printf("Menu: \n\n");
printf("1. Calculate background_radiation: \n");
printf("2. Calculate average maximum signal: \n");
printf("3. Calculate beam width: \n");
printf("4. All measurements: \n");
printf("5. Quit \n\n");
printf("\nChoose:\n");
scanf("%d", &menu);
rewind(measurements);
//All data in array
while(!feof(measurements))
{
for(i=0; i<45; i++)
{
fscanf(measurements, "%f%f", &a[i][0], &a[i][1]);
}
}
//Menu loop
while (menu!=5)
{
switch(menu)
{
case 1: printf("\n------ background_radiation ------ \n");
//case check
check_1 = 1;
x= background_radiation(a);
for(i=0; i<45; i=i+1)
{
a[i][1]=a[i][1]-x;
}
break;
case 2: printf("\n------ Maximale signaal ------ \n");
//case check
check_2 = 1;
y = average_maximum(a);
break;
case 3: printf("\n------ beam_width ------ \n");
//check if the cases 1 and 2 are used
if(check_1 == 1 && check_2 == 1)
{
z = beam_width(a, y);
}
else
{
//If case 1 and 2 aren't used
printf("The backgroundradiation and maximum output aren't calculated\n");
printf("You have 2 options:\n");
printf("1. Use the first and last measurements to calculate the beamwidth.\n");
printf("2. Choose an other option of the menu.\n");
scanf("%d", &d);
//Print the beam width
if(d==1)
{
printf("\nBeamwidth:\t%f mm", ((a[0][44]-a[0][0])/1.28));
}
}
break;
case 4: printf("\n------------ Measurements ------------\n\n");
rewind(measurements);
while(!feof(measurements))
{
fscanf(measurements, "%f%f", &a[i][0], &a[i][1]);
printf("\t%2.2f mm\t\t%2.2f V\n", a[i][0], a[i][1]);
}
break;
}
rewind(measurements);
printf("\n\nChoose an option: ");
scanf("%d", &menu);
}
fclose(measurements);
return 0;
fflush(stdin);
}
float background_radiation(float a[ROW][COLUMN])
{
printf("\nHow many numbers would you like to take an average?\n");
scanf("%d", &amount);
for(i=0; i<amount; i++)
{
total_1 = total_1 + a[i][1];
}
//Calculate average
background = total_1 / amount;
printf("\nThe average background_radiation:\n%2.2f\n", background);
return(background);
}
float average_maximum(float a[ROW][COLUMN])
{
printf("\nHow many numbers would you like to take an average?\n");
scanf("%d", &amount);
for(i=44; i>(44-amount); i--)
{
total_2 = total_2 + a[i][1];
}
//Calculate average
maximum = total_2 / amount;
printf("\nAverage maxixum signal:\n%2.2f\n", maximum);
return(maximum);
}
float beam_width(float a[ROW][COLUMN], float y)
{
max = 0.9 * y;
min = 0.1 * y;
//Find a point in array
for(r=0; r<45; r++)
{
difference_1 = max - a[r][1];
if ((difference_1 < difference_2) && difference_1 > 0)
{
max_2 = r;
}
difference_2 = difference_1;
}
difference_2 = 100;
for(k=0; k<45; k++)
{
difference_1 = min - a[k][1];
if (difference_1 < difference_2 && difference_1>0)
{
min_2 = k;
}
difference_2 = difference_1;
}
//calculate width with the given formula
w = (a[max_2][0] - a[min_2][0]) / 1.28;
printf("\nBeamwidth:\t%2.2f", w);
return(w);
}
文本文件由两列和 45 行组成。第一列是 Blade 向下的高度。所以如果它是0。这意味着 Blade 完全挡住了光束。第二列是光强度。由于传感器周围的光(背景辐射),它始终具有一个值。这是文本文件:
0.00 0.25
0.10 0.20
0.20 0.18
0.30 0.21
0.40 0.23
0.50 0.30
0.60 0.30
0.70 0.40
0.80 0.50
0.90 0.80
1.00 1.30
1.10 1.80
1.20 2.30
1.30 3.80
1.40 4.50
1.50 6.30
1.60 8.04
1.70 10.55
1.80 13.10
1.90 16.20
2.00 19.80
2.10 22.56
2.20 25.10
2.30 29.90
2.40 31.20
2.50 33.44
2.60 36.80
2.70 41.05
2.80 40.83
2.90 43.40
3.00 44.44
3.10 44.90
3.20 45.40
3.30 46.00
3.40 46.30
3.50 46.50
3.60 46.60
3.70 46.50
3.80 46.35
3.90 46.40
4.00 46.60
4.10 46.30
4.20 46.00
4.30 45.90
4.40 46.00
您可能会认为第二列在开始时下降很奇怪,但这与测量的准确性有关。
非常感谢您!
什么不起作用?:
所有功能(background_radiation、average_maximum、beam_width)都不起作用。
情况 1 的输出(总是):
1.#J
案例 2 的输出(始终):
0.00
案例3的输出
如果使用情况 1 和 2:
0.00
其他
工作正常
最佳答案
当 y
和 z
未定义时,此代码不会编译。在这些变量前面添加 float
并更改运行路径,我发现以下错误:
首先,将数据加载到 a
对我来说失败了:
a[ROW][COLUMN] = {0}
产生了一个垃圾数组,所以我放弃了初始化以获得:
a[ROW][COLUMN]
允许数据加载工作。
下一个问题是您希望将 amount
视为 float 和整数。在background_radiation()中,我为循环创建了一个额外的参数并更改了scanf():
scanf("%f", &amount);
int max = (int)amount;
for(i=0; i<max; i++)
在这些更改之后,如果我输入“12.0”作为 amount
float ,我会得到以下输出:
------ background_radiation ------
How many numbers would you like to take an average?
12.0
The average background_radiation:
0.54
average_maximum() 可以类似地工作。 beam_width() 可能遇到数据加载问题。它似乎对我来说工作得很好。
关于c - 功能无法按照我希望的那样工作 (c),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19401304/
我正在构建一个 RCP 应用程序,其中每个季度都会更新功能/插件。因此,如果用户选择自动更新功能/插件,则会下载更新插件的新 jar,但旧插件仍在使用我不再使用的磁盘空间。 我厌倦了删除包含旧 jar
我如何从外部 Controller 功能中调用 Controller 内部的功能,例如电话间隙回调功能 这是 Controller 外部定义的功能 function onDeviceReady()
如果某个功能(例如 MediaSource)可用,我如何使用 Google Dart 检查。 new MediaSource() 抛出一个错误。如何以编程方式检查此类或功能是否存在?有任何想法吗?是否
我正在尝试运行 Azure Orchestrations,突然我开始从 statusQueryGetUri 收到错误: 协调器函数“UploadDocumentOrchestrator”失败:函数“U
我见过 iPhone 上的应用程序,如果在 3.0 上运行,将使用 3.0 功能/API,例如应用内电子邮件编辑器,如果在 2.x 上运行,则不使用这些功能,并退出应用程序以启动邮件相反。 这是怎么做
这是 DB 规范化理论中的一个概念: Third normal form is violated when a non-key field is a fact about another non-ke
如果我定义 #if SOMETHING #endif 而且我还没有在任何地方定义 SOMETHING。 #if 中的代码会编译吗? 最佳答案 当#if的参数表达式中使用的名称未定义为宏时(在所有其他宏
我刚刚澄清了 A* 路径查找应该如何在两条路径具有相等值的 [情况] 下运行,无论是在计算期间还是在结束时,如果有两条相等的短路径。 例如,我在我的起始节点,我可以扩展到两个可能的节点,但它们都具有相
Java有没有类似下面的东西 宏 一种遍历所有私有(private)字段的方法 类似于 smalltalk symbols 的东西——即用于快速比较静态字符串的东西? 请注意,我正在尝试为 black
这个程序应该将华氏度转换为摄氏度: #include int main() { float fahrenheit, celsius; int max, min, step;
当打开PC缓存功能后, 软件将采用先进先出的原则排队对示波器采集的每一帧数据, 进行帧缓存。 当发现屏幕中有感兴趣的波形掠过时, 鼠标点击软件的(暂停)按钮, 可以选择回看某一帧的波形
我有一个特殊的(虚拟)函数,我想在沙盒环境中使用它: disable.system.call eval(parse(text = 'model.frame("1 ~ 1")'), envir = e
使用新的 Service 实现,我是否必须为我的所有服务提供一个 Options 方法? 使用我的所有服务当前使用的旧 ServiceBase 方法,OPTIONS 返回 OK,但没有 Access-
我正在阅读 Fogus 的关于 Clojure 的喜悦的书,在并行编程章节中,我看到了一个函数定义,它肯定想说明一些重要的事情,但我不知道是什么。此外,我看不到这个函数有什么用 - 当我执行时,它什么
我有大量的 C 代码,大部分代码被注释掉和/或 #if 0。当我使用 % 键匹配 if-else 的左括号和右括号时,它也匹配注释掉的代码。 有没有办法或vim插件在匹配括号时不考虑注释掉或#if 0
我有这个功能: map(map(fn x =>[x])) [[],[1],[2,3,4]]; 产生: val it = [[],[[1]],[[2],[3],[4]]] 我不明白这个功能是如何工作的。
我使用 Visual Studio 代码创建了一个函数应用程序,然后发布了它。功能应用程序运行良好。我现在在功能门户中使用代码部署功能(KUDU)并跳过构建。下面是日志 9:55:46 AM
我有一个数据框df: userID Score Task_Alpha Task_Beta Task_Charlie Task_Delta 3108 -8.00 Easy Easy
我真的无法解决这个问题: 我有一个返回数据框的函数。但是,数据框仅打印在我的控制台中,尽管我希望将其存储在工作空间中。我怎样才能做到这一点? 样本数据: n <- 32640 t <- seq(3*p
有没有办法找出所有可能的激活器命令行选项? activator -help仅提供最低限度的可用选项/功能列表,但所有好的东西都隐藏起来,即使在 typesafe 网站在线文档中也不可用。 到目前为止,
我是一名优秀的程序员,十分优秀!