Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Ayuda numero aleatorios y metodo de congruencia lineal II parte.

Estas en el tema de Ayuda numero aleatorios y metodo de congruencia lineal II parte. en el foro de C/C++ en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 27/05/2008, 18:58
 
Fecha de Ingreso: abril-2008
Mensajes: 19
Antigüedad: 16 años, 1 mes
Puntos: 0
Ayuda numero aleatorios y metodo de congruencia lineal II parte.

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 :)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 20:07.