Cargando la página...

Clase vector dinámico (Array dinámico)

Publicado por Gastón el 12/05/2009 en Delphi - Nivel Básico

Tabla de contenidos

Avatar de

La tabla de contenidos pertenece al artículo completo y no al contenido parcial de cada página del mismo si fuese el caso.

Leer los comentarios.

Resúmen

Explicación y ejemplo. Modo de uso. Clase vector dinámico escrito en object pascal.

Sobre el autor

Avatar de Gastón

Gastón tiene 30 años, vive en Argentina / Santa Fe / Santa Fe y su ocupación es Desarrollador de aplicaciones web.

Forma parte del club desde 19/10/2009 a las 20:52 habiendo estado en linea hace 4 días a las 00:18 por última vez.

Ha publicado 47 artículos en clubdesarrolladores con un promedio de valoración de 7.87 puntos. Puedes visitar su sitio web en http://www.devstudios.com.ar

Estadísticas

  • Leido 3879 veces
  • Valorado 8.00 puntos
Muchas veces necesitamos usar vectores en nuestros programas. Y hay veces en que necesitamos que esos vectores no tengan un tamaño fijo, sino que puedan variar según lo vayamos necesitando.

La siguiente clase modela un vector de reales de tamaño variable.

Clase TVector



unit uVector;

interface

type
TDato = Real;
TArrayInt = array[0..0] of TDato;
PArrayInt = ^TArrayInt;

TVector = class
private
UnArray: PArrayInt;
Fn: integer;
function GetValor(indice: integer): TDato;
procedure SetValor(indice: integer; const Value: TDato);
public
constructor Create(n:integer);overload;
destructor Destroy;override;
procedure NewSize(n:integer);
property Valor[indice:integer]:TDato read GetValor write SetValor;default;
end;



implementation

{ TVector }

constructor TVector.Create(n: integer);
var
i:integer;
begin
inherited Create;
Fn:=n;
{Reserva memoria para el array}
GetMem(UnArray, Fn * SizeOf(TDato));
for i := 0 to Fn - 1 do
UnArray^[i] := 0;
end;


destructor TVector.Destroy;
begin
{Liberamos la memoria utilizada al terminar con el array}
FreeMem(UnArray, Fn * SizeOf(TDato));
inherited Destroy;
end;

function TVector.GetValor(indice: integer): TDato;
begin
if (indice >=0) and (indice < Fn) then
Result:=UnArray^[indice]
else
Result:=0;
end;

procedure TVector.NewSize(n: integer);
begin
Fn:=n;
ReAllocMem(UnArray, Fn * SizeOf(TDato))
end;

procedure TVector.SetValor(indice: integer; const Value: TDato);
begin
if (indice >=0) and (indice < Fn) then
UnArray^[indice]:=Value;
end;

end.


Modo de uso



Y asi podemos utilizarlo:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

function Tiempo:string;



implementation

uses uVector;

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
Caption:=Tiempo;
end;

function Tiempo:string;
var
freq, start, stop: TLargeInteger;
lapsoStr: string;
Vector:TVector;
begin
QueryPerformanceFrequency(freq);
QueryPerformanceCounter(Start);
{ aquí va el código a medir el tiempo de ejecución }
Vector:=TVector.Create(1000000);
Vector.Destroy;

QueryPerformanceCounter(Stop);
// lapsoStr := FloatToStr(round((Stop-Start)/freq)); //en segundos
lapsoStr := FloatToStr(round((Stop-Start)/freq*1000)); //en milisegundos
Result:=lapsoStr
end;


end.


Como puede verse se agregaron rutinas para calcular el tiempo de ejecución y tener una idea de cuanto tarda en ejecutarse.

Si tiene alguna pregunta sobre éste artículo por favor deje un comentario y será respondido.

Descargas

No existen descargas asociadas

Comentarios

Sus comentarios son importantes.

Listado de comentarios

No hay comentarios para listar, si desea puede crear el primer comentario para este artículo.

Agregar un comentario

Debe estar identificado para agregar un comentario