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

Free Pascal Discussion :

[Free Pascal] Chronomètre ? ( problème -> 00:00 ... )


Sujet :

Free Pascal

  1. #1
    Membre du Club

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 23
    Points : 43
    Points
    43
    Par défaut [Free Pascal] Chronomètre ? ( problème -> 00:00 ... )
    Bonjour,
    je commence la programmation en autodidacte (sous Freepascal).

    Le projet sur lequel je travaille est un démineur et je cherche à y ajouter
    un chronomètre.

    J'ai essayé avec l'unité Dos ( fonction : gettime ( ... ); ) : je soustrais le temps actuel du temps initialisé au préalable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure Chronos ( TempsInit : word; var TempsActu : word );
    var Hour,Min,Sec,HSec : word;
    begin 
         GetTime(Hour,Min,Sec,HSec);
         Hour := Hour * 3600;
         Min := Min * 60;
         TempsActu := Hour + Min + Sec;
         gotoxy (2,2);
         textbackground (black); textcolor (white);
         write (TempsActu - TempsInit);
    end;
    Forcément un problème survient à minuit...
    même problème si je demande la date ( 31 -> 1 )

    En cherchant sur ce forum, j'ai également trouvé certaines fonctions de l'unité SysUtils capables de me donner l'heure et la date.

    Ma question :
    N'y a-t-il pas un autre moyen de construire un chronomètre ? Ou du
    moins d'éviter ce bug ?

    Je vois beaucoup de codes sources avec des Units, des Tobject : sender.. Je suis encore loin de maîtriser cela j'aimerais simplement obtenir un fichier '*.pas'

    Merci pour votre attention,
    pardonnez-moi de poser une question si 'simple'.

  2. #2
    Membre éclairé
    Avatar de denokan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 434
    Points : 746
    Points
    746
    Par défaut
    il existe un compteur dans ton ordi que tu peux lire à tout moment ; ce compteur est initialisé 18,2 fois par seconde (je crois) et il suffit de le diviser pour trouver l'équivalence en secondes....
    test ce code tu verras c tout simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    uses Crt; 
    var 
    Clock: Longint absolute $0040:$006C; 
     
    begin 
    ClrScr; 
    repeat 
    GotoXY(1, 1); 
    Write(Clock / ($1234DD / $10000):0:0);
    until KeyPressed; 
    ReadKey; 
    end.
    Donnez un poisson à un homme et il mangera pendant un jour... Apprenez-lui à pêcher et il s'assiéra dans une barque et boira de la bière toute la journée

  3. #3
    Membre du Club

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 23
    Points : 43
    Points
    43
    Par défaut
    messages d'erreur lors de la compilation :

    Tool:0: test.pas:4: error: 30: Compilation aborted
    Tool:0: test.pas:4: error: 30: Syntax error, ";" expected but ":" found
    Tool:0: test.pas:4: error: 30: absolute can only be associated with a var or const

    l'erreur vient du ':' entre $0040 et $006C

    merci quand meme

  4. #4
    Membre éclairé
    Avatar de denokan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 434
    Points : 746
    Points
    746
    Par défaut
    effectivement mon prog ne fonctionne pas sous freepascal... et ne semble pas pouvoir être adapté. comme alternative tu peux essayer de faire un fonction qui convertisse une date obtenue pas GetTime en un nombre de secondes écoulée depuis une date zéro (le 0/01/1900 au hasard ?), ainsi tu pourra faire une soustraction entre deux nombres de secondes sans te soucier des changements de jour.
    Donnez un poisson à un homme et il mangera pendant un jour... Apprenez-lui à pêcher et il s'assiéra dans une barque et boira de la bière toute la journée

  5. #5
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 939
    Points : 59 409
    Points
    59 409
    Billets dans le blog
    2
    Par défaut
    Bonjour !
    Citation Envoyé par denokan
    effectivement mon prog ne fonctionne pas sous freepascal... et ne semble pas pouvoir être adapté
    En effet, pas en mode protégé.
    Peut-être en allant lire directement le port 71h ? (heure système dans la CMOS).

    Sinon, au lieu de GetTime, tu peux utiliser GetTimeOfDay, qui renvoie un simple compteur de secondes depuis le 1er janvier 1970.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  6. #6
    Membre du Club

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 23
    Points : 43
    Points
    43
    Par défaut
    pourriez-vous préciser l'utilisation de la fonction GetTimeOfday

    je n'ai rien trouvé dans la documentation du site freepascal.org
    à ce sujet

    mon compilateur me renvoi ceci :
    Tool:0: test.pas:15: error: 6: Identifier not found "GetTimeOfDay"

    dois je l'utiliser comme la fonction GetTime ?
    (...
    var Hour,Min,Sec,HSec : word;
    ...
    GetTimeOfDay(Hour,Min,Sec,HSec);
    ...)

  7. #7
    Membre éclairé
    Avatar de denokan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 434
    Points : 746
    Points
    746
    Par défaut
    ceci semble fonctionner

    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
     
    uses
      SysUtils;
     
    var
      Debut : Double;
      Quit : Boolean;
      Ligne : String;
     
    BEGIN
      Debut := Now;
      repeat
       WriteLn('secondes : ', FormatDateTime('s', Now - debut));
       WriteLn('Appuyez une touche (q pour quitter) puis entr‚e.');
       ReadLn(Ligne);
       if Ligne = 'q' then Quit:=True;
      until Quit;
    END.
    Donnez un poisson à un homme et il mangera pendant un jour... Apprenez-lui à pêcher et il s'assiéra dans une barque et boira de la bière toute la journée

  8. #8
    Membre du Club

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 23
    Points : 43
    Points
    43
    Par défaut
    le probleme est résolu, grand merci à tous

  9. #9
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 939
    Points : 59 409
    Points
    59 409
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Van der Elst
    pourriez-vous préciser l'utilisation de la fonction GetTimeOfday

    je n'ai rien trouvé dans la documentation du site freepascal.org
    à ce sujet
    Toutes mes excuses, cette fonction est implémentée pour Unix/Linux uniquement et n'est pas portable.
    cf. Guide de référence de la RTL.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

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

Discussions similaires

  1. [Free Pascal] Pascal sous FreeBSD
    Par logiqueciel dans le forum Free Pascal
    Réponses: 5
    Dernier message: 23/09/2004, 20h06
  2. [Free Pascal] Graphique avec Dev-Pascal
    Par CompuTux dans le forum Free Pascal
    Réponses: 15
    Dernier message: 03/09/2004, 02h15
  3. [Free Pascal] Application client/serveur en Pascal
    Par zouzou_zaza dans le forum Free Pascal
    Réponses: 15
    Dernier message: 02/09/2004, 17h57
  4. [Free Pascal] Taille de l'exécutable
    Par macluvitch dans le forum Free Pascal
    Réponses: 12
    Dernier message: 28/11/2003, 21h26
  5. [Free Pascal] Comportement de Exec
    Par néo333 dans le forum Free Pascal
    Réponses: 3
    Dernier message: 01/11/2003, 17h46

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