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 21-03-2009
Iron Iron is offline
Miembro
 
Registrado: mar 2009
Posts: 16
Poder: 0
Iron Va por buen camino
¿Similar al Choose de Visual Basic?

Buenas noches,

Última pregunta, para escoger un valor en función de un número, en Visual uso : z = Choose(d, 60, 55, 50, 45, 40, 35, 30, 25, 20, 15, 10). Donde z coge el valor en función de d, es decir, si por ejemplo d vale 4, z valdrá 45.
Esto me reduce bastante el código, ya que el Delphi estoy usando If.
¿Existe algo equivalente en Delphi?.

Muchas gracias y enhorabuena por el foro.
Responder Con Cita
  #2  
Antiguo 21-03-2009
cmm07 cmm07 is offline
Miembro
 
Registrado: nov 2007
Posts: 526
Poder: 17
cmm07 Va por buen camino
no sé, pero lo que se me ocurre es que si estas poniendo muchos if del mismo tipo, ¿porque no creas esos if como una unica función y la mandas a llamar?, asi ahorrarias mucho el codigo...
Responder Con Cita
  #3  
Antiguo 21-03-2009
Iron Iron is offline
Miembro
 
Registrado: mar 2009
Posts: 16
Poder: 0
Iron Va por buen camino
Gracias de nuevo cmm07!!. En algunos casos pongo hasta 15 If . Se hacer funciones en Delphi pero no llego a comprender lo que me dices. ¿Serías tan amable de aclararmelo?, Gracias.
Responder Con Cita
  #4  
Antiguo 21-03-2009
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
Hola Iron,

Desconozco si existe alguna función ya hecha en Delphi que haga lo que pides. Pero no creo que resulte tan complicado hacerlo.

Por ejemplo, valiendome del tipo TIntegerDynArray que es un array dinámico de tipo entero es posible hacer dicha función.

Código Delphi [-]
function TForm1.Choose(Position: integer; ArrayNumber: TIntegerDynArray): integer;
begin
  if (Position <= High(ArrayNumber)) AND (Position >= 0)
     then result := ArrayNumber[Position]
     else raise exception.Create('Position out of range');
end;

Y un modo de usarla sería algo como éste:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var arreglo: TIntegerDynArray;
    i: integer;
begin
  SetLength(arreglo,6);
  for i := Low(arreglo) to High(arreglo) do
     arreglo[i] := random(123);

  ShowMessage(IntToStr(Choose(2,arreglo)));

  SetLength(arreglo,0);
  arreglo := nil;
end;

Se puede mejorar evidentemente. Pero al menos es una aproximación.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]

Última edición por Delphius fecha: 21-03-2009 a las 22:46:25. Razón: etiquetas delphi!
Responder Con Cita
  #5  
Antiguo 21-03-2009
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Yo tengo otra versión:

Código Delphi [-]
function Choose(d: integer; values: array of Integer): Integer;
begin
  Result := values[d];
end;

Ejemplo de uso:

Código Delphi [-]
z := Choose(d, [60, 55, 50, 45, 40, 35, 30, 25, 20, 15, 10]);

// Saludos
Responder Con Cita
  #6  
Antiguo 21-03-2009
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

¿No habría que comprobar si existe el índice en el Array Román?

PD. Acabo de probarlo, y, parece que si nos "salimos" con el índice, obtenemos valores "aleatorios", que, no termino de comprender... de todas formas me atrevo a proponer algo como esto:

Código Delphi [-]
function Choose(d: integer; values: array of Integer): Integer;
begin
  if Length(values) >= d then
    Result := values[d]
  else
    Result := -1;
end;

De esta forma, si el índice no existe, retornamos "-1"... y todavía así podría haber problemas, igual hay que levantar una excepción o algo así... ¿qué opináis?
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 21-03-2009 a las 23:21:58.
Responder Con Cita
  #7  
Antiguo 21-03-2009
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Podríamos poner:

Código Delphi [-]
{$R+}
function Choose(d: integer; values: array of Integer): Integer;
begin
  Result := values[d];
end;
{$R-}



// Saludos
Responder Con Cita
  #8  
Antiguo 21-03-2009
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Ah, amigo, pero, la elegancia es la elegancia.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #9  
Antiguo 21-03-2009
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
Hey roman, no me arruines el chiste
Jaja.

Inicialmente estuve pensando en tu idea, pero cuando estaba probandolo obtenía errores, que el parámetro no me lo reconocía alguna metida mal de dedo debía haber metido. Y bueno me enojé y metí esa cosa que debería ir a parar a código inútil.

Lo que si he notado con el código que expuse, es que me arrojaba un Warning diciéndome que la condición siempre se evaluaba a TRUE. La cosa es que ahora no me arroja dicha advertencia.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #10  
Antiguo 22-03-2009
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Lo que a mi no me queda claro es para qué podría servir una función así. Creo que necesito un ejemplo.

// Saludos
Responder Con Cita
  #11  
Antiguo 22-03-2009
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 roman Ver Mensaje
Lo que a mi no me queda claro es para qué podría servir una función así. Creo que necesito un ejemplo.

// Saludos
¿Para acceder a una posición de un array?
La verdad es que tienes razón, mucho sentido no tiene... yo diría que es mejor ir a secas, y leerla así:

Código Delphi [-]
algo := miarray[d]

Sería bueno que Iron nos comentase lo que busca con todo esto.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #12  
Antiguo 22-03-2009
jconnor82 jconnor82 is offline
Miembro
 
Registrado: feb 2008
Posts: 22
Poder: 0
jconnor82 Va por buen camino
Hola a todos...

Segun entendi, lo que quiere es obtener el primer numero del arreglo q empieze con d

Código Delphi [-]
function Choose(D: Integer; Values: array of Integer): Integer;
var
  I: Integer;
  sD, sValue: string;
begin
  Result := -1;

  sD := IntToStr(D);
  for I := 0 to High(Values) do
  begin
    sValue := IntToStr(Values[i]);

    if Pos(sD, sValue) = 1 then
    begin
      Result := Values[i];
      Break;
    end;
  end;
end;
Responder Con Cita
  #13  
Antiguo 22-03-2009
Iron Iron is offline
Miembro
 
Registrado: mar 2009
Posts: 16
Poder: 0
Iron Va por buen camino
Muchas Gracias a todos por contestar y poner tanto interés.
Yo esto lo hago cuando elijo en un ListBox un dato, en función del indice del ListBox escojo en varios Choose los datos que me hacen falta (lo hago así en visual). En Delphi igual pero con IF´s. Estoy seguro que se podrá hacer de una forma mas sencilla, pero esta es la que yo hago.
Con las respuestas que dais las probaré, espero que me salgan bien .

Un saludo y gracias 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
Mi programa en visual basic soler Varios 13 13-11-2007 17:10:11
Algo similar a "FindComponent" en visual basic 6 Hugorr .NET 1 03-08-2007 14:44:35
Visual Basic con FireBird luiz_leo Firebird e Interbase 2 25-07-2007 21:23:57
Visual Basic carols018 Varios 1 05-12-2006 02:15:35
Carga DLL y Visual Basic torito Varios 4 21-05-2004 19:32:31


La franja horaria es GMT +2. Ahora son las 17:59:47.


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