Title: Introduccin a la Programacin versin Orientada a Objetos
1Introducción a la Programaciónversión Orientada
a Objetos
- CapÃtulo 7 Arreglos
- Rodrigo Sandoval
2Contenido
- Arreglos Unidimensionales o Vectores
- Declaración, definición y uso.
- foreach()
- Métodos más usados.
- Arreglos Multidimensionales o Matrices
- Declaración, definición y uso
- Métodos más usados.
- Enumeraciones
3Arreglos Unidimensionales
- También llamados Vectores
4Arreglos
- Listas de datos de un tipo especÃfico.
- Cada elemento se indexa. Comenzando en 0 y
termina en n-1. - Declaración
- lttipo-basegt puede ser cualquiera de los tipos
básicos del lenguaje, o incluso algunos complejos
como estructuras. - El ltidentificadorgt es el nombre que distinguirá
el arreglo. - Los corchetes son obligatorios y denotan que
el identificador descrito, del tipo-base
indicado, es un arreglo (lista de elementos del
tipo base). - En esta declaración NO se define el tamaño que
tendrá el arreglo (aunque se puede determinar las
dimensiones, lo que se verá más adelante).
lttipo-basegt ltidentificadorgt
5Arreglos
- El tamaño del arreglo se determina en una segunda
declaración. - Alternativa 1 Declaración y dimensionamiento en
una declaración. - Alternativa 2 Declaración, dimensionamiento e
inicialización en una declaración.
ltidentificadorgt new lttipo-basegt ltNumElementosgt
lttipo-basegt ltidentifgt new lttipo-basegtltNumElem
gt
lttipo-basegt ltidentifgt val1, val2, ..., valN
6Arreglos - Ejemplos
// Arreglo para 10 enteros int
numeros numeros new int10 // Arreglo para
10 enteros int numeros new int10 //
Arreglo para 10 enteros asignados int numeros
1, 1, 1, 2, 3, 5, 2, 5, 3, 4
7Uso de Arreglos
- Los elementos de un arreglo son variables del
tipo base del vector, por lo que se utilizan de
la misma manera en expresiones y demás
instrucciones, como la asignación. Por ejemplo,
para asignar un valor a un elemento de un arreglo
basta con escribir - ltarreglogt nombre de la variableindice hace
referencia a la posición del elemento al que se
le quiere asignar el ltexpresiongt. - Importante Puesto que los arreglos son
estructuras complejas (es decir, no básicas), no
es posible asignar un arreglo a otro mediante una
simple asignación (). Para hacer esto es
necesario escribir un ciclo y asignar elemento a
elemento.
ltarreglogtindice ltexpresiongt
8Arreglos - Ejemplos
// Las posiciones con Ãndices del 10 al 19 son
inválidas. int arreglo 1,1,1,1,1,1,1,1,1,1
// 10 elementos int i for (i0 ilt20
i) arregloi 0 // Error para i gt 10
9Funciones sobre Arreglos
- Largo de un Arreglo ? Length
- Ordenamiento de un Arreglo ? Sort()
- Revertir orden de un Arreglo ? Reverse()
int numeros 1,2,3,4,5,6 Console.WriteLine
(Largo 0, numeros.Length)
int numeros 4,5,2,3,1,6 Array.Sort(numero
s) // 1,2,3,4,5,6
int numeros 1,2,3,4,5,6 Array.Reverse(num
eros) // 6,5,4,3,2,1
10foreach()
- Sentencia control de flujo especÃfica para
arreglos - Declaración
- lttipogt es el tipo básico de los elementos
contenidos en el arreglo. - ltarreglogt es el arreglo de elementos a revisar.
- ltvariablegt es un identificador de una variable
local del foreach() que se usará para ver un
elemento del arreglo en cada iteración.
foreach ( lttipogt ltvargt in ltarreglogt )
ltinstruccionesgt
11foreach() Ejemplo
using System class MainClass public static
void Main() int impares 0, pares 0
int arr new int 0,1,2,5,7,8,11
foreach (int i in arr) if (i2 0)
pares else impares
Console.WriteLine("Hay 0 impares y 1
pares.", impares, pares)
Console.ReadLine()
12Ejemplo Cálculo de Notas
- Definición del problema
- Conceptualización El problema consiste en
calcular el promedio, mÃnimo y máximo de una
lista de notas de un curso. Cada alumno tiene una
nota en el curso. Se supone que el usuario conoce
a priori la cantidad de alumnos del curso y que
entregará los datos en forma correcta. - Objetivo El objetivo es obtener el promedio, el
máximo, y el mÃnimo de las notas del curso. - Elementos involucrados Los únicos elementos
involucrados son las notas, la cantidad de
alumnos, el promedio, el mÃnimo y el máximo. Como
elemento activo, el usuario que conoce las notas
en detalle.
13Ejemplo Cálculo de Notas
- Solución
- Entidades El Curso es la única entidad
relevante, la cual se conceptualiza como la
agrupación de notas correspondientes a los
alumnos. - Clases La clase Curso, será la representación de
las notas de un curso cuyo promedio se quiere
calcular. - Instancias La única instancia requerida es
notas1, de la clase Curso.
14Ejemplo Cálculo de Notas
- Clase Curso
- Atributos
- notas arreglo con las notas.
- promedio almacena el promedio calculado.
- maximo almacena la nota máxima registrada.
- minimo almacena la nota mÃnima registrada.
- Métodos
- Curso constructor asegura al inicio que
existen las notas. - Calcular procesa la lista notas y calcula prom,
máx, mÃn. - Mostrar muestra en pantalla los cálculos de las
notas.
15Ejemplo Cálculo de Notas
- Algoritmo
- Declarar instancia de curso
- Obtener las notas para el curso (inicialización)
- Calcular el promedio, mÃnimo y máximo
- Mostrar los resultados.
16Ejemplo Cálculo de Notas
- Cómo deberÃa verse funcionando en pantalla.
Ingrese número de alumnos en la sección
5 Ingrese la nota 1 5,6 Ingrese la nota 2
5,8 Ingrese la nota 3 6,2 Ingrese la nota 4
4,6 Ingrese la nota 5 5,1 Promedio de las 5
notas 5,46 MÃnimo de las 5 notas 4,6 Máximo
de las 5 notas 6,2
17Arreglos Multidimensionales
- También llamados Matrices (2D)o Cubos (3D)
18Arreglos Bidimensionales
- Listas de doble entrada para almacenar datos del
mismo tipo. - Declaración
- lttipo-basegt puede ser cualquiera de los tipos
básicos del lenguaje, o incluso algunos complejos
como estructuras. - El ltidentificadorgt es el nombre que distinguirá
el arreglo. - Los corchetes son obligatorios.
- El separador de dimensiones es la coma (,).
- NO es necesario que ambas dimensiones sean
iguales (cuadrado). - En esta declaración NO se define las dimensiones
que tendrá. - Antes de ser utilizado, ambas dimensiones deben
estar establecidas.
lttipo-basegt, ltidentificadorgt
19Arreglos Bidimensionales
- El tamaño del arreglo se determina en una segunda
declaración. - Alternativa 1 Declaración y dimensionamiento en
una declaración. - Alternativa 2 Declaración, dimensionamiento e
inicialización en una declaración.
ltidentificadorgt lttipo-basegtNumElem1, NumElem2
lttipogt, ltidentifgt new lttipogtltNum1gt,ltNum2gt
lttipo-basegtM,N ltidentgt val1-1, val1-2,
..., val1-N ,
val2-1, val2-2, ..., val2-N ,
...,
valM-1, valM-2, ..., valM-N
20Uso de Arreglos 2D
- Los elementos de una matriz se pueden entender
como un casillero o una celda, determinada
por fila y columna. Para asignar un valor a un
elemento de una matriz basta con escribir - ltmatrizgt nombre de la variableindice1 indice2
hacen referencia a la posición del elemento al
que se le quiere asignar el valor. - Importante al igual que en el caso
unidimensional, los arreglos multidimensionales
no validan la posición de los Ãndices dentro de
las dimensiones.
ltmatrizgtindice1,indice2 valor
21Uso de Arreglos Multidim.
- En general para hacer una referencia a un valor
de una celda, se indican los Ãndices
correspondientes en cada dimensión del arreglo - Métodos y Propiedades de la clase Array.
- Length, Sort(), y Reverse() no funcionan
- Sólo para el tamaño se usa GetLength(dim) ej
matriz.GetLength(0) ? 1ª dimensión - foreach() sólo sirve para arreglos 1D.
ltmatrizgtind1,ind2,, indN valor
22Arreglos MD - Ejemplos
1. Declaración de una matriz de 50 filas de 20
enteros int, matriz new
int50,20 2. Declaración e inicialización de
una matriz int, matriz 2, 5, 8
, 9, 1, 2 // 2 filas, 3 col. 3.
Asignando un valor a la primera posición de la
segunda fila de una matriz de enteros
matriz1,0 50 4. Imprimiendo una matriz de
100x50 enteros mediante un ciclo for int
i, j for (i0 ilt100 i)
for (j0 jlt50 j)
Console.Write("0 ", matrizi,j)
Console.WriteLine() 5. Imprimiendo una
matriz de NxN enteros mediante un ciclo for
int i, j for (i0 iltmatriz.GetLength(
0) i) for (j0 jlt
matriz.GetLength(1) j)
Console.Write("0 ", matrizi,j)
Console.WriteLine()
23Ejemplo Cálculo de Notas 2
- Definición del problema
- Conceptualización El problema consiste en
calcular la nota final obtenida por cada uno de
los alumnos de un curso, y el promedio, mÃnimo y
máximo de estas notas finales. El cálculo de la
nota final es una función de las notas parciales
que obtuvo durante el semestre. Se supone que
cada alumno tiene todas y cada una de las notas
parciales definidas, que el usuario conoce a
priori la cantidad de alumnos del curso y que
entregará los datos en forma correcta. - Objetivo El objetivo es obtener la nota final de
cada alumno, junto con el promedio, el máximo, y
el mÃnimo de éstas. - Elementos involucrados Los elementos
involucrados son la cantidad de alumnos, las
notas parciales y la nota final de cada alumno, y
por último el promedio, el mÃnimo y el máximo de
las notas finales.
24Ejemplo Cálculo de Notas 2
- Solución
- Entidades El Curso es la única entidad
relevante, la cual se conceptualiza como la
agrupación de notas correspondientes a los
alumnos. - Clases La clase Curso, será la representación de
las notas de un curso cuyo promedio se quiere
calcular. - Instancias La única instancia requerida es
notas1, de la clase Curso.
25Ejemplo Cálculo de Notas 2
- Clase Curso
- Atributos
- notas arreglo 2D con las notas.
- promedio almacena el promedio calculado.
- maximo almacena la nota máxima registrada.
- minimo almacena la nota mÃnima registrada.
- Métodos
- Curso constructor asegura al inicio que
existen las notas y calcula las notas finales por
alumno, que también quedan en la matriz. - Calcular procesa la lista notas y calcula prom,
máx, mÃn. - Mostrar muestra en pantalla los cálculos de las
notas.
26Ejemplo Cálculo de Notas 2
- Algoritmo
- Declarar instancia de curso
- Inicializar las Notas Para cada alumno de la
lista - 2.1 Obtener las notas parciales
- 2.2 Calcular la nota final
- Calcular el promedio, mÃnimo y máximo
- Mostrar los resultados.
27Ejemplo Cálculo de Notas 2
Ingrese el número de alumnos en la sección
3 Alumno Nº 1 Ingrese la nota 1 4,3 Ingrese la
nota 2 4,4 Ingrese la nota 3 4,5 Ingrese la
nota 4 5,2 Ingrese la nota 5 5,6 Alumno Nº
2 Ingrese la nota 1 5,4 (. . .) Alumno Nº 3 (.
. .) Notas Finales 4,9 5,7 5,2 Promedio de las 3
notas 5,288333 MÃnimo de las 3 notas
4,9 Máximo de las 3 notas 5,7175
28Ej. Matrices Cuadradas
- AxB C
- A es de NxP y B debe ser de PxM
- Una fila I por una columna J, se multiplican, se
suman y queda en la celda I,J.
29Multip. Matrices Cuadradas
public static Matriz Multiplicar(Matriz A, Matriz
B) Matriz m new Matriz(A.Tamano()) //
Ciclo con 3 nivel realiza la multip. for (int
i0 iltm.Tamano() i) for (int j0
jltm.Tamano() j) m.datosi,j 0
for (int k0 kltm.Tamano() k) m.datosi,j
(A.datosi,k B.datosk,j)
return(m)
30Enumeraciones
31Enumeraciones
- Existe una versión simplificada de arreglos, que
se declaran con datos incluidos. - Opciones fijas para un programa. Conjunto de
valores aceptados, dándole nombres más
entendibles, y como consecuencia, el compilador
dará aviso cuando se intente usar un valor no
definido. - Por definición, todos los elementos de las
enumeraciones son de tipo entero.
32Enumeraciones
enum ltidentificadorgt ltnombre1gt
ltvalorEntero1gt, ltnombre2gt ltvalorEntero2gt, ...
ltnombreNgt ltvalorEnteroNgt
33Enumeraciones
public enum Sexo Femenino 1, Masculino
2 class Persona string nombre int edad
Sexo sexo public void Mostrar()
Console.WriteLine(Nombre 0,
nombre) Console.WriteLine(Edad 0,
edad) if ( sexo Sexo.Masculino
) Console.WriteLine(Sexo Masculino) else
Console.WriteLine(Sexo Femenino)
34Enumeraciones
- Entre los beneficios de utilizar enumeraciones se
cuentan - Se hace más fácil de mantener el código, al
permitir asegurar que las variables sólo reciben
valores dentro de un rango definido, sin
posibilidad de valores inválidos. - Las enumeraciones hacen al código más legible y
entendible, permitiendo referenciar valores
enteros con nombres más descriptivos, en lugar de
números oscuros y mágicos.