Está en la página 1de 5

METODO DE CUADRADOS MEDIOS (CODIGO JAVA)

Un primer mtodo a estudiar en la generacin de nmeros pseudoaleatorios es el de los


Cuadrados Medios siguiendo estos pasos.
1.- Generar una Semilla Xo
2.- Obtener el cuadrado de dicho nmero.
3.- Extraer n digitos de la parte central del nmero obtenido en el punto 2.
4.- Repetir el paso 2 utilizando X1 como la nueva Semilla.
CODIGO EN JAVA (NetBeans)
/**
*
* @author HIMDAWIES
*/
import java.io.*;
import javax.swing.JOptionPane;
public class Cuadrado
{
public static void main(String arg[])throws IOException
{
BufferedReader entrada=new BufferedReader(new InputStreamReader(System.in));
int cantidad,semilla=Integer.parseInt(JOptionPane.showInputDialog(" INTRODUZCA SEMILLA"));;
int tamano1,tamano2,i;
String cadena,new_numero;
cadena=String.valueOf(semilla); // conversion de entero a cadena
tamano1=cadena.length(); // tamao de la cadena
double semilla_cuadrada=0;
cantidad=Integer.parseInt(JOptionPane.showInputDialog(" NUMEROS A GENERAR"));

for(i=0; i<cantidad; i++)


{
semilla_cuadrada=Math.pow(semilla,2);
new_numero=proceso_seleccion(semilla_cuadrada,tamano1);
Integer entero=new Integer(new_numero);
semilla=entero.intValue();
System.out.println(semilla);

}
}
static String proceso_seleccion(double recibe_semilla,int tamano1)
{
int tamano2,resta,contador=0; int i,posicion=0;
String new_cadena="",cadena;
int semilla=(int)recibe_semilla;
cadena=String.valueOf(semilla); // conversion de entero a cadena
tamano2=cadena.length(); // tamao de la cadena
resta=(tamano2)-tamano1;
posicion=tamano2%(tamano1+1);
//posicion=tamano2%tamano1;
tamano1++;
if (posicion==0)
{
posicion=tamano2/tamano1;
for(i=posicion; ; i++)
{
if (contador!=tamano1)
{
new_cadena+=cadena.charAt(i);
contador++;
}
else
{
break;
}
}
}
else
{
for(i=posicion-1; ; i++)
{
if (contador!=tamano1)
{
new_cadena+=cadena.charAt(i);
contador++;
}
else
{
break;

}
}
}
return new_cadena;
}
static int tamano(double semilla)
{
int i=0,c=0;
for(i=0; i<20; i++)
{
c++;
semilla=semilla/10;
if (semilla<10)
{
c++;
i=20;
}
}
return c;
}
}

Hola
. El metodo consiste en tomar un numero cualquiera, elevarlo al cuadrado, tomar k
digitos del centro de la nueva cifra y elevar de nuevo al cuadrado. Esto se repite n veces.
Ej. con 445, n=3 y k=4
1. 445
2. 445^2 = 198025 ; 1 9802 5
3. 9802^2 = 96079204 ; 96 0792 04
4. 0792^2 = 627264 ; 6 2726 4 >>> 2726 . fin
lo intento hacer asi:
#include "stdafx.h"
using namespace std;
main()
{
int i,j,l,c=0,b=0,k=0;
long s,ns=11;
float a[999],na[999];
cout <<"Digitos centrales a utilizar (k) : "; cin >>k;
cout <<"Numero semilla : "; cin >>s;
if (s>=10)
{
for (j=1;ns>10;j++)
{
b=0;
for (i=1;b!=1;i=i*10)
{
if (s/i<=9&&s/i>=0)
{
a[c]=s/i;
c++;
b=1;
ns=s=s-s/i*i;
}
}
}
a[c]=ns;
}
else a[c]=s;
if (c%2==0&&k%2!=0)
{
for (i=(c/2)-(k/2);i<=(c/2)+(k/2);i++)
{
na[i-((c/2)-(k/2))]=a[i];
}
}

for (i=0;i<=c;i++)
cout <<a[i] <<" " na[i];

}//main

También podría gustarte