|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Bannato
Iscritto dal: Mar 2007
Messaggi: 35
|
funzione CRONOMETRO in C#
salve ragazzi, devo cronometrare il tempo di esecuzione di questo programma per analizzarne la complessità, solo che con le spiegazioni riguardo la funzione CLOCK_T trovate in rete non ci sono riuscito
Codice:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define MAX 10
clock_t clock(void) {
clock_t start, end;
double millisec;
time_t app;
start = clock();
end = clock();
millisec = (end-start)/(CLOCKS_PER_SEC /(double) 1000.0);
printf(clock());
return clock();
}
/*
* Legge in input il numero n ed n numeri interi
* che memorizza nell'array. Restituisce il numero
* di elementi letti (n).
*/
int leggi_array(int x[]) {
int i, n;
x[MAX]=rand();
return(MAX);
}
/*
* Stampa in output l'array.
*/
void stampa_array(int x[], int n) {
int i;
for (i=0; i<n; i++) {
printf("%d ", x[i]);
}
printf("\n");
return;
}
/*
* Scambia il contanuto delle due variabili
* indirizzate dai puntatori x e y.
*/
void scambia(int *x, int *y) {
int z;
z = *x;
*x = *y;
*y = z;
return;
}
/*
* Funzione che implementa l'algoritmo Bubble sort.
* Riceve come argomento l'array ed il numero di
* elementi contenuti nell'array. Non restituisce alcun
* valore, ma modifica il contenuto dell'array, ordinandolo.
*/
void bubble_sort(int x[], int n) {
int flag=1, k=n-1, i;
while (flag == 1 && k > 0) {
flag = 0;
for (i=0; i<k; i++) {
if (x[i]>x[i+1]) {
scambia(&x[i], &x[i+1]);
flag = 1;
}
}
k = k-1;
}
return;
}
/*
* Funzione principale
*/
int main(void) {
int v[MAX], n,m,u;
n = leggi_array(v);
stampa_array(v, n);
printf("premere un tasto per iniziare\n");
scanf("%d", &m);
bubble_sort(v, n);
clock_t(bubble_sort);
printf("ordinamento effettuato\n");
return(1);
}
|
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Il tipo di dato clock_t e la funzione clock() si usano per esempio così: Codice:
clock_t start, end; double duration; start = clock (); /*... tue operazioni da cronometrare ...*/ end = clock (); duration = (double)(end-start) / CLOCKS_PER_SEC;
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#3 | |
|
Bannato
Iscritto dal: Mar 2007
Messaggi: 35
|
Quote:
ora è un po' più chiaro con la tua spiegazione, ma poi come faccio a far stampare a video la durata? |
|
|
|
|
|
|
#4 | ||
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Quindi clock() ritorna un valore che è proporzionale al tempo usato dal processo. Se mettessi un clock() all'inizio del programma (all'inizio del main, ad esempio), otterrei 0. Man mano si incrementa. Quote:
printf ("%.3f secondi\n", duration);
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
||
|
|
|
|
|
#5 | |
|
Bannato
Iscritto dal: Mar 2007
Messaggi: 35
|
Quote:
|
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
long double? Spiega meglio. Intendi dire poter gestire un array espandibile? Devi usare l'allocazione dinamica: malloc/realloc/free.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#7 |
|
Bannato
Iscritto dal: Mar 2007
Messaggi: 35
|
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Quindi fai un po' tu dei conti .... Altrimenti definisci l'array fuori dalle funzioni oppure dentro una funzione ma marcato 'static'. Insomma... deve avere durata fissa e non automatica.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#9 |
|
Bannato
Iscritto dal: Mar 2007
Messaggi: 35
|
guarda l' ho impostato all' inizio del programma che ho allegato, però mi sa hai ragione c'è il problema dello stack
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Codice:
int main(void) {
int v[MAX], n,m,u;
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#11 |
|
Bannato
Iscritto dal: Mar 2007
Messaggi: 35
|
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
O lo lasci dove è ma lo dichiari 'static' oppure lo metti fuori dalle funzioni.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:35.



















