Ver Mensaje Individual
  #9  
Antiguo 07-10-2014
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Reputación: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
BDWONG,

Cita:
Empezado por BDWONG
...Retornar arreglo dinámico en función...conocer en mas profundidad como funciona el lenguaje Delphi...


Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Generics.Defaults, Generics.Collections;

type
  TForm1 = class(TForm)
    Button1: TButton;
    ListBox1: TListBox;
    ListBox2: TListBox;
    ListBox3: TListBox;
    ListBox4: TListBox;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TIntegerComparer = TComparer;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
type
   TArrayInteger = Array of Integer;

   function FillArray(const InputArray : TArrayInteger) : TArrayInteger;
   var
      i : Integer;
   begin
      Randomize;
      SetLength(Result,Length(InputArray));
      for i:= Low(InputArray) to High(InputArray) do
         Result[i] := InputArray[i] + Random(1000);
   end;

var
   A1, A2, A3, A4 : TArrayInteger;
   i,p : Integer;
   MsgUser : String;
   SearchElement : Integer;
   Comparer: IComparer;

begin

   // Inicializa los ListBox
   ListBox1.Clear;
   ListBox2.Clear;
   ListBox3.Clear;
   ListBox4.Clear;

   // Inicializa los Arreglos Dinámicos A1, A2 y A3
   A1 := [2,1,5,3,4];
   A2 := [19,21,78,15,14];
   A3 := A1;

   // Inserta A2 al final de A3
   Insert(A2,A3,Length(A3));

   // Adiciona 4 elementos a A3
   A3 := A3 + [900,800,700,600];

   // Borra 2 elementos de A3
   Delete(A3,Length(A3)-4,2);

   // Muestra en el Lisboxt1 el arreglo A3 ordenado en modo ascencente

   TArray.Sort(A3); // Sort Ascencente

   for i := Low(A3) to High(A3) do
      ListBox1.Items.Add(IntToStr(A3[i]));

   // Muestra en el Lisboxt2 el arreglo A3 ordenado en modo descendente

   Comparer := TDelegatedComparer.Create(
               function(const Left, Right: Integer) : Integer
               begin
                  Result := Right - Left; // Sort Descendente
               end);

   TArray.Sort(A3, Comparer); // Sort Descendente

   for i := Low(A3) to High(A3) do
      ListBox2.Items.Add(IntToStr(A3[i]));

   // Muestra en el Lisboxt3 el arreglo A3 ordenado en modo ascendente con dos nuevos elementos

   SetLength(A3,Length(A3) + 2);
   for i := Length(A3)-2 to High(A3) do
      A3[i] := 7777 + i;

   TArray.Sort(A3);

   for i := Low(A3) to High(A3) do
      ListBox3.Items.Add(IntToStr(A3[i]));

   // Muestra en el Lisboxt4 el arreglo A4 creado en función de A3 en modo descendente

   A4 := FillArray(A3);

   TArray.Sort(A4, Comparer);

   for i := Low(A4) to High(A4) do
      ListBox4.Items.Add(IntToStr(A4[i]));

   // Realiza una búsqueda binaria en A3 y muestra el resultado

   SearchElement := 21;

   if TArray.BinarySearch(A3,SearchElement,p) then
   begin
      MsgUser := Format('El Elemento %d se encuentra en la Posición %d del Array A3 Modo-1',
                        [SearchElement,p]);
      MessageDlg(MsgUser,mtInformation,[mbOK],0);
   end;

   // Liberara los recursos de A1, A2, A3 y A4
   Finalize(A1);
   Finalize(A2);
   Finalize(A3);
   Finalize(A4);

end;

end.
El código anterior en Delphi XE7 sobre Windows 8.1 Professional x32, ejemplifica el uso de arreglos dinámicos en Delphi XE7, según se muestra en la siguiente imagen:



Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 07-10-2014 a las 03:01:34.
Responder Con Cita