Buenas a todos, estoy haciendo un programita en C y a la hora de compilar me da el error que da título al post. He estado buscando por la red y parece ser que ese error ocurre cuando está mal definido el main. El caso es que he repasado el codigo unas cuantas veces y no encuentro nada. Os lo pego a ver si podéis echarle un vistazo.
#include <stdio.h>
#include <stdlib.h>
//#define debug //saca datos por pantalla
FILE *fout;
double frandom(double min, double max) //FUNCION GENERAR RANDOM
{
/*Genera un número double random en el intervalo [min,max] */
return min+(max-min)*rand()/((double)RAND_MAX+1));
}
// FIN DE FUNCION GENERAR RANDOM
void histogram(double *dat, double *hist, int n_dat, int n_inter, double *d, double *m, double *M) //FUNCION HISTOGRAMA
{
/* Genera un histograma. Calcula el min y el max en funcion de dat para un mejor ajuste.
*data input dat
*hist output histdat
n_data input nº de dat
n_inter input nº de inter
*d output ancho inter
*m output min de dat
*M output max de dat */
int i,k;
double anch,min,max,norm;
for (i=0;i<n_inter;i++) //Inicializo
hist=0;
min=-10000000;
max=10000000;
for (i=0;i<n_dat;i++); //Calculo max y min
{
if (dat<min)
min=dat;
if (dat>max)
max=dat;
}
anch=(max-min)/n_inter; //calculo el ancho de intervalo
if (anch==0) //¿problemas de redondeo?
{
printf("Error: No se pueden calcular los intervalos; max=%lf, min=%lf\n",max,min);
exit(1);
}
for(i=0;i<n_dat;i++) //Calculo el histograma
{
k=(dat-min)/anch;
hist[k]++;
#ifdef DEBUG //Saca datos por pantalla
printf("x=%f, H[%d]=%f\n",k*anch+min,k,hist[k]);
#endif
}
*d=anch;
*m=min;
*M=max;
norm=1,0/(n_dat*anch);
for (i=0;i<n_inter;i++)
hist*=norm;
}
//FIN DE FUNCION HISTOGRAMA
void main(void)
{
#define PAS_MAX 100000 //defino nº de pasos máximo
#define n_inter 100 //defino el numero de intervalos
float min, max, pas, epsilon, delta,ini;
double dat[PAS_MAX+1], hist[ninter];
int i;
printf("Dame el min:\n"); //defino el rango y la posición inicial
scanf("%f",&min);
printf("Dame el max:\n");
scanf("%f",&max);
printf("Dame el ini:\n");
scanf("%f",&ini);
if (ini>max) //compruebo que la posición inicial esté dentro del rango
{
printf("Demasiado grande.\n");
exit(0);
}
else if (ini<min)
{
printf("Demasiado pequeno.\n");
exit(0);
}
dat[0]=ini; //¡La posición inicial es un dato válido!
epsilon=(max-min)/100; //Preguntar dudas sobre el tamaño en relación al número de pasos, rango e histograma
printf("Dame el numero de pasos:\n");
scanf("%f",&pas);
if (pas>PAS_MAX)
{
printf("Demasiados pasos.\n");
exit(0);
}
for (i=1;i<pas;i++) //genero número aleatorio, calculo la nueva posición y la mando a la función histograma
{
delta=frandom(-epsilon,epsilon);
ini=ini+delta;
if (ini>max) //Soluciono el problema de los bordes
ini=ini-max+min;
else if (ini<min)
ini=ini-min+max;
dat=ini;
}
/* for (i=0;i<pas;i++)
printf("%f\n",dat); */
histogram(dat,hist,pas+1,ninter,&anch,&min,&max); //Calculo del histograma
#ifdef DEBUG //Escribo datos por pantalla en modo DEBUG
for(i=o;i<n_inter;i++)
printf("%d\t %f\t %f\n",i,i*anch+min,hist);
#endif
fout=fopen("hist.dat","wt"); //Abro el archivo, escribo los datos y lo cierro
for (i=0;i<n_inter;i++)
fprintf(fout,"%d\t %f\t %f\n",i,i*anch+min,hist);
fclose(fout);
}