inf 1141 unidad 6 arreglos abiertos sem 2 2015
DESCRIPTION
Arreglos AbiertosTRANSCRIPT
![Page 1: Inf 1141 Unidad 6 Arreglos Abiertos Sem 2 2015](https://reader033.vdocuments.co/reader033/viewer/2022051218/5695d1f71a28ab9b02989d0f/html5/thumbnails/1.jpg)
FUNDAMENTOS DE ALGORITMOS
INF 1141
UNIDAD 6: CARACTERÍSTICAS AVANZADAS DE ARREGLOS EN SL
2º Semestre 2015
Fundamentos de Algoritmos
![Page 2: Inf 1141 Unidad 6 Arreglos Abiertos Sem 2 2015](https://reader033.vdocuments.co/reader033/viewer/2022051218/5695d1f71a28ab9b02989d0f/html5/thumbnails/2.jpg)
¿Qué aprenderemos hoy?
Fundamentos de Algoritmos
1. Características avanzadas de los arreglos en SL
1. Arreglos Abiertos 2. Inicialización de Arreglos 3. Asignación de Arreglos
![Page 3: Inf 1141 Unidad 6 Arreglos Abiertos Sem 2 2015](https://reader033.vdocuments.co/reader033/viewer/2022051218/5695d1f71a28ab9b02989d0f/html5/thumbnails/3.jpg)
Fundamentos de Algoritmos
ARREGLOS ABIERTOS
![Page 4: Inf 1141 Unidad 6 Arreglos Abiertos Sem 2 2015](https://reader033.vdocuments.co/reader033/viewer/2022051218/5695d1f71a28ab9b02989d0f/html5/thumbnails/4.jpg)
Arreglos Dinámicos/Abiertos
Fundamentos de Algoritmos
Existen PROBLEMAS de la vida real en los que
NO es posible conocer o NO es conveniente establecer la
cantidad máxima de elementos que se almacenaran en un
arreglo en TIEMPO DE COMPILACIÓN
el valor máximo del número de elementos de un arreglo varía de
en el tiempo
![Page 5: Inf 1141 Unidad 6 Arreglos Abiertos Sem 2 2015](https://reader033.vdocuments.co/reader033/viewer/2022051218/5695d1f71a28ab9b02989d0f/html5/thumbnails/5.jpg)
Ejemplo
Fundamentos de Algoritmos
• Se desea almacenar las temperaturas máximas registradas en un período de n
días en la ciudad de Valparaíso, para luego determinar cual fue el promedio de temperaturas máximas durante ese período de días.
![Page 6: Inf 1141 Unidad 6 Arreglos Abiertos Sem 2 2015](https://reader033.vdocuments.co/reader033/viewer/2022051218/5695d1f71a28ab9b02989d0f/html5/thumbnails/6.jpg)
¿Cómo se declara un
Arreglo Abierto Unidimensional en SL?
Fundamentos de Algoritmos
• Para la declaración de un arreglo abierto unidimensional en vez del indicar el
tamaño físico escribimos un asterisco para indicar que ese valor aún no es conocido.
EJEMPLOS
A: vector [*] cadena
B: vector [*] numerico
C: vector [*] logico
![Page 7: Inf 1141 Unidad 6 Arreglos Abiertos Sem 2 2015](https://reader033.vdocuments.co/reader033/viewer/2022051218/5695d1f71a28ab9b02989d0f/html5/thumbnails/7.jpg)
¿Cómo dimensionamos en tiempo de ejecución el
tamaño del arreglo?
Fundamentos de Algoritmos
• Utilizando la subrutina predefinida dim() la que permite asignar la memoria
necesaria a un arreglo creado dinamicamente. Su prototipo es : dim(NombreArreglo,Dim1,Dim2,...DimN) EJEMPLO: B: vector [*] numerico leer (n) dim (B, n)
![Page 8: Inf 1141 Unidad 6 Arreglos Abiertos Sem 2 2015](https://reader033.vdocuments.co/reader033/viewer/2022051218/5695d1f71a28ab9b02989d0f/html5/thumbnails/8.jpg)
Veamos un Ejemplo
Fundamentos de Algoritmos
programa ejemplo var temperaturas : vector [*] numerico n : numerico inicio cls() repetir imprimir("Ingrese número de días : ") leer(n) hasta (n>0) dim(temperaturas , n) leerArreglo(temperaturas , n) imprimir(promedio (temperaturas , n) ) fin
![Page 9: Inf 1141 Unidad 6 Arreglos Abiertos Sem 2 2015](https://reader033.vdocuments.co/reader033/viewer/2022051218/5695d1f71a28ab9b02989d0f/html5/thumbnails/9.jpg)
Fundamentos de Algoritmos
sub leerArreglo (ref A:vector [*] numerico; max:numerico) var i:numerico inicio desde i=1 hasta max { imprimir("Ingrese temperatura día ",i," : ") leer(A[i]) } fin
sub promedio (A:vector [*] numerico; max:numerico) retorna numerico var i, suma, prom :numerico inicio suma=0 desde i=1 hasta max { suma=suma+A[i] } prom=suma/max retorna (prom) fin
![Page 10: Inf 1141 Unidad 6 Arreglos Abiertos Sem 2 2015](https://reader033.vdocuments.co/reader033/viewer/2022051218/5695d1f71a28ab9b02989d0f/html5/thumbnails/10.jpg)
¿Cómo se declara un
Arreglo Abierto Bidimensional en SL?
Fundamentos de Algoritmos
• Para la declaración de un arreglo abierto bidimensional en vez del indicar el
tamaño físico fila y columna escribimos un asterisco en su reemplazo para indicar que ese valor aún no es conocido.
EJEMPLOS
A: matriz [*,*] cadena
B: matriz [*,*] numerico
C: matriz [*,*] logico
![Page 11: Inf 1141 Unidad 6 Arreglos Abiertos Sem 2 2015](https://reader033.vdocuments.co/reader033/viewer/2022051218/5695d1f71a28ab9b02989d0f/html5/thumbnails/11.jpg)
¿Cómo dimensionamos en tiempo de ejecución el
tamaño del arreglo?
Fundamentos de Algoritmos
• Utilizando la subrutina predefinida dim() la que permite asignar la memoria
necesaria a un arreglo creado dinamicamente. Su prototipo es : dim(NombreArreglo,Dim1,Dim2,...DimN) EJEMPLO: B: matriz [*,*] numerico leer (m,n) dim (B, m,n)
![Page 12: Inf 1141 Unidad 6 Arreglos Abiertos Sem 2 2015](https://reader033.vdocuments.co/reader033/viewer/2022051218/5695d1f71a28ab9b02989d0f/html5/thumbnails/12.jpg)
Veamos un Ejemplo
Fundamentos de Algoritmos
programa ejemplo var A:matriz [*,*] numerico dimFila, dimCol :numerico inicio cls() repetir imprimir("Ingrese N° de filas de la Matriz : ") leer(dimFila) hasta (dimFila > 0) repetir imprimir("Ingrese N° de columnas de la Matriz : ") leer(dimCol) hasta (dimCol > 0) dim(A, dimFila, dimCol) leerMatriz (A, dimFila, dimCol) mostrarMatriz (A, dimFila, dimCol) fin
![Page 13: Inf 1141 Unidad 6 Arreglos Abiertos Sem 2 2015](https://reader033.vdocuments.co/reader033/viewer/2022051218/5695d1f71a28ab9b02989d0f/html5/thumbnails/13.jpg)
Fundamentos de Algoritmos
sub leerMatriz (ref A: matriz [*,*] numerico; dF, dC:numerico) var i, j:numerico inicio desde i=1 hasta dF { desde j=1 hasta dC { imprimir("Ingrese Numero Posicion ",i,",",j," : ") leer(A[i,j]) } } fin
![Page 14: Inf 1141 Unidad 6 Arreglos Abiertos Sem 2 2015](https://reader033.vdocuments.co/reader033/viewer/2022051218/5695d1f71a28ab9b02989d0f/html5/thumbnails/14.jpg)
Fundamentos de Algoritmos
sub mostrarMatriz (A:matriz [*,*] numerico; dF, dC:numerico) var i,j:numerico inicio desde i=1 hasta dF { desde j=1 hasta dC { imprimir(A[i,j]," ") } imprimir("\n") } fin
![Page 15: Inf 1141 Unidad 6 Arreglos Abiertos Sem 2 2015](https://reader033.vdocuments.co/reader033/viewer/2022051218/5695d1f71a28ab9b02989d0f/html5/thumbnails/15.jpg)
Fundamentos de Algoritmos
Inicialización de arreglos en SL
![Page 16: Inf 1141 Unidad 6 Arreglos Abiertos Sem 2 2015](https://reader033.vdocuments.co/reader033/viewer/2022051218/5695d1f71a28ab9b02989d0f/html5/thumbnails/16.jpg)
Ejemplo
Fundamentos de Algoritmos
• Se desea registrar la temperatura promedio entre enero y diciembre del año
2014 en la ciudad de Valparaíso. Al solicitar los datos de entrada queremos indicarle al usuario el nombre de cada mes.
![Page 17: Inf 1141 Unidad 6 Arreglos Abiertos Sem 2 2015](https://reader033.vdocuments.co/reader033/viewer/2022051218/5695d1f71a28ab9b02989d0f/html5/thumbnails/17.jpg)
¿Cómo inicializamos un arreglo en SL?
Fundamentos de Algoritmos
Veamos unos Ejemplos: var topeMeses : vector [12] numerico mesesAño : vector [12] cadena A: matriz [5, 3] numerico inicio topeMeses = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} mesesAño = {“enero”, “febrero”, “marzo”, “abril”, “mayo”, “junio”, “julio”, ”agosto”, ”septiembre”, ”octubre”, ”noviembre”, “diciembre”} A = { {1,2,3}, {4,5,6}, {7,8,9},{10,11,12},{13,14, 15} } :
![Page 18: Inf 1141 Unidad 6 Arreglos Abiertos Sem 2 2015](https://reader033.vdocuments.co/reader033/viewer/2022051218/5695d1f71a28ab9b02989d0f/html5/thumbnails/18.jpg)
Veamos un Ejemplo
Fundamentos de Algoritmos
programa ejemplo const MESES=12 var mesesAño: vector [MESES] cadena temperaturas: vector [MESES] numerico inicio cls() mesesAño = { “enero”, “febrero”, “marzo”, “abril”, “mayo”, “junio”, “julio”, ”agosto”, ”septiembre”, ”octubre”, ”noviembre”, “diciembre”} leerArreglo(temperaturas, mesesAño, MESES) fin
![Page 19: Inf 1141 Unidad 6 Arreglos Abiertos Sem 2 2015](https://reader033.vdocuments.co/reader033/viewer/2022051218/5695d1f71a28ab9b02989d0f/html5/thumbnails/19.jpg)
Veamos un Ejemplo
Fundamentos de Algoritmos
sub leerArreglo(ref A: vector [MESES] numerico; B: vector [MESES] cadena; m: numerico) var i:numerico inicio desde i=1 hasta m { imprimir(“Ingrese temperatura promedio de “,B[i],” 2014 : “) leer(A[i]) } fin
![Page 20: Inf 1141 Unidad 6 Arreglos Abiertos Sem 2 2015](https://reader033.vdocuments.co/reader033/viewer/2022051218/5695d1f71a28ab9b02989d0f/html5/thumbnails/20.jpg)
Fundamentos de Algoritmos
COPIA DE ARREGLOS EN SL
![Page 21: Inf 1141 Unidad 6 Arreglos Abiertos Sem 2 2015](https://reader033.vdocuments.co/reader033/viewer/2022051218/5695d1f71a28ab9b02989d0f/html5/thumbnails/21.jpg)
¿Cómo le asignamos el contenido de un arreglo en
SL a otro ?
Fundamentos de Algoritmos
Veamos unos Ejemplos: var mat1: matriz [5, 3] numerico mat2: matriz [*,*] numerico vec1: vector [3] numerico vec2: vector [*] numerico inicio mat1 = { {1,3,5},{2,4,6},{7, 8, 9},{10, 11,12},{ 13,14, 15}} mat2 = mat1 //se asignan todos los elementos de mat1 a mat2 vec1 = mat1 [2] // vec1 = {2, 4, 6} vec2 = mat1 [3] // vec2 = {7, 8, 9} vec2 = vec1 // vec2 = {2, 4, 6} :
![Page 22: Inf 1141 Unidad 6 Arreglos Abiertos Sem 2 2015](https://reader033.vdocuments.co/reader033/viewer/2022051218/5695d1f71a28ab9b02989d0f/html5/thumbnails/22.jpg)
Veamos un Ejemplo
Fundamentos de Algoritmos
programa ejemplo var A: matriz [5, 3] numerico V1: vector [3] numerico V2: vector [*] numerico //ABIERTO inicio cls() A = { {1,3,5},{2,4,6},{7, 8, 9},{10, 11,12},{ 13,14, 15}} V1 = Matriz [2] // {2, 4, 6} V2 = V1 // {2, 4, 6} mostrarArreglo(V1,3) mostrarArreglo(V2,3) fin
![Page 23: Inf 1141 Unidad 6 Arreglos Abiertos Sem 2 2015](https://reader033.vdocuments.co/reader033/viewer/2022051218/5695d1f71a28ab9b02989d0f/html5/thumbnails/23.jpg)
Fundamentos de Algoritmos
sub mostrarArreglo(A:vector [*] numerico; m:numerico) var i:numerico inicio imprimir("---------------------------------------------\n") imprimir("Arreglo = ") desde i=1 hasta m { imprimir(A[i]," ") } fin
![Page 24: Inf 1141 Unidad 6 Arreglos Abiertos Sem 2 2015](https://reader033.vdocuments.co/reader033/viewer/2022051218/5695d1f71a28ab9b02989d0f/html5/thumbnails/24.jpg)
INVESTIGUE
Fundamentos de Algoritmos
1. ¿Se puede obtener la cantidad de elementos de un arreglo con ALGUNA función?
2. ¿Puede un arreglo abierto volver al estado “no inicializado”?
3. ¿Es posible en una matriz que las filas tengan longitudes diferentes unas de otras?
![Page 25: Inf 1141 Unidad 6 Arreglos Abiertos Sem 2 2015](https://reader033.vdocuments.co/reader033/viewer/2022051218/5695d1f71a28ab9b02989d0f/html5/thumbnails/25.jpg)
Fundamentos de Algoritmos
La pequeña Lisa va frecuentemente a visitar a su abuelo Abraham. El abuelo tiene un gran jardín, que puede ser representado como un rectángulo de tamaño 1 × n, cuando se mira desde arriba. Este rectángulo está dividido en n secciones cuadradas iguales. El jardín es muy inusual, ya que cada una de las secciones cuadradas posee su propia altura y gracias a un novedoso sistema de riego el abuelo de Lisa puede crear lluvia artificial sobre cada sección. Pero crear lluvia artificial es una operación muy costosa. Por lo anterior, el abuelo de Lisa debe limitarse a crear lluvia sobre solo una sección, para que el agua de la sección seleccionada fluya a las secciones vecinas si su altura no supera la altura de dicha sección.
![Page 26: Inf 1141 Unidad 6 Arreglos Abiertos Sem 2 2015](https://reader033.vdocuments.co/reader033/viewer/2022051218/5695d1f71a28ab9b02989d0f/html5/thumbnails/26.jpg)
Fundamentos de Algoritmos
Por ejemplo: El jardín puede ser representado por un rectángulo de tamaño 1 × 5, donde las alturas de cada sección son 4, 2, 3, 3, 2. Entonces, si el abuelo de Lisa crea lluvia artificial sobre cualquiera de las secciones en la que la altura es 3, el agua fluirá a través de todas las secciones, excepto las que tiene altura 4. Lisa está decidida a encontrar una sección tal que si su abuelo crea lluvia artificial sobre ella, el número de secciones regadas sea la máxima. ¡Ayúdela a determinar el número máximo de secciones que es posible regar al seleccionar alguna sección!, escriba un programa en SL que resuelva el problema de Lisa.
![Page 27: Inf 1141 Unidad 6 Arreglos Abiertos Sem 2 2015](https://reader033.vdocuments.co/reader033/viewer/2022051218/5695d1f71a28ab9b02989d0f/html5/thumbnails/27.jpg)
¿ Cómo resolvería Usted este problema ?
FUNDAMENTOS DE PROGRAMACIÓN