Ho un problema, nel file distribstelle.txt i valori dell'array d sembrano essere non inizializzati, come mai?
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
double z(int k);
double theta(int j);
double getNumber(char *strng, double arg1, double arg2);
void fillDistribution(int d[], int n, float x);
int main(int argc, char **argv)
{
srand(time(NULL));
int N=0, k=0, i, d[100];
double x, y, number=0, radius;
FILE *f;
radius = getNumber("Inserire la misura del raggio medio dell'ammasso in parsec ",1.,25.);
do
{
number = getNumber("Inserire il numero di stelle da generare ",1000.,100000.);
if (number != floor(number))
{
printf("Errore: il numero dev'essere intero.\n");
number = 0.;
}
}
while (number <= 0.);
N = number;
f = fopen("stelle.txt","w");
for (i=0; i<N; i++)
{
x = radius*z(i)*cos(theta(i));
y = radius*z(i)*sin(theta(i));
fprintf(f,"%lf %lf\n",x, y);
fillDistribution(d, 100, x);
}
fclose(f);
f = fopen("distribstelle.txt","w");
for (i=0; i < 100; i++)
{
fprintf(f, "%d %d\n", i-50, d[i]);
}
return 0;
}
double getNumber(char *strng, double arg1, double arg2)
{
double number;
do
{
printf("%s ",strng);
scanf("%lf",&number);
if (number < arg1 || number > arg2)
{
printf("\nERRORE: inserire un numero tra %lf e %lf\n\n",arg1, arg2);
}
}
while (number < arg1 || number > arg2);
return number;
}
double z(int k)
{
double a[2], z;
for (k=0;k<2;k++)
{
a[k] = ((double)rand()/RAND_MAX);
}
z = sqrt(-2*log(a[0])) * cos(2*M_PI*a[1]);
return z;
}
double theta(int j)
{
double angolo;
angolo = 2*M_PI* ((double)rand()/RAND_MAX);
return angolo;
}
void fillDistribution(int d[], int number, float x)
{
int index = x;
if (x < 0.)
{
index = number/2 + x;
}
else
{
index += number/2;
}
if ((index > 0) && (index < number))
{
d[index]++;
}
}