Votre question

Algorithme

Tags :
  • Algorithme
  • Programmation
Dernière réponse : dans Programmation
8 Mars 2011 18:46:58

Bonjour,

J'ai un algo à effectuer : il doit compter le temps lors de l'ouverture d'un incident jusqu'à sa fermeture (donc sur une application quelconque, on clic : "le bidule" est tombé en panne, jusqu'à ce qu'on reclic pour fermer en disant qu'il est réparé). Il se peut qu'un incident dure 2 min mais il peut rester ouvert pendant plusieurs jours (le temps de réparation) d'où le problème, de ce faite il ne doit comptabiliser que les heures d'ouverture de l'entreprise, en décomptant 1h entre midi et doit s'arrêter à 17h pour recommencer à 8h. Il doit également supprimer les weekends et les jours fériés. (donc ne pas comptabiliser ces heures)
J'ai du mal à imaginer la chose, il doit y avoir pas mal de boucle mais je suis paumé =S
Quelqu'un aurait une idée, s'il vous plaît ?

Autres pages sur : algorithme

a c 145 L Programmation
8 Mars 2011 21:20:34

Ouaip :) 

J'imagine que cette réponse ne te suffit pas, mais j'ai (malheureusement pas sous la main) une formule excel pour ce genre d'exercice (utilisée dans le cadre professionnel). Donc je te la fournie demain matin.
m
0
l
9 Mars 2011 09:43:10

Bonjour Spina,

Ce n'est qu'une partie de ce que tu recherches, mais voici 2 fonctions JavaScript pour déterminer si une date (format string jj/mm/aaaa) est fériée ou pas.
La fonction principale (jourFerie) renvoie soit l'intitulé du jour férié, soit chaîne vide si pas férié.
Le moins évident est l'algorithme pour trouver la date de Pâques en fonction de l'année (fonction date_paques), d'autres fériés dépendants de cette date.

Tu n'as plus qu'à en extraire l'algo pour intégrer à ton algo global.

Bon courage pour le reste.

  1. function jourFerie(st_date) { // format de date dd/mm/yyyy
  2. // vérif week-end
  3. var n_jour_semaine = (new Date(st_date.substring(6),st_date.substring(3,5)-1,st_date.substring(0,2))).getDay();
  4. if (n_jour_semaine==6) {
  5. return "samedi";
  6. }
  7. if (n_jour_semaine==0) {
  8. return "dimanche";
  9. }
  10. // vérif jours fériés fixes
  11. var st_jm = st_date.substring(0,5);
  12. if (st_jm=="01/01") {
  13. return "fête du premier de l'an";
  14. }
  15. if (st_jm=="01/05") {
  16. return "fête du travail";
  17. }
  18. if (st_jm=="08/05") {
  19. return "fête de la Victoire de 1945";
  20. }
  21. if (st_jm=="14/07") {
  22. return "fête Nationale";
  23. }
  24. if (st_jm=="15/08") {
  25. return "fête de l'Assomption";
  26. }
  27. if (st_jm=="01/11") {
  28. return "fête de la Toussaint";
  29. }
  30. if (st_jm=="11/11") {
  31. return "fête de l'Armistice de 1918";
  32. }
  33. if (st_jm=="25/12") {
  34. return "fête de Noël";
  35. }
  36. // vérif jours dépendants de Pâques
  37. var ladate = new Date(parseInt(st_date.substring(6)),parseInt(st_date.substring(3,5))-1,parseInt(st_date.substring(0,2)),0,0,0,0);
  38. var da_paques = date_paques(st_date.substring(6));
  39. var n_annee = da_paques.getFullYear();
  40. var n_mois = da_paques.getMonth();
  41. var n_jour = da_paques.getDate();
  42. var da_lundi_paques = new Date(n_annee,n_mois,n_jour + 1);
  43. var da_ascension = new Date(n_annee, n_mois, n_jour + 39);
  44. var da_lundi_pentecote = new Date(n_annee, n_mois, n_jour + 50);
  45. var ladate_time = ladate.getTime();
  46. if (ladate_time == da_lundi_paques.getTime()) {
  47. return "lundi de Pâques";
  48. }
  49. if (ladate_time == da_ascension.getTime()) {
  50. return "Ascension";
  51. }
  52. if (ladate_time == da_lundi_pentecote.getTime()) {
  53. return "lundi de Pentecôte";
  54. }
  55. return "";
  56. }
  57.  
  58. function date_paques(st_annee) {
  59. var n_annee = 0;
  60. var n_an = 0;
  61. var n_reste = 0;
  62. var n_resua = 0;
  63. var n_resub = 0;
  64. var da_result;
  65. var n_temp1 = 0;
  66. n_an = parseInt(st_annee);
  67. n_annee = n_an - 1900;
  68. n_reste = parseInt(n_annee%19);
  69. n_temp1 = ((n_reste * 11 + 4) - parseInt((n_reste * 7 + 1)/19));
  70. n_resua = parseInt(n_temp1%29);
  71. n_temp1 = parseInt(n_annee/4) - n_resua + n_annee + 31;
  72. n_resub = 25 - parseInt(n_temp1%7) - n_resua;
  73. if (n_resub > 0) {
  74. da_result = new Date(n_an,03,n_resub);
  75. } else {
  76. n_resub = n_resub + 31;
  77. da_result = new Date(n_an,02,n_resub);
  78. }
  79. return da_result;
  80. }



Edit : attention, le fait que le lundi de Pentecôte soit férié dépend de l'entreprise !
m
0
l
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS