Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1235 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  mesure de temps en c++

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

mesure de temps en c++

n°1489222
ame1560
Posté le 10-12-2006 à 15:01:21  profilanswer
 

salut..
je suis débutante en c++ ,
   je cherche à calculer le temps d'execution d'un programme, j'ai utilisé clock() de time.h : le pb c'est que le temps d'execution est toujours 0,je pense que je doit convertir en millisecondes; mais comment??
 
merci d'avance..

mood
Publicité
Posté le 10-12-2006 à 15:01:21  profilanswer
 

n°1489224
karlkox
Posté le 10-12-2006 à 15:04:29  profilanswer
 

Tu utilises bien le type clock_t comme valeur de retour ? Pense aussi à utiliser un double pour calculer le temps cpu de (l'arrivée - départ) / CLOCKS_PER_SEC

n°1489228
ame1560
Posté le 10-12-2006 à 15:27:53  profilanswer
 

normalement j'ai fait ce que tu ma dit...
voici mon code:

Code :
  1. #include <stdio.h>
  2. #include <time.h>
  3. int main ()
  4. {
  5. int n,i,j,m, t[100] ,nbrpermut;
  6. clock_t start, end;
  7. double elapsed;
  8. printf("donnez la dimension de votre tableau" );
  9. scanf("%d",&n);
  10. for (i=0;i<n;i++)
  11. {
  12. printf("t[%d]=",i)
  13. ;scanf ("%d",&t[i]);
  14. }
  15. start = clock(); /* Lancement de la mesure */
  16.     nbrpermut=0;
  17. for (i=0;i<n;i++)
  18.     for (j=0;j<n;j++)
  19.     if (t[i]>t[j])
  20.     { m=t[i];
  21.     t[i]=t[j];
  22.     t[j]=m;
  23.     nbrpermut=nbrpermut+1;
  24.     }
  25.     for (i=0;i<n;i++)
  26.      printf ("%d",t[i]);
  27.      end = clock();  /* Arret de la mesure */
  28.      elapsed = ((double)end - start) / CLOCKS_PER_SEC; /* Conversion en seconde */
  29.      printf("\n%if",elapsed);
  30.      }

n°1489243
ptitchep
Posté le 10-12-2006 à 16:31:40  profilanswer
 

euh...
vu comme ça, je ne sais pas ce qui cloche...
essaie:
elapsed = double(end - start) / CLOCKS_PER_SEC;
Vérifie aussi que ça ne soit pas ton affichage qui soit mauvais. Moi je ne sais plus utiliser printf mais si ca se trouve, tu affiches un entier ou quelque chose comme ça...
 
Pour information ton code est entièrement en C, pas en C++, à partir des #include jusqu'aux printf, en passant par les scanf
 
sinon il existe un fonction time() je crois mais peut être qu'elle n'est pas assez précise, j'en ai aucune idée.


Message édité par ptitchep le 10-12-2006 à 16:32:16

---------------
deluser --remove-home ptitchep
n°1489276
ame1560
Posté le 10-12-2006 à 18:48:57  profilanswer
 

j'ai revirifier mon code, il fallait ecrire "%lf" dans scanfs pas "%if"^^
j'ai changer l'ecriture de elapsed = double(end - start) / CLOCKS_PER_SEC;
elle est plus logique..
quand j'execute le temps est toujours 0;mais le temps de l'execution pas à pas est different de 0 donc le pgm marche; seulement je doit inserer un tableau de dimension plus grande que j'avait l'habitude de le faire(j'executais avec 10 éléments au maximum!!)mais Comment le remplir???

n°1489277
ptitchep
Posté le 10-12-2006 à 18:52:13  profilanswer
 

ben avec une boucle qui le remplit avec des nombres aléatoires(ou non) ( random() ou quelque chose comme ca) ou alors lecture d'un fichier de données. Tu peux aussi tout rentrer à la main à chaque fois mais bon courage.

n°1489281
ame1560
Posté le 10-12-2006 à 19:00:20  profilanswer
 

merci.je vais essayer!!

n°1489288
ame1560
Posté le 10-12-2006 à 20:42:05  profilanswer
 

bon,j'ai essayé ça pour remplir le tableau mais ça marche pas ; :??:  

Code :
  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <stdlib.h>
  4. int my_rand (void);
  5. void main ()
  6. {
  7. int n,i,j,m, t[100] ,nbrpermut;
  8. clock_t start, end;
  9. double elapsed;
  10. printf("donnez la dimension du tableau :" );
  11. scanf("%d",&n);
  12. randomize();
  13. for (i=0;i<n;i++)
  14. {
  15. printf("\nt[%d]=%d",i,rand());
  16. scanf ("%d",&t[i]);
  17. }
  18. start = clock(); /* Lancement de la mesure */
  19.     nbrpermut=0;
  20. for (i=0;i<100;i++)
  21.     for (j=0;j<n;j++)
  22.     if (t[i]>t[j])
  23.     { m=t[i];
  24.     t[i]=t[j];
  25.     t[j]=m;
  26.     nbrpermut=nbrpermut+1;
  27.     }
  28.     for (i=0;i<n;i++)
  29.      printf ("%d",t[i]);
  30.      end = clock();  /* Arret de la mesure */
  31.      elapsed = ((double)end - start) / CLOCKS_PER_SEC; /* Conversion en seconde */
  32.      printf("\n%lf",elapsed);
  33.      }


j'attends votre secours...

Message cité 2 fois
Message édité par ame1560 le 10-12-2006 à 20:42:44
n°1489327
ptitchep
Posté le 10-12-2006 à 23:14:08  profilanswer
 

ame1560 a écrit :

bon,j'ai essayé ça pour remplir le tableau mais ça marche pas ; :??:  
 
j'attends votre secours...


 
ca manque de recherches on dirait...
ca va que c'est noël... [:amg]
 

Code :
  1. #include <stdlib.h>
  2. for(i=0;i<n;i++)
  3.        t[i]=(double(random())/RAND_MAX)*valeurMaxVoulue;


 
ou du moins quelque chose comme ça. Peut-etre srandom()...
random() renvoie un nombre entre 0 et RAND_MAX donc si tu divises par RAND_MAX t'obtiens un nombre entre 0 et 1.
Si après tu multiplies par la valeur max que tu recherches, tu obtiens un nombre entre 0 et cette valeur.
 
man random si tu es sous linux
sinon [:alkatraz]


---------------
deluser --remove-home ptitchep
n°1489360
Taz
bisounours-codeur
Posté le 11-12-2006 à 08:32:41  profilanswer
 

y a du bon dans boost pour mesurer le temps.

mood
Publicité
Posté le 11-12-2006 à 08:32:41  profilanswer
 

n°1489449
franceso
Posté le 11-12-2006 à 11:38:51  profilanswer
 

Taz a écrit :

y a du bon dans boost pour mesurer le temps.


Tu parles de timer ?
 
Si oui, je trouve pas ça fantastique pour les mesures de performances : pas moyen de différencier user / system time, etc. :spamafote:

n°1489489
Taz
bisounours-codeur
Posté le 11-12-2006 à 12:35:30  profilanswer
 

si c'est ça que tu veux faire, alors utilise un profiler / strace / ltrace / etc

n°1489532
franceso
Posté le 11-12-2006 à 13:45:31  profilanswer
 

Taz a écrit :

si c'est ça que tu veux faire, alors utilise un profiler / strace / ltrace / etc


Oui, c'est bien ce que je fais, mais j'attends toujours une solution portable pour mesurer des temps de calculs (y compris en cas de calcul parallèle)

n°1489765
Joel F
Real men use unique_ptr
Posté le 11-12-2006 à 19:01:26  profilanswer
 

franceso a écrit :

Oui, c'est bien ce que je fais, mais j'attends toujours une solution portable pour mesurer des temps de calculs (y compris en cas de calcul parallèle)


 
Bon courage :/

n°1489850
boulgakov
Posté le 11-12-2006 à 21:37:33  profilanswer
 

ame1560 a écrit :


Code :
  1. printf("\n%lf",elapsed);


j'attends votre secours...


 

Code :
  1. printf("\n%Lf",elapsed);


 
ne fonctionne pas mieux ?

n°1489946
Taz
bisounours-codeur
Posté le 12-12-2006 à 09:06:55  profilanswer
 

non parce que le format est %f


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  mesure de temps en c++

 

Sujets relatifs
Obtenir le temps restantfonction qui s'autoexecute a chaque periode de temps defini
Temps d'execution d'un programme[C] comment simuler l'écoulement du temps ?
temps d'execution qui augmenteSessions qui ne durent pas dans le temps
En combien de temps ?[OCaml] Une mesure du temps, plus précise que Sys.time()
Mesure du temps CPU d'une partie d'un programme 
Plus de sujets relatifs à : mesure de temps en c++


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR