Ejecicios Vectores Lazarus
Ejecicios Vectores Lazarus
Ejecicios Vectores Lazarus
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.
✔ También se utilizaran varios TLabel para colocar los diferentes comentarios que
aparecen en el formulario.
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 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 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.
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 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 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 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.