Está en la página 1de 12

T4E1.

Crear una Clase llamada VectorPlus, que realice la


siguientes operaciones, Con Interface Gráfica.

Operaciones:
 Cantidad de Cortes Control
 Cantidad de Elementos entre Cortes de Control
 Dividir un Vector en dos (Par e Impar)
 Intercalar dos Vectores (Un elemento de A y uno de B)
 Purgar los Elementos usando Cortes de Control
3. Implementación:
3.1. Clases:
/**** vector.pas****/
unit uvector;

{$mode ObjFPC}{$H+}

interface

uses
Classes, SysUtils, Dialogs;

const
MAX_ELEM=1000;

type

{ Vector }

Vector=Class
private
elem:array[1..MAX_ELEM]of integer;
dim:integer;
public
constructor crear();
procedure setElem(pos,ele:integer);
function getElem(pos:integer):integer;
procedure setDim(dimen:integer);
function getDim():integer;
procedure addElem(ele:integer);
procedure insElem(pos,ele:integer);
procedure remElem(pos:integer); //CTRL+SHIFT+C
function busqSec(ele:integer):integer;
procedure ord_Inter();
function corteControlN1():integer;
procedure dispersion();
procedure dividirPar_Impar(Var A,B:Vector);
procedure mesclaOrdenada(A,B:Vector);
procedure purgar();
end;

implementation

{ Vector }
constructor Vector.crear;
var
pos:integer;
begin
pos:=1;
while(pos<=MAX_ELEM)do
begin
elem[pos]:=0;
pos:=pos+1;
end;
dim:=0;
end;

procedure Vector.setElem(pos, ele: integer);


begin
if(pos>=1)AND(pos<=dim)then
elem[pos]:=ele
else
ShowMessage('Posición Fuera de Rango…');
end;

function Vector.getElem(pos: integer): integer;


begin
if(pos>=1)AND(pos<=dim)then
result:=elem[pos]
else
result:=-999;
end;

procedure Vector.setDim(dimen: integer);


begin
if(dimen>=0)AND(dimen<=MAX_ELEM)then
dim:=dimen
else
ShowMessage('Dimensión Fuera de Rango….');
end;

function Vector.getDim: integer;


begin
result:=dim;
end;

procedure Vector.addElem(ele: integer);


begin
if(dim<MAX_ELEM)then
begin
dim:=dim+1;
elem[dim]:=ele;
end
else
ShowMessage('Almacenamiento Lleno…');
end;

procedure Vector.insElem(pos, ele: integer);


var
i:integer;
begin
if(pos>=1)AND(pos<=dim)then
begin
i:=dim;
while(i>=pos)do
begin
elem[i+1]:=elem[i];
i:=i-1;
end;
elem[pos]:=ele;
dim:=dim+1;
end
else
ShowMessage('Posición Fuera de Rango….');
end;

procedure Vector.remElem(pos: integer);


var
i:integer;
begin
if(pos>=1)AND(pos<=dim)then
begin
i:=pos;
while(i<dim)do
begin
elem[i]:=elem[i+1];
i:=i+1;
end;
dim:=dim-1;
end
else
ShowMessage('Posición Fuera de Rango…');
end;

function Vector.busqSec(ele: integer): integer;


var
i:integer;
sw:boolean;
begin
i:=1;
sw:=false;
while(i<=dim)AND(NOT sw)do
begin
if(ele=elem[i])then
sw:=true
else
i:=i+1;
end;
if(sw=true)then
result:= i
else
result:=-1;
end;

procedure Vector.ord_Inter;
var
p,d,aux:integer;
begin
for p:=1 to dim -1 do
begin
for d:=p+1 to dim do
begin
if(elem[d]<elem[p])then
begin
aux:=elem[d];
elem[d]:=elem[p];
elem[p]:=aux;
end;
end;
end;
end;

function Vector.corteControlN1: integer;


var
i,cc:integer;
begin
i:=1;
cc:=0;
while(i<=dim-1)do
begin
if(elem[i]<>elem[i+1])then
cc:=cc+1;
i:=i+1;
end;
result:=cc;
end;

procedure Vector.dispersion;
var
i,ce:integer;
cad:string;
begin
i:=1;
ce:=1;
cad:='La Dispersion del Vector es :'#13#10;
while(i<=dim-1)do
begin
if(elem[i]<>elem[i+1])then
begin
cad:=cad+IntToStr(elem[i])+'=>'+IntToStr(ce)+' elementos'+#13#10;
ce:=1;
end
else
ce:=ce+1;
i:=i+1;
end;
cad:=cad+IntToStr(elem[i])+'=>'+IntToStr(ce)+' elementos'+#13#10;
showMessage(cad);
end;

procedure Vector.dividirPar_Impar(var A, B: Vector);


