mesure de temps en c++

mesure de temps en c++ - C++ - Programmation

Marsh Posté le 10-12-2006 à 15:01:21    

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

Reply

Marsh Posté le 10-12-2006 à 15:01:21   

Reply

Marsh Posté le 10-12-2006 à 15:04:29    

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

Reply

Marsh Posté le 10-12-2006 à 15:27:53    

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.      }

Reply

Marsh Posté le 10-12-2006 à 16:31:40    

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
Reply

Marsh Posté le 10-12-2006 à 18:48:57    

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???

Reply

Marsh Posté le 10-12-2006 à 18:52:13    

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.

Reply

Marsh Posté le 10-12-2006 à 19:00:20    

merci.je vais essayer!!

Reply

Marsh Posté le 10-12-2006 à 20:42:05    

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
Reply

Marsh Posté le 10-12-2006 à 23:14:08    

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
Reply

Marsh Posté le 11-12-2006 à 08:32:41    

y a du bon dans boost pour mesurer le temps.

Reply

Marsh Posté le 11-12-2006 à 08:32:41   

Reply

Marsh Posté le 11-12-2006 à 11:38:51    

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:

Reply

Marsh Posté le 11-12-2006 à 12:35:30    

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

Reply

Marsh Posté le 11-12-2006 à 13:45:31    

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)

Reply

Marsh Posté le 11-12-2006 à 19:01:26    

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 :/

Reply

Marsh Posté le 11-12-2006 à 21:37:33    

ame1560 a écrit :


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


j'attends votre secours...


 

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


 
ne fonctionne pas mieux ?

Reply

Marsh Posté le 12-12-2006 à 09:06:55    

non parce que le format est %f

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed