Calcolo CPU time

Alina81
Salve a tutti!
Mi servirebbe calcolare il CPU time di un mio algoritmo. Usando però le funzioni clock() o time(NULL) il programma non esegue più :(. Come posso risovere il problema?

Risposte
nessuno.nobody
"il programma non esegue più": cosa intendi?

Alina81
Sto usando code blocks. Mi esegue solo la prima printf in cui chiedo di inserire un intero e poi spunta "Process terminated with status -1073741510".

nessuno.nobody
Stiamo parlando in maniera troppo generica, se non si ha a disposizione il codice si possono fare infinite ipotesi tutte inutili. Potresti postarlo?

Alina81
Posso mandartelo in un messaggio privato?

nessuno.nobody
No.
Sarebbe meglio metterlo qui in maniera che chiunque passi possa leggerlo e contribuire (o usufruire in futuro delle informazioni scambiate)

Alina81
Ok, hai ragione. Il codice è un crivello di Eratostene. La stessa cosa mi succede con un altro programma che implementa il crivello di Atkin.

#include
#include
#include

#define MAX 520708
#define PRIMO 1
#define COMPOSTO 0

main(){
long int n, a[MAX], i, j, k;
printf("Seleziona un numero (diverso da 0): ");
scanf( "%d" , &n);
k = clock();
if (n>MAX || n==0) printf("Non valido");
else {
for(i=0;i a = PRIMO;
a[0] = COMPOSTO;
a[1] = COMPOSTO;
for(i=2;i {for(j=2;j<=(n/i);j++)
{a[i*j] = COMPOSTO;}}
k=clock-k;
for(i=0;i {if (a != COMPOSTO)
printf("%d ", i);
}
printf("%d", k);
}

Alina81
Scusami, c'è un clock senza parentesi. Ma non funziona lo stesso :(

nessuno.nobody
#include<stdio.h>
#include<math.h>
#include<time.h>

#define MAX 520708
#define PRIMO 1
#define COMPOSTO 0

int main(void)
{
        long int n, a[MAX], i, j, k;

        printf("Seleziona un numero (diverso da 0): ");
        scanf( "%ld" , &n);

        k = clock();
        if (n>MAX || n==0)
                printf("Non valido");
        else
        {
                for(i=0;i<n;i++)
                        a[i] = PRIMO;
                a[0] = COMPOSTO;
                a[1] = COMPOSTO;

                for(i=2;i<sqrt(n);i++)
                {
                        for(j=2;j<=(n/i);j++)
                        {
                                a[i*j] = COMPOSTO;
                        }
                }

                k=clock()-k;

                for(i=0;i<n;i++)
                {
                        if (a[i] != COMPOSTO)
                                printf("%ld ", i);
                }

                printf("%ld", k);
        }

        return 0;
}


Così il codice è messo un po' meglio.
Ti ho sistemato il fatto che usi %d quando sti usando dei long int (che vogliono un %ld) e ti ho indentato un minimo decentemente il codice.

Comunque, stai usando la funzione sqrt che si trova in math.h, però devi dire a code blocks di passare al compilatore il parametro: -lm, dato che devi linkare la libreria math ;)

Alina81
Ecco, devo togliermi questo vizio di scrivere %d al posto di %ld xD grazie, ora funziona :)

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.