Ho un problema con questo esercizio (se serve poi allego anche il testo).
Succede che quando voglio scrivere su file le coordinate di x e y
f = fopen("coordinate.txt","w");
for(i=0; i<N; i++)
{
genconv(&x,&y);
if (isnicirlce(x, y, N, XC2, YC2, R2))
{
fprintf(f, "%lf %lf\n",x, y);
bhit++;
}
}
fclose(f);
e poi controllo sul file quali siano effettivamente noto una discrepanza.
Prima ho provato a farmele stampare e mi venivano molti valori diversi da 0, mentre ora controllando il file noto invece che ci sono moltissimi valori uguali a 0. Come mai? Sinceramente non credo sia normale
Svolgimento completo
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#define XC1 0.0
#define YC1 0.0
#define R1 2.0
#define XC2 -0.8
#define YC2 0.0
#define R2 1.2
#define L 4.0
#define N 10000
void genconv(double *x, double *y);
int isnicirlce(double z, double k, int n, double xc, double yc, double R);
int main()
{
double F, x, y, pcoord[N][2], H;
int i, hit=0, bhit=0;
FILE *f;
srand(time(NULL));
for(i=0; i<N; i++)
{
genconv(&x,&y);
pcoord[i][0] = x;
pcoord[i][1] = y;
if (isnicirlce(x, y, N, XC1, YC1, R1))
{
hit++;
}
}
f = fopen("coordinate.txt","w");
for(i=0; i<N; i++)
{
genconv(&x,&y);
if (isnicirlce(x, y, N, XC2, YC2, R2))
{
fprintf(f, "%lf %lf\n",x, y);
bhit++;
}
}
fclose(f);
F = (L*L) * hit/(double)N;
H = F - (L*L) * bhit/(double)N;
printf("Numero di Lanci: %d | Area della figura a: %lf | Area della figura b: %lf\n", N, F, H);
}
void genconv(double *x, double *y)
{
double a,b;
a = -2+((double)rand()/RAND_MAX)*4;
b = -2+((double)rand()/RAND_MAX)*4;
*y = b;
*x = a;
}
int isnicirlce(double z, double k, int n, double xc, double yc, double R)
{
double distanza;
distanza = sqrt(pow(z - xc,2) + pow(k - yc,2));
if (distanza < R)
{
return 1;
}
else
{
return 0;
}
}