分页: 1 / 3
请敎:如何写程序来实现这样的功能(已经解决)
发表于 : 2012-01-30 11:08
由 autocup
已经解决,感谢josephyoung
此公式是计算重复性误差的
已知:
(1) s的值是在0.00%~2.00%范围内;
(2) C是一个数组,共6个,C的值是在36~44范围内;
想达到的目标:
编写一段程序,将符合(1)(2)要求的所有C数组输出并以文本方式存到home目录下面。
要求:
数组是可以任意组合的,只要s值是在0.00%~2.00%即可。
但是数组不可重复,下面的例子就不允许出现。
代码: 全选
41 41 41 41 42 41
与
41 41 41 42 41 41
正确格式如下:
代码: 全选
.
.
.
41 41 41 41 41 41 0.00%
41 41 41 41 41 42 0.99%
41 41 41 41 42 42 1.25%
.
.
.
44 44 44 43 42 44 1.92%
.
.
.
*^_^*看了《提问的智慧》重新改了改,感谢josephyoung 的建议
*^_^*谁有空就帮帮忙,写一段程序呗,语言无所谓,
最好能方便一些(.sh执行文件最好),本人非计算机专业,对计算机语言了解甚少。
^_^在此谢谢各位了
Re: 请敎:这样功能怎么样实现
发表于 : 2012-01-30 11:11
由 枫叶饭团
这个公式只能让我想起一个软件:matlab
Re: 请敎:这样功能怎么样实现
发表于 : 2012-01-30 11:21
由 cuihao
shell么
python或C倒是好写。
Re: 请敎:这样功能怎么样实现
发表于 : 2012-01-30 11:22
由 月下叹逍遥
fortran也可以。。。
Re: 请敎:这样功能怎么样实现
发表于 : 2012-01-30 11:24
由 xiooli
awk 吧,可以实现
Re: 请敎:这样功能怎么样实现
发表于 : 2012-01-30 11:25
由 ljj_jjl2008
楼上,好久不见。
过年好。
Re: 请敎:这样功能怎么样实现
发表于 : 2012-01-30 11:37
由 xiooli
ljj_jjl2008 写了:楼上,好久不见。
过年好。
亮晶晶同学新年好啊,其实我一直都是半死不活的在论坛上诶,呵呵
Re: 请敎:这样功能怎么样实现
发表于 : 2012-01-30 11:40
由 delectate
不涉及算法,很简单c就可以实现,何必舍近求远用shell。
Re: 请敎:这样功能怎么样实现
发表于 : 2012-01-30 11:59
由 cjxgm
这个应该很简单吧
弄个 wxMaxima 不久都解决了么
Re: 请敎:这样功能怎么样实现
发表于 : 2012-01-30 13:04
由 josephyoung
将C数据每组一行以空格分隔作为原始数据调用
代码: 全选
#!/usr/bin/awk -f
BEGIN{
T=6;
C_min=36;
C_max=44;
outfile=ENVIRON["HOME"]"/result.txt";
}
NF==T{
C_sum=0;
C_ave=0;
C_tmp=0;
for(i=1;i<=T;i++){
if($i < C_min || $i > C_max)next;
C_sum+=$i;
}
C_ave=C_sum/T;
for(i=1;i<=T;i++)
C_tmp+=($i-C_ave)**2;
s=sqrt(C_tmp/(T-1))/C_ave*100;
if(s<=2){
printf("%s %.2f%%\n",$0,s) >> outfile;
}
}
Re: 请敎:这样功能怎么样实现
发表于 : 2012-01-30 13:32
由 cjxgm
好吧,我也动手。
C语言版
[c]/** s.c
* compile: gcc -o s s.c -lm
* usage: ./s > ~/output
* then, type the 6 datas in
*
* by eXerigumo Clanjor
*/
#include <stdio.h>
#include <math.h>
static float c[6];
int main()
{
int i;
for (i=0; i<6; i++)
scanf("%g", &c);
float ave = (c[0] + c[1] + c[2] + c[3] + c[4] + c[5]) / 6.0;
float sum = 0;
for (i=0; i<6; i++)
sum += (c-ave) * (c-ave);
sum = sqrt(sum / 5.0) / ave * 100.0;
printf("%g %g %g %g %g %g %2.2f%%\n", c[0], c[1], c[2], c[3], c[4], c[5], sum);
return 0;
}
[/c]
Re: 请敎:这样功能怎么样实现
发表于 : 2012-01-30 13:53
由 月下叹逍遥
[fortran]
open(unit=10,file="data.txt")
real c[6],s,avg,sum
sum=0
read(*,*) c
do i=1,6
sum=sum+c
enddo
avg=sum/6
do i=1,6
sum=(c-avg)**2
enddo
s=1/avg*sqrt(sum/5)
print(10,*) (c,i,1,6), s
[/fortran]
Re: 请敎:这样功能怎么样实现
发表于 : 2012-01-30 13:55
由 cjxgm
使用 wxMaxima
代码: 全选
C: [41, 41, 41, 41, 41, 41];
ave: lsum(j, j, C)/6;
sqrt(lsum((i-ave)^2, i, C)/5)/ave*100;
就这么简单

Re: 请敎:这样功能怎么样实现
发表于 : 2012-01-30 13:59
由 ljj_jjl2008
学习了!
Re: 请敎:这样功能怎么样实现
发表于 : 2012-01-30 17:07
由 autocup
cjxgm 写了:这个应该很简单吧
弄个 wxMaxima 不久都解决了么

全英文的软件好吃力哦,可以把方档发给我吗