Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-05-2012
gabtroc gabtroc is offline
Miembro
NULL
 
Registrado: may 2012
Posts: 10
Poder: 0
gabtroc Va por buen camino
Question Calcular numeros aleatorios (Ayuda)

Buenas noches tengo un problema que me mandaron a realizar en clase de programacion en el cual necesito hacer un programa que me genere numeros aleatorios por la tecnica del cuadrado medio.

Si no lo saben consiste en tomar un número de N cifras elevarlo al cuadrado y usar los N dígitos centrales como número aleatorio, luego repetir el proceso para generar nuevos números aleatorios usando como semilla el aleatorio anterior.

Necesito escribir el programa para que lea un número entero cualquiera de N cifras y genere una lista de 20 números aleatorios utilizando esa tecnica, pero no logro hacer un algoritmo que me sirva y no tengo idea de como hacer que solo agarre los numeros centrales. Alguna idea?

Si la tienen se los agradecere mucho
Responder Con Cita
  #2  
Antiguo 14-05-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola gabtroc.

Cita:
no tengo idea de como hacer que solo agarre los numeros centrales. Alguna idea?
Un modo símple de extraer los números centrales para el método de Von Neumann puede ser:
Código Delphi [-]
  Numero:= StrToInt(Copy(IntToStr(Semilla), Length(IntToStr(Semilla)) div 2, Digitos))

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 14-05-2012 a las 05:45:26.
Responder Con Cita
  #3  
Antiguo 14-05-2012
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por ecfisa Ver Mensaje
Hola gabtroc.



Un modo símple de extraer los números centrales para el método de Von Neumann puede ser:
Código Delphi [-] Numero:= StrToInt(Copy(IntToStr(Semilla), Length(IntToStr(Semilla)) div 2, Digitos))


Saludos.
¿Von Neumann? ¿El era el autor del método del geneador Cuadrado Central? Changos... si que me falla la memoria últimamente.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #4  
Antiguo 14-05-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Delphius.

¿ Vos sabes que me hiciste dudar ? Hace años que lo ví, pero acabo de buscar y sí, es de él.

Recuerdo el método por ingenioso, simple y malo. Tendía a repetir el patron como un tartamudo cosa que él sabía. Pero cumplió su cometido para la época de las válvulas.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 14-05-2012
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por ecfisa Ver Mensaje
Hola Delphius.

¿ Vos sabes que me hiciste dudar ? Hace años que lo ví, pero acabo de buscar y sí, es de él.

Recuerdo el método por ingenioso, simple y malo. Tendía a repetir el patron como un tartamudo cosa que él sabía. Pero cumplió su cometido para la época de las válvulas.

Saludos.
¡Sigue tendiendo!
Y muy rápido... aunque eso depende fuertemente del valor semilla. Recuerdo que en cátedra desarrollamos este algoritmo y probé con varios números y en algunos casos no llegaba a generar una veintena
Vos al menos dudaste... yo directamente lo olvidé y quedé con que era Lehemer

Que va... ya me está afectando mucho el no seguir poniendo en práctica las cosas vistas en la carrera; me estoy oxidando

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #6  
Antiguo 14-05-2012
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Revisando, creo que esta vez con mejor atención y sabiendo que son las 2:23 am, al código de ecfisa, no se obtienen los números centrales, sino la 2da mitad.

El método pide el número de N dígitos formado los números del medio. Por ejemplo, dado el número 12345678, si N = 4 entonces el número a extraer sería: 3456

Lo bueno es que con unas simples correcciones, y hasta me animaría a decir fácilmente identificables, se obtendría el resultado esperado. Se lo puede dejar de tarea a gabtroc que lo analice y descubra como proseguir con ese tip que se le ha dado.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #7  
Antiguo 14-05-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por Delphius Ver Mensaje
Revisando, creo que esta vez con mejor atención y sabiendo que son las 2:23 am, al código de ecfisa, no se obtienen los números centrales, sino la 2da mitad.
Tenés razón... y curiosamente la operación que omití la utilizo bastante seguido para centrar textos...

Pero como bién comentas es muy poca la tarea de corrección; lo dejamos en las buenas manos de gabtroc.

Saludos.

