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

Turbo Pascal Discussion :

Utilisation de la fonction "Delay"


Sujet :

Turbo Pascal

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 4
    Par défaut Utilisation de la fonction "Delay"
    Salut les développeurs,
    je suis entrain de réaliser un petit programme qui nécessite la fonction "Delay", mais quand j'intègre cette fonction dans mon code j'aurais un problème au niveau du compilation (La fonction n'est pas connue par le compilateur. NB: l'unité WINCRT est integrer dans mon code :s).
    Le même code fonction sur Dev-Pascal version 1.9.2, cela signifie qu'il ya un problème avec Turbo Pascal et Borland Pascal, mais moi je crois que le niveau peut être au niveau du system d'exploitation (OS: Windows Seven Ultimate 32Bit) d'où il vient l'erreur de compilation?

    Voila un simple code qui ne compile pas sous Borland Pascal mais il compile nickel sous Dev-Pascal
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    program app01;
    uses wincrt;
    begin
    writeln('1');
    delay(1000);
    writeln('2');
    delay(1000);
    readln;
    end.
    Merci d'avance , ravie d'être parmi vous les amis :p.

  2. #2
    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

  3. #3
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 420
    Par défaut
    Salut;

    Tu peux utiliser le code suivant pour simuler la fonction Delay(inexistante dans TPW mais elle existe sous TP et BP):
    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
    uses wincrt,WinDos;
    var cnt:LongInt; Wait:LongInt;
        h, m, s, hund : Word;
    {========================}
    Function Attendre(csec:Integer):Integer;
      Var wt:LongInt;
     begin
       GetTime(h,m,s,hund);
       wt:=(h*3600+m*60+s)*100;
      Repeat
       GetTime(h,m,s,hund);
       Wait:=100*(h*3600+m*60+s);
      Until Wait-wt>=csec;
      Attendre:=csec;
     end;
    {=======================}
    Begin
      writeln('Départ');
      {Le nombre à mettre dans Attendre est en centième de seconde}
      Writeln('Durée écoulée : ',Attendre(500)/100:0:2,' secondes');
      Write('Terminé');
    End.
    (C'est la fonction Attendre qu'il faudra utiliser dans ton code)
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  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
    Par défaut
    (C'est la fonction Attendre qu'il faudra utiliser dans ton code)
    Si tu veux que ta fonction soit facilement utilisable, il faudra eviter d'utiliser des variables globales dans la fonction. Ceci afin d'eviter tout éffet de bord.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Function Attendre(csec:Integer):Integer;
      Var wt:LongInt;
           Wait:LongInt;
           h, m, s, hund : Word;
     begin
       GetTime(h,m,s,hund);
       wt:=(h*3600+m*60+s)*100;
      Repeat
       GetTime(h,m,s,hund);
       Wait:=100*(h*3600+m*60+s);
      Until Wait-wt>=csec;
      Attendre:=csec;
     end;
    Sinon, a quoi sert exactement la valeur retournée par la fonction?

  5. #5
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 420
    Par défaut
    Salut

    Tu as raison pour la portabilité, j'aurais dû déclarer les variables utilisées par la fonction en local, chose qui m'a échappé en reformulant le code et en intégrant cette fonction car au début j'ai conçu ce code sans sous-programme.

    Pour le retour de la fonction, c'est justement pour avoir la valeur exacte de "csec" car, à mon sens, quand on a :"Until Wait-wt>=csec" cela suppose qu'on peut avoir exactement csec ou csec+1 ou csec+2 ....
    J'ai appris qu'une fonction(du moins en TP) doit retourner un résultat.
    Essaie donc d'exécuter le code tel qu'il est en mettant en commentaire "Attendre:=csec;" et tu auras un résultat erroné : "Durée écoulée : 47.59 secondes".
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  6. #6
    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
    Par défaut
    Une fonction qui ne retourne pas une valeur est une procedure pour ne pas trop se casser la tête.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    procedure Attendre(csec : Integer);
      Var wt:LongInt;
           Wait:LongInt;
           h, m, s, hund : Word;
     begin
       GetTime(h,m,s,hund);
       wt:=(h*3600+m*60+s)*100;
      Repeat
       GetTime(h,m,s,hund);
       Wait:=100*(h*3600+m*60+s);
      Until (Wait-wt)>=csec;
     end;

  7. #7
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 420
    Par défaut
    Je suis d'accord sur ce point.
    Si on veut uniquement un "Delay", on peut se passer de la fonction et on utilise une "Procedure".
    Mais si on veut par exemple afficher la durée écoulée, on est obligé à chaque fois de modifier la Procedure, chose qui n'est pas pratique non !

    De toute façon, cela revient au demandeur de choisir entre "Procedure" et "Function" et l'une ou l'autre permet de faire une pause.
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  8. #8
    Membre à l'essai
    Inscrit en
    Août 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 4
    Par défaut
    Merci pour l'aide je utilise maintenant Dev-Pascal (la fonction Delay marche a 100%)
    je vais essayer avec Borland Pascal et merci pour l'aide

  9. #9
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 420
    Par défaut
    Si c'est OK, n'oublie pas de marquer le post en
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

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