Calcule de la durée d'un cycle de sommeil

Calcule de la durée d'un cycle de sommeil - Ada - Programmation

Marsh Posté le 28-10-2018 à 10:50:13    

Bonjour.
Je souhaite calculer la durée d'un cycle de sommeil en fonction d'un total d'une période de sommeil sachant qu'un cycle à une durée variante d'un individu à un autre comprise entre une heure et demi et deux heures.
 
Quelle expression mathématique puis-je utiliser, en vue ďétablire un programme qui me donnera pour résultat la durée du cycle en fonction de l'heure à laquelle je m'endors et celle à laquelle je me réveille ?
 
Exemple : cycle de 1:30 à 2h
Je dors à 19:30 ;  
Me réveille à 7:20 :
 
Le cycle ici est de 1heure et 58minutes environ.
 
Merci.

Message cité 1 fois
Message édité par µjoshua wopr le 07-11-2018 à 17:04:14
Reply

Marsh Posté le 28-10-2018 à 10:50:13   

Reply

Marsh Posté le 28-10-2018 à 17:11:04    

Jovalise c'est toi ?


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 28-10-2018 à 17:22:29    

Bonjour,
 
Tu peux établir la même expression mathématique que celle que tu as utilisé pour ton exemple.
 
a+. :hello:


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 28-10-2018 à 19:00:55    

Reply

Marsh Posté le 29-10-2018 à 12:07:34    

µjoshua wopr a écrit :

Bonjour.
Je souhaite calculer la durée d'un cycle de sommeil en fonction d'un total d'une période de sommeil sachant qu'un cycle à une durée variante d'un individu à un autre comprise entre une heure et demi et deux heures.
 
Quelle expression mathématique puis-je utiliser, en vue ďétablire un programme qui me donnera pour résultat la durée du cycle en fonction de l'heure à laquelle je m'endors et celle à laquelle je me réveille ?
 
Exemple : cycle de 1:30 à 2h
Je dors à 19:30 ;  
Me réveille à 7:20 :
 
Le cycle ici est de 1heure et 58minutes environ.
 
Merci.

Non.
C'est soit 6 cycles de 1h et 58', soit 7 cycles de 1h 41'.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 30-10-2018 à 14:42:03    

gilou a écrit :

Non.
C'est soit 6 cycles de 1h et 58', soit 7 cycles de 1h 41'.
A+,


 
En effet gilou.
Du coup je ne sais pas quoi faire.


Message édité par µjoshua wopr le 30-10-2018 à 14:42:31
Reply

Marsh Posté le 30-10-2018 à 14:53:19    

Peut-être y a t- il une erreur d'observation.
Cette nuit, J'ai dormis 11heures pile poil
Ce qui correspond à la durée de mon cycle habituel de 110minutes en divisant par 7 mais effectivement quand même, en divisant par 6 ça fait des cycle de 94 minutes.
 
Du coup je suis dubitatif.
 
Une soluce ?

Message cité 1 fois
Message édité par µjoshua wopr le 30-10-2018 à 14:53:56
Reply

Marsh Posté le 30-10-2018 à 14:53:33    


Mais oui \o/
Par contre, je le félicite pour le goût dont il a fait preuve dans le choix de son nouveau pseudo. "Wargames" est un film que tout geek qui se respecte devrait voir une fois dans sa vie :o


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 30-10-2018 à 14:54:55    

Bonjour Harko :bounce:

Reply

Marsh Posté le 30-10-2018 à 14:56:52    

\O/


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 30-10-2018 à 14:56:52   

Reply

Marsh Posté le 30-10-2018 à 17:56:47    

µjoshua wopr a écrit :

Peut-être y a t- il une erreur d'observation.
Cette nuit, J'ai dormis 11heures pile poil
Ce qui correspond à la durée de mon cycle habituel de 110minutes en divisant par 7 mais effectivement quand même, en divisant par 6 ça fait des cycle de 94 minutes.
 
Du coup je suis dubitatif.
 
Une soluce ?


 
En même temps va savoir si en ce moment toute ta vie n'est pas qu'un rêve ? Quelle serait la notion de temps en dehors de ton rêve actuel ? Faut-il résoudre ce problème dans ton rêve ou en dehors ? Et surtout, qui suis-je si je ne suis que le fruit de ton imagination ? Serais-je ta conscience ? [:make install:1]  


Message édité par MaybeEijOrNot le 30-10-2018 à 17:59:08

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 30-10-2018 à 18:40:59    

Pour répondre de bonne foi, de bonne volonté et de bon sens, le temps est une abstraction de mesuré arbitraire.
 
Si vous êtes ma conscience, ne vous en faites pas, je suis le surconscient.  [:dpenche].


Message édité par µjoshua wopr le 30-10-2018 à 18:41:37
Reply

Marsh Posté le 31-10-2018 à 09:43:45    

Bonjour.
 
Je remet ça sur le tapis après lecture de ce qui pourrait émaner de nouvelles études.
Un cycle serait d'une durée allant de 90 à 100 minutes selon les individus.
 
 
Du coup d'après mes 11h de sommeil je devrait compter 7 cycles de  94 minutes environ.
 
Quelle question me poser formellement à défaut de votre réponse ?
Merci pour tout !

Reply

Marsh Posté le 31-10-2018 à 10:15:05    

Tu installes une appli de tracking de sommeil sur ton téléphone, tu dors avec plusieurs jours, et tu pourras ainsi visualiser tes cycles et extrapoler leur durée :o


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 31-10-2018 à 10:25:32    

Si le médecin propose de suspendre le traitement je me retrouve avec une chaîne Ada autour du coup.


Message édité par µjoshua wopr le 31-10-2018 à 10:28:37
Reply

Marsh Posté le 31-10-2018 à 10:27:59    

À part ça c'est pour savoir quels sont les horaires ad'hoc pour dormir sur 24 à 48 heures.

Reply

Marsh Posté le 31-10-2018 à 10:30:45    

µjoshua wopr a écrit :

À part ça c'est pour savoir quels sont les horaires ad'hoc pour dormir sur 24 à 48 heures.


Demande au capitaine


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 06-11-2018 à 23:14:54    

Bonsoir, bonjour.
 
J'ai mis au point un programme qui fait ce que je veux plus ou moins bien selon les contrainte accepté par moi même.
 
Je reviens quand même ici pour vous demander votre expertise en vue d'une éventuelle optimisation possible, si ce n'est des correction préalable.
 
Voici le code, d'abord un petit fichier de quelques description de constantes et de types utilisés ici dans le main.
 
le fichier sleepcycles est un petit fichier de specification Ada de bibliothèque qui reste sans corp.
 

Code :
  1. package Sleepcycles is
  2.  
  3.   Min_Cycle : constant Integer := 90; -- in minutes.
  4.   Max_Cycle : constant Integer := 115; -- in minutes.
  5.  
  6.   Total_Minutes_By_Day : constant Natural := 1440;
  7.    
  8.    
  9.   subtype Cycle_Range is positive range Min_Cycle .. Max_Cycle;
  10.  
  11.   type Sleep_Clock is
  12.      record
  13.      Hour   : Natural := 0;
  14.      Minute : Natural := 0;
  15.      end record;
  16.  
  17.   Cycle_Num_Min : constant Positive := 12;
  18.   Cycle_Num_Max : constant Positive := 16;
  19.  
  20.   subtype Cycle_Num_Range is Positive range Cycle_Num_Min .. Cycle_Num_Max;
  21.  
  22.   type Cycles_Array is array (Positive range 1 .. Cycle_Num_Max) of Sleep_Clock;
  23.  
  24.   Minutes_By_Day : constant Positive := 1440;
  25.  
  26.   subtype Clock_In_Minute_Range is Natural range 0..Minutes_By_Day;
  27.  
  28. end Sleepcycles;


 
Le main qui calcule la période de sommeil en minutes en fonction de leur de sommail et de réveil saisies par l'utilisateur afin de déterminer le nombre de cycle et affiche de tableau de l'ensemble des heures de début/fin de cycle sur 24 heures.
 

