haber si me podeis exar una manilla, al final he optado utilizar este metodo para generar numero "pseualeatorios". Lo ke kiero conseguir con este programa es generar n numeros "pseualeatorios" con la formula Xi+1=(a*Xi+c)mod M y finalmente el numero aleatorio seria Ui=Xi/M
Código:
#include <stdio.h>
#include <stdlib.h>
int M,a,c,X,n,U;
short i;
char nombre_fichero[20];
FILE* pf;
int main(int argc, char *argv[])
{
printf(" programa, \n");
printf(" Para generar n numeros aleatorios,\n");
printf(" por elmetodo de congruencial lineales\n\n\n");
// entrada de datos
printf("Introduce a\n ->\n");
scanf("%d",&a);
printf("Introduce c\n ->\n");
scanf("%d",&c);
printf("Introduce M\n ->\n");
scanf("%d",&M);
printf("Introduce semilla\n ->\n");
scanf("%d",&X);
printf("Introduce cuantos numeros quieres obtener?\n ->\n");
scanf("%d",&n);
printf("En que fichero lo guardo?\n ->\n\n");
scanf("%s", &nombre_fichero);
// codigo
pf=fopen(nombre_fichero, "w");
for(i=0; i<n; ++i)
{
X=(((a * X + c) % M));
U=X/M;
printf("Numero %i %d\n",i,U);
fprintf(pf,"%d\n",U);
}
El problema lo tengo aki arriba, porke una vez ke se genera este vector luego loo tengo ke dividir por M, pero a dividir por m me da 0 :( (xke si no divido por m me salen los numeros aleatorios, supongo ke tendra ke ver algo con el tipo de declracion de las variables noo?? porke no aceptara numeros decimales ???)
fclose(pf);
system("PAUSE");
return 0;
}
Luego esto lo tengo ke almacenar en un vector o lo ke sea, para un segundo archivo me lo lea y haga unos test para saber si es bueno o no los numeros aleatorios (sumar por ejemplo todos los numeros aleatorios y elevarlo a un cierto numero y dividirlo por la cantidad de numero ke he generado).
Ke aki viene mi segundo problema, xke en el primer programa te pide n numeros y claro no se cuantos van a elegir y si no pongo exactamente los mismos numeros ke he generado en la declaracion del vector en el segundo programa no funciona... aki os dejo el codigo del segundo programa
Código:
#include <stdio.h>
#include <stdlib.h>
int vector[100];
short i;
char nombre_archivo[20];
FILE *pf;
int n;
double suma;
int main(int argc, char *argv[])
{
//abrir archivo
printf("introduce el nombre del archivo\n");
scanf("%s",nombre_archivo);
printf("Introduce cuantos numeros has generado\n");
scanf("%d",n);
pf = fopen(nombre_archivo, "r");
if(pf == NULL)
{
printf("No se ha podido abrir el archivo.\n");
printf("Pulse una tecla para finalizar... ");
exit(1);
}
while(fscanf(pf,"%i",vector + i++)!= EOF);
if (fclose(pf)!=0){
printf( "Problemas al cerrar el fichero\n" );
}
//test de uniformidad
suma = 0;
for(i=0; i<=n; i++)
{
suma += pow(vector[i],n);
}
printf("sumatorio es %.12lf",suma);
system("PAUSE");
return 0;
}
a ver si me podeis exar una manillo tios :)
muxas gracias :)