专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
51单片机
又碰到个算法的问题,想请教各位大大
2020-01-25 15:19
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
11120
16
16
本帖最后由 lswhome 于 2014-1-9 02:35 编辑
就是计算某一时刻是否在某一时间段内:比如从23:25开始到第二天的8:30结束,某一时刻(几点几分)是否在这个时间段内
算法必须包含在同一天之内(比如00:00~23:00)和跨天(比如22:00~第二天的21:00)想来想去想不到好的算法,用C51。。。
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
16条回答
lswhome
2020-01-27 05:37
本帖最后由 lswhome 于 2014-1-10 01:24 编辑
沧海清风:
先把你的时间转换成分或秒
按照你的2个例子:
Start_t = 00:00 Now_t = 23:26 End_t = 23:59
Start_t = 12:30 Now_t = 8:30 End_t = 08:00
转换成下面的:
Start_m = 0 Now_m = 1406 End_m = 1439
Start_m = 750 Now_m = 510 End_m = 480
return Now_m >= Start_m && Now_m <= End_m
不好意思,你的算法部分是能够算出来的,就是在同一天的情况下或者不在同一天,但当前时间和结束时间在同一天的时候,结果是正确的,但是有一种跨天的情况,就会计算错误了
比如: Start_t = 12:30 Now_t = 13:30 End_t = 08:00(正确的话应该是返回1)
Start_m = 750 Now_m = 810 End_m = 480
那么
return( 810>=750 &&
810<=480
)等效return(1 && 0)因此返回0
呵呵,所以,我给改成这样了,理论上应该没问题了
UINT16 N,S,E;
N=Now_h*60+Now_m;//当前时间 N=12:20=740
S=Start_h*60+Start_m;//起始时间 S=12:30=750
E=End_h*60+End_m;//结束时间 E=8:00=480
if(E>=S)//如果在同一天
return(N>=S && N<=E);//同一天的情况
else
return(!( N>=E && N<=S));//跨天的情况
非常感谢您的思路,很牛X的算法!!!
加载中...
查看其它16个回答
一周热门
更多
>
相关问题
【东软载波ESF0654 PDS开发板活动】开箱
1 个回答
东软载波ESF0654 PDS开发板外部中断
1 个回答
东软载波ESF0654 PDS开发板高级控制定时器AD16C4T
1 个回答
用串口调试助手为什么只能在hex模式接收发送而在文本模式不行
9 个回答
触摸芯片SC02B/SC04B在地砖灯的设计方案
1 个回答
相关文章
51单片机与蓝牙模块连接
0个评论
51单片机的硬件结构
0个评论
基于51单片机的无线遥控器制作
0个评论
51单片机 AD转换
0个评论
51单片机数码管递增显示
0个评论
如何实现对单片机寄存器的访问
0个评论
基于51单片机的指纹密码锁
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
51单片机
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
沧海清风:
先把你的时间转换成分或秒
按照你的2个例子:
Start_t = 00:00 Now_t = 23:26 End_t = 23:59
Start_t = 12:30 Now_t = 8:30 End_t = 08:00
转换成下面的:
Start_m = 0 Now_m = 1406 End_m = 1439
Start_m = 750 Now_m = 510 End_m = 480
return Now_m >= Start_m && Now_m <= End_m
不好意思,你的算法部分是能够算出来的,就是在同一天的情况下或者不在同一天,但当前时间和结束时间在同一天的时候,结果是正确的,但是有一种跨天的情况,就会计算错误了
比如: Start_t = 12:30 Now_t = 13:30 End_t = 08:00(正确的话应该是返回1)
Start_m = 750 Now_m = 810 End_m = 480
那么
return( 810>=750 && 810<=480)等效return(1 && 0)因此返回0
呵呵,所以,我给改成这样了,理论上应该没问题了
UINT16 N,S,E;
N=Now_h*60+Now_m;//当前时间 N=12:20=740
S=Start_h*60+Start_m;//起始时间 S=12:30=750
E=End_h*60+End_m;//结束时间 E=8:00=480
if(E>=S)//如果在同一天
return(N>=S && N<=E);//同一天的情况
else
return(!( N>=E && N<=S));//跨天的情况
非常感谢您的思路,很牛X的算法!!!
一周热门 更多>