Unidad 1 - Colecciones

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

UNIVERSIDAD TECNOLÓGICA NACIONAL

REGIONAL CÓRDOBA
TECNICATURA SUPERIOR EN PROGRAMACIÓN

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

1. COMPONENTES QUE MANEJAN COLECCIONES


LISTBOX Y COMBOBOX
Existen muchas ocasiones en donde el usuario del programa tiene que proporcionar datos que
provienen de un conjunto finito y muy pequeno de posibles respuestas esto significa que cada vez que se
ejecute el programa el usuario estara proporcionando las mismas respuestas.

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

private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)

{
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:

PROPIEDAD ACCION O SIGNIFICADO

Items.Add(dato): Inserta un elemento al final del listbox.

Items.Clear(): Elimina todos los elementos de la lista.

Items.Count(): Regresa la cantidad de elementos en lista.

Items.Sorted=true; Ordena los elementos de la lista usada solo al tiempo de diseno.

Items.Contains(dato): Regresa true o false, si el dato se encuentra o no se encuentra en la lista.

Items.IndexOf(dato): Regresa el indice del objeto dentro del listbox.

Items.Insert(indice,dato): Inserta el dato en la posicion indicada.

Items.Remove(dato): Elimina el dato de el listbox.

Items.RemoveAt(indice): Elimina el dato que esta en la posicion indicada.

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

• Otro ejemplo alfa=listbox2.Items[2]; se esta usando (get)

listbox2.Items[4]=”mama”; se esta usando (set).

• 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.

• Proceso: Se ocupara un ciclo for y los metodos count y text de ListBox.Items[indice].

• Despliegues: No se ocupa porque todos los cambios son visibles.

• 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:

Observar que dos o mas checkboxs pueden estar seleccionados a la vez.

Ejemplo

private void button1_Click(object sender, EventArgs e)

// CheckBox se tienen que validar uno por uno

if (GATO.Checked) label1.Text = "miauu";

if (PERRO.Checked) label1.Text = "wow";

3
Programación II Unidad 1

private void button2_Click(object sender, EventArgs e)

// checkedlistbox control similar a listbox,

// tambien usa propiedad selecteditem

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.

2. Para programar este componente:

Solo recordar usar la propiedad checked en codigo y un if por cada checkbox.

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.

Su formato general es:

for (inicializacion; condicion; incremento)

{ 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.

Se deben separar esos 3 argumentos con punto y coma (;)

Ejemplo

private void button1_Click(object sender, EventArgs e)

int reng;

LISTA.Items.Clear();

for (reng = 1; reng <= 10; reng++)

LISTA.Items.Add(reng.ToString() + " mama");

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

• Recordar que para encadenar strings en visual c# se usa el signo +

• 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:

Casos Particulares del ciclo for:

1.- El ciclo comienza en uno y se incrementa de uno en uno este es el caso mas general.

2.- Pero el valor inicial puede se diferente de uno, ejemplo;

for(x=5;x⇐15;x=x+1){ etc.};

3.- Incluso el valor inicial puede ser negativo, ejemplo;

for (x = -3 ;x⇐ 8; x=x+1) { etc.};

4.- Los incrementos tambien pueden ser diferentes al de uno en uno, ej.;

for (x=1; x⇐ 20; x=x+3){ etc. };

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.

5.2.-cambiar el sentido de la condicion.

ejemplo;

for (x= 50 ; x >= 10; x= x-4 ) { etcetera };

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

1.- Construir un programa que despliegue los numeros del 20 al 30.

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 ).

4.- desplegar la tabla de multiplicar que el usuario indique

5.- evaluar la funcion y=5x^2 + 3x + 8 cuando x–> -3...10 (rango de -3 hasta 10)

Ejemplo con listBox

private void button1_Click(object sender, EventArgs e)

LISTA1.Items.Add(DATO.Text);

DATO.Text = " ";

private void button2_Click(object sender, EventArgs e)

int r, cantidad, dato;

cantidad = LISTA1.Items.Count;

for (r = 0; r <= cantidad - 1; r++)

dato = Int32.Parse(LISTA1.Items[r].ToString());

dato = dato + 100;

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.

Su formato general es:

cargar o inicializar variable de condicion;

while(condicion)
{
grupo cierto de instrucciones;
instruccion(es) para salir del ciclo;
};
Ejemplo:

private void button1_Click(object sender, EventArgs e)

{
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.

• La condicion puede ser simple o compuesta.

• 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

1.- Desplegar enteros entre 50 y 80

2.- Desplegar multiplos de 4 entre 60 y 20 acompanados de su logaritmos de base 10 y base e respectivos (


revisar tema operadores atitmeticos)

3.- Construir la tabla de dividir que el usuario indique

4.- Evaluar una funcion cualesquiera para el rango de valores de x de -3 a +5

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;

Tambien se le conoce por esta razon como ciclo de condicion de salida.

Su formato general es:

cargar o inicializar variable de condicion;


do {
grupo cierto de instruccion(es);
instruccion(es) de rompimiento de ciclo;
} while (condicion);
Ejemplo:

9
Programación II Unidad 1

private void button1_Click(object sender, EventArgs e)


{
int reng = 1;
LISTA.Items.Clear();
do
{
LISTA.Items.Add(reng.ToString() + " perico");
reng++;
} while (reng <= 10);
}

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.- seleccionar y cosntruir tres tareas del for

2.- seleccionar y construir dos tareas del while

4. CONCLUSIONES ACERCA DE CICLOS


El problema de dado un problema O PROGRAMAS cualesquiera en visual c# 2005 cual ciclo se debe usar se
resuelve con:

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

INGRESO MENSUAL DE VTAS (MILES DE $)

.......ENE FEB MAR ABR MAY

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.

3. ARREGLO TIPO LISTA ó VECTORES


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.

Tambien reciben el nombre de vectores en algebra o arreglos unidimensionales en programacion.

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.

Para declarar una lista se usa el siguiente formato;

Tipodato[] nomlista= new tipodato[cant de elementos o renglones];

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;

private void button1_Click(object sender, EventArgs e)


{
if (reng <= 4)
{
edad[reng] = System.Int32.Parse(EDAD1.Text);
reng++;
EDAD1.Text = " ";
};
if (reng == 5) { EDAD1.Text = "YA SON CINCO"; };
}

private void button2_Click(object sender, EventArgs e)


{
// LIMPIANDO LISTAS
LISTA1.Items.Clear();
LISTA2.Items.Clear();
//CARGANDO LISTA EDAD CAPTURADA
for (reng = 0; reng <= 4; reng++)
{ LISTA1.Items.Add(edad[reng].ToString()); };
//CALCULANDO Y DESPLEGANDO
for (reng = 0; reng <= 4; reng++)
{ edad[reng] = edad[reng] * 12; };
//usando ciclo foreach para desplegar
foreach (int r in edad)
{ LISTA2.Items.Add(r.ToString()); };
//dejando listo el arreglo para nueva corrida
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.

• Se estan usando metodos apropiados de conversion de enteros a strings y viceversa.

• 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:

foreach( tipodato varcontrol in arreglo) intruccion(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.

• Para inicializar una lista se debe usar el siguiente formato:

tipodato[] nomlista={lista de valores};

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

2.- Capturar 4 sueldos en un panel desplegarlos aumentados en un 25% en otro panel

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

4. ARREGLOS TIPO TABLA ó MATRIZ


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.

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.

La declaracion de una tabla sera de acuerdo al siguiente formato:

Public static tipodato[,] nomtabla=new tipodato[cantreng, cantcol];

Ej: public static float[,] sueldos=new float[5,8];

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

int[,] calif = new int[2, 3];


int r=0, c=0;

private void button1_Click(object sender, EventArgs e)


{
calif[r, c] = System.Int32.Parse(CALIF1.Text);
c++;
CALIF1.Text = " ";
if (c == 3) { r++; c = 0; };
if (r == 2) { CALIF1.Text = "TABLA LLENA"; r = 0; c = 0; };
}

private void button2_Click(object sender, EventArgs e)


{
// procesando y regalando 10 puntos a la calificacion
for(int reng=0; reng <= 1; reng++)
for(int col=0; col <=2; col++)
{calif[reng,col]=calif[reng,col] +10;};
// desplegando
for(int reng=0; reng<=1; reng++)
{
// creando un renglon para despliegue
string temp = calif[reng,0].ToString()+ " " +calif[reng,1].ToString()+ " "
+ calif[reng,2].ToString();
LISTA1.Items.Add(temp);
// limpiando temporal antes de otro renglon
temp = " ";
};
}

Notas:

• Observar el formato de declaracion y como se controlan los indices de captura r, c

14
Programación II Unidad 1

• Para procesar los elementos se usan dos ciclos for y el formato tabla [reng, col].

• En este problema se usa el objeto LISTBOX para presentar el resultado.

Corrida:

• Para inicializar tablas, se usa el siguiente formato:

tipodato[,] nomtabla={ {val reng 0}, {val reng 1}, {val reng n} };

ejemplo una matriz de 3 x 4 calificaciones:

int[,] calif={ { 10,20,30,40}, { 50,60,70,80}, {90,10,20,30} };

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

5. ARREGLOS IRREGULARES (JAGGED)


Hasta ahora listas y tablas son TAMBIEN conocidos como arreglos o matrices rectangulares sin embargo
la tecnologia microsoft net ofrece un nuevo tipo de arreglos denominados arreglos irregulares (jagged).

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.

Para declarar un arreglo irregular se usara el siguiente formato:

Tipodato[][] nomarreglo=new tipodato[cant reng][];

Ej; int[][] tabla=new int[3][];

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;

nomarreglo[reng]=new tipodato[cant de columnas];

ejemplo completo de declaracion;

int[][] tabla=new int[3][];

tabla[0]= new int[5]; tabla[1]= new int[2]; tabla[2]= new int[3];

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

private void button1_Click(object sender, EventArgs e)


{
// creando el arreglo iregular de tres renglones
int[][] tabla = new int[3][];
// creando y cargando los tres renglones pero de diferente tamano
tabla[0] = new int[4]; tabla[1] = new int[2]; tabla[2] = new int[5];
//inicializando renglones
// tambien puede ser uno a uno pero son 4 + 2 + 5=11 datos
for (int col = 0; col <= 3; col++) tabla[0][col] = 10;
for (int col = 0; col <= 1; col++) tabla[1][col] = 20;
for (int col = 0; col <= 4; col++) tabla[2][col] = 30;
// para procesar cada renglon usar el metodo de arriba ejemplo
// sumar 2 al primer renglon, 3 al segundo renglon y 4 al tercer renglon
for (int col = 0; col <= 3; col++) tabla[0][col] = tabla[0][col] + 2;
for (int col = 0; col <= 1; col++) tabla[1][col] = tabla[1][col] + 3;
for (int col = 0; col <= 4; col++) tabla[2][col] = tabla[2][col] + 4;
// para desplegar usar el mismo metodo
string temp = "";
for (int col = 0; col <= 3; col++)
temp = temp + (tabla[0][col]).ToString() + "..";
LISTA1.Items.Add(temp); temp = " ";
for (int col = 0; col <= 1; col++)
temp = temp + (tabla[1][col]).ToString() + "..";
LISTA1.Items.Add(temp); temp = " ";
for (int col = 0; col <= 4; col++)
temp = temp + (tabla[2][col]).ToString() + "..";
LISTA1.Items.Add(temp); temp = " ";
}
Observar como se manipulan ahora los elementos con el formato tabla[reng][col].

Corrida

16
Programación II Unidad 1

Ejercicios

1.- construir un par de tablas irregulares, con algunos procesos.

6. ARREGLOS COMO PARAMETROS


Para pasar un arreglo completo como parametro a un procedimiento o a una funcion solo se manda el
nombre del arreglo sin corchetes e indices, en el procedimiento o funcion que recibe solo se declara un arreglo
del mismo tipo y se puede usar el mismo o diferente nombre del arreglo sin corchetes e indices.

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

private void button1_Click(object sender, EventArgs e)


{
// creando una lista local en memoria
int[] lista = new int[5];
// cargando la lista local con 10,11,12,13,14
for (int x = 0; x <= 4; x++) lista[x] = x + 10;
// Pasandola a procedimiento observar que va sin corhetes
proc1(lista);
for (int x = 0; x <= 4; x++)
LISTA.Items.Add(lista[x].ToString());
}

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

1- Inicializar 10 edades en el principal (buttonclick) mandar la lista a un procedimiento que la convierte a


meses, desplegar en principal.

2.- Capturar un arreglo de 7 ciudades en un primer procedimiento, sortear en un segundo y desplegar en un


tercero la lista original y la lista ordenada.

18

También podría gustarte