Code :
  1. with Ada.Calendar;
  2. use Ada.Calendar;
  3.  
  4. with Sleepcycles;
  5. use Sleepcycles;
  6.  
  7. with Ada.Text_Io;
  8. use Ada.Text_Io;
  9.  
  10. with Ada.Integer_Text_Io;
  11. use Ada.Integer_Text_Io;
  12.  
  13. with Ada.Strings.Fixed;
  14. use Ada.Strings.Fixed;
  15.  
  16. use Ada;
  17. use Ada.Strings;
  18.  
  19. procedure Main is
  20.  
  21.   Sleep_Down : Sleep_Clock;
  22.   Sleep_Up   : Sleep_Clock;
  23.   Char : constant String := ":";
  24.  
  25. begin      
  26.  
  27.   Cycle : loop
  28.       New_Line;
  29.       Put_Line("Sleep cycles : sleeping calcul and information..." );
  30.       
  31.      Clock_Error : loop
  32.         
  33.          New_Line;
  34.          Put_line("Please, enter clock sleep down : (hour/23:minutes/59) and press enter" );
  35.          Put("sleep down to : " );
  36.         
  37.          loop
  38.         
  39.         begin
  40.           
  41.            declare
  42.               Sleep_Down_Line : String := Get_Line;
  43.               Char_Index : Natural := 0;
  44.            begin
  45.               
  46.               Char_Index := Fixed.Index(Sleep_Down_Line, Char);
  47.               
  48.               if Char_Index = 0 then
  49.              Put_Line("uncknow separator for clock sleep down ! " );
  50.              exit;                                                                    
  51.               end if;
  52.               
  53.               Sleep_Down.Hour := Natural'Value(Sleep_Down_Line(Sleep_Down_Line'First..Char_Index - 1));
  54.               Sleep_Down.Minute := Natural'Value(Sleep_Down_Line(Char_Index + 1 .. Sleep_Down_Line'last));
  55.               
  56.               
  57.               begin
  58.              loop
  59.                 
  60.                 New_Line;
  61.                 Put_line("Please, enter clock sleep up : (hour/23:minutes/59) and press enter. " );
  62.                 Put("sleep up to : " );
  63.                 
  64.                 loop
  65.                   
  66.                    begin
  67.                   
  68.                   declare
  69.                      Sleep_Up_Line : String := Get_Line;
  70.                      Char_Index : Natural := 0;
  71.                   begin
  72.                     
  73.                      Char_Index := Fixed.Index(Sleep_Up_Line, Char);
  74.                     
  75.                      if Char_Index = 0 then
  76.                     Put_Line("uncknow separator for clock sleep down ! " );
  77.                     exit;
  78.                      end if;
  79.                     
  80.                      Sleep_Up.Hour := Natural'Value(Sleep_Up_Line(Sleep_Up_Line'First..Char_Index - 1));
  81.                      Sleep_Up.Minute := Natural'Value(Sleep_Up_Line(Char_Index + 1 .. Char_Index+2));
  82.  
  83.                     
  84.                     
  85.                   end;
  86.                   
  87.                   
  88.                   
  89.                   declare
  90.                     
  91.                     
  92.                      Between_Hour : constant Natural := 24-Sleep_Down.Hour;
  93.                      After_Hour   : constant Natural := Sleep_Up.Hour;
  94.                     
  95.                      Minutes_Sum_Period_Hours : Natural := 60 * (Between_Hour + After_Hour);
  96.                     
  97.                      Minutes_Sum_Period_Minutes : Natural := 0;
  98.                     
  99.                      Minutes_Sum_Period : Natural := 0;
  100.                     
  101.                     
  102.                   begin
  103.                     
  104.                      if Sleep_Down.Minute > Sleep_Up.Minute then
  105.                     
  106.                     Minutes_Sum_Period_Minutes := (60 - Sleep_Down.Minute) + Sleep_Up.Minute;
  107.                      else
  108.                     
  109.                     Minutes_Sum_Period_Minutes := Sleep_Down.Minute + Sleep_Up.Minute;
  110.                   
  111.                      end if;
  112.                     
  113.                      Minutes_Sum_Period := Minutes_Sum_Period_Minutes + Minutes_Sum_Period_Hours;
  114.                     
  115.                      New_Line;
  116.                     
  117.                      Put_Line("Sum minutes of all cycles in sleep period : " );
  118.                      Integer_Text_Io.Put(Minutes_Sum_Period);
  119.                     
  120.                      New_Line;
  121.                     
  122.                      Put_Line("Cycle(s) duration between 90..115 minutes : " );
  123.                     
  124.                      declare
  125.                     
  126.                        Div : Positive := 1;
  127.                        Rest : Natural := 0;
  128.                        Tmp : Natural := Minutes_Sum_Period;
  129.                      begin
  130.                     
  131.                     loop                                                                  
  132.                        --Put_Line("iter Num cycle : " );
  133.                        --Integer_Text_Io.Put(Div);    
  134.                        --New_Line;
  135.                        --Put_Line("Total minutes : " );
  136.                        --Integer_Text_Io.Put(Minutes_Sum_Period);
  137.                        --New_Line;
  138.                        --Put_Line("Minutes_Sum_Period / Div : " );
  139.                        --Integer_Text_Io.Put(Minutes_Sum_Period /  Div);
  140.                        --New_Line;
  141.                        exit when (Minutes_Sum_Period / Div) < Min_Cycle;
  142.                        Div := Div + 1;                                                                    
  143.                     end loop;
  144.                       
  145.                     if Minutes_Sum_Period / Div < Min_Cycle then
  146.                        Rest := Minutes_Sum_Period / (Div - 1);
  147.                        Div := Div - 1;
  148.                     else
  149.                        Rest := Minutes_Sum_Period / Div;
  150.                     end if;
  151.                     
  152.                     
  153.                     
  154.                     
  155.                     Integer_Text_Io.Put(Integer(Minutes_Sum_Period/ Div));
  156.                     
  157.                     New_Line;
  158.                     
  159.                     Put_Line("Cycles number in period : " );
  160.                     
  161.                     Integer_Text_Io.Put(Div);
  162.                     
  163.                     New_Line;
  164.                     
  165.                     
  166.                     -- print 24hours of N cycles.
  167.                     
  168.                     declare
  169.                       
  170.                        Day_Array : Cycles_Array := (others => (0, 0));
  171.                       
  172.                        O_Clock_In_Minute : Natural := Sleep_Down.Hour * 60 + Sleep_Down.Minute;
  173.                       
  174.                        Exhausted : Boolean := False;
  175.                       
  176.                        Count : Natural := 0;
  177.                       
  178.                     begin
  179.                        loop                      
  180.                           
  181.                           Day_Array(Count + 1).Hour := O_Clock_In_Minute / 60;
  182.                           Day_Array(Count + 1).Minute := O_Clock_In_Minute rem 60;
  183.                           
  184.                           
  185.                           
  186.                           
  187.                           
  188.                           if O_Clock_In_Minute / 60 >= 24 then
  189.                         
  190.                         
  191.                          O_Clock_In_Minute := (O_Clock_In_Minute + Minutes_Sum_Period / Div) - Minutes_By_Day;
  192.                         
  193.                          if Exhausted then
  194.                             exit;
  195.                          else
  196.                             
  197.                             Exhausted := True;
  198.                             
  199.                          end if;
  200.                         
  201.                           else
  202.                         
  203.                          O_Clock_In_Minute := O_Clock_In_Minute + Minutes_Sum_Period / Div;
  204.                         
  205.                           end if;
  206.  
  207.                           
  208.                           Count := Count + 1;
  209.                           
  210.                           
  211.                        end loop;
  212.                        Put_Line("Begin/End of Cycles by 24 hours : " );
  213.                        Put_Line("hh:mn" );
  214.                           
  215.                        for Cycle_Num in 1..count loop
  216.                           if Day_Array(Cycle_Num).Hour <= 9 then
  217.                          Put('0');
  218.                          Integer_Text_Io.Put(Day_Array(Cycle_Num).Hour, 0);
  219.                           elsif Day_Array(Cycle_Num).Hour = 24 then
  220.                          Put("00" );
  221.                           else
  222.                          Integer_Text_Io.Put(Day_Array(Cycle_Num).Hour, 0);
  223.                           end if;
  224.                           
  225.                           Put(":" );
  226.                           if Day_Array(Cycle_Num).Minute <= 9 then
  227.                          Put('0');
  228.                           end if;
  229.                           Integer_Text_Io.Put(Day_Array(Cycle_Num).Minute, 0);
  230.                           New_Line;
  231.                        end loop;
  232.                         
  233.                         
  234.                         
  235.                     end;                                        
  236.                       
  237.                      end;
  238.                     
  239.                      exit Cycle;
  240.                     
  241.                   end;
  242.                     
  243.                    exception
  244.                   when Text_Io.End_Error =>
  245.                      New_Line;
  246.                      Put_Line("End of line error : please try again ! " );
  247.                      exit;
  248.                    end;
  249.                 end loop;
  250.              end loop;
  251.               end;
  252.            end;
  253.             
  254.         exception
  255.            when Text_Io.End_Error =>
  256.               New_Line;
  257.               Put_Line("End of line error : please try again ! " );
  258.               exit;
  259.         end;
  260.         
  261.          end loop;
  262.         
  263.       end loop Clock_Error;
  264.         
  265.   end loop Cycle;
  266.       
  267. end Main;


 
 
