Ejecicios Vectores Lazarus

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 14

TRABAJAR CON VECTORES EN LAZARUS

Para comenzar a trabajar con vectores en la herramienta Lazarus, diseñaremos e


implementaremos inicialmente una clase que permita llenar un vector con números
enteros y podamos realizar posteriormente operaciones sobre los elementos del vector.

Para el diseño del formulario se utilizaran los siguientes componentes con sus respectivos
nombres:

✔ Un TEdit que llamaremos pos para tomar las posiciones de cada indice en el
vector. Un TUpDown que llamaremos Up para ir incrementando las posiciones del
campo de texto pos de manera automática. Tenemos que tener en cuenta las
propiedades del TUpDown (Up) para asociarlo con el TEdit (pos) e iniciarlo en 1.

✔ Un TEdit que llamaremos val para ir capturando los valores que ingresaremos al
vector.

✔ Tres TButton (botones), uno para guardar los elementos del TEdit (val) en el
vector, otro que limpiar los campos de texto e inicia los valores del vector y uno par
salir del formulario. Los TButton tendrán los siguientes nombres: bGuardar,
bLimpiar y bSalir.

✔ Un TListBox de nombre lisvec para visualizar el contenido del vector, a medida


que se almacenen elementos en el vector.

✔ También se utilizaran varios TLabel para colocar los diferentes comentarios que
aparecen en el formulario.

La apariencia del formulario sera lago parecida a la siguiente ventana:


Cuando se crea el proyecto, automáticamente se crea una unidad con la clase TForm1,
cuando guardamos la unidad le damos el nombre VentanaVectores. En esta unidad se
escribe todo el código correspondiente a la clase TForm1, en la cual se capturan los datos
y se muestra la información del vector.

A continuación se crea la unidad en donde se encuentra la clase lógica y se le coloca el


nombre UDeclararVector. En esta clase se declara el vector y sus respectivos métodos
selectores y modificadores.

Código fuente de las dos unidades:

Unidad DeclararVector
unit UDeclararVector;

{$mode objfpc}{$H+}

interface

uses
Classes, SysUtils;
const
num=10; //Constante (opcional) para establecer el numero de elementos del vector.
type

{ TVector }
//Definimos el nombre de la clase (TVector).
TVector=Class
//métodos privados y públicos de la clase (Diseño de la clase).
private
//Este es un arreglo estático (no cambia de tamaño) de tipo entero.
//Los indices (numero de elementos hasta donde llega el vector), se definen entre corchetes separados
//por dos puntos (..)
vector:array[1..num] of integer;
public
constructor Create; //Constructor para la clase
//Método modificador para asignar valores al vector.
procedure setVector(p:integer; ve:integer);
//Método selector para tomar valores del vector.
function getVector(p:integer):integer;

end;

implementation

{ TVector }
//implementación del método constructor de la clase.
constructor TVector.Create;
//Declaración de variables locales. (Siempre usando var y antes del begin).
var
i:integer; //Variable entera para recorrer el arreglo.
begin
//El ciclo itera i desde 1 (indice inferior) hasta num (Tamaño del arreglo).
for i:=1 to num do
begin
/Asignamos cero a cada elemento de la posición i-esisma (entre corchetes), para asignar el valor inicial.
vector[i]:=0;
end;
end;

//implementación del método modificador del vector, para asignarle elementos al vector.
procedure TVector.setVector(p: integer; ve: integer);
begin
vector[p]:=ve;
end;

//Método selector del vector, para obtener un elemento del vector en una determinada posición.
function TVector.getVector(p: integer): integer;
begin
Result:=vector[p];
end;
end.

Unidad VentanaVectores
unit VentanaVectores;

{$mode objfpc}{$H+}

interface

uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls, UDeclararVector, Buttons,
ComCtrls;

type

{ TForm1 }

