Documentos de Académico
Documentos de Profesional
Documentos de Cultura
- INTRODUCCION C++BUILDER
Las variables usadas hasta ahora reciben propiamente el nombre de variables escalares,
porque solo permiten almacenar o procesar un dato a la vez.
No confundir esto con el tipo de dato o rango de datos que una variable tiene la
capacidad de almacenar.
Cada dato dentro del arreglo, se le llama elemento del arreglo y se simboliza y
procesa(captura ,operación ,despliegue ), usando el nombre del arreglo respectivo y un
subíndice indicando la posición relativa del elemento con respecto a los demás
elementos del arreglo, solo recordar que en C++Builder la primera posición, elemento o
renglón es la 0 (cero), ej.
NOMBRES
Juan
José
Ana —→ Nombres[3]
Carmen
EDAD
18 —> Edad[0]
20
25
30 —> Edad[3]
Sin embargo sus problemas son similares a los de variables normales, es decir hay que
declararlos, capturarlos, hacer operaciones con ellos, desplegarlos, compararlos, etc.
Para propósitos del aprendizaje se analiza o clasifican en tres grupos diferentes los
arreglos que ofrece C++Builder, ellos son;
2.- Nuevos Arreglos de C++ (Son CLASES e internos dentro del programa)
En programación tradicional siempre se manejan dos tipos de arreglos, los arreglos tipo
listas, vectores o unidimensionales y los arreglos tipo tablas, cuadros, concentrados,
matrices o bidimensionales, en ambos casos son variables que permiten almacenar un
conjunto de datos del mismo tipo a la vez, su diferencia es en la cantidad de columnas
que cada uno de estos tipos contiene, como en los siguientes ejemplos;
Juan
José
18 —> Edad[0]
20
25
30 —> Edad[3]
CIA ACME
(MILES DE $)
SUC A 10 12 15 10 9
SUC B 8 7 5 9 6
SUC C 11 18 20 14 17
CONCENTRADO DE CALIF
JUAN 5 5 5 5
JOSE 4 4 4 4
PEDRO 3 3 3 3
ANA 9 9 9 9
Como se observa, la diferencia principal entre un arreglo tipo lista, y un arreglo tipo
tabla, son las cantidades de columnas que contienen.
Un arreglo tipo lista se define como una variable que permite almacenar un conjunto de
datos del mismo tipo organizados en una sola columna y uno o mas renglones.
Los procesos normales con una lista o con sus elementos, incluyen declarar toda la lista,
capturar sus elementos, desplegarlos, realizar operaciones con ellos, desplegarlos, etc.
ejemplos;
int edades[12];
float sueldos[10];
AnsiString municipios[5];
notas:
Recordar también que la primera posición o renglón en una lista es la posición o renglón
0 (cero).
El dato capturado, proviene de momento de un componente visual escalar y por tanto
para capturas se deben de usar tantos componentes visuales como elementos tenga la
lista, ejemplo para capturar una lista de 4 edades, el código y pantalla se da un poco mas
adelante;
1. Programa
{ // declaración
int edad[4];
edad[0]=Edit1->Text.ToInt();
edad[1]=Edit2->Text.ToInt();
edad[2]=Edit3->Text.ToInt();
edad[3]=Edit4->Text.ToInt();
2. Pantalla de corrida
// conversión a meses
for(renglon=0;renglon<=3;renglon++)
{ edad[renglón]=edad[renglón]*12; };
Recordar que todos los datos internos de la lista estarán almacenados en la memoria ram
del computador, para despliegues se usara un componente visual que permite manipular
un conjunto de datos a la vez, el ListBox, pero se tiene que usar un ciclo for() para ir
añadiendo o agregando elemento por elemento como se observa en el problema ejemplo
que se ha venido desarrollando, en este caso se quiere desplegar las cuatro edades
convertidas a meses;
// declaración
int edad[4];
int renglón;
// conversión a meses
{ edad[renglón]=edad[renglón]*12; };
{ ListBox1->Items->Add(edad[renglón]); };
}
Solo recordar que para capturar una lista de strings, primero se deberá usar un
componente visual por cada elemento o renglón del arreglo y segundo el traspaso de
dato es directo, y para desplegarlo en un componente ListBox de igual forma es directo,
como en el siguiente ejemplo;
{ // declaración
AnsiString Ciudad[3];
int reng;
Ciudad[0]=Edit1->Text;
Ciudad[1]=Edit2->Text;
Ciudad[2]=Edit3->Text;
{ ListBox1->Items->Add(Ciudad[reng]); };
}
TAREAS PROGRAMACION C++BUILDER
1.- Capturar y desplegar 5 precios de productos cualesquiera, usando dos panel, uno
para capturar y uno para desplegar.
3.- Capturar los datos de 5 productos comprados en una tienda, incluyendo nombre,
precio y cantidad en sus 3 listas respectivas, después calcular una cuarta lista con el
gasto total por cada producto desplegarlo todo en un segundo panel e incluir también el
gran total.
4.- Capturar en una lista solamente 6 números múltiplos de 5, se debe de estar capture y
capture números hasta que se completen los 6 múltiplos de
Un arreglo tipo tabla se define como un conjunto de datos del mismo tipo organizados
en dos o mas columnas y uno o mas renglones.
Problema ejemplo, capturar una tabla que nos muestre el peso en lbs de los tres
jugadores claves de 4 equipos de fútbol, desplegarlos en otra tabla pero convertidos a
kg. ( una libra = .454 kg.), el programa y la pantalla de salida son;
{ // declaración
double lbrs[3][4];
for(reng=0;reng<=2;reng++)
for(col=0;col<=3;col++)
{ lbrs[reng][col]=lbrs[reng][col]*.454; };
{ ListBox1->Items->Add(FormatFloat("###.##",lbrs[reng][0]) );
ListBox2->Items->Add(FormatFloat("###.##",lbrs[reng][1]) );
ListBox3->Items->Add(FormatFloat("###.##",lbrs[reng][2]) );
ListBox4->Items->Add(FormatFloat("###.##",lbrs[reng][3]) ); };
}
Recordar que en este nivel de instrucción solo se pretende entender los conceptos
asociados a arreglos, mejores maneras de procesarlos existen, como se vera mas
adelante, pero con lo ya descrito y comprendido, ya es posible;
C++Builder nos proporciona cuando menos dos tiposnuevos de arreglos, ellos son;
TList
Sin embargo TList no es propiamente un tipo de dato como los float, int, double,
etcétera, sino que es una Clase en C++, y como todas las Clases en C++, TList tiene
asociados una serie de propiedades y de métodos (procedimientos y funciones) que
facilitan el procesamiento y manipulación de sus elementos.
1.-Propiedades;
2.- Métodos;
Add.- Inserta un objeto nuevo al final de la lista y regresa el lugar o posición donde hizo
la inserción.
Clear.- Se usa para vaciar el arreglo, también libera la memoria ocupada por los objetos
de la lista.
Delete.- Se usa para eliminar un objeto especifico, lleva como argumento o parámetro la
posición del objeto.
Expand.- Se usa para agregar mas espacio para nuevos objetos en la lista.
Pack .- Compacta todos los objetos en una lista y libera la memoria ocupada por los
objetos que estaban en la parte inferior de la lista.
Una de las características mas importante es que todas las listas que se derivan de TList,
son completamente dinámicas, es decir listas que se crean y se derivan de esta clase, no
son de tamaño fijo, sino que pueden ir admitiendo elementos mientras la memoria del
computador alcance, esta característica junto con las propiedades y métodos que poseen,
hacen de esta clase un objeto digno de estudiar, conocer, comprender y aplicar de forma
muy detallada.
La diferencia básica, con TList, es que TStringList solo permite almacenar strings,
como este es el caso mas común en el ambiente visual que se ha venido desarrollando,
así como en los sistemas o problemas de información de naturaleza administrativa, el
resto del capitulo se dedica a estudiar, analizar y construir aplicaciones con esta clase.
1.- Propiedades;
Objects.- Asocia un objeto a una string existente (ej. un bitmap a una string).
Sorted.- Especifica que las strings en la lista deben ser ordenadas automáticamente, solo
poner esta propiedad en True.
Strings[reng].- La mas importante, se usa para accesar, y leer o modificar una posición o
elemento especifico o determinado.
2.- Métodos;
Add.- Inserta un objeto nuevo al final de la lista y regresa el lugar o posición donde se
realizo la inserción.
Clear.- Se usa para vaciar el arreglo, también libera la memoria ocupada por los objetos
de la lista.
Delete.- Se usa para eliminar un objeto especifico, lleva como argumento o parámetro la
posición del objeto.
Se analiza ahora el procesamiento normal de estos objetos o desde una perspectiva mas
tradicional variables arreglo de tipo lista.
Para declarar un objeto o variable derivada de esta clase, recordar que aquí son dos
pasos, primero se debe declarar el objeto o variable y segundo se debe crear una
instancia real en memoria de este objeto o variable, como se muestran en los siguientes
ejemplos;
// área de declaración
TStringList *ciudades;
nota recordar que esta listas son dinámicas, y que no tiene sentido asignarle un tamaño
fijo, que también se podría hacer.
TStringList *edades;
Recordar que son listas de strings, si ocupan operaciones con números se deberá usar
ToInt() y ToDouble().
Recordar además que estos dos renglones que se ocupan para la declaración, van a ir
juntos al principio del onclick del botón Ok, pero si la captura se realiza usando un
montón o conjunto de componentes edits y otros botones realizan otro proceso con la
lista, entonces tendrán que ir separados en su lugar respectivo ( mas delante se indica
como ).
Para capturar sus elementos usando de momento el método que se analizo en listas
normales, es decir un montón de componentes Edit, como en el siguiente ejemplo;
TStringList *ciudades;
// captura de datos
ciudades->Strings[0]=Edit1->Text;
ciudades->Strings[1]=Edit2->Text;
Recordar que son listas y por tanto la primera posición, o primer renglón es la posición
0(cero).
Para desplegar los datos recordar que se puede usar un componente ListBox o un
componente ComboBox que permiten manipular el conjunto de datos a la vez, solo usar
las propiedades Text, tanto del ListBox, así como de la variable objeto derivada de
TStringList, como en el siguiente ejemplo;
{ TStringList *ciudades;
ciudades = new TStringList;
// despliegue de la lista
ListBox1->Items->Text = ciudades->Text;
Para el caso de procesos mas comunes como operaciones, comparaciones, etcétera, solo
recordar combinar las propiedades y métodos de TStringList con los métodos vistos y
aplicados ya para componentes visuales y para los de variables de tipo arreglo ya vistas.
Esto es importante porque exige conocer y familiarizarse con esta clase mas a fondo,
por ejemplo un caso sencillo, capturar una lista de 5 edades en años, convertirlos
posteriormente a meses y al final desplegar las edades convertidas a meses.
Código
{ TStringList *edad;
int reng;
// captura de datos
edad->Add(Edit1->Text);
edad->Add(Edit2->Text);
edad->Add(Edit3->Text);
edad->Add(Edit4->Text);
edad->Add(Edit5->Text);
for(reng=0;reng<edad->Count;reng++)
{ edad->Strings[reng]=FormatFloat("###.##",edad->Strings[reng].ToInt()
*
12);
};
notas:
En el for se esta usando la propiedad Count que devuelve la cantidad de elementos que
contiene la lista, esto es con la finalidad de no tener mas que procesar los elementos
existentes.
Recordar que Propiedad Strings[] permite manipular una posición especifica dentro de
una lista, recordar igualmente que la primera posición, es la 0(cero).
Para pasar los elementos de edad a ListBox, ambos componente y variable/objeto usan
propiedad Text, porque ambos la comparten o la heredan esto es importante porque
demuestra que realmente no son cosas o elementos diferentes.
#include <vcl\vcl.h>
#pragma hdrstop
#include "Unit1.h"
//-------------------------------------------
TForm1 *Form1;
TStringList *edad;
//-------------------------------------------
edad=new TStringList;
//-------------------------------------------
edad->Add(Edit1->Text);
}
La captura no ocupa ciclo for, pero si ocupa su propio BUTTON OK, solo con Caption
=“insertar o agregar” y su código usa el método Add como en el ejemplo de arriba.
Operaciones y comparaciones son normales, es decir un for renglón hasta que sea menor
que Count, etc., en el onclick del segundo botón.
Despliegues igualmente en forma normal, es decir sin ciclo for e igualando Text en
ambos, el TStringList y el Listbox.
Se puede añadir, eliminar e insertar ítems en la lista usando los métodos Add, Delete,
Insert con la propiedad Items, que también es de tipo TStrings.
Se puede permitir que un usuario realice una selección múltiple, poniendo la propiedad
MultiSelect en true, la propiedad ExtendedSelect determina como se realiza la selección
múltiple.
Para determinar cual ítem en particular esta seleccionado solo validar la propiedad
Selected, para conocer cuantos ítems se han seleccionado revisar los valores de la
propiedad SelCount.
Propiedades:
Columns.- Define una determinada cantidad de columnas para su despliegue dentro del
ListBox.
Items.- Es la propiedad que mas se ha venido usando, se utiliza para accesar las diversas
propiedades y métodos de las strings en la lista.
Métodos:
En la practica para cargar o capturar sus elementos, se deberá usar el método Add, ya
que no se permite cargar directamente sus datos o elementos por el usuario del
programa, solo usar código como el siguiente;
ListBox1→Items→Add(Edit1→Text);
Recordar que se pueden usar todos los métodos, para insertar, eliminar, contar, etc.
Si los valores son de tipo “numérico”, se pueden efectuar procesos con ellos de dos
maneras:
Pasando los valores de ListBox a una variable numérica de tipo arreglo y procesando
esta ultima variable.
Usar instrucciones directamente de proceso con los métodos ToInt y ToDouble, como
se realizo con las variables/objetos derivadas de TStringList.
Ejemplo con ListBox, para este caso se pide capturar 5 edades en un ListBox, luego
sumarle 3 años a cada una usando el mismo ListBox, y desplegarlas en un segundo
ListBox convertidas a meses.
Pantalla de diseño:
Código:
{ ListBox1→Items→Add(Edit1→Text); }
——————————————————
{ListBox2→Items→Add(ListBox1→Items→Strings[reng].ToInt() * 12);}; }
————————————————————————— Pantalla de salida:
TAREAS
PROGRAMACION C++BUILDER 1.- CAPTURAR EN UNA LISTA LOS SUELDOS
DE 6 EMPLEADOS Y DESPLEGARLOS EN UNA SEGUNDA LISTA AUMENTADOS
EN UN 30% 2.- CAPTURAR EN UNA LISTA LOS PESOS EN KILOGRAMOS DE 6
PERSONAS DESPLEGARLOS EN UNA SEGUNDA LISTA CONVERTIDOS A LIBRAS
Y ADEMAS SOLO LOS MAYORES DE 100 LIBRAS. 3.- CAPTURAR EN SUS 4
LISTAS RESPECTIVAS MATRICULA, NOMBRE Y DOS CALIFICACIONES DE 5
ALUMNOS, DESPUES CALCULAR UNA LISTA DE PROMEDIOS DE
CALIFICACIONES. 4.- CAPTURAR EN SUS LISTAS RESPECTIVAS
NUMEMPLEADO, NOMEMPLEADO, DIAS TRABAJADOS Y SUELDO DIARIO DE 5
EMPLEADOS, DESPLEGAR EN OTRA PANTALLA O PANEL LA NOMINA PERO
SOLO DE AQUELLOS EMPLEADOS QUE GANAN MAS DE $300.00 A LA SEMANA.
CIA ACME
MILLONES DE PESOS
SUC A 1 2 3 4
SUC B 5 6 4 5
SUC C 6 7 8 9
Recordar que son los datos numéricos internos quienes se procesan (es decir, se
capturan, se realizan operaciones con ellos, se despliegan, etc.), es la información
externa quien le da sentido.
+Options, goediting = true; Para que permita editar o capturar datos al usuario.
+Options, gotab = true; Para que el usuario pueda navegar entre celdas usando la tecla
del tabulador.
StringGrid1→Cells[1][1]=“PATO”;
Edit1→Text=StringGrid1→Cells[0][0];
Edit2→Text=StringGrid→Cells[0][1] * 3.1416;
observar que a pesar de ser de tipo Strings, se pueden efectuar alguna operaciones
matemáticas directamente con las celdas.
Aunque es mas seguro sobre todo en el caso particular de la suma, convertirlos a Cells[]
[].ToInt() o ToDouble(), ej.;
Edit2→Text=StringGrid1→Cells[1][0].ToInt()+5;
Para procesar todos los elementos de la tabla, solo recordar que se deben usar dos ciclos
for, uno externo para controlar columnas, y uno interno para controlar renglón
( observar que es lo inverso de las tablas o arreglos normales).
Pantalla de Diseño:
Programa;
for(col=0;col<=2;col++)
for(reng=0;reng<=3;reng++)
{StringGrid1->Cells[col][reng]=StringGrid1->Cells[col][reng]. ToInt()-
4 ;};
Pantalla de Corrida:
Un proceso muy común con tablas, cuadros y concentrados es agregarles listasde totales
y promedios ya sea por columna o por renglón o ambas , por ejemplo;
CIA ACME
INGRESOS MENSUALES
SUC A 1 2 3 6 2
SUC B 4 5 6 15 5
SUC C 7 8 9 24 8
SUC D 10 11 12 33 11
TOTMES 22 26 30
En este ejemplo aparte de la tabla se ocupan 4 listas, dos para totales y dos para
promedios.
//declaración
for(reng=0;reng<=3;reng++)
for(col=0;col<=2;col++)
{ totsuc[reng]=totsuc[reng]+tabla[reng][col]; };
for(reng=0;reng<=3;reng++)
for(col=0;col<=2;col++)
{totmes[col]=totmes[col]+tabla[reng][col]; };
1.- Construir un concentrado que despliegue los costos fijos de tres diversos productos
que se fabrican en cuatro sucursales de una empresa MAQUILADORA.
2.- Construir un concentrado que contenga los ingresos por ventas mensuales de los 4
primeros meses del año de tres sucursales de una cadena refaccionaría, agregar listas de
ingresos totales por mes e ingresos promedios por sucursal.
3.- Construir un cuadro que contenga las calificaciones de 5 materias de cuatro alumnos
cualesquiera, incluir promedios de calificaciones por materia y por alumno.