var
i:integer;
begin
i:=1;
A.setDim(0);
B.setDim(0);
while(i<=dim)do
begin
if(elem[i] MOD 2 = 0)then
A.addElem(elem[i])
else
B.addElem(elem[i]);
i:=i+1;
end;
dim:=0;
end;
procedure Vector.mesclaOrdenada(A, B: Vector);
var
i,j:integer;
begin
dim:=0;
i:=1;
j:=1;
while(i<=A.getDim())AND(j<=B.getDim())do
begin
if(A.getElem(i)<B.getElem(j))then
begin
addElem(A.getElem(i));
i:=i+1;
end
else
begin
addElem(B.getElem(j));
j:=j+1;
end;
end;
while(i<=A.getDim())do
begin
addElem(A.getElem(i));
i:=i+1;
end;
while(j<=B.getDim())do
begin
addElem(B.getElem(j));
j:=j+1;
end;
end;

procedure Vector.purgar;
var
pos,d:integer;
begin
pos:=1;
while(pos<=dim-1)do
begin
d:=pos+1;
while(d<=dim)do
begin
if(elem[pos]=elem[d])then
remElem(d)
else
d:=d+1;
end;
pos:=pos+1;
end;
end;

end.

3.2. Pantalla:

3.3. Evento:

unit uventana;

{$mode objfpc}{$H+}

interface

uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, Grids, UVector;

type

{ TForm1 }

TForm1 = class(TForm)
Button1: TButton;
Button10: TButton;
Button11: TButton;
Button12: TButton;
Button13: TButton;
Button14: TButton;
Button15: TButton;
Button16: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Button7: TButton;
Button8: TButton;
Button9: TButton;
ELE: TEdit;
Label2: TLabel;
Label3: TLabel;
POS: TEdit;
Label1: TLabel;
SG: TStringGrid;
SGA: TStringGrid;
SGB: TStringGrid;
procedure Button10Click(Sender: TObject);
procedure Button11Click(Sender: TObject);
procedure Button12Click(Sender: TObject);
procedure Button13Click(Sender: TObject);
procedure Button14Click(Sender: TObject);
procedure Button15Click(Sender: TObject);
procedure Button16Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure Button9Click(Sender: TObject);
private
V,A,B:Vector;
procedure updateSG();

public

end;

var
Form1: TForm1;

implementation
{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);


begin
V:=Vector.Crear();
A:=Vector.Crear();
B:=Vector.Crear();
updateSG();
end;

procedure TForm1.Button10Click(Sender: TObject);


begin
pos.Text:=IntToStr(V.busqSec(StrToInt(ele.Text)));
ele.Text:='';
end;

procedure TForm1.Button11Click(Sender: TObject);


begin
V.ord_Inter();
updateSG();
end;

procedure TForm1.Button12Click(Sender: TObject);


begin
pos.Text:=IntToStr(V.corteControlN1());
end;

procedure TForm1.Button13Click(Sender: TObject);


begin
V.dispersion();
end;

procedure TForm1.Button14Click(Sender: TObject);


begin
V.dividirPar_Impar(A,B);
updateSG();
end;

procedure TForm1.Button15Click(Sender: TObject);


begin
V.mesclaOrdenada(A,B);
updateSG();
end;
procedure TForm1.Button16Click(Sender: TObject);
begin
V.purgar();
updateSG();
end;

procedure TForm1.Button2Click(Sender: TObject);


begin
V.setDim(StrToInt(ELE.Text));
ELE.Text:='';
updateSG();
end;

procedure TForm1.Button3Click(Sender: TObject);


begin
ELE.Text:=IntToStr(V.getDim());
end;

procedure TForm1.Button4Click(Sender: TObject);


begin
V.setElem(StrToInt(pos.Text),StrToInt(ele.Text));
ele.Text:='';
pos.Text:='';
updateSG();
end;

procedure TForm1.Button5Click(Sender: TObject);


begin
ele.Text:=IntToStr(V.getElem(StrToInt(pos.Text)));
pos.Text:='';
end;

procedure TForm1.Button6Click(Sender: TObject);


begin
V.addElem(StrToInt(ele.Text));
ele.Text:='';
updateSG();
end;

procedure TForm1.Button7Click(Sender: TObject);


begin
V.insElem(StrToInt(pos.Text),StrToInt(ele.Text));
ele.Text:='';
pos.Text:='';
updateSG();
end;
procedure TForm1.Button8Click(Sender: TObject);
begin
V.remElem(StrToInt(pos.Text));
pos.Text:='';
updateSG();
end;

procedure TForm1.Button9Click(Sender: TObject);


begin
Close();
end;

procedure TForm1.updateSG;
var
posi:integer;
begin
SG.ColCount:=V.getDim();
for posi:=1 to V.getDim() do
SG.Cells[posi-1,0]:=IntToStr(V.getElem(posi));

SGA.ColCount:=A.getDim();
for posi:=1 to A.getDim() do
SGA.Cells[posi-1,0]:=IntToStr(A.getElem(posi));

SGB.ColCount:=B.getDim();
for posi:=1 to B.getDim() do
SGB.Cells[posi-1,0]:=IntToStr(B.getElem(posi));
end;

end.

También podría gustarte