TForm1 = class(TForm)
bGuardar: TButton;
bLimpiar: TButton;
bSalir: TButton;
Label4: TLabel;
lisvec: TListBox;
val: TEdit;
Label3: TLabel;
pos: TEdit;
Label1: TLabel;
Label2: TLabel;
Up: TUpDown;
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure bGuardarClick(Sender: TObject);
procedure bLimpiarClick(Sender: TObject);
procedure bSalirClick(Sender: TObject);
private
//Declaramos la instancia global (para que la usen todos los botones) y privada (atributo de la ventana).
vec:TVector;
//Método para mostrar el vector en el TListBox (lisvec).
procedure mostrar;
public
{ public declarations }
end;

var
Form1: TForm1;

implementation

{ TForm1 }

//implementación del método que libera la instancia, para implementar este código solo basta con
//seleccionar el formulario y escoger el evento OnClose.
procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
vec.Free; //Destruimos la instancia creada de la clase TVector.
end;

//implementación del método para el evento constructor del formulario. Para implementar este código solo
//basta con seleccionar el formulario y escoger el evento OnCreate.
procedure TForm1.FormCreate(Sender: TObject);
begin
//Inicializamos o creamos la instancia (vec).
vec:=TVector.Create;
//Especificamos que el tamaño máximo que tendrá el TUpDown (Up) es el numero de elementos que
//tiene el vector (num). Para esto utilizamos la propiedad Max del TUpDown.
Up.Max:=num;
end;

//implementación del código para el evento del botón guardar.


procedure TForm1.bGuardarClick(Sender: TObject);
var
ve:integer;
begin
//almacenamos en la variable ve el valor digitado en el campo de texto (val).
ve:=StrToInt(val.Text);
//Up.Position: Asigna el valor que tendrá el indice (posición del vector).
//Up.Position: En esta posición se guarda el elemento dentro del vector.
//Luego asignamos un valor al vector (ve) en una posición determinada (Up.Position).
vec.setVector(Up.Position, ve);
//Si no es la ultima posición del vector el TUpDown (Up) se incrementa en uno.
if Up.Position < num then
begin
//Se incrementa el valor de la posición en 1 para asignar el próximo elemento del vector.
Up.Position:=Up.Position+1;
end;
//Mostramos el contenido del arreglo.
//Limpiamos el campo de texto (val) para ingresar un dato nuevo y enfocamos el curso al TEdit (val).
mostrar;
val.Clear;
val.SetFocus;
end;

//implementación del evento para el botón limpiar.


procedure TForm1.bLimpiarClick(Sender: TObject);
var
i:Integer;
begin
for i:=1 to num do
begin
//asignamos un valor al vector (ve = 0) en una posición determinada (Up.Position = i) el valor de cero.
vec.setVector(i,0);
end;
Up.Position:=1;
lisvec.Clear;
val.Clear;
val.SetFocus;
end;

//implementación del evento para el botón salir.


procedure TForm1.bSalirClick(Sender: TObject);
begin
close;
end;

//implementación del método que muestra los elementos del vector en TListBox (lisvec).
procedure TForm1.mostrar;
var
i:integer; //la variable i para controlar cada una de las posiciones del vector.
begin
lisvec.Clear; //Limpiamos el TListBox.
for i:=1 to num do
begin
//Mostramos el valor de la posición i-esima del vector en el TListBox (lisvec).
lisvec.Items.Add(IntToStr(vec.getVector(i)));
end;
end;

initialization
{$I ventanavectores.lrs}

end.
Para desarrollar un segundo ejercicio, supongamos que queremos diseñar e implementar
una clase que permita llenar un vector con números enteros y se puedan realizar las
operaciones de sumar los elementos del vector, hallar el promedio de los elementos del
vector, calcular cual es el elemento mayor y menor del vector, además obtener la suma de
los números pares del vector.

Para el diseño del formulario se utilizaran los siguientes componentes con sus respectivos
nombres:

✔ Un TEdit que llamaremos pos para tomar las posiciones de cada indice en el
vector. Un TUpDown que llamaremos Up para ir incrementando las posiciones del
campo de texto pos de manera automática. Tenemos que tener en cuenta las
propiedades del TUpDown (Up) para asociarlo con el TEdit (pos) e iniciarlo en 1.

