Averages/Mean time of day: Difference between revisions

Content added Content deleted
Line 285:
17> mean_time_of_day:task().
The mean time of ["23:00:17","23:40:20","00:12:45","00:17:19"] is: "23:47:43"
</pre>
 
 
 
=={{header|Euphoria}}==
{{works with|OpenEuphoria}}
<lang Euphoria>
include std/console.e
include std/math.e
include std/mathcons.e
include std/sequence.e
include std/get.e
 
function T2D(sequence TimeSeq)
return (360 * TimeSeq[1] / 24 + 360 * TimeSeq[2] / (24 * 60) +
360 * TimeSeq[3] / (24 * 3600))
end function
 
function D2T(atom angle)
sequence TimeSeq = {0,0,0}
atom seconds = 24 * 60 * 60 * angle / 360
TimeSeq[3] = mod(seconds,60)
TimeSeq[2] = (mod(seconds,3600) - TimeSeq[3]) / 60
TimeSeq[1] = seconds / 3600
return TimeSeq
end function
 
function MeanAngle(sequence angles)
atom x = 0, y = 0
integer l = length(angles)
for i = 1 to length(angles) do
x += cos(angles[i] * PI / 180)
y += sin(angles[i] * PI / 180)
end for
return atan2(y / l, x / l) * 180 / PI
end function
 
sequence TimeEntry, TimeList = {}, TimeSeq
 
puts(1,"Enter times. Enter with no input to end\n")
while 1 do
TimeEntry = prompt_string("")
if equal(TimeEntry,"") then -- no more entries
for i = 1 to length(TimeList) do
TimeList[i] = split(TimeList[i],":") -- split the times into sequences
for j = 1 to 3 do
TimeList[i][j] = defaulted_value(TimeList[i][j],0) -- convert to numerical values
end for
end for
exit
end if
TimeList = append(TimeList,TimeEntry)
end while
 
sequence AngleList = repeat({},length(TimeList))
 
for i = 1 to length(AngleList) do
AngleList[i] = T2D(TimeList[i])
end for
 
sequence MeanTime = D2T(360+MeanAngle(AngleList))
 
printf(1,"\nMean Time: %d:%d:%d\n",MeanTime)
 
if getc(0) then end if
</lang>
{{out}}
<pre>
Enter Times. Enter with no input to end.
23:00:17
23:40:20
00:12:45
00:17:19
 
Mean Time: 23:47:43
</pre>