No entiendo en que falla mi programa
Publicado por evolve (5 intervenciones) el 16/07/2021 11:30:11
Hola tengo que realizar un trabajo que consiste en la desintegración nuclear. Si alguien tiene tiempo de echarle un vistazo a mi código, estaría muy agradecido ya que me da error desde hace semanas y no entiendo por que.
El programa consiste en que empiezas con un determinado numero de nucleos activos, y en cada paso del codigo se elige un nucleo aleatorio y se desintegra (pasa de 1 a 0), el objetivo es realizar un determinado numero de simulaciones y hacer la media de nucleos desintegrados cada cierto numero de pasos. Pero no entiendo porque me salen numeros aleatorios a veces y otras veces solo funciona con un numero de simulaciones bajo (por ejemplo 10), y tengo que lograr hacerlo con hasta 10000 simulaciones. Pero supongo que a medida que avanza tiene mas probabilidades de producirse un error en el codigo.
Bueno dejo el codigo aqui, si alguien tiene tiempo de echarle un vistazo estaría muy agradecido ya que me da error desde hace semanas y no entiendo por que.
El programa consiste en que empiezas con un determinado numero de nucleos activos, y en cada paso del codigo se elige un nucleo aleatorio y se desintegra (pasa de 1 a 0), el objetivo es realizar un determinado numero de simulaciones y hacer la media de nucleos desintegrados cada cierto numero de pasos. Pero no entiendo porque me salen numeros aleatorios a veces y otras veces solo funciona con un numero de simulaciones bajo (por ejemplo 10), y tengo que lograr hacerlo con hasta 10000 simulaciones. Pero supongo que a medida que avanza tiene mas probabilidades de producirse un error en el codigo.
Bueno dejo el codigo aqui, si alguien tiene tiempo de echarle un vistazo estaría muy agradecido ya que me da error desde hace semanas y no entiendo por que.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
//Ejercicio 1
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#define lambda 0.13
int main(){
int anos,k,x,suma,h,i,j,N,Aj;
long int M;
//Pedimos variables
printf("Numero de nucleos (N): ");
scanf("%d", &N);
fflush(stdin);
printf("Numero de simulaciones (M): ");
scanf("%i", &M);
fflush(stdin);
printf("Intervalo de pasos (Aj): ");
scanf("%d", &Aj);
fflush(stdin);
printf("Limite de años: ");
scanf("%d", &anos);
fflush(stdin);
//Definimos el numero de pasos necesarios
int pasos=anos*(lambda*N);
int limite = pasos/Aj;
//Definimos estos dos arrays
int promedio[limite];
float intervalo[limite][M],t[limite];
//La variable intervalo contiene el numero de nucleos activos al cabo de [pasos][simulación]
for(i=0;i<limite;i++){
for (k=0;k<M;k++){
intervalo[i][k]=0;
}
//Randomizamos mediante el tiempo que marca el ordenador
srand(time(NULL));
int n[N];
//Aqui empieza el bucle para M simulaciones
for(k=0;k<M;k++){
printf("\n\nSimulacion numero %d\n\n",k+1);
j=0;
x=0;
for(i=0;i<N;i++){
n[i]=1;
}
suma=0;
for(i=0;i<N;i++){
suma += n[i];
}
do{
if (j%Aj==0){
printf("\nNucleos activos en %i pasos: %i\n",x*Aj,suma);
intervalo[x][k]=suma;
x++;
}
suma=0;
j++;
i=rand()%(N+1);
if(n[i]==1){
n[i]=0;
}
for(i=0;i<N;i++){
suma += n[i];
}
}while(suma!=0);
//Queremos que nos de valores hasta que la suma del total sea 0, es decir que no quede ningun nucleo
}
//Declaramos el fichero donde almacenaremos los datos
FILE *fichero;
fichero= fopen("datos15.dat","w");
printf("\n\n");
int f=0;
for (x=0;x<=limite;x++){
int suma1=0;
//Hacemos el promedio de los datos obtenidos en cada intervalo de tiempo
for(k=0;k<M;k++){
suma1=suma1+intervalo[x][k];
}
promedio[x]=suma1/M;
t[x]=(x*Aj)/(N*lambda);
fprintf(fichero,"%f %i\n",t[x],promedio[x]);
f++;
}
fclose(fichero);
printf("Tu archivo con los datos ha sido creado.\n");
system("pause");
return 0;
}
}
Valora esta pregunta


0