✔ Un TEdit que llamaremos val para ir capturando los valores que ingresaremos al
vector.

✔ Cinco TButton (botones), uno para guardar los elementos del TEdit (val) en el
vector, otro para llenar con números aleatorios el vector, otro que limpiar los
campos de texto e inicia los valores del vector, un botón que calcula la operación
especificada en el TComboBox (op) y uno par salir del formulario. Los TButton
tendrán los siguientes nombres: bGuardar, bLlenar, bLimpiar, bCalcular y bSalir.

✔ Un TListBox de nombre lisvec para visualizar el contenido del vector, a medida


que se almacenen elementos en el vector.

✔ Un TComboBox llamado op para determinar que operación se realizara sobre los


elementos del vector (suma, promedio, Mayor, Menor y Suma Pares). Este control
tiene una propiedad llamada ItemIndex que toma un valor entero que va desde 0 a
N, dependiendo el numero de opciones que tenga el TComboBox.

✔ Un TEdit llamado resul para mostrar los resultados de las operaciones que se
realicen con los elementos del vector.

✔ También se utilizaran varios TLabel para colocar los diferentes comentarios que
aparecen en el formulario.

La apariencia del formulario sera lago parecida a la siguiente ventana:


Cuando se crea el proyecto, automáticamente se crea una unidad con la clase TForm1,
cuando guardamos la unidad le damos el nombre VentanaVectores. En esta unidad se
escribe todo el código correspondiente a la clase TForm1, en la cual se capturan los datos
y se muestra la información del vector.

A continuación se crea la unidad en donde se encuentra la clase lógica y se le coloca el


nombre UDeclararVector. En esta clase se declara el vector con sus respectivos métodos
selectores, modificadores y los métodos que dan solución al problema planteado.

Código fuente de las dos unidades:

Unidad DeclararVector
unit UDeclararVector;

{$mode objfpc}{$H+}

interface

uses
Classes, SysUtils;
const
num=10; //Constante (opcional) para establecer el numero de elementos del vector.
type
{ TVector }
//Definimos el nombre de la clase (TVector).
TVector = class
private
//Definimos el arreglo, este es un arreglo estático (no cambia de tamaño) de tipo entero.
//Los indices se definen entre corchetes separados por dos puntos (..)
vector:array [1..num] of integer;
//Atributo para especificar cual operación se hará con los elementos que se almacenen en el vector.
operacion:integer;
public
//Constructor para la clase
constructor Create;
//Método modificador para asignar valores al vector.
procedure setVector(p:integer; ve:integer);
//método modificador para asignar el valor que tomara el TComboBox (op).
procedure setOperacion(op:integer);
//Método selector para tomar algún dato del vector.
function getVector(p:integer): integer;
//método selector para obtener el valor que tomara el TComboBox (op).
function getOperacion:integer;
//Métodos para realizar algunas operaciones con los elementos del vector.
procedure llenarAzar; //Llena automáticamente el vector con valores aleatorios.
function sumaVector:integer; //método para calcular la suma de los elementos del vector.
function promedio:double; //método para calcular el promedio de los elementos del vector
function mayorVector:integer; //método para calcular el elemento mayor del vector.
function menorVector:integer; //método para calcular el elemento menor del vector.
function sumaPares:integer; //método que suma los números pares del vector.
function calcular:string; //método para devover los resultados al campo de texto de nombre resul (TEdit).
end;

implementation

{ TVector }

//implementación del método constructor de la clase.


constructor TVector.Create;
var
i:integer; //Variable entera para recorrer el arreglo y controlar los indices.
begin
for i:=1 to num do //El ciclo itera i desde 1 (indice inferior) hasta num (Tamaño del arreglo).
begin
//Asignamos a cada elemento de la posición i-esisma del vector (entre corchetes) el valor de cero.
vector[i]:=0;
end;
operacion:=0;
end;

//implementación del método modificador del vector, para asignarle elementos al vector.
procedure TVector.setVector(p: integer; ve: integer);
begin
vector[p]:=ve;
end;

//implementación del método modificador para especificar cual operación se hará con los elementos del
//vector, recordemos que este valor sera entero y viene según la opción escogida en el TComboBox (op)
//dependiendo el valor que toma la propiedad ItemIndex del TComboBox (op).
procedure TVector.setOperacion(op: integer);
begin
operacion:=op;
end;
//Método selector del vector, para obtener un elemento del vector en una determinada posición.
function TVector.getVector(p: integer): integer;
begin
Result:=vector[p];
end;

//método que devuelve el valor que toma la propiedad ItemIndex del TComboBox (op).
function TVector.getOperacion: integer;
begin
Result:=operacion;
end;

//Este método permite llenar el vector con números enteros entre -49 y 99.
procedure TVector.llenarAzar;
var
i:integer;
begin
//Iniciamos la generación de números aleatorios.
Randomize;
for i:=1 to num do
begin
//se llena con números entre -49 .. 99.
vector[i]:=Random(100)-Random(50);
end;
end;

//método para calcular la suma de los elementos almacenados en el vector.


function TVector.sumaVector: integer;
var
i, suma:integer;
begin
suma:=0;
for i:=1 to num do
begin
suma:=suma+getVector(i);
end;
Result:=suma;
end;

//método para calcular el promedio de los elementos almacenados en el vector.


function TVector.promedio: double;
var
i,suma:integer;
begin
suma:=0;
for i:=1 to num do
begin
suma:=suma+getVector(i);
end;
Result:=suma/num;
end;

//método para calcular el elemento mayor almacenado en el vector.


function TVector.mayorVector: integer;
var
i, mayor:integer;
begin
mayor:=getVector(1);
for i:=2 to num do
begin
if getVector(i) > mayor then
begin
mayor:=getVector(i);
end;
end;
Result:=mayor;
end;

//método para calcular el elemento menor almacenado en el vector.


function TVector.menorVector: integer;
var
i, menor:integer;
begin
menor:=getVector(1);
for i:=2 to num do
begin
if getVector(i) < menor then
begin
menor:=getVector(i);
end;
end;
Result:=menor;
end;

//método para calcular la suma de los elementos pares almacenados en el vector.


function TVector.sumaPares: integer;
var
i, suma:integer;
begin
suma:=0;
for i:=1 to num do
begin
if getVector(i) mod 2 = 0 then
begin
suma:=suma+getVector(i);
end;
end;
Result:=suma;
end;

//método que devuelve el resultado de la operación escogida en el TComboBox (op). Este retornara un valor
//de tipo string, que sera mostrado en el TEdit resul.
function TVector.calcular: string;
var
datos:string;
begin
if getOperacion = 0 then
begin
datos:=(''+IntToStr(sumaVector));
Result:=datos;
end
else
if getOperacion = 1 then
begin
datos:=(''+FloatToStr(promedio));
Result:=datos;
end
else
if getOperacion = 2 then
begin
datos:=(''+IntToStr(mayorVector));
Result:=datos;
end
else
if getOperacion = 3 then
begin
datos:=(''+IntToStr(menorVector));
Result:=datos;
end
else
datos:=(''+IntToStr(sumaPares));
Result:=datos;
end;

end.

Unidad VentanaVector
unit VentanaVector;

{$mode objfpc}{$H+}

interface

uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls, ComCtrls,
Buttons,UDeclararVector;

type

{ TForm1 }

TForm1 = class(TForm)
bGuardar: TButton;
bLlenar: TButton;
bLimpiar: TButton;
bSalir: TButton;
bCalcular: TButton;
lisvec: TListBox;
resul: TEdit;
Label6: TLabel;
op: TComboBox;
Label4: TLabel;
Label5: TLabel;
val: TEdit;
Label3: TLabel;
pos: TEdit;
Label1: TLabel;
Label2: TLabel;
Up: TUpDown;
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure bCalcularClick(Sender: TObject);
procedure bGuardarClick(Sender: TObject);
procedure bLimpiarClick(Sender: TObject);
procedure bLlenarClick(Sender: TObject);
procedure bSalirClick(Sender: TObject);
private
//Declaramos la instancia global (para que la usen todos los botones) y privada (atributo de la ventana).
vec:TVector;
//Método para mostrar el vector en el TListBox (lisvec).
procedure mostrar;
public
{ public declarations }
end;

