Scilab : de la théorie à la pratique
I. Les fondamentaux
4. Les entrées/sorties
Pour certaines applications, vous pouvez avoir besoin d'accéder à des informations temporelles. Différentes commandes permettent d'évaluer des durées. Vous pouvez ainsi :
calculer le temps CPU (= nombre de cycle du processeur) écoulé entre deux actions avec
timer
;calculer le temps réel écoulé en millisecondes entre deux actions avec
tic
/toc
, qui démarre/arrête le chronomètre de Scilab ;mettre en pause Scilab pendant un temps donné avec
sleep
(temps en millisecondes)
ouxpause
(temps en microsecondes)
;réaliser des simulations en temps réel avec
realtimeinit
(qui permet de fixer l'unité de temps) etrealtime
. Le premier appel àrealtime
fixe l'origine des dates, les appels suivants obligent Scilab à attendre qu'une date soit passée pour continuer.
Testez ces différentes commandes avec les exemples suivants :
1 -->// chronométrage avec tic() et toc() 2 -->tic() 4 -->sleep(1000) //1000ms=1seconde 6 -->toc() 8 ans = 10 1.006 12 -->tic() 14 -->xpause(200000) //200000micros=0.2 secondes 16 -->toc() 18 ans = 20 0.203 22 -->// temps CPU avec timer 24 -->timer(); 26 -->sleep(1000) //1000ms=1seconde 28 -->timer() ans = 30 0.0780005 32 -->timer(); 34 -->xpause(1000000) //1000000micros=1 seconde 36 -->timer() 38 ans = 40 0.0624004 42 -->//temps réel 44 -->realtimeinit(1) // unité de temps 1 seconde 46 -->realtime(0) // date fixée à t=0 48 -->tic() 50 -->realtime(2) //attendre date t=2 52 -->toc() //le chronomètre affichera 2 secondes ans = 54 2.003
Vous pouvez effectuer des calculs sur les dates, mais prenez garde qu'il existe plusieurs formats pour gérer les dates et autant de fonctions pour les manipuler.
clock
récupère la date sous la forme d'une liste à six paramètres[année, mois, jour, heure, minute, seconde]
;datenum
récupère la date sous la forme du nombre de jours écoulés depuis le 1er janvier de l'an zéro ;getdate
récupère la date sous forme d'un timestamp (nombre de secondes écoulées depuis le 1er janvier 1970) ou d'une liste à dix paramètres[année, mois, semaine, jour Julien, jour de la semaine, jour du mois, heure, minute, seconde, millisecondes]
(plus complexe que celle renvoyée parclock
!).
Une fois les dates récupérées, vous pouvez les traiter avec d'autres commandes :
datevec
qui convertit un timestamp en une liste correspondant à la date en question pour Scilab ;weekday
qui calcule le jour de la semaine correspondant à un timestamp ;eomday
qui calcule le dernier jour du mois d'une année donnée ;etime
qui calcule l'écart (en secondes) entre deux dates données par des listes à six paramètres.
Pour finir, les fonctions suivantes affichent des dates ou des calendriers :
Attention > Pour la fonction weekday
le premier jour de la semaine est le dimanche, alors que
pour la fonction calendar
le premier jour de la semaine est le lundi. Sans
arguments, ces fonctions renvoient les valeurs correspondant à la date
courante, sinon elles renvoient les valeurs correspondant aux dates
données en paramètres.
Voici quelques exemples d'utilisation des fonctions précédentes :
1 -->calendar(1970,1) //calendrier Jan. 1970 2 ans = 4 ans(1) 6 Jan. 1970 8 ans(2) 10 L Ma M Je V Sam Dim 12 ans(3) 14 0. 0. 0. 1. 2. 3. 4. 16 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 18 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 0. 20 0. 0. 0. 0. 0. 0. 0. 22 -->eomday(2012,2) // dernier jour de Février 2012 ans = 24 29. 26 -->d1=[1970 1 1 0 0 0] // format de date scilab 28 d1 = 30 1970. 1. 1. 0. 0. 0. 32 -->t1=datenum(d1) //numéro de la date d1 t1 = 34 719529. 36 -->[N,S]=weekday(t1) // jour de la semaine de la date d1 38 S = 40 Jeu. N = 42 5. 44 -->date() //date actuelle 46 ans = 48 25-Août-2014 50 -->d2=clock() //liste scilab de la date actuelle d2 = 52 2014. 8. 25. 12. 16. 24.999998 54 -->t2=datenum(d2) //numéro de la date d2 56 t2 = 58 735836.51 60 -->datevec(t2) // date correspondant à t2 ans = 62 2014. 8. 25. 12. 16. 24.999998 64 -->etime(d1,d2) //écart entre les dates d1 et d2 66 ans = 68 - 1.409D+09 70 -->d=etime(d2,d1) //écart entre les dates d2 et d1 d = 72 1.409D+09 74 -->getdate(d) // jour situé d secondes après le 1er Jan. 1970 76 ans = 78 2014. 8. 35. 237. 2. 25. 13. 16. 24. 0.9999983