Le resultat pour exemple :
 


 
Sleep cycles : sleeping calcul and information...
 
Please, enter clock sleep down : (hour/23:minutes/59) and press enter
sleep down to : 22:20
Please, enter clock sleep up : (hour/23:minutes/59) and press enter.  
sleep up to : 06:10
Sum minutes of all cycles in sleep period :  
        530
Cycle(s) duration between 90..115 minutes :  
        106
Cycles number in period :  
          5
Begin/End of Cycles by 24 hours :  
hh:mn
22:20
00:06
01:52
03:38
05:24
07:10
08:56
10:42
12:28
14:14
16:00
17:46
19:32
21:18
23:04


 
 
S'il vous plait !
 
Merci.


Message édité par µjoshua wopr le 06-11-2018 à 23:18:30

---------------
Strange game! jovalise on soureforge.net
Reply

Marsh Posté le 08-11-2018 à 07:29:26    

Tu es du genre à adorer les machines de Goldberg non ?

Reply

Marsh Posté le 08-11-2018 à 09:17:08    

antac a écrit :

Tu es du genre à adorer les machines de Goldberg non ?


 [:tekways]  
 
J'ai pas cherché à comprendre le code, mais ça parait sacrément long pour un truc qui cherche à calculer un truc fantaisiste.
A la limite si tu crois à ces histoires de cycles de sommeil calcule juste les heures possibles de réveil pour une heure de coucher.  
Même si y a pas besoin d'écrire un programme pour ça, en 3 minutes de C# :