var
Form1: TForm1;

implementation

{ TForm1 }

//implementación del código para el evento del botón guardar.


procedure TForm1.bGuardarClick(Sender: TObject);
var
//Declaramos una variable para capturar el valor del dato a ingresar en el vector.
ve:integer;
begin
//Almacenamos en la variable ve el valor digitado en el campo de texto (val).
ve:=StrToInt(val.Text);
//Up.Position: Asigna el valor que tendrá el indice (posición del vector).
//Up.Position: En esta posición se guarda el elemento dentro del vector.
//Luego asignamos un valor al vector (ve) en una posición determinada (Up.Position).
vec.setVector(Up.Position, ve);
//Si no es la ultima posición del vector el TUpDown (Up) se incrementa en uno.
if Up.Position < num then
begin
//incremento el valor de la posición en 1 para asignar el próximo elemento.
Up.Position:=Up.Position+1;
end;
//Mostramos el contenido del arreglo en TListBox (lisvec).
//Limpiamos el campo de texto (val) para ingresar uno nuevo y enfocamos el curso al TEdit (val).
mostrar;
val.Clear;
val.SetFocus;
end;

//implementación del evento para el botón limpiar.


procedure TForm1.bLimpiarClick(Sender: TObject);
var
i:integer;
begin
for i:=1 to num do
begin
//asignamos un valor al vector (ve = 0) en una posición determinada (Up.Position = i) el valor de cero.
vec.setVector(i,0);
end;
lisvec.Clear;
val.Clear;
resul.Clear;
val.SetFocus;
end;

//Botón que llena el vector al azar.


//implementación del método que llena el vector con datos aleatorios, llamando al método llenarAzar.
procedure TForm1.bLlenarClick(Sender: TObject);
begin
vec.llenarAzar;
mostrar;
end;

//implementación del evento para el botón salir.


procedure TForm1.bSalirClick(Sender: TObject);
begin
close;
end;

//implementación del método que libera la instancia, para implementar este código solo basta con
//seleccionar el formulario y escoger el evento OnClose.
procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
vec.Free; //Destruimos la instancia creada de la clase TVector.
end;

//implementación del método para el evento constructor del formulario. Para implementar este código solo
//basta con seleccionar el formulario y escoger el evento OnCreate.
procedure TForm1.FormCreate(Sender: TObject);
begin
//Inicializamos o creamos la instancia (vec).
vec:=TVector.Create;
//Especificamos que el tamaño máximo que tendrá el TUpDown (Up) es el numero de elementos que
//tiene el vector (num). Para esto utilizamos la propiedad Max del TUpDown.
Up.Max:=num;
end;

//método que calcula la suma, el promedio, el mayor, el menor y la suma pares del vector según la
//opción escogida en el TComboBox (op).
procedure TForm1.bCalcularClick(Sender: TObject);
begin
//Para determinar la opción correspondiente a la operación, se utiliza el ItemIndex para escoger una opción.
//El ItemIndex comienza en 0 para el primer elemento del TComboBox (op) y termina en N para el
//ultimo elemento del TComboBox (op).
vec.setOperacion(op.ItemIndex);
resul.Text:=vec.calcular;
end;

//implementación del método que muestra los elementos del vector en TListBox (lisvec).
procedure TForm1.mostrar;
var
//la variable i para controlar cada una de las posiciones del vector.
i:integer;
begin
//Limpiamos el TListBox en caso de que tenga algún dato.
lisvec.Clear;
for i:=1 to num do
begin
//Mostramos el valor de la posición i-esima del vector al TListBox (lisvec).
lisvec.Items.Add(IntToStr(vec.getVector(i)));
end;
end;

initialization
{$I ventanavector.lrs}
end.

Nota: Los comentarios (//) pueden omitirse y simplemente limitarse a escribir solo el código fuente del
programa.

También podría gustarte