2009-12-14 3 views
2

마일과 MPH로 표시된 속도가 해당 속도로 그 거리를 이동하는 데 걸리는 시간으로 변환되었습니다. 이제이 10 진수를시, 분, 초로 변환해야합니다. 어떻게해야합니까? 내 추측은 바로 지금이다 :C++로 소수점 시간을시, 분, 초로 변환합니다.

double time = distance/speed; 
int hours = time; // double to integer conversion chops off decimal 
int minutes = (time - hours) * 60; 
int seconds = (((time - hours) * 60) - minutes) * 60; 

이 권리인가? 이 작업을 수행하는 더 좋은 방법이 있습니까? 감사!

답변

2

나는 머리 꼭대기에서 C++ 기능을 모르지만이 "psuedocode"는 작동해야합니다.

double time = distance/speed; 
int hours = time; 
double minutesRemainder = (time - hours) * 60; 
int minutes = minutesRemainder; 
double secondsRemainder = (minutesRemainder - minutes) * 60; 
int seconds = secondsRemainder; 

수정 불필요한 바닥.

부정적인 시간 동안 작동하지 않는다는 의견은 물리학에서 음의 거리를 가질 수 없습니다. 나는 그것이 사용자 입력 오류, 코더 오류가 아니라고 말하고 싶지만!

+0

아, 내 수학에서 사소한 실수가 수정되었습니다. –

+2

긍정적 인'시간'을 위해,'마루'는 완전하게 불필요하다. 부정적인'time'의 경우 올바르지 않습니다. – avakar

+0

잘못된 것입니다. min * 60을 곱할 필요가 없습니다! – Dani

1

이 방법이 더 좋은지는 잘 모르겠지만 ... 실제로 테스트하지는 못 했으니까요. 실제로는 초를 총 시간 (초)으로 변환합니다. 이를 다시시/분/초로 변환하십시오. 그것은 다음과 같이 보일 것입니다 :

 
int totalseconds = time * 3600.0; 

// divide by number of seconds in an hour, then round down by casting to an integer. 
int hours = totalseconds/3600; 

// divide by 60 to get minutes, then mod by 60 to get the number minutes that aren't full hours 
int minutes = (totalseconds/60) % 60; 

// use mod 60 to to get number of seconds that aren't full minutes 
int seconds = totalseconds % 60; 
+0

시간이 시간에, 그래서 전체 초 3600.0 과 시간이 바닥이 될 것 * 시간이 될 것입니다 (totalseconds가/3600) 당신은 그'* 60.0'을 제외하고, –

+0

사실 ... 방법 떨어져있어, 그는 그것을 가지고 맞아. – avakar

+0

나는 Aequitarum이 지적한대로 3600을 곱하는 코드를 수정했다. 내 C-foo가 이상하지 않다면 정수로의 변환이 자동으로 바닥을 차지할 것이기 때문에 시간을 변환해야합니다. 아마 그것은 명백한 floor() 호출을 통해 명백하게 더 명백 할 것이다. 이것이 장기간 유지 보수를위한 생산 코드 계획이라면 가능한 한 명확하게하는 것이 좋습니다. –

0

나는 그것이 옳았다 고 말하고 싶습니다. :-)

Aequitarium Custos와 같은 방법으로 제시된 것이 더 읽기 쉽거나 바람직하다면, 꼭 그 방법을 사용하십시오. 때로는 첫 번째 데이터에서 항상 시작하는 절대 수식을 사용하는 대신 데이터 요소를 한 번에 하나씩 계산하고 방금 계산 한 데이터 요소를 계산하는 것이 더 쉽습니다.

마지막으로 수학이 정확하고 (내가 생각하는 한) 코드를 작성하는 방법은 사용자에게 달려 있습니다.

0

a. 속도가 0이 아닌지 확인하십시오.

b. int IMHO에 double을 넣는 것은 나쁜 프로그래밍입니다. 사용 플로어 (시간이 양수라고 가정하면 ...)

c. 속도와 거리가 int 인 경우 시간이 잘못 될 수 있습니다 ...

d. @Aequitarum Custos가 수정 직후에 얻었습니다 ...

+1

'floor'를 사용하더라도 여전히 int에 double을 넣을 것입니다. – avakar

관련 문제