1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
| using Base, Printf
"""
Julia. Exercice, ma version de 17-2 à 17-6 dans https://julia.developpez.com/tutoriels/think-julia-fr/?page=dispatch-multiple
"""
struct MyTime
heures::Int64
minutes::Int64
secondes::Int64
function MyTime(h::Int64=0, m::Int64=0, s::Int64=0)
# correction des secondes
m += div(s, 60) # le résultat de la division entière
s = rem(s, 60) # le reste de la divion entière
# correction des minutes
h += div(m, 60)
m = rem(m, 60)
# U+02264 ≤ \le, \leq Less-Than Or Equal To / Less Than Or Equal To
@assert(0 ≤ h, "heures n'est pas supérieur ou égal à 0")
@assert(0 ≤ m < 60, "minutes n'est pas entre 0 et 59.")
@assert(0 ≤ s < 60, "secondes n'est pas entre 0 et 59.")
# construction de l'objet
# le return final existe par défaut
new(h, m, s)
end
end
Base.show(io::IO, mt::MyTime) = @printf(io, "%02d:%02d:%02d", mt.heures, mt.minutes, mt.secondes)
Base.:+(mt1::MyTime, mt2::MyTime) = MyTime(mt1.heures + mt2.heures, mt1.minutes + mt2.minutes, mt1.secondes + mt2.secondes)
function my_time_to_int(mt::MyTime)::Int64
mt.heures * 60 * 60 + mt.minutes * 60 + mt.secondes
end
function int_to_my_time(x::Int64)::MyTime
MyTime(0, 0, x)
end
function increment_my_time(mt::MyTime, x::Int64)::MyTime
MyTime(mt.heures, mt.minutes, mt.secondes + x)
end
function main()
println()
mt1 = MyTime(18, 97, 8002)
mt2 = MyTime(1, 5, 20)
mt1 + mt2 |> println
x = my_time_to_int(mt1 + mt2)
int_to_my_time(x) |> println
#=
22:55:42
22:55:42
=#
for k in 1:5:50
increment_my_time(mt2, k) |> println
end
#=
01:05:21
01:05:26
01:05:31
01:05:36
01:05:41
01:05:46
01:05:51
01:05:56
01:06:01
01:06:06
=#
# remplace le return par défaut
return
end
@time main()
@time main() # 0.001301 seconds (136 allocations: 6.547 KiB) |
Partager