Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-01-2008
d-hugo d-hugo is offline
Miembro
 
Registrado: abr 2007
Posts: 34
Poder: 0
d-hugo Va por buen camino
Question numeros aleatorios no repetitivos

Hola a todos,

Necesito ayuda para un problema que debo resolver

Debo generar una tabla de 3 columnas que contenga valores aleatorios del 1 al 100, lo cual consigo fácilmente con la función randomrange, pero tengo dos dificultades que no se como vencer:

1- No se puede repetir un número en la misma fila.
2- No se puede repetir la misma combinación de números, aunque el orden sea diferente.

¿Alguien tiene alguna idea de como hacerlo?

Gracias de antemano.
Responder Con Cita
  #2  
Antiguo 11-01-2008
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.269
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
He borrado la otra copia, y dejamos esta.
La próxima vez piensa antes de colocar el mensaje cual es el lugar adecuado, y si no lo tienes claro, ya lo moveremos, no te preocupes, pero es mejor que no envíes más de una copia.

Un saludo.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 11-01-2008
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 19
ElDioni Va por buen camino
Por ideas...

Vamos a ver lo que podrías hacer es declarar tres variables temporales para ir guardando los valores aleatorios que se te van generando, entonces...
meterías el 1º valor en la 1º variable, cuando metieses el segundo tendrías que comprobar que no es el mismo que el de la primera y cuando metas el tercero tendrás que comprobar que es distinto con respecto a la primera variable y a la segunda. Después de esto tendrás que comparar las variables con los datos ya introducidos en la tabla.
una variable que te indique si hay alguna fila con los mismos numeros, si al terminar de comprobar la fila la variable tiene un valor indicará que la fila es igual y si tiene otro es que alguno de los números es diferente. Yo lo haría con if anidados

Código Delphi [-]
if (variable1=fila(0,0)) OR (variable1=fila(0,1)) OR (variable1=fila(0,2)) then
 begin
  if (variable2=fila(0,0)) OR (variable2=fila(0,1)) OR (variable2=fila(0,2))then
   begin
    if (variable3=fila(0,0)) OR (variable3=fila(0,1)) OR (variable3=fila(0,2))then
     begin
      combinacionigual:=1;
     end
    else
     begin
      combinacionigual:=2;
     end;
   end
  else
   begin
    combinacionigual:=2;
   end;
 end
else
 begin
  combinacionigual:=2;
 end;

Esto tendrías que mejorarlo ya que yo he puesto las filas y las columnas con valores fijos. es para que cojas la idea. una vez hecha las dos comprobaciones ya puedes meter los valores que tienes en las tres variables en la tabla.

Espero que todo este rollo te sirva de algo.
Responder Con Cita
  #4  
Antiguo 11-01-2008
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Antes de llamar al primer Random, llama un procedimiento llamado Randomize.
Código Delphi [-]
Randomize;
miNumero := Random(100);

Para acegurarte que una columna, no existan numero repetidos, puedes utilizar un TStringlist temporal, en donde le especifiques que no acepte valores repetidos.

Saludos.

PD: Llama Randomize por cada columna que vayas a llenar.
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #5  
Antiguo 11-01-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Cita:
Empezado por D&W Ver Mensaje
PD: Llama Randomize por cada columna que vayas a llenar.
Claro que esto no es necesario. Randomize inicializa la semilla basada en la hora actual, pero una vez inicializada, no hace falta inicializarla de nuevo.

Cita:
Empezado por delphi help
Do not combine the call to Randomize in a loop with calls to the Random function. Typically, Randomize is called only once, before all calls to Random.
Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #6  
Antiguo 11-01-2008
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Cita:
Empezado por jachguate Ver Mensaje
Claro que esto no es necesario. Randomize inicializa la semilla basada en la hora actual, pero una vez inicializada, no hace falta inicializarla de nuevo.
Me disculpan la torpeza, no había leído la última linea del help. ...
Do not combine the call to Randomize in a loop with calls to the Random function. Typically, Randomize is called only once, before all calls to Random.
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #7  
Antiguo 13-01-2008
d-hugo d-hugo is offline
Miembro
 
Registrado: abr 2007
Posts: 34
Poder: 0
d-hugo Va por buen camino
gracias

Gracias a todos.

El tip acerca del tstringlist es muy útil. De hecho me hizo buscar acerca de otros controles que permitieran gestionar duplicados, y encontré el tbasearray, de la unidad mxarrays (solo viene con el Delphi Enterprise). Alguien lo ha utilizado?

Por lo demás no he utilizado la función Random sino RandomRange, porque a menos que me equivoque, Random comienza en cero, y en mi caso el cero no es un valor aceptable. El randomize lo hago antes de cada fila, no antes de cada columna (y lo hago sólo para tener un grado más de seguridad de que los valores serán realmente aleatorios, aunque hay quienes dicen por la web que la función del Delphi tiende a distribuir los valores de una manera bastante similar).

En fin, gracias de nuevo. Y disculpen por haber colocado el tema doble, no pienso hacerlo nuevamente.
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
Generación de Números Aleatorios DarkDrakon Varios 8 10-10-2006 16:33:06
Función números aleatorios Sarola Oracle 6 17-11-2005 21:26:02
Generador de números aleatorios gontxalo OOP 16 09-06-2005 21:38:07
Crear una Grid con numeros aleatorios ¿Como le hago? aragorneuf Varios 7 24-04-2004 02:29:48
numeros aleatorios emeritos Varios 1 24-11-2003 14:09:43


La franja horaria es GMT +2. Ahora son las 18:15:25.


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