Unidad 1 - Colecciones
Unidad 1 - Colecciones
Unidad 1 - Colecciones
REGIONAL CÓRDOBA
TECNICATURA SUPERIOR EN PROGRAMACIÓN
CATEDRA
PROGRAMACION II
UNIDAD 1
COLECCIONES DE DATOS SIMPLES
AGOSTO 2009
Docentes:
Analía Guzman
Oscar Botta
1
Programación II Unidad 1
Ejemplo de esta clase de datos, son por ejemplos Municipio en BC las posibles respuestas solo son
(Tecate, Tijuana, Mexicali, Ensenada, Rosarito), otro ejemplo es Sexo (Hombre, Mujer), etc.
Para situaciones como esta, existen componentes wincontrols que permiten programar por adelantado
las posibles respuestas y el usuario solo debe seleccionar la respuesta apropiada en lugar de tener que
escribirla.
Estos controles nos permiten definir en primera instancia un conjunto de datos o valores o respuestas
asociados a una caja de edicion cualesquiera, asi ahora el usuario tendra la oportunidad de seleccionar un dato
del conjunto de datos o respuestas ya predefinido.
Estos componentes DEBERAN CONSTRUIRSE EN dos partes una parte de encabezado para poner el
nombre del grupo de respuestas( por ejemplo municipios, sexo, etc.) estos los podran poner en label
apropiados y acomodados
La segunda parte es la lista de opciones o respuestas que se debe cargar al tiempo de ejecucion de la
forma como lo muestra el siguiente programa:
Ejemplo
{
label1.Text = listBox1.SelectedItem.ToString();
label2.Text = comboBox1.SelectedItem.ToString();
Notas:
• Se esta usando un objeto LINKLABEL, en lugar de BUTTON porque como se observa en la corrida, se
pueden usar tambien LIGAS o enlaces tipo WEB.
• Para cargar las opciones de los LISTBOX y COMBOBOX se debera hacer un click en los (...) que estan a
un lado de la propiedad ITEMS (Collection), esto activara un pequeno editor, donde cada renglon sera
una opcion del combobox o listbox y en propiedad TEXT se puede cargar el encabezado del combobox.
• Ya en codigo se usa la propiedad SelectedItem que esta apuntando o cargada con el valor o datos
seleccionado por el usuario, convertida a string, recuerden que si la ocupan numerica pueden usar el
PARSE apropiado para mandarla a una variable numerica.
• La diferencia en pantalla o ejecucion entre ambos controles, se ve en la corrida, que esta unos parrafos
mas abajo.
• Recordar que estos controles tienen muchas propiedades muy utiles y que se seguiran usando a lo
largo del curso.
Corrida
1
Programación II Unidad 1
ListBox es un componente DINAMICO (es decir no tiene tamano definido) que permite procesar
visualmente un conjunto de elementos de tipo string.
La propiedad Rows que se usa al crearlo, es solo para indicarle cuantos renglones desplegara en
pantalla, es decir si se usa rows=5, en listbox se podra capturar todos los elementos o datos que se quiera pero
solo desplegara los ultimos cinco elementos.
Sin embargo existen ciertas propiedades del listbox que permiten conocer cuantos elementos estan
cargados en el listbox.
Otra importante aspecto a recordar cuando se procese o programe, es que el primer indice de la lista es
el indice numero 0(cero).
Este componente, contiene muchas propiedades y metodos que facilitan el trabajo con datos la mas
importante es su propiedad ITEMS, que a su vez tiene:
Items[indice]: get or set el dato en la posicion indicada (ver primera nota abajo).
Notas:
• GET y SET son propiedades asociadas a todos los objetos o controles y sus propiedades de microsoft
net, por ejemplo para un textbox, si en un programa se dice alfa = text5.text; se esta usando get, si se
dice text5.text=500; se esta usando set.
2
Programación II Unidad 1
• Observar que no se usa propiedad text y recordar que entran y salen strings a listbox.
• Esto de get-set se puede usar para cualquier propiedad, por ejemplo alfa = listbox8.background; se
esta usando get, pero si se codifica listbox8.background=amarillol; se esta usando set, como se
observa es importante entender y aplicar este GET-SET en todos los programas.
• Capturas: Solo se ocupara un Text, el evento click del button, y el metodo Add del ListBox.
• Pero si se quiere pasar de un ListBox a otro ListBox, entonces ciclo for, count, etc.
CHECKBOX Y CHECKEDBOXLIST
Estos componentes CheckBox y CheckedBoxList permiten seleccionar una opcion al usuario del
programa o tomar una decision directamente en pantalla.
La diferencia entre ellos aparte de como se programa el componente, es que checkboxlist permite
agrupar mejor sus elementos internos tal como se muestra en las corridas:
Ejemplos de uso:
Ejemplo
3
Programación II Unidad 1
label2.Text = CARRERA.SelectedItem.ToString();
1.- Recordar que es mas conveniente asignarles un NAME a todos los componentes que se esten manejando
dentro de una FORMA o ventana.
CHECKBOX:
1.- La propiedad NAME debera ser diferente en cada checkbox usado tambien se puede agregar una propiedad
checked=true para que aparezca ya palomeado o seleccionado el control.
CHECKEDBOXLIST:
1.- Este control nos permite mejorar la apariencia de la salida del checkbox
2.- Solo agregar un NAME al control y un ITEMS COLLECTION para sus elementos, para programarlo solo
usar la propiedad selecteditem.
Corrida:
Ejercicios
1.- Evaluar la funcion para x = 2,-5, 8 (usar un CheckBox por cada valor de x y programar
cada if de cada CheckBox con la operacion correspondiente y el despliegue del resultado)
2.- Construir un ventana con los datos de un automovil y abajo construir un plan de financiamiento a dos anos
o muestra un plan de financiamiento a tres anos. (Son dos checkbox en la ventana mas un monton de botones
de texto o labels, para pasar los datos a panels abajo y un boton de ok)(Chekbox).
4
Programación II Unidad 1
3.- Construir un programa que evalue una funcion cualquiera on tres valores cualesquiera usando el
checkboxlist.
2. INSTRUCCIONES ITERATIVAS
Las instrucciones iterativas son instrucciones que permiten ejecutar repetidas veces una instrucción o un
bloque de instrucciones mientras se cumpla una condición. Es decir, permiten definir bucles donde ciertas
instrucciones se ejecuten varias veces. Las instrucciones de ciclos son
• for
• while
• do while
• foreach : ciclo especializado en procesar y manipular arreglos y colecciones
1. CICLO FOR
Este ciclo es uno de los mas usados para repetir una secuencia de instrucciones sobre todo cuando se
conoce la cantidad exacta de veces que se quiere que se ejecute una instruccion simple o compuesta.
{ instruccion(es);
};
En su forma simple la inicializacion es una instruccion de asignacion que carga una variable de control
de ciclo con un valor inicial.
La condicion es una expresion relacional que evalua la variable de control de ciclo contra un valor final o
de parada que determina cuando debe acabar el ciclo.
El incremento define la manera en que la variable de control de ciclo debe cambiar cada vez que el
computador repite un ciclo.
Ejemplo
int reng;
LISTA.Items.Clear();
Notas:
• Se esta usando un objeto listbox con NAME=LISTA para procesar el conjunto de datos recordar que
listbox, comboboxlist son objetos similares y que pueden almacenar conjuntos de datos, cosa que los
textbox y label no permiten.
• Se esta usando la propiedad add de la coleccion items del componente o control listbox (LISTA).
5
Programación II Unidad 1
• Como dentro del listbox entran y salen puros datos strings la variable numerica reng de tipo entero se
esta convirtiendo a string dentro del listbox.
• Y el metodo items.clear() es porque cuando el usuario usa el click mas de una vez el control listbox los
agrega abajo del listbox por eso en cuanto se activa el onclick lo primero que se realiza es limpiar el
listbox.
• El ciclo for es muy sencillo y no ocupa mucha explicacion, solo empieza en UNO y se va incrementando
de UNO en UNO.
Corrida:
1.- El ciclo comienza en uno y se incrementa de uno en uno este es el caso mas general.
for(x=5;x⇐15;x=x+1){ etc.};
4.- Los incrementos tambien pueden ser diferentes al de uno en uno, ej.;
5.- Incluso pueden ser decrementos, solo que en este caso, recordar;
5.1.-el valor inicial de la variable debe ser mayor que el valor final.
ejemplo;
6.- Solo para los casos de incrementos y decrementos de una en una unidad substituir en el for;
el x = x + 1 por x++
el x = x - 1 por x–
6
Programación II Unidad 1
Ejercicios
2.- desplegar los enteros entre 50 y 30 acompanados de su potencia cuadrada y raiz cubica respectiva ( revisar
tema de operadores aritmeticos ).
3.- desplegar los multiplos de 5, entre 10 y 50, acompanados de su factorial y logaritmo respectivo ( la misma
nota de arriba ).
5.- evaluar la funcion y=5x^2 + 3x + 8 cuando x–> -3...10 (rango de -3 hasta 10)
LISTA1.Items.Add(DATO.Text);
cantidad = LISTA1.Items.Count;
dato = Int32.Parse(LISTA1.Items[r].ToString());
LISTA1.Items[r] = dato.ToString();
};
Recordar que el primer indice en un ListBox es el cero por eso el ciclo va desde el cero hasta la cantidad
de elementos menos uno.
Corrida:
7
Programación II Unidad 1
Ejercicios
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.
2. CICLO WHILE
En este ciclo el cuerpo de instrucciones se ejecuta mientras una condicion permanezca como verdadera
en el momento en que la condicion se convierte en falsa el ciclo termina.
while(condicion)
{
grupo cierto de instrucciones;
instruccion(es) para salir del ciclo;
};
Ejemplo:
{
int reng = 1;
LISTA.Items.Clear();
while (reng <= 10)
{
LISTA.Items.Add(reng.ToString() + " pato");
reng++;
};
}
8
Programación II Unidad 1
Corrida:
• While puede llevar dos condiciones en este caso inicializar 2 variables de condicion y cuidar que existan
2 de rompimiento o terminacion de ciclo.
• El grupo cierto de instrucciones puede ser una sola instruccion o todo un grupo de instrucciones.
• A este ciclo tambien se le conoce tambien como ciclo de condicion de entrada o prueba por arriba
porque este ciclo evalua primero la condicion y posteriormente ejecuta las instrucciones.
Ejercicios
3. CICLO DO WHILE
Su diferencia basica con el ciclo while es que la prueba de condicion es hecha al finalizar el ciclo, es
decir las instrucciones se ejecutan cuando menos una vez porque primero ejecuta las instrucciones y al final
evalua la condicion;
9
Programación II Unidad 1
corrida:
Otra diferencia basica con el ciclo while es que, aunque la condicion sea falsa desde un principio el
cuerpo de instrucciones se ejecutara por lo menos una vez.
Ejercicios
1. Si se conoce la cantidad exacta de veces que se quiere que se ejecute el ciclo o si el programa de
alguna manera puede calcularla usar for.
2. Si se desconoce la cantidad de veces a repetir el ciclo o se quiere mayor control sobre la salida o
terminacion del mismo entonces usar while.
3. Si se quiere que al menos una vez se ejecute el ciclo entonces usar do while.
3. ARREGLOS
1. INTRODUCCION
Uno de los problemas mas comunes en los diversos sistemas de informacion es el tratamiento o
procesamiento de una gran volumen de datos o de informacion.
10
Programación II Unidad 1
Las variables usadas hasta ahora en visual c# reciben propiamente el nombre de variables escalares
porque solo permiten almacenar o procesar un dato a la vez.
Por ejemplo si se quiere almacenar nombre y edad de 15 personas con el metodo tradicional se
ocuparan 30 variables y solo es nombre y edad de 15 personas, agreguen mas datos y mas personas y ya es
tiempo de empezar a analizar otro tipo de variables.
Es decir, en problemas que exigen manejar mucha informacion o datos a la vez, variables escalares no
son suficientes ya que su principal problema es que solo permiten almacenar y procesar un dato a la vez.
Se ocupan entonces variables que sean capaces de almacenar y manipular conjuntos de datos a la vez.
Variables de tipo arreglo si permiten almacenar y procesar conjuntos de datos del mismo tipo a la vez.
Cada dato dentro del arreglo se le conoce como elemento del arreglo y se simboliza y procesa (captura,
operacion, despliegue ) usando el nombre del arreglo respectivo y un subindice indicando la posicion relativa
del elemento con respecto a los demas elementos del arreglo, solo recordar que en VISUAL C# la primera
posicion, elemento o renglon es el 0 (cero), ej.
NOMBRES
Juan –>nombres(0)
Pedro → nombres(1)
Rosa –> nombres(2)
Jose –> nombres(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.
2. ARREGLOS
En programacion 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:
a) LISTAS
EDAD
18
34
22
15
B) TABLAS
SUC A 10 20 30 40
SUC B 50 60 70 80
SUC
90 100 110 120
D
Como se observa la diferencia principal entre un arreglo tipo lista y un arreglo tipo tabla son las
cantidades de columnas que contienen.
NOTA IMPORTANTE:
• Los conceptos manejados aqui estan enfocados a los sistemas de informacion contables financieros y
administrativos.
11
Programación II Unidad 1
• En algebra matricial, si son importantes los conceptos de vectores y matrices, pero las operaciones y
metodos son precisamente los del algebra matricial.
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.
Como se observa por el formato y como ya se ha indicado anteriormente en visual c# 2005 no existen
tipos de datos tradicionales, en su lugar c# usa objetos derivados de las clases numericas apropiadas, por lo
que no debe sorprender que realmente se esta creando un objeto arreglo derivado de la clase de los enteros.
Recordar tambien que como objeto arreglo, tambien puede usar una serie de metodos pertenecientes a
la clase numerica de la cual heredo.
Ejemplos:
int[] edad= new int[12];
float[] sueldos= new float[10];
string[] municipios= new strings[5];
notas:
• Recordar que la primera posicion o renglon en una lista es la posicion o renglon 0 (cero).
• El dato capturado, proviene de momento de un componente escalar textbox y/o se usan tantos de estos
controles como elementos tenga el arreglo o mas facil aun se debera controlar la captura de elementos
usando algun algoritmo sencillo de validacion como lo muestra el programa ejemplo.
Ejemplo
//como atributo de la clase
int[] edad = new int[5];
int reng = 0;
12
Programación II Unidad 1
corrida
notas:
• Para el caso de operaciones y comparaciones con todos los elementos de la lista a la vez se debera usar
un ciclo for con una variable entera llamada renglon, misma que tambien se usa como indice de la lista.
• Recordar que todos los datos internos de la lista estaran almacenados en la memoria ram del
computador, para despliegues se usa un componente visual que permite manipular un conjunto de
datos a la vez, el ListBox con sus metodos apropiados pero se tiene que usar un ciclo for () para ir
anadiendo o agregando elemento por elemento como se observa en el problema ejemplo que se ha
venido desarrollando, en este caso se quiere desplegar las cinco edades convertidas a meses.
• Casi al final se usa un ciclo foreach para desplegar el arreglo edad, como se indico este ciclo foreach se
especializa en la manipulacion de arreglos y colecciones, el formato de foreach es:
• Observar tambien que en foreach quien se procesa es la variable de control (r.ToString()) no el arreglo,
no se aconseja usar foreach ni para cargar arreglos ni para actualizarlos, solo para navegar dentro de
ellos.
• La ultima intruccion y muy importante es poner en cero las variables de control de ciclos o indice de
arreglos, esto es porque el servidor mantiene el programa ejecutandose continuamente en memoria y
si se vuelve a pedir la ejecucion del programa, en cuento se intente capturar un nuevo dato va a
marcar el error arreglofueradelimite o arrayofbound, estan avisados.
Ej;
int[] edad={15,16,17,18};
float[] sueldo={40.85, 65.30, 33.33};
string[] ciudad={”tecate”, “tijuana”, “mexicali”, “rosarito”, “ensenada”};
Ejercicios
1.- Capturar y desplegar 5 precios de productos cualesquiera usando dos panel uno para capturar y uno para
desplegar
13
Programación II Unidad 1
3.- Capturar los datos de 5 productos comprados en una tienda, incluyendo nombre, precio y cantidad en sus 3
listas respectivas, despues calcular una cuarta lista con el gasto total por cada producto desplegarlo todo en un
segundo panel e incluir tambien el gran total
4.- Capturar en una lista solamente 6 numeros multiplos de 5, se debe de estar capture y capture numeros
hasta que se completen los 6 multiplos de 5
Para procesar (recordar solo operaciones y comparaciones) internamente todos los elementos de la
tabla se ocupan dos ciclos for() uno externo para controlar renglon y uno interno para controlar columna.
Los elementos de la tabla se deberan simbolizar con el nombre de la tabla y 2 subindices, el primer
subindice referencia al renglon y el siguiente subindice referencia la columna los dos dentro del mismo
corchete.
Para capturar sus elementos, usaremos un textbox y un boton de captura, solo tener cuidado o mucho
control sobre los indices ren y col como lo muestra el ejemplo.
Para efectuar otros procesos tales como operaciones, despliegues con todos los elementos de la tabla se
deberan usar 2 ciclos un for externo para controlar renglon y un for interno para controlar columna.
Ejemplo
Notas:
14
Programación II Unidad 1
• Para procesar los elementos se usan dos ciclos for y el formato tabla [reng, col].
Corrida:
tipodato[,] nomtabla={ {val reng 0}, {val reng 1}, {val reng n} };
Ejercicios
1.-Construir un cuadro que contenga los costos fijos de cuatro productos cualesquiera, que se producen en tres
plantas diferentes de una empresa maquiladora (2 prog uno capturado y otro inicializado).
2.- Construir un cuadro que contenga los ingresos mensuales por ventas durante los tres primeros meses del
ano de cuatro sucursales de una cadena de auto refacciones, agregar al final una lista que muestre los ingresos
mensuales totales por meses y una segunda lista que muestre los ingresos mensuales totales por sucursal(2
progs uno capturado y otro inicializado).
3.-Construir un cuadro que contenga las comisiones ganadas por tres vendedores, de los 5 tipos de linea blanca
de conocida muebleria, ademas listas de comisiones totales y promedios ganadas por los vendedores, asi como
listas de comisiones totales y promedios por tipo de linea blanca
Este tipo de arreglo es un arreglo de arreglos, pero cada arreglo puede ser de difrente tamano, es
decir a veces en problemas especiales se puede ocupar una matriz, cuadro, tabla o concentrado donde el
tamano de cada renglon sea DIFERENTE.
15
Programación II Unidad 1
Observar los cambios en la declaracion en cuanto un arreglo de tipo tabla normal es decir ahora son dos
corchetes y no llevan la coma dentro de ellos.
Para procesar los elementos de un arreglo irregular, se deberaN USAR dos corchetes, no uno con dos
indices como se realizo en tablas rectangulares.
La programadores de c++ usan este metodo para procesar tablas, menuda sorpresa les espera con
visual c#
Observar en la declaracion que ya se determino la cantidad de renglones que tendra el arreglo irregular,
pero no se ha determinado el tamano de cada uno de los renglones para realizar esto se debera incluir en la
declaracion del arreglo irregular, una definicion de cada renglon usando el siguiente formato;
Para este caso se tiene un arreglo de tres renglones, pero el primer renglon tendra 5 columnas o
elementos, el segundo renglon tendra 2 columnas o elementos y el tercer rnglon tendra 3 columnas o
elementos, en total el arreglo irregular contendra 5+2+3=10 elementos.
Para realizar procesos se deberan usar tantos ciclos for (columnas) como renglones tenga el arreglo y
se puede manejar como constante el renglon en cada ciclo, como lo muestra el ejemplo, o en el peor de los
casos mucha logica de control de captura.
Ejemplo
Corrida
16
Programación II Unidad 1
Ejercicios
Sin embargo es conveniente aclarar que a diferencia de variables escalares normales visual c# 2005 no
genera una nueva variable en memoria ni tampoco copia los datos al arreglo que recibe, en su lugar c# sigue
usando los datos que estan en el arreglo original, es por esta razon que cambios que se le hagan a los datos del
arreglo que recibe realmente se estaran haciendo al arreglo original como lo muestra el siguiente ejemplo:
Ejemplo
void proc1(int[] vector) // se recibio con otro nombre y se creo sin tamano fijo
{
// procesando la lista recibida sumandole 15
for (int x = 0; x <= 4; x++) { vector[x] = vector[x] + 15; };
// observar que no se regresa la lista o vector recibido
}
corrida
17
Programación II Unidad 1
Es de recordar que los cambios que le hagan al arreglo dentro de el procedimiento se reflejaran en el
arreglo original, es por esto que si se quiere modificar un arreglo en un procedimient funcion no hay necesidad
de regresar ningun valor y por tanto no se ocupan funciones.
Solo para los casos que se quiera regresar algun dato especial del arreglo, por ejemplo regresar el
primer dato par, o la suma de todos los elementos del arrreglo o el promedio de todos sus elementos, etc etc
etc, solo en casos como estos se mandara una arreglo a una funcion.
Ejercicios
18