Edito: Como verás no sos el único al que le falla la memoria...
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 14-05-2012 a las 09:13:57.
Responder Con Cita
  #8  
Antiguo 19-05-2012
gabtroc gabtroc is offline
Miembro
NULL
 
Registrado: may 2012
Posts: 10
Poder: 0
gabtroc Va por buen camino
Buenas tardes amigos perdonen la ausencia es que tenia problemas con el internet.

Viendo el codigo que me diste ecfisa resulta que no puedo utilizar la instruccion IntToStr por peticiones del profesor
Tengo que realizar lo siguiente:
Ingresar un numero inicial
Determinar la cantidad de digitos que tiene, a esto se le puede llamar N
Dividir esa cantidad entre 2 y tomar ese numero como la cantidad de digitos a descartar del numero al cuadrado, lo llamo M
Elevar al cuadrado el numero original
Descartar la M cantidad de digitos que saque anteriormente y luego quedarme solo con los N restantes
y repetir eso las 20 veces que me pide el problema.

Y bueno desarrolle todo eso ya en codigo excepto la repeticion de todo el porgrama para generar los 20 numeros aleatorios (bueno pseudoaleatorios) si me pueden ayudar con eso seria perfecto porque tengo hasta mañana para enviar ese programa y otros cuatro mas que estaba haciendo en la semana. Disculpen lo poco ordenado del codigo pero eso pienso arreglarlo luego, le agregue unos comentarios para que este un poco mas entendible para ustedes.

Código Delphi [-]
Var Original, Auxiliar, Digito, Construido,c,m,nuevo,aux2,prueba,g,ultimo,f,p,i: Integer;


begin
Construido:=0;
Write('Ingrese un numero entero: ');
Readln(Original);


Auxiliar:=Original;
c:=0;
// Determino la cantidad de digitos
repeat
  Digito:=Auxiliar mod 10;
  Auxiliar:=Auxiliar div 10;
  c:=c+1;
until auxiliar=0;
Writeln('Tiene ',c,' Digitos');

// CANTIDAD DE DIGITOS A DESCARTAR
m:=c div 2;
Writeln(m,' Digitos a descartar');

// ELEVO AL CUADRADO
nuevo:=original*original;
Writeln(nuevo, '  Al elevar al cuadrado');
aux2:=nuevo;

// TOMO ESAS CONDICIONES POR PETICIONES DEL PROFESOR EL NUMERO INGRESADO ES MAXIMO DE 5 DIGITOS
// ESTO ES PARA TENER UN NUMERO SIN LOS M DIGITOS QUE TENGO QUE DESCARTAR
if m=2 then begin
             prueba:=aux2 div 100;
             Writeln(prueba,'  Descarto los m digitos');
             end;

if m=1 then Begin
             prueba:=aux2 div 10;
             Writeln(prueba,'  Descarto los m digitos');
            End;


Writeln;
Writeln;

// SEPARO EN DIGITOS INDIVIDUALES HASTA LLEGAR AL VALOR DE N DIGITOS QUE NECESITO
g:=0;
Repeat
Digito:=prueba mod 10;
Construido:=Digito+Construido*10;
prueba:=prueba div 10;
g:=g+1;
Until g=c;

// UNA SEGUNDA VEZ PORQUE SINO EL NUMERO SALE VOLTEADO
Repeat
Digito:=construido mod 10;
ultimo:=Digito+ultimo*10;
construido:=construido div 10;
f:=f+1;
Until f=c;
Writeln;

Writeln('Deberia ser este  ',ultimo);  // ESTE ES EL NUMERO ALEATORIO
Readln;

Original:=ultimo;




end.

Última edición por gabtroc fecha: 19-05-2012 a las 19:42:52.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Numeros Aleatorios Ruben_21 OOP 6 10-06-2010 22:40:18
numeros aleatorios no repetitivos d-hugo OOP 6 13-01-2008 14:35:18
Generación de Números Aleatorios DarkDrakon Varios 8 10-10-2006 16:33:06
Generador de números aleatorios gontxalo OOP 16 09-06-2005 21:38:07
numeros aleatorios emeritos Varios 1 24-11-2003 14:09:43


La franja horaria es GMT +2. Ahora son las 00:47:32.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi