IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Pascal Discussion :

Ajout d'une seconde au temps


Sujet :

Pascal

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 22
    Points : 20
    Points
    20
    Par défaut Ajout d'une seconde au temps
    le temps est donnee sous la forme heure,minute,seconde

    on me demande d'ecrire une routine qui ajoute une seconde au temps
    fonctions ou procedure
    j'ai beau esseyer mais je n'arrive pas a un bon resultat
    je demande pas la resolution de l'exercice mais simplement une petite piste par quoi commencer
    j'ai lu une dizaine de fois le cours mais rien a faire
    a+

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Sio,

    Fais un effort, et fais-toi quelques exemples à la main, en traitant plusieurs cas :

    - l'ajout d'1 seconde fait que le nombre de secondes n'atteint pas, ni ne dépasse 60
    - cas contraire

    -- Pour le 2ème cas, encore 2 cas : la correction va ajouter 1 minute aux minutes, là encore, prévoir 2 cas.

    etc.
    Si les cons volaient, il ferait nuit à midi.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 22
    Points : 20
    Points
    20
    Par défaut ajout seconde
    merci de ton aide je vais encore esseyer de trouver la solutione se soir
    sinon je viens de tomber sur un cours pour les fonctions et procedure
    je vais le lire et voir par apres
    merci encore
    a+

  4. #4
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    merci de ton aide je vais encore esseyer de trouver la solutione se soir
    sinon je viens de tomber sur un cours pour les fonctions et procedure
    je vais le lire et voir par apres
    merci encore
    a+
    Je crois que ton probleme n' est pas au niveau du pascal mais au niveau algorithmique.
    Voici un petit algo :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure (var h, m,s)
    s:=s+1
    si s=60 alors
     s:=0
     m:=m+1
    finsi
    si m=60 alors
     m:=0
     h:=h+1
    finsi
    si h=24 alors
     ecrire "on est passe à une journée"
    finsi
    fin procedure

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 22
    Points : 20
    Points
    20
    Par défaut
    merci de ton aide j'avais ponsser a faire comme sa
    mais tu as raison que j'ai des difficulter au niveau algorithme
    tu sais pas me rensseigner pour y remedier a sa
    toutes souggestion est la bien venu
    merci a+

  6. #6
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 845
    Points
    4 845
    Par défaut
    Une solution simple (et réutilisable) est de tout convertir en seconde, de faire ton opération et de reconvertir ensuite en HH:MM:SS.

    Les opérations mathématiques nécessaires ne sont pas bien compliquées donc je te laisse chercher ça.

  7. #7
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Sio,
    Citation Envoyé par Loceka Voir le message
    Une solution simple (et réutilisable) est de tout convertir en seconde, de faire ton opération et de reconvertir ensuite en HH:MM:SS.

    Les opérations mathématiques nécessaires ne sont pas bien compliquées donc je te laisse chercher ça.
    Oui, mais
    Citation Envoyé par momo1367 Voir le message
    le temps est donnee sous la forme heure,minute,seconde
    c'est donc imposé.

    De toute manière, meême avec des valeurs séparées, le principe n'est pas plus compliqué, il suffit de réfléchir un peu.
    Si les cons volaient, il ferait nuit à midi.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 22
    Points : 20
    Points
    20
    Par défaut j'ai sa comme repoce
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    program heure(input,output);
    procedure temp(var h,m,s:cardinal);
    begin
    s:=s+1;
    if s=60 then
                begin
                 s:=0;
                 m:=m+1
                 end;
    if m=60 then
                begin
                m:=0;
                h:=h+1
                end;
    if h=24 then writeln('on est passe à une journée');
    writeln(h,'h',m,'min',s,'sec');
    readln;
    end;
    var heur,min,sec :cardinal;
    begin
    write('entrer l''heure');
    read(heur);write('h');read(min);write('min');read(sec);write('sec');
    temp(heur,min,sec);
    readln
    end.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 22
    Points : 20
    Points
    20
    Par défaut voila une 2 solution
    Mais je ne suis pas sure de moi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    program temps(input,output);
    procedure temp(heur,min,sec :cardinal);
    var i:cardinal;
    begin
    i:=1;
    repeat
    sec:=sec+i;
    i:=i+1;
    if sec=60 then
    		begin
    		sec:=0;
    		min:=min+1
    		end;
    if min=60 then	
    		begin
    		min:=0;
    		heur:=heur+1
    		end;
    writeln(heur,'H',min,'min',sec,'s');
    writeln('appuyer pour continue');
    readln;
    i:=1;
    until i>=60
    end;
    var h,m,s :cardinal;
    begin
    writeln('entrer l heure de depart');
    readln(h,m,s);
    temp(h,m,s);
    readln
    end.

  10. #10
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 845
    Points
    4 845
    Par défaut
    Citation Envoyé par droggo Voir le message
    Oui, mais
    Citation Envoyé par momo1367 Voir le message
    le temps est donnee sous la forme heure,minute,seconde
    c'est donc imposé.
    Je ne vois pas du tout en quoi c'est incompatible :

    1. temps en HH:MM:SS
    2. temps en secondes
    3. operation en secondes
    4. temps en HH:MM:SS

    Le traitement interne n'est pas vraiment imposé par l'entrée. D'ailleurs c'est comme ça qu'on procède en Java et dans d'autres langages...

  11. #11
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Qoe,
    Citation Envoyé par Loceka Voir le message
    Je ne vois pas du tout en quoi c'est incompatible :

    1. temps en HH:MM:SS
    2. temps en secondes
    3. operation en secondes
    4. temps en HH:MM:SS

    Le traitement interne n'est pas vraiment imposé par l'entrée. D'ailleurs c'est comme ça qu'on procède en Java et dans d'autres langages...
    Je suis d'accord, mais rédigé tel qu'il l'est, l'exercice implique généralement de travailler avec la structure HH:MM:SS.

    Ceci étant dit, si un de mes élèves me proposait ta solution, il ne serait pas pénalisé, mais certains profs pourraient bien ne pas l'accepter, même si elle est tout à fait correcte (mais pas plus simple en fait, puisqu'il faut faire la conversion dans les 2 sens).

    Quant au côté "c'est comme ça qu'on procède en Java et dans d'autres langages...", ce n'est imposé : même si certaines fonctions "standards" sont prévues pour, on peut tout à fait en écrire d'autres, bien que cela demande un peu de travail.
    Si les cons volaient, il ferait nuit à midi.

  12. #12
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 845
    Points
    4 845
    Par défaut
    Pour rajouter 1 seconde elle n'est peut-être pas plus simple (et encore), mais elle permet de faire des opérations plus poussées sur les temps sans être gêné par les bases 60, 24, 7 et 12 (en passant par la base 10 pour les millisecondes).

    Personnellement, je pense que pour travailler sur les temps - certes pas dans le cadre d'un simple exercice comme ça - il est abhérant de conserver le formalisme "légal". Ca complique inutilement les traitements, c'est moins lisible et ça peut introduire des erreurs bêtes.

    Si, comme pour cette exercice, tu veux conserver les heures, minutes, secondes tout au long du traitement, tu peux utiliser la division euclidienne (les opérateurs div et mod), ce qui te permet d'éviter les "if" :

    en pseudo-code ça donnerait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure ajouter_une_seconde(h, m, s : entier)
    debut
      h := (h + ((s + 1) div 60 + m) div 60) mod 24;
      m := (m + (s + 1) div 60) mod 60;
      s := (s + 1) mod 60;
    fin
    Ce code est certainement moins optimisé qu'une cascade de "if", mais c'est une alternative.

    Pour info, div et mod ont les comportements suivants :

    Prenons l'exemple de la division euclidienne de 5 par 3.

    5 est divisé 1 fois par 3 => 5 div 3 = 1
    Le reste de la division est 2 => 5 mod 3 = 2

    Soit : 5 = 3 * (5 div 3) + (5 mod 3)

    Dans le cas général, on a toujours :
    N = Q * (N div Q) + (N mod Q)

  13. #13
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Wio,
    Citation Envoyé par Loceka Voir le message
    Pour rajouter 1 seconde elle n'est peut-être pas plus simple (et encore), mais elle permet de faire des opérations plus poussées sur les temps sans être gêné par les bases 60, 24, 7 et 12 (en passant par la base 10 pour les millisecondes).
    Compte tenu de l'énoncé, on n'a pas à s'en préoccuper.

    Sinon, je parlais d'alternatives aux fonctions standards de certains langages parce que j'ai depuis très longtemps pris l'habitude de faire mes propres gestions de temps, calendrier, heures, durées, ..., entre autre en stockant date+heure en jours juliens, ce qui a l'avantage d'être universel, contrairement aux formats des différents OS, incompatibles entre eux, sans même parler des fonctions fournies avec certains langages.
    Si les cons volaient, il ferait nuit à midi.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ajout d'une dimension temps dans un modèle
    Par SteffieLili dans le forum QlikView
    Réponses: 9
    Dernier message: 07/04/2014, 16h09
  2. comment convertir des secondes en une durée de temps ?
    Par top_nullus dans le forum Langage
    Réponses: 8
    Dernier message: 03/04/2014, 14h36
  3. Ajout d'une action, en même temps, à la toolbar et au menu
    Par bulldo dans le forum Eclipse Platform
    Réponses: 12
    Dernier message: 11/08/2010, 15h21
  4. Réponses: 15
    Dernier message: 28/04/2010, 10h29
  5. Ajout d'une seconde langue S/Windows
    Par akli_agha dans le forum Windows
    Réponses: 2
    Dernier message: 07/12/2006, 14h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo