Istogrammi random walking

di Anonimizzato29928 il
1 risposte
Buongiorno a tutti.
Sto scrivendo un programma che generi Ntra traiettorie con moto random walking conteggiando il numero di volte che la particella soggetta al moto capiti in una certa posizione (array h). Tuttavia quando vado a stampare l'array risulta nullo (tranne per alcune posizioni in cui i numeri conteggiati sono a 8 o a 9 cifre).
Credo ci sia un errore nell'allocazione dell'array.
Riporto di seguito il codice.
Grazie in anticipo!!!

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int Tmax, Ntra;

int main(int argc, char*argv[]){
int b = 2;
int imax, measTime;
int **h;
int i, t, x;
long int seed;

if(argc != 3){
fprintf(stderr, "L'ordine deve essere %s Tmax, Ntra\n", argv[0]);
exit(EXIT_FAILURE);
}

Ntra = atoi(argv[2]);
Tmax = atoi(argv[1]);

srand(seed);

imax = (int)(log(Tmax)/log(b));

h=(int**)calloc(imax+1, sizeof(int*));
if(h == NULL){
printf("Locazione fallita\n");
}
t=1;

for(i=1; i<=imax; i++){
t*=b;
h=(int*)calloc(t+1, sizeof(int));
if(h == NULL){
printf("Locazione fallita\n");
}
}
for(int j=1; j<=Ntra; j++){
measTime=b;
i=0;
x=0;
for(t=1; t<=Tmax; t++){
x += -1+2*(int)(((double)rand()/RAND_MAX)*2);
if(t==measTime){
i++;
h[(int)((x+t)/2)]++;
measTime*=b;
}
}
}


for(i=1; i<=imax; i++){
Tmax*=b;
for(int y=1; y<=Tmax; y++){
printf("%d %d %d\n", i, 2*y-Tmax, h[y]);
}
}

for(i=1; i<=imax; i++){
free(h);
}
free(h);
}



P.S sto compilando con Tmax=10 e Ntra=15.

1 Risposte

  • Usa i tag code, che come vedi non si capisce nulla (tasto < / >)
Devi accedere o registrarti per scrivere nel forum
1 risposte