Documentos de Académico
Documentos de Profesional
Documentos de Cultura
AAED - Arreglos en C SHARP PDF
AAED - Arreglos en C SHARP PDF
ARRAYS EN C#
I. INTRODUCCIÓN
En las sesiones anteriores, los datos manejados en los programas han sido datos simples (carácter, entero,
reales). En un gran número de problemas es necesario manejar un conjunto de datos más o menos grande
que están relacionados entre sí, de tal forma que constituyen una unidad para su tratamiento. Por ejemplo si
se quiere manipular una lista de 100 edades de personas, es conveniente tratar el conjunto de datos de
forma unitaria en lugar de utilizar 100 variables para cada dato simple.
.
Un conjunto de datos homogéneo que se tratan como una sola unidad se denomina estructura de datos. Si
una estructura de datos reside en memoria central (memoria RAM), se llama estructura de datos interna.
Recíprocamente si reside en un soporte externo (disquete, disco, cd, memoria USB, cinta, se denomina
estructura de datos externa.
La estructura de datos más importante desde el punto de vista de utilización es un arreglo, que es
implementado en la totalidad de lenguajes de programación.
Esta estructura corresponde con los conceptos matemáticos de vector, matriz o poliedro.
II. DEFINICION
Un array o arreglo es una secuencia de datos del mismo tipo (estructura homogénea), los datos se llaman
elementos del arreglo enumerados consecutivamente 0,1,2,3,…. y se encuentran almacenados
consecutivamente en memoria. Cada elemento puede ser accedido directamente por el nombre de la
variable matriz seguido de uno o más subíndices.
array m
0 1 2 3 4 5 6 7 8 9
Un arreglo puede contener, por ejemplo, la edad de los estudiantes de una clase, las horas diarias laboradas
por un trabajador, el número de estudiantes por ciclo de Ingeniería de Sistemas, etc.
En general, la representación de un arreglo se hace mediante variables suscritas o de subíndices y pueden
tener una o varias dimensiones (subíndices).
Son arreglos de una sola dimensión, tienen un solo índice. Cada elemento del vector se accesa mediante
su nombre seguido del número correspondiente al subíndice que se escribe entre corchetes. Por ejemplo,
supongamos que tenemos un vector de entero llamado m, el cual contiene 8 elementos. Estos elementos
se identificaran de la siguiente forma:
Vector m Acceso al cuarto elemento es m[3]
El arreglo unidimensional tiene ocho elementos: m[0] contiene 5, m[1] contiene 4, m[2] contiene 8, m[3]
contiene 7, m[4] contiene 3, m[5] contiene 2, m[6] contiene 1, m[7] contiene 6. El diagrama representa
realmente una región de la memoria de la computadora, ya que un arreglo se almacena siempre con sus
elementos en una secuencia de posiciones de memoria contigua.
En C#, los índices del arreglo siempre tienen como limite inferior 0, y como índice superior el tamaño del
arreglo menos 1.
Igual que sucede con otras variables, antes de utilizar un arreglo primero hay que declararla. La
declaración de un arreglo especifica el nombre del arreglo y el tipo de elemento de la misma. Para crear
y utilizar un arreglo hay que realizar tres operaciones: declararla, crearla e iniciarla.
CURSO: Algoritmos Avanzados y Estructura de Datos 1 DOCENTE: Ing. CIP Fabián Silva Alvarado
Arrays
La declaración de un arreglo es muy similar a la de una variable, crear un arreglo significa reservar la
cantidad de memoria necesaria para contener todos sus elementos y asignar al nombre del arreglo una
referencia a ese bloque. Esto puede expresarse genéricamente así:
tipoDato indica el tipo de datos de los elementos del arreglo, que pueden ser de cualquier tipo
primitivo o referenciado; los corchetes modifican la definición normal del identificador para que sea
interpretado por el compilador como un arreglo.
nombreVariable es un identificador que nombra al arreglo,
Operador new significa que C# implementa los arreglos como objetos, por lo tanto serán tratadas
como cualquier otro objeto.
y tamaño es una expresión entera que especifica los números de elementos
Las siguientes líneas de código crean los arreglos de una dimensión declaradas en el ejemplo
anterior:
int[] m = new int [5]; float[] temp = new float[30];
Más Ejemplos:
int[] Edad = new int[100];
Declara un arreglo llamado Edad que contiene 100 elementos de tipo enteros (int).
String[] Nombres = new String[25] ;
Declara un arreglo llamado Nombres que puede almacenar 25 nombres.
Un arreglo es un objeto, por lo tanto, cuando es creada, sus elementos son automáticamente iniciados,
igual que sucedía con las variables miembro de una clase. Si el arreglo es numérico sus elementos son
iniciados a 0 y si no es numérico, a un valor análogo a 0; por ejemplo un elemento booleano es
inicializado a false y las referencias a objetos a null.
Si deseamos iniciar un arreglo con otros valores diferentes a los predeterminados, podemos hacerlo de la
siguiente forma:
double[] ingresos ={1000,5000,7000,10000,12000,15000};
el ejemplo crea un arreglo ingresos de tipo double con tantos elementos como valores se hayan
especificado entre llaves.
Para practicar la teoría vamos a realizar un programa que asigne datos a un arreglo unidimensional
miarreglo de nElementos y, a continuación, como comprobación del trabajo realizado, escriba el
contenido de dicho arreglo. La solución será similar a la siguiente:
CURSO: Algoritmos Avanzados y Estructura de Datos 2 DOCENTE: Ing. CIP Fabián Silva Alvarado
Arrays
Para ello, en primer lugar definimos la variable tamaño para fijar el número de elementos del arreglo,
creamos el arreglo miarreglo con el tamaño que será ingresado por teclado.
int tamaño=0;
Console.Write("\nIndique el Tamaño del Arreglo: ");
tamaño=int.Parse(Console.ReadLine());
El paso siguiente es asignar un valor desde el teclado a cada elemento del arreglo.
class Program
{
static void Main(string[] args)
{
int tamaño=0;
Console.Write("\nIndique el Tamaño del Arreglo: ");
tamaño=int.Parse(Console.ReadLine());
Console.WriteLine();
//declarar y crear el arreglo
int[] miarreglo=new int[tamaño];
//asignar datos
for (int i = 0; i < tamaño; i++)
{
Console.Write("miarreglo["+ i +"] = ");
miarreglo[i]= int.Parse(Console.ReadLine());
}
//visualizar los elementos del arreglo
Console.Write("\nElementos del arreglo\n");
Console.WriteLine();
for (int i = 0; i < tamaño; i++)
{
Console.Write(miarreglo[i]+" ");
}
Console.Read();
}
}
CURSO: Algoritmos Avanzados y Estructura de Datos 3 DOCENTE: Ing. CIP Fabián Silva Alvarado
Arrays
Java considera cada arreglo como un objeto, debido a ello se puede conocer el numero de elementos de un
arreglo accediendo al campo length. Por ejemplo, la última parte del ejercicio anterior podríamos escribirla
también así.
//visualizar los elementos del arreglo
Console.Write("\nElementos del arreglo\n");
Console.WriteLine();
for (int i = 0; i < miarreglo.Length; i++)
{
Console.Write(miarreglo[i]+" ");
}
1. Programa que incluye un arreglo con elementos inicializados con valores diferentes a los predeterminados:
2. Programa que incluye un arreglo de enteros y los datos son asignados directamente en el código:
CURSO: Algoritmos Avanzados y Estructura de Datos 4 DOCENTE: Ing. CIP Fabián Silva Alvarado
Arrays
También
Tambiénpodemos
podemos hacer una asignación
hacer una asignacióncon
con
números
números aleatorios
aleatorios
3. Programa que incluye un arreglo de enteros y los datos son asignados desde un cuadro de texto:
CURSO: Algoritmos Avanzados y Estructura de Datos 5 DOCENTE: Ing. CIP Fabián Silva Alvarado
Arrays
Ahora complete el código para el Botón Nuevo y para el botón Salir, guarde y pruebe su aplicación
CURSO: Algoritmos Avanzados y Estructura de Datos 6 DOCENTE: Ing. CIP Fabián Silva Alvarado
Arrays
//código de la aplicación
namespace Arreglos_04
{
public partial class FrmListas : Form
{
public FrmListas()
{
InitializeComponent();
}
CURSO: Algoritmos Avanzados y Estructura de Datos 7 DOCENTE: Ing. CIP Fabián Silva Alvarado
Arrays
CURSO: Algoritmos Avanzados y Estructura de Datos 8 DOCENTE: Ing. CIP Fabián Silva Alvarado
Arrays
ALGORITMO DE BUSQUEDA
BUSQUEDA LINEAL
Consiste en encontrar un elemento determinado dentro de una colección dada. La búsqueda se realiza sobre
una estructura de datos de tamaño fijo y conocido, por ejemplo, un vector.
Los algoritmos sirven para hacer búsquedas sobre cualquier tipo de datos, siempre que sea posible realizar
comparaciones (‘igualdad’, ‘menor que’) sobre este tipo.
Clave=14 4 8 3 14 5 7
A[0] A[1] A[2] A[3] A[4] A[5]
BUSQUEDA BINARIA
El método más eficiente de búsqueda en una tabla secuencial sin utilizar índices o tablas auxiliares es la
búsqueda binaria. Para poder llevarse acabo esta, necesita tener el arreglo ordenado. Básicamente, el
argumento se compara con la llave del elemento intermedio de la tabla. Si son iguales, la búsqueda termina
exitosamente; en caso contrario, debe buscarse en la mitad superior o inferior en la tabla en una forma similar.
En un arreglo, donde los índices de la lista son bajo = 0 y alto = n-1, donde n es el numero de elementos del
arreglo.
CURSO: Algoritmos Avanzados y Estructura de Datos 9 DOCENTE: Ing. CIP Fabián Silva Alvarado
Arrays
-8 4 5 9 12 18 25 40 60 bajo = 0
Clave=40
alto = 8
A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8]
40 60 bajo = 7
A[7] A[8] alto = 8
El Algoritmo ha requerido tres comparaciones frente a ocho comparaciones que se hubieran realizado con la
búsqueda secuencial.
La codificación en C #
if (miarreglo[central]==clave)
MessageBox.Show("Dato Encontrado en la pos: " + central, "Búsqueda", MessageBoxButtons.OK,
MessageBoxIcon.Information);
else
MessageBox.Show("Dato no encontrado", "Búsqueda", MessageBoxButtons.OK,
MessageBoxIcon.Error);
CURSO: Algoritmos Avanzados y Estructura de Datos 10 DOCENTE: Ing. CIP Fabián Silva Alvarado
Arrays
ALGORITMOS DE ORDENAMIENTO
IV. INTRODUCCIÓN
Los algoritmos de ordenamiento nos permiten, como su nombre lo dice, ordenar. En este caso, nos servirán para
ordenar vectores o matrices con valores asignados aleatoriamente. Nos centraremos en los métodos más populares,
analizando la cantidad de comparaciones que suceden, el tiempo que demora y revisando el código, escrito en Java,
de cada algoritmo.
Este informe nos permitirá conocer más a fondo cada método distinto de ordenamiento, desde uno simple hasta el
más complejo. Se realizaran comparaciones en tiempo de ejecución, pre-requisitos de cada algoritmo, funcionalidad,
alcance, etc.
V. TIPOS DE ALGORITMOS
Para poder ordenar una cantidad determinada de números almacenadas en un vector o matriz, existen distintos
métodos (algoritmos) con distintas características y complejidad.
Existe desde el método mas simple, como el Bubblesort (o Método Burbuja), que son simples iteraciones, hasta el
Quicksort (Método Rápido), que al estar optimizado usando recursión, su tiempo de ejecución es menor y es más
efectivo.
2.1. METODOS ITERATIVOS
Estos métodos son simples de entender y de programar ya que son iterativos, simples ciclos y sentencias que
hacen que el vector pueda ser ordenado.
Dentro de los Algoritmos iterativos encontramos:
Burbuja
Inserción
Selección
Shellsort
METODO DE LA BURBUJA
El método de la burbuja es uno de los más simples, es tan fácil como comparar todos los elementos de una lista contra
todos, si se cumple que uno es mayor o menor a otro, entonces los intercambia de posición.
5 6 1 0 3
Lo que haría una burbuja simple, seria comenzar recorriendo los valores de izq. a derecha, comenzando por el 5. Lo
compara con el 6, con el 1, con el 0 y con el 3, si es mayor o menor (dependiendo si el orden es ascendiente o
descendiente) se Intercambian de posición. Luego continua con el siguiente, con el 6, y lo compara con todos los
elementos de la lista, esperando ver si se cumple o no la misma condición que con el primer elemento. Así,
sucesivamente, hasta el último elemento de la lista.
CURSO: Algoritmos Avanzados y Estructura de Datos 11 DOCENTE: Ing. CIP Fabián Silva Alvarado
Arrays
METODO DE INSERCION
El bucle principal de la ordenación por inserción va examinando sucesivamente todos los elementos de la matriz
desde el segundo hasta el n-ésimo, e inserta cada uno en el lugar adecuado entre sus predecesores dentro de la
matriz.
METODO SHELLSORT
Este método es una mejora del algoritmo de ordenamiento por Inserción (Insertsort). Si tenemos en cuenta que
el ordenamiento por inserción es mucho más eficiente si nuestra lista de números esta semi-ordenada y que
desplaza un valor una única posición a la vez.
Durante la ejecución de este algoritmo, los números de la lista se van casi-ordenando y finalmente, el ultimo
paso o función de este algoritmo es un simple método por inserción que, al estar casi-ordenados los números, es
más eficiente.
CURSO: Algoritmos Avanzados y Estructura de Datos 12 DOCENTE: Ing. CIP Fabián Silva Alvarado
Arrays
i=n-1 X Y X+Y
En Código: for(i=0;i<n;i++)
{
C[i]= A[i] + B[i];
}
En Código: for(i=0;i<n;i++)
{
C[i]= A[i] - B[i];
}
En Código: for(i=0;i<n;i++)
{
C[i]= A[i] / B[i];
}
CURSO: Algoritmos Avanzados y Estructura de Datos 13 DOCENTE: Ing. CIP Fabián Silva Alvarado
Arrays
Ejemplo:
Imprimir la planilla de salarios de los trabajadores de una empresa de acuerdo al siguiente formato:
---------------------------------------------------------------------------------------------------------------------------------------------------------------
PLANILLA DEL MES DE JULIO 2009
---------------------------------------------------------------------------------------------------------------------------------------------------------------
CODIGO APELLIDOS Y NOMBRES SAL_BAS BONIF SAL_PARC DSCTO SAL_NETO
---------------------------------------------------------------------------------------------------------------------------------------------------------------
**** ****************** ****.** ***.** ****.** ***.** ****.**
**** ****************** ****.** ***.** ****.** ***.** ****.**
**** ****************** ****.** ***.** ****.** ***.** ****.**
**** ******************* ****.** ***.** ****.** ***.** ****.**
---------------------------------------------------------------------------------------------------------------------------------------------- -----------------
TOTALES *****.** ******.**
---------------------------------------------------------------------------------------------------------------------------------------------------------------
Especificaciones:
Implementar en C#
PRACTICA DE ARREGLOS
1. Desarrollar una solución que permita ingresar y almacenar las notas de 4 prácticas de un estudiante. Determinar
el promedio de cada alumno sabiendo que se duplica su nota más alta y se elimina la nota mas baja. Mostrar el
promedio redondeado a 1 decimal. Validar el ingreso de datos.
2. Desarrollar un programa que imprima los salarios netos junto con los demás importes necesarios para n obreros
de una empresa quienes están identificados por un código y se rigen a las siguientes condiciones:
a. Cada trabajador tiene una tarifa por hora de S/. 20.00.
b. El salario básico se calcula en base a las horas laboradas en el mes y la tarifa x hora.
c. Todos reciben una bonificación del 20% con respecto al Salario Básico
d. Salario Parcial es igual a Salario Básico + bonificación
e. Descuento del 12% del Salario Parcial por concepto de AFP
f. Salario Neto es igual a Salario Parcial – Descuento
CURSO: Algoritmos Avanzados y Estructura de Datos 14 DOCENTE: Ing. CIP Fabián Silva Alvarado
Arrays
- Agregar una opción para realizar una búsqueda por código del trabajador empleando el algoritmo de búsqueda
lineal
- Agregue una opción para realizar el ordenamiento por Nombre del trabajador en forma Ascendente utilizando
el Algoritmo de Inserción
- Agregue una opción para realizar el ordenamiento por Salario Neto del trabajador en forma Descendente
utilizando el Algoritmo de Inserción
- Ubique a la persona que obtuvo un mayor sueldo neto.
3. Determinar el promedio final de cada estudiante para el curso de Algoritmos Avanzados y mostrar el resultado de
acuerdo al siguiente formato:
---------------------------------------------------------------------------------------------------------------------------------------------------------------
NOTAS FINALES DEL CURSO DE FUNDAMENTOS DE PROGRAMACION
---------------------------------------------------------------------------------------------------------------------------------------------------------------
Código Apellidos y Nombres EP EF PP PF Observación
---------------------------------------------------------------------------------------------------------------------------------------------------------------
**** ******************** ** ** ** **.* *********
**** ******************** ** ** ** **.* *********
**** ******************** ** ** ** **.* *********
**** ******************** ** ** ** **.* *********
---------------------------------------------------------------------------------------------------------------------------------------------------------------
DONDE:
EP: Examen Parcial
EF: Examen Final
PP: Promedio de Practicas
d. Agregar una opción para realizar una búsqueda por código del trabajador empleando el algoritmo de búsqueda
Binaria
e. Agregue una opción para realizar el ordenamiento por Apellidos y Nombres del Estudiante en forma Ascendente
utilizando el Algoritmo SHELLSORT
f. Agregue una opción para realizar el ordenamiento por Apellidos y Nombres del Estudiante en forma Descendente
utilizando el Algoritmo SHELLSORT
g. Muestre en un cuadro de mensaje a los 2 Primeros Puestos
h. Muestre en un cuadro de mensaje a los 2 Últimos Puestos
i. Agregue una opción para poder realizar un filtrado con todos los datos del estudiante según sea la observación del
estudiante.
CURSO: Algoritmos Avanzados y Estructura de Datos 15 DOCENTE: Ing. CIP Fabián Silva Alvarado