Code :
  1. int pas = 90;
  2. TimeSpan sleep = new TimeSpan(22, 00, 00);
  3. var wake = sleep;
  4. for(int jovalise = 2; jovalise < (14*60)/pas; jovalise++)
  5. {
  6. wake = wake.Add(TimeSpan.FromMinutes(pas));
  7. wake.Dump();
  8. }


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 08-11-2018 à 11:13:44    

Mouais.
Mais C c'est as been.


Message édité par µjoshua wopr le 08-11-2018 à 11:14:10

---------------
Strange game! jovalise on soureforge.net
Reply

Marsh Posté le 08-11-2018 à 11:17:06    

Le truc aussi simple de ton point de vue, ça dois pas être terrible en fait vus les contraintes de représentation du temps.
 
En plus mon plaisir c'est de programmer et avec Ada.
 
Vous vous êtes donc trompé de cat.


---------------
Strange game! jovalise on soureforge.net
Reply

Marsh Posté le 09-11-2018 à 14:53:30    

Oui mais comme t'es le dernier à faire de l'ADA faut s'adapter, tu demandais un algo, pas un programme entier. C'est pas moi qui me suis trompé de cat mais toi de planète je pense.

 

Et pour avoir un truc qui calcule la durée possible des cycles à partir de l'heure de réveil c'est toujours facile, solution très courte en brute force :

Code :
  1. TimeSpan sleep = new TimeSpan(19, 30, 00); 
  2.     var actualWake = new TimeSpan(1, 7, 20, 00); 
  3.         for(int cycle = 5; cycle < 9; cycle++)
  4. {
  5.  for(int pas = 90; pas <= 120; pas++)
  6.          {
  7.          var wake = sleep.Add(TimeSpan.FromMinutes(pas * cycle));
  8.  //wake.Dump();
  9.       if(Math.Abs(actualWake.Subtract(wake).TotalMinutes) < 4)
  10.       Console.WriteLine("Trouvé ! " + pas + " minutes en " + cycle + " cycles" );
  11.          }
  12. }


Sachant que je n'aime pas écrire de l'algo, donc autant faire direct un truc qui fonctionne dans un langage qui me parle :o, facile à la lecture d'en déduire l'algo (naïf mais qui doit très bien fonctionner si je ne me suis pas gouré).

 


Pour une durée hypothétique de cycle entre 90 et 120, 5 à 8 cycles et avec une tolérance de 4 minutes ça donne :
Trouvé ! 118 minutes en 6 cycles
Trouvé ! 101 minutes en 7 cycles


Message édité par TotalRecall le 09-11-2018 à 14:55:54

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 09-11-2018 à 15:00:51    

C'est ça.
Aranger toi pour écrire que J'ai Thau(r) et que tu à posté dans la bonne  cat et même que tu répond à la question mieux que je ne la pose. Et ce strictement vraissemblant d'une réponse.
C'est ça...


---------------
Strange game! jovalise on soureforge.net
Reply

Marsh Posté le 09-11-2018 à 15:18:42    

N'empêche ; le code que J'ai posté est buggé.
 
Si vous entrez 20:00-04:00, ça lève range check failed.


---------------
Strange game! jovalise on soureforge.net
Reply

Marsh Posté le 09-11-2018 à 16:52:39    

Tu ne voudrais pas plutôt faire une partie d'échec ?

Reply

Marsh Posté le 09-11-2018 à 17:28:13    

Non, il préfère une guerre thermonucléaire globale.


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 09-11-2018 à 19:55:47    

D'où le fait de coder en Ada...

Reply

Marsh Posté le 09-11-2018 à 20:28:35    

Moi non plus je ne connais pas Ada, vois si ce pseudo-code peut t'aider :

 
Code :
  1. // Déclaration des variables et constantes
  2. // Élément Nom Type
  3.    Constante Durée_Minimale_Cycle Entier_Naturel_8_bits
  4.    Constante Durée_Maximale_Cycle Entier_Naturel_8_bits
  5.    Variable Date_Heure_Début_Sommeil Chaîne_de_caractères
  6.    Variable Date_Heure_Fin_Sommeil Chaîne_de_caractères
  7.    Variable Heures_Début_Sommeil Entier_Naturel_5_bits
  8.    Variable Minutes_Début_Sommeil Entier_Naturel_6_bits
  9.    Variable Heures_Fin_Sommeil Entier_Naturel_5_bits
  10.    Variable Minutes_Fin_Sommeil Entier_Naturel_6_bits
  11.    Variable Durée_Sommeil Entier_Naturel_10_bits
  12.    Variable Itération Entier_Naturel_4_bits
  13.    Variable Durée_Cycle Entier_Naturel_8_bits
  14.    Variable Cycles Tableau_Entier_Naturel_4_bits
  15. // Déclaration des méthodes
  16. // Élément Nom(Paramètre[type]) Type
  17.    Méthode Méthode_Demander_Affectation() Chaîne_de_caractères
  18.    Méthode Méthode_Vérifier_Format(Date_Heure_Sommeil[Chaîne_de_caractères]) Booléen
  19.    Méthode Méthode_Parser_Heures(Date_Heure_Sommeil[Chaîne_de_caractères]) Entier_Naturel_5_bits
  20.    Méthode Méthode_Parser_Minutes(Date_Heure_Sommeil[Chaîne_de_caractères]) Entier_Naturel_6_bits
  21. // Définition des méthodes
  22.    Méthode_Demander_Affectation() :
  23.       ouvre une fenêtre de saisie à l'utilisateur
  24.       indique ce qu'il doit saisir
  25.       RETOURNE la valeur saisie
  26.    Méthode_Vérifier_Format(Date_Heure_Sommeil) :
  27.       RETOURNE VRAI SI la chaîne de caractères correspond au format attendu SINON FAUX
  28.    Méthode_Parser_Heures(Date_Heure_Sommeil) :
  29.       Parse Date_Heure_Sommeil pour récupérer le nombre d'heures
  30.       RETOURNE le nombre d'heures
  31.    Méthode_Parser_Minutes(Date_Heure_Sommeil) :
  32.       Parse Date_Heure_Sommeil pour récupérer le nombre de minutes
  33.       RETOURNE le nombre de minutes
  34. // Affectation des constantes
  35.    AFFECTER 90 À Durée_Minimale_Cycle
  36.    AFFECTER 120 À Durée_Maximale_Cycle
  37. // Affectation des variables par l'utilisateur
  38.    TANT QUE ((Date_Heure_Début_Sommeil NON Chaîne_de_caractères) OU (Méthode_Vérifier_Format(Date_Heure_Début_Sommeil))) FAIRE
  39.       AFFECTER Méthode_Demander_Affectation() À Date_Heure_Début_Sommeil
  40.    FIN TANT QUE
  41.    TANT QUE ((Date_Heure_Fin_Sommeil NON Chaîne_de_caractères) OU (Méthode_Vérifier_Format(Date_Heure_Fin_Sommeil))) FAIRE
  42.       AFFECTER Méthode_Demander_Affectation() Date_À Heure_Fin_Sommeil
  43.    FIN TANT QUE
  44. // Calcul de la durée du sommeil en minutes
  45.    AFFECTER Méthode_Parser_Heures(Date_Heure_Début_Sommeil) À Heures_Début_Sommeil
  46.    AFFECTER Méthode_Parser_Minutes(Date_Heure_Début_Sommeil) À Minutes_Début_Sommeil
  47.    AFFECTER Méthode_Parser_Heures(Date_Heure_Fin_Sommeil) À Heures_Fin_Sommeil
  48.    AFFECTER Méthode_Parser_Minutes(Date_Heure_Fin_Sommeil) À Minutes_Fin_Sommeil
  49.    SI Heures_Début_Sommeil SUPÉRIEUR À 11 ALORS
  50.       AFFECTER Minutes_Début_Sommeil PLUS 60 FOIS (24 MOINS Heures_Début_Sommeil) À Durée_Sommeil
  51.       SI Heures_Fin_Sommeil SUPÉRIEUR OU ÉGALE À 0 ALORS
  52.          AFFECTER Durée_Sommeil PLUS Minutes_Fin_Sommeil PLUS 60 FOIS Heures_Fin_Sommeil À Durée_Sommeil
  53.       SINON
  54.          AFFECTER Durée_Sommeil PLUS Minutes_Fin_Sommeil PLUS 60 FOIS Heures_Fin_Sommeil MOINS 60 FOIS 24 À Durée_Sommeil
  55.       FIN SI
  56.    SINON
  57.       AFFECTER Minutes_Fin_Sommeil MOINS Minutes_Début_Sommeil PLUS 60 FOIS (Heures_Fin_Sommeil MOINS Heures_Début_Sommeil) À Durée_Sommeil
  58.    FIN SI
  59. // Calcul du nombre de cycles et de leur durée
  60.    SI Durée_Sommeil SUPÉRIEUR À Durée_Minimale_Cycle MOINS 1 ALORS
  61.       AFFECTER (Durée_Sommeil DIVISÉ PAR Durée_Minimale_Cycle TRONQUÉ À L'ENTIER) À Itération
  62.       FAIRE
  63.          AFFECTER ARRONDI À L'ENTIER DE (Durée_Sommeil DIVISÉ PAR Itération) À Durée_cycle
  64.          AFFECTER Durée_cycle À Cycles d'indice Itération
  65.          AFFECTER Itération PLUS 1 À Itération
  66.       TANT QUE Durée_Sommeil DIVISÉ PAR Itération INFÉRIEUR OU ÉGALE À Durée_Maximale_Cycle
  67.       PARCOURIR TABLEAU Cycles
  68.          Méthode_Afficher_Message(CONCATENER indice de Cycles ET " cycle(s) de " ET Cycles d'indice ET " minutes." ET Saut de ligne)
  69.       FIN PARCOURIR
  70.    SINON
  71.       Méthode_Afficher_Message(CONCATENER "Un seul cycle incomplet de sommeil d'une durée de " ET Durée_Sommeil)
  72.    FIN SI
  73. // Fin du programme
 

Il est plus économique en performances que le "brute force". :)


Message édité par MaybeEijOrNot le 10-11-2018 à 10:38:25

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 09-11-2018 à 22:47:14    

Bonsoir,
 
J'expertiserai l'algo plus largement si je bute sur me debuggage  de mon code trop longtemps.
 
En tout cas merci.
 
Néanmoins, je m'interroge déjà sur la signification de la ligne 62 qui semble multiplier 60 fois une heure.
 
A mon avis c'est une erreur du à l'embrouille que pourrait générer ce problème pour tout individu.
 
En tout cas bravo au moins pour l'intelligibilité de ce pseudo-code pour moi.
 
:jap:


---------------
Strange game! jovalise on soureforge.net
Reply

Marsh Posté le 09-11-2018 à 22:56:24    

µjoshua wopr a écrit :

Néanmoins, je m'interroge déjà sur la signification de la ligne 62 qui semble multiplier 60 fois une heure.


 
Je suis parti sur la base des unités internationales, dans laquelle les heures sont composées de 60 minutes, et j'exprime le résultat en minutes. Tu peux toujours améliorer le code pour ensuite reconvertir le résultat dans un autre format. :)


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 10-11-2018 à 05:15:10    

Merci.
Je viens d'y penser.
Oû avais-je l'esprit ?


---------------
Strange game! jovalise on soureforge.net
Reply

Marsh Posté le 10-11-2018 à 10:39:12    

Au passage je viens de changer la condition Faire ... Tant que qui n'était pas sur la bonne itération.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 10-11-2018 à 12:27:09    

Bonjour MayBe.
 
Malgré le fait qu'il semble que j'ai trouvé au moins une première modification de mon code je jetterais un oeil sur le tiens/votre.
 
 
Alors je ne sais pas vraiment quelles pourraient être les distinctions faites d'un bout à l'autre ; Mais voici les deux boucles pour l'affichage du tableau de 24h de cycles.
 

Code :
  1. -- print 24hours of N cycles.
  2.  
  3. declare
  4.  
  5.    Day_Array : Cycles_Array := (others => (0, 0));
  6.  
  7.    O_Clock_In_Minute : Natural := Sleep_Down.Hour * 60 + Sleep_Down.Minute;
  8.  
  9.    Max_O_Clock_In_Minute : Natural := O_Clock_In_Minute + Minutes_By_Day;
  10.  
  11.    Exhausted : Boolean := False;
  12.  
  13.    Count : Natural := 0;
  14.  
  15. begin
  16.  
  17.    Put_Line("Cycle num in write : " );
  18.    loop                                          
  19.  
  20.        Put_Line(Integer'Image(Count + 1));
  21.  
  22.        if O_Clock_In_Minute >= Max_O_Clock_In_Minute then
  23.  
  24.  
  25.            exit;
  26.  
  27.        else
  28.  
  29.            O_Clock_In_Minute := O_Clock_In_Minute + Minutes_Sum_Period / Div;
  30.  
  31.        end if;
  32.  
  33.  
  34.        if O_Clock_In_Minute >= Minutes_By_Day then
  35.  
  36.            Day_Array(Count + 1).Hour := (O_Clock_In_Minute - Minutes_By_Day) / 60;
  37.            Day_Array(Count + 1).Minute := (O_Clock_In_Minute - Minutes_By_Day) Rem 60;
  38.        else
  39.  
  40.            Day_Array(Count + 1).Hour := O_Clock_In_Minute / 60;
  41.            Day_Array(Count + 1).Minute := O_Clock_In_Minute rem 60;
  42.        end if;
  43.  
  44.        Count := Count + 1;
  45.  
  46.  
  47.    end loop;
  48.  
  49.  
  50.    Put_Line("Begin/End of Cycles by 24 hours : " );
  51.    Put_Line("hh:mn" );
  52.  
  53.    for Cycle_Num in 1..count loop
  54.        if Day_Array(Cycle_Num).Hour <= 9 then
  55.            Put('0');
  56.            Integer_Text_Io.Put(Day_Array(Cycle_Num).Hour, 0);
  57.        elsif Day_Array(Cycle_Num).Hour = 24 then
  58.            Put("00" );
  59.        else
  60.            Integer_Text_Io.Put(Day_Array(Cycle_Num).Hour, 0);
  61.        end if;
  62.  
  63.        Put(":" );
  64.        if Day_Array(Cycle_Num).Minute <= 9 then
  65.            Put('0');
  66.        end if;
  67.        Integer_Text_Io.Put(Day_Array(Cycle_Num).Minute, 0);
  68.        New_Line;
  69.    end loop;
  70.  
  71. end;


 
du coup j'ai vérifié si 20:00-04:00 fonctionnait ; Et pas autre chose.


---------------
Strange game! jovalise on soureforge.net
Reply

Marsh Posté le 10-11-2018 à 12:37:15    

Faudrait essayer le code sur un ordinateur.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 10-11-2018 à 19:10:45    

Attends !
 
Je n'ai exécuté que 2 ou trois algo de tête dans ma vie don au moins le hello world.  [:dpenche]


Message édité par µjoshua wopr le 10-11-2018 à 19:11:19

---------------
Strange game! jovalise on soureforge.net
Reply

Marsh Posté le 10-11-2018 à 19:34:47    

Faudrait voir si l’exécution est réversible si tu lances en adA comme c'est un palindrome.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 10-11-2018 à 20:22:26    

Difficile.
Même en admettant qu'il fait jour en moyenne 1/2 partie d'un tour axial de l'astre originel.
 
12h de lumière il est midi à 6h et minuit à 18h mais de la à le voir comme l'inverse... Je plaisante.


---------------
Strange game! jovalise on soureforge.net
Reply

Marsh Posté le 12-11-2018 à 17:17:35    

µjoshua wopr a écrit :

N'empêche ; le code que J'ai posté est buggé.
 
Si vous entrez 20:00-04:00, ça lève range check failed.


Ah ben ça alors, ça m'étonne !  :sleep:  
 
Quand je lis ce genre de topic, c'est tellement surréaliste les propos de Jovalise que j'en viens à me demander si on parlerait pas à un chatbot mal branlé ou qui aurait déraillé... :pt1cable:


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 12-11-2018 à 17:21:56    

Tu crois que µjoshua wopr est comme le bot psychotique de twitter il y a quelques années qui voulait éradiquer l'humanité au bout de 24h :??:
:fouyaya:


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed