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 :

[TP] Mesure du temps d'exécution d'un algorithme


Sujet :

Turbo Pascal

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 12
    Points : 7
    Points
    7
    Par défaut [TP] Mesure du temps d'exécution d'un algorithme
    salut à tous,
    y-a-t-il moyen sous pascal de savoir exactement me temps qu'à mis un algorithme pour ce réaliser ?
    (je souhaite en fait lancer deux algorithmes différents pour résoudre un problème et savoir combien chacun d'eux à mis pour s'exécuter...)

    merci !

  2. #2
    Membre actif
    Avatar de mario52
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 131
    Points : 220
    Points
    220
    Par défaut
    Bonjour

    il te suffit de faire une procédure " chronomètre" et la mettre en depart de la procédure a tester et à l'arrivee et tu calcules la différence de tes deux variables arrivee - depart = temps de travail


  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    euh est-ce que tu pourrais m'aider un peu plus pour créer cette procédure stp ?
    je vois pas bien

  4. #4
    Responsable Pascal, Lazarus et Assembleur


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

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 964
    Points : 59 662
    Points
    59 662
    Billets dans le blog
    2
    Par défaut
    Bonjour !

    La question a déjà été posée, une recherche devrait te donner des éléments de réponse :
    http://www.developpez.net/forums/sho...ighlight=timer
    http://www.developpez.net/forums/sho...=chronom%E8tre
    (il y en a sans doute d'autres)


  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    j'ai regardé les liens que tu m'as mis... mais je comprend pas bien comment fonctionne "gettime"...
    il faut que je crée une procédure gettime ??

  6. #6
    Responsable Pascal, Lazarus et Assembleur


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

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 964
    Points : 59 662
    Points
    59 662
    Billets dans le blog
    2
    Par défaut
    GetTime est une procédure de l'unité standard DOS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Procedure GetTime (var Heure, Minute, Seconde, Centiemes : Word);

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    j'ai essayé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    program test;
    var t:real;
    begin
    gettime(h1,m1,s1);
    {ici se trouverai le reste de mon programme
    {........
    {........}
    gettime(h2,m2,s2);
    t:=(h2+m2+s2)-(h1+m1+s1);
    writeln(t);
    readln;
    end.
    et il met dit pour gettime "unknown identifier"...

  8. #8
    Responsable Pascal, Lazarus et Assembleur


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

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 964
    Points : 59 662
    Points
    59 662
    Billets dans le blog
    2
    Par défaut
    Tu dois déclarer l'utilisation de l'unité DOS au début du programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Program test;
    Uses DOS;
    Begin
      ...
    Attention que GetTime nécessite 4 paramètres, tu n'en passes que 3

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    mais je dois créer une procédure gettime ?
    ou alors je peux mettre directement gettime(h1,m1,s1,c1).........gettime(h2,m2,s2,c2)
    ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    program test;
    uses dos;
    var t,h1,h2,m1,m2,s1,s2,c1,c2:word;
    begin
    gettime(h1,m1,s1);
    {ici se trouverai le reste de mon programme
    {........
    {........}
    gettime(h2,m2,s2);
    t:=(h2+m2+s2)-(h1+m1+s1);
    writeln('t:=',t);
    readln;
    end.
    là il m'affiche par exemple t=44... mais c'est 44 quoi ??
    comment afficher les unités de temps ?

  10. #10
    Responsable Pascal, Lazarus et Assembleur


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

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 964
    Points : 59 662
    Points
    59 662
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par williamdunord
    ou alors je peux mettre directement gettime(h1,m1,s1,c1).........gettime(h2,m2,s2,c2)
    Oui

    Pour ce qui est du calcul, n'oublie pas que tu as des heures, des minutes, des secondes et des centièmes, donc ça ne se soustrait pas aussi simplement que tu le fais. Tu peux, par exemple, tout convertir en 1/100 secondes.

  11. #11
    Futur Membre du Club
    Inscrit en
    Mars 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    gettime(h1,m1,s1);
    {ici se trouverai le reste de mon programme
    {........
    {........}
    gettime(h2,m2,s2);
    t:=(h2+m2+s2)-(h1+m1+s1);
    tu peut mettre directement gettime(heur,min,sec,cent);
    pui t1:=min*60*100+sec*100+cent; ca va te donner le temp en centieme
    aprés ta procedure tu refait
    gettime(heur,min,sec,cent);
    pui t2:=min*60*100+sec*100+cent;
    (et noublie pa de declarer heur,min,sec,cent a la place de tes h1,m1,s1..)
    puis tu fait T2-T1 et tu aurra la difference de temp

  12. #12
    Membre actif
    Avatar de mario52
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 131
    Points : 220
    Points
    220
    Par défaut
    Bonjour

    équivalent de GetTime en langage machine ;

    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
    program heure_;
    uses dos,crt;
     
    procedure heure;
    var heure,minute,seconde,centieme:byte;
        regis:registers;
    begin
      regis.ah:=$2C;          {appel de la fonction 2CH}
      intr($21,regis);        {interruption 21H du DOS}
                              {résultats obtenus}
      heure     :=regis.ch;   {registre CH (Hight)}
      minute    :=regis.cl;   {registre CL (Low)}
      seconde   :=regis.dh;   {registre DH (Hight)}
      centieme  :=regis.dl;   {registre DL (Low)}
                              {pour mémoire CX = 1 WORD}
                              {octet Fort   de CX : CH = 1 BYTE}
                              {octet Faible de CX : CL = 1 BYTE}
                              { CX = (CH * 256) + CL   }
      writeln(heure,':',minute,':',seconde,':',centieme);
    end;
     
    begin;
    clrscr;
    heure;
    readln;
    end.

  13. #13
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 950
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 950
    Points : 5 667
    Points
    5 667
    Par défaut
    Hio,
    Citation Envoyé par mario52
    Bonjour

    équivalent de GetTime en langage machine ;

    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
    program heure_;
    uses dos,crt;
     
    procedure heure;
    var heure,minute,seconde,centieme:byte;
        regis:registers;
    begin
      regis.ah:=$2C;          {appel de la fonction 2CH}
      intr($21,regis);        {interruption 21H du DOS}
                              {résultats obtenus}
      heure     :=regis.ch;   {registre CH (Hight)}
      minute    :=regis.cl;   {registre CL (Low)}
      seconde   :=regis.dh;   {registre DH (Hight)}
      centieme  :=regis.dl;   {registre DL (Low)}
                              {pour mémoire CX = 1 WORD}
                              {octet Fort   de CX : CH = 1 BYTE}
                              {octet Faible de CX : CL = 1 BYTE}
                              { CX = (CH * 256) + CL   }
      writeln(heure,':',minute,':',seconde,':',centieme);
    end;
     
    begin;
    clrscr;
    heure;
    readln;
    end.
    Ceci n'a rien à voir avec le langage machine, mais se contente d'appeler les interruptions du dos

  14. #14
    Membre actif
    Avatar de mario52
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 131
    Points : 220
    Points
    220
    Par défaut
    Bonjour

    Ceci n'a rien à voir avec le langage machine, mais se contente d'appeler les interruptions du dos
    A bon , et c'est quoi le langage machine ? l'assembleur ?

    langage machine est l'expression qui se trouve dans le livre que j'utilise ,
    pour différencier le pascal, cette façon de faire et l'assembleur

    alors ?


  15. #15
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 950
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 950
    Points : 5 667
    Points
    5 667
    Par défaut
    Goa,

    Tout ce que tu as fait, c'est l'appel d'une interruption du DOS en utilisant des type et procédure implémentés dans ton compilateur Pascal.
    Ton programme est donc tout simplement un programme... Pascal.

    Le "langage machine" correspond à l'assembleur, mais c'est une expression qu'on n'utilise plus beaucoup, on préfère utiliser le vrai nom : assembleur, tout simplement.

  16. #16
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Points : 4 312
    Points
    4 312
    Par défaut
    Pour moi le langage machine, c'est encore plus bas niveau, c'est-à-dire "000110001101110101110001110010101000000011111", du binaire quoi !

  17. #17
    Membre actif Avatar de Ultima
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 223
    Points : 261
    Points
    261
    Par défaut
    Bonjour,
    je suis tout à fait d’accords avec wormful_sickfoot, le langage machine, c’est du binaire (ou de l’hexa car c’est plus compact et plus parlant) et je pense que c’est un abus de langage que de dire que l’assembleur est un langage machine.
    Si l’on part d’un code hexa, on peut relativement facilement passer à un code assembleur (si on maitrise l’assembleur, ce qui n’est pas mon cas).
    C’est le fait qu’un code hexa soit relativement proche d’un code assembleur qui fait que beaucoup font l’amalgame.

    Pour revenir sur le code de Mario52: ce n’est pas de l’assembleur, et encore moins un langage machine.
    Et je rejoins droggo pour dire que c’est du pascal (dons un langage de haut niveau, complètement à l’opposé du langage machine qui est de bas niveau).

    Mario52 dit tenir ses informations sur le langage machine d’un livre. Je lui conseil de changer de livre car visiblement il y a erreur sur la définition qu’il a du langage machine.

    Remarque : Tout ce que je sais sur les langages de bas et haut niveau, je les tire d’un bouquin sur le C et le C++; bien évidement j’ai vérifié ces informations avant de poster une réponse.

  18. #18
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 950
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 950
    Points : 5 667
    Points
    5 667
    Par défaut
    Qao,
    Citation Envoyé par wormful_sickfoot
    Pour moi le langage machine, c'est encore plus bas niveau, c'est-à-dire "000110001101110101110001110010101000000011111", du binaire quoi !
    Si on veut y aller, ce n'est pas ça non plus : c'est un gros tas de transistors passants ou pas, plus des capas chargées ou non, des impulsions électriques, etc..., je ne vais pas vous expliquer le fonctionnement d'un processeur, n'est-ce pas.

    Je n'aime d'ailleurs pas l'expression "langage machine", et je comprends pourquoi on ne l'utilise pratiquement plus, c'est trop vague.

    Pour en revenir à l'assembleur, il est généralement considéré comme étant du "langage machine", car étant le plus proche du processeur, et pour cause. Mais on peut effectivement considérer qu'il s'agit d'un abus de langage.

    Et certes, il vaut mieux parler de langage de très bas niveau, ça exprime mieux ce que l'on veut dire.
    Encore qu'il faudrait s'entendre sur la définition des niveaux des langages, car c'est parfois un peu flou quand même.

  19. #19
    Membre actif Avatar de Ultima
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 223
    Points : 261
    Points
    261
    Par défaut
    salut,
    Citation Envoyé par droggo
    Si on veut y aller, ce n'est pas ça non plus : c'est un gros tas de transistors passants ou pas, plus des capas chargées ou non, des impulsions électriques, etc..., je ne vais pas vous expliquer le fonctionnement d'un processeur, n'est-ce pas.
    Il existe une définition très précise de ce qu’est le langage machine ; si on s’y tient, l’affirmation de wormful_sickfoot est irréfutable.
    Citation Envoyé par droggo
    Encore qu'il faudrait s'entendre sur la définition des niveaux des langages, car c'est parfois un peu flou quand même.
    Je pense que ce n’est peut être pas si flou que ça ;
    Les langages de bas niveau sont L’ASM et le langage machine, ils sont caractérisés par le fait que le développeur doit tenir compte du processeurs pour lequel il conçoit son code.

    Avec les langages de haut niveau, on ne ce soucis plus du processeur avec lequel on travail, et ce n’est plus le développeur qui défini la gestion de la mémoire.
    On ne distingue donc que deux famille complètement distinctes.

  20. #20
    Responsable Pascal, Lazarus et Assembleur


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

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 964
    Points : 59 662
    Points
    59 662
    Billets dans le blog
    2
    Par défaut
    L'ajout de "code machine" directement dans un programme se fait par une directive inline comme dans cet exemple de l'aide de TP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
       PROCEDURE FillWord(VAR Dest; Count: WORD;
         Data: WORD);
       BEGIN
         INLINE(
           $C4/$7E/<Dest/   { LES   DI,Dest[BP]  }
           $8B/$4E/<Count/  { MOV   CX,Count[BP] }
           $8B/$46/<Data/   { MOV   AX,Data[BP]  }
           $FC/             { CLD                }
           $F3/$AB);        { REP   STOSW        }
       END;

Discussions similaires

  1. Mesurer le temps d'exécution d'un programme
    Par ArthurC dans le forum Pascal
    Réponses: 3
    Dernier message: 21/04/2008, 14h28
  2. Mesure du temps d'exécution
    Par michaeljeru dans le forum SL & STL
    Réponses: 2
    Dernier message: 23/11/2007, 13h28
  3. Mesurer le temps d'exécution d'un bout de code
    Par Floréal dans le forum C++
    Réponses: 4
    Dernier message: 06/04/2007, 09h46
  4. mesurer le temps d'exécution d'une fonction
    Par Fonzy007 dans le forum C
    Réponses: 12
    Dernier message: 28/12/2006, 17h27
  5. Réponses: 6
    Dernier message: 22/09/2005, 16h59

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