hengjingdianzi 发表于 2013-3-12 15:08:14

不规则数组怎么求最大值

各位大神好,小弟在做一个小玩具。遇到一个问题。现在采集了20个数值,需要在这20个数值中比较最大值,然后输出。
单个单个数值比较的话,太麻烦了。请问有什么比较简洁的方法吗?

n_mos 发表于 2013-3-12 15:15:42

采集的同时按大小顺序排列

hengjingdianzi 发表于 2013-3-12 15:23:23

n_mos 发表于 2013-3-12 15:15 static/image/common/back.gif
采集的同时按大小顺序排列

这20个数值是随机抽取的啊,而且每个数值采集的点都是固定不能动的。

kanprin 发表于 2013-3-12 15:29:11

这20个数值怎么抽取?抽取的时候不就可以顺便比较一下大小?

Tliang 发表于 2013-3-12 15:40:51

定义变量 旧数据 = 0,新数据 = 0;
循环(20次)
{
   新数据=采集数据();
   判断(旧数据<新数据)旧数据 = 新数据;
}

hengjingdianzi 发表于 2013-3-12 16:53:03

kanprin 发表于 2013-3-12 15:29 static/image/common/back.gif
这20个数值怎么抽取?抽取的时候不就可以顺便比较一下大小?

利用步进电机采的没转18度采集一个数据。采集一圈后比较20个数据那个最大。并转到最大值的地方。做太阳追踪器用到的

Tliang 发表于 2013-3-12 17:10:25

本帖最后由 Tliang 于 2013-3-12 17:24 编辑

hengjingdianzi 发表于 2013-3-12 16:53 static/image/common/back.gif
利用步进电机采的没转18度采集一个数据。采集一圈后比较20个数据那个最大。并转到最大值的地方。做太阳 ...

写的这么清楚了还不会?
如果其他数据也要保留就保存标号就行了。

定义变量 最大值地址 = 0;
循环(20次)
{
      电机转18度();
      数据缓存【计次变量】 = 数据采集();
      判断(数据缓存【计次变量】>数据缓存【最大值地址】 )最大值地址 = 计次变量;
}

编辑:看错了,18度不是18圈。。。
为什么一定得等到转完后才比较?

albert_w 发表于 2013-3-12 19:23:35

嗯,保存的时候把索引也保存下,最后转到索引位置即可

hengjingdianzi 发表于 2013-3-12 21:26:31

Tliang 发表于 2013-3-12 17:10 static/image/common/back.gif
写的这么清楚了还不会?
如果其他数据也要保留就保存标号就行了。



我做的一个太阳能追踪器的。我想让他开机时自检,转一圈寻找最大值,这时正好对着太阳。呵呵

Tliang 发表于 2013-3-13 09:24:52

hengjingdianzi 发表于 2013-3-12 21:26 static/image/common/back.gif
我做的一个太阳能追踪器的。我想让他开机时自检,转一圈寻找最大值,这时正好对着太阳。呵呵 ...

那就转一下比较一下,然后保存计次变量。

void sysInit(void)
{
       uint8 count = 0, Save = 0, Value = 0, NewValue = 0;
       for(count = 0;count < 20;count++)            //20次为一圈
       {
               MotorMov();                                       //电机转18度
               NewValue = Get_data();                      //获取新数据
               if(NewValue > Value)                        //比较是否比前面的值大
               {
                     Value = NewValue;                        //如果比前面的值大,则保留此值。
                     Save= count;                              //保留第几次的值大
               }
       }
       for(count = 0;count < Save;count++)MotorMov();   //定位到最大值这个地方
}
页: [1]
查看完整版本: 不规则数组怎么求最大值