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 06-06-2012
Avatar de martini002
martini002 martini002 is offline
Miembro
 
Registrado: may 2012
Ubicación: Puerto Ordaz - Venezuela
Posts: 175
Poder: 12
martini002 Va por buen camino
Numeros Aleatorio Irrepetibles en un Vector

Salud Amigos, donde quiera que se encuentren

esta vez me presento con un problemita que mas alla del lenguaje
tiene su dificultad en la logica, que despues de mas de 48 horas
de analisis y ensayo y error no he podido resolver
y me gustaria conocer su punto de vista y su logica
ya que la mia se agoto

he estado haciendo esto por partes ya que estoy
construyendo el proyecto de programacion de este año
para la universidad, y el cual publicare aqui en el momento
de su culminacion, en agradecimiento a toda la ayuda
que me han prestado

Begin,

el problema es el siguiente,
necesito un vector donde se almacenen numeros aleatorios
en un rango determinado.
en este caso usaremos del 1 al 3

he intentado de todo, ensayo y error,
nuevos metodos de resolucion pero no le encuentro solucion,
esto es lo ultimo a lo que he llegado,
quedandose en un bucle infinito.
intentando analizar la cosa esta,
se aprecia que en el ciclo cuando empieza
el Repeat es donde comienza el bucle,

les agradeceria muchisimo su colaboracion
y su tiempo, para ayudarme a reestructurar si es necesario
este programita

Saludos,
Best,
Martin

Código Delphi [-]
var
  Form1: TForm1;
  Vector:Array[1..3] of integer;

implementation

{$R *.dfm}

procedure InicializarVector();
var
  i:integer;
begin
  for i:=1 to 3 do
  begin
    Vector[i]:=0;
  end;

end;

Function Comprobar(Num:Integer):Boolean;
var
   i:Integer;
begin
for i:=1 to 3 do
    if Num=Vector[i] then
       begin
         Result:=True;
       end
    else
       begin
         Result:=False;
       end;
end;

procedure TForm1.FormActivate(Sender: TObject);
var
  i, NumRandom, Aux:integer;
begin
  for i:=1 to 3 do
    begin
      Randomize;
      NumRandom:=RandomRange(1,4);
      Vector[i]:=NumRandom;
    end;
  Aux:=1;
  i:=3;
  while i>1 do
  begin
    repeat                 //Aqui es donde empieza la agonia...
      Comprobar(Vector[i]);
      if Comprobar(Vector[i])=True then
        begin
          Vector[i]:=Aux+1
        end;
    until Comprobar(Vector[i])=False;
  i:=i-1;
  end;



  Edit1.Text:=IntToStr(Vector[1]);
  Edit2.Text:=IntToStr(Vector[2]);
  Edit3.Text:=IntToStr(Vector[3]);
end;

begin
InicializarVector;
end.
Responder Con Cita
  #2  
Antiguo 06-06-2012
Avatar de martini002
martini002 martini002 is offline
Miembro
 
Registrado: may 2012
Ubicación: Puerto Ordaz - Venezuela
Posts: 175
Poder: 12
martini002 Va por buen camino
Listo ya lo arregle.
un amigo me hecho una mano,
y quedo mas sencillo de lo que esperaba

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  i, NumRandom, Aux, j:integer;
begin
  InicializarVector();
  i:=1;
  while i<=6 do
    begin
      NumRandom:=RandomRange(1,7);
      Aux:=0;
      for j:=1 to 6 do
        begin
          if vector[j]=NumRandom then
          begin
            Aux:=1;
          end;
        end;
      if Aux=0 then
        begin
          Vector[i]:=NumRandom;
        end;
      if vector[i]>0 then
        begin
          i:=i+1;
        end;
   end;
  Edit1.Text:=IntToStr(Vector[1]);
  Edit2.Text:=IntToStr(Vector[2]);
  Edit3.Text:=IntToStr(Vector[3]);
  Edit4.Text:=IntToStr(Vector[4]);
  Edit5.Text:=IntToStr(Vector[5]);
  Edit6.Text:=IntToStr(Vector[6]);
end;
Responder Con Cita
  #3  
Antiguo 06-06-2012
Avatar de martini002
martini002 martini002 is offline
Miembro
 
Registrado: may 2012
Ubicación: Puerto Ordaz - Venezuela
Posts: 175
Poder: 12
martini002 Va por buen camino
Woah que brujeria es esta Ecfisa?
que practico, creo que lo implementare,

Código Delphi [-]
if v[n] = 0 then

me parecio muy adecuado usar eso,
practicamente lo estas engañando
excelente respuesta, gracias como siempre
saludos
Responder Con Cita
  #4  
Antiguo 06-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Recuerda que la primera posición de un array es el cero, no el uno.
Responder Con Cita
  #5  
Antiguo 06-06-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 martini002.

Pido disculpas, pero internet me ha andado lento como una endemoniada tortuga .
Dupliqué los mensajes y pensé en que había borrado solamente el duplicado pero borré ambos, luego se cortó.

De todos modos el código era algo parecido a este:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  v: array[1..6] of integer;
  c,n: Integer;
begin
  // Inicializar
  for c:= 1 to 6 do v[c]:= 0;
  Randomize;
  // Carga
  c:= 0;
  repeat
    n:= Random(6)+1;
    if v[n] = 0 then
    begin
      v[n]:= n;
      Inc(c);
    end;
  until c = 6;
  // Mostrar
  Edit1.Text:=IntToStr(v[1]);
  Edit2.Text:=IntToStr(v[2]);
  Edit3.Text:=IntToStr(v[3]);
  Edit4.Text:=IntToStr(v[4]);
  Edit5.Text:=IntToStr(v[5]);
  Edit6.Text:=IntToStr(v[6]);
end;

La comprobación
Código Delphi [-]
 if v[n] = 0 then
es para verificar que no haya sido asignado un valor a esa posición del arreglo, lo mismo podría haberse inicializado a cualquier valor arbirtrario no contemplado en el rango aleatorio y comprobar por ese valor.


Saludos.

Edito: Es una opción que no repite los números aleatorios dentro del arreglo pero no sé si es lo que te solicitaron por que no entendí muy bién la consigna.
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 06-06-2012 a las 10:44:39.
Responder Con Cita
  #6  
Antiguo 07-06-2012
Avatar de martini002
martini002 martini002 is offline
Miembro
 
Registrado: may 2012
Ubicación: Puerto Ordaz - Venezuela
Posts: 175
Poder: 12
martini002 Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Recuerda que la primera posición de un array es el cero, no el uno.
Lei este comentario ayer y no le di mucha importancia,
es mas me dejo un poco pensativo...
Pero hasta hace un minuto atras pense toda la vida
que podia declarar el vector desde:

Código Delphi [-]
V:Array[1..N]of Integer;

pero no es asi,
realmente nunca habia tenido problema con esta
situasion, pero en este momento lo he comprobado.
lo habia declarado asi:

Código Delphi [-]
V:Array[1..N]of Integer;

y la primera tupla me la marca en 0 con:

Código Delphi [-]
  for i:=1 to N do
    VCartas[i]:=i;

Código:
0 2 3 4 .. N
luego de haberlo cargado con una secuencia
y debia empezar desde 1.

Probe declarar el vector desde 0

Código Delphi [-]
V:Array[0..N]of Integer;

y ha cargado correctamente desde 1 con:

Código Delphi [-]
  for i:=1 to N do
    VCartas[i]:=i;

Código:
1 2 3 4 .. N
Interesante para analizar,
gracias por el TIP Casimiro

Saludos
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
Orden aleatorio con Rand() Ineficaz DarkDudae Firebird e Interbase 4 15-04-2008 09:13:25
Numero aleatorio de productos principiante22 Impresión 6 04-03-2008 01:24:08
Select aleatorio JBalda Firebird e Interbase 11 27-06-2007 20:28:23
Orden aleatorio al 7o digito!!! jdattoli Tablas planas 1 20-10-2005 18:15:09
Error aleatorio, verdadera locura buitrago Varios 0 14-03-2004 07:29:50


La franja horaria es GMT +2. Ahora son las 07:43:42.


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