Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ¿Similar al Choose de Visual Basic? (https://www.clubdelphi.com/foros/showthread.php?t=64201)

Iron 21-03-2009 21:33:20

¿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.

cmm07 21-03-2009 21:37:02

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...

Iron 21-03-2009 21:41:27

Gracias de nuevo cmm07!!. En algunos casos pongo hasta 15 If :eek:. Se hacer funciones en Delphi pero no llego a comprender lo que me dices. ¿Serías tan amable de aclararmelo?, Gracias.

Delphius 21-03-2009 22:45:36

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,

roman 21-03-2009 22:51:03

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

dec 21-03-2009 23:11:41

Hola,

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

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?

roman 21-03-2009 23:25:58

Podríamos poner:

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

:D

// Saludos

dec 21-03-2009 23:39:39

Hola,

Ah, amigo, pero, la elegancia es la elegancia. :D :D :D

Delphius 21-03-2009 23:51:28

Hey roman, no me arruines el chiste:D
Jaja.

Inicialmente estuve pensando en tu idea, pero cuando estaba probandolo obtenía errores, que el parámetro no me lo reconocía:confused: 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:p:o.

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.:confused:

Saludos,

roman 22-03-2009 00:03:29

Lo que a mi no me queda claro es para qué podría servir una función así. Creo que necesito un ejemplo.

// Saludos

Delphius 22-03-2009 00:18:40

Cita:

Empezado por roman (Mensaje 342285)
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?:rolleyes::D
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,

jconnor82 22-03-2009 06:05:17

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;

Iron 22-03-2009 21:18:10

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 :confused:.

Un saludo y gracias nuevamente.


La franja horaria es GMT +2. Ahora son las 20:29:39.

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