Inf 1141 Unidad 6 Arreglos Abiertos Sem 2 2015

27
FUNDAMENTOS DE ALGORITMOS INF 1141 UNIDAD 6: CARACTERÍSTICAS AVANZADAS DE ARREGLOS EN SL [email protected] 2º Semestre 2015 Fundamentos de Algoritmos

description

Arreglos Abiertos

Transcript of Inf 1141 Unidad 6 Arreglos Abiertos Sem 2 2015

Page 1: Inf 1141 Unidad 6 Arreglos Abiertos Sem 2 2015

FUNDAMENTOS DE ALGORITMOS

INF 1141

UNIDAD 6: CARACTERÍSTICAS AVANZADAS DE ARREGLOS EN SL

[email protected]

2º Semestre 2015

Fundamentos de Algoritmos

Page 2: Inf 1141 Unidad 6 Arreglos Abiertos Sem 2 2015

¿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

Fundamentos de Algoritmos

ARREGLOS ABIERTOS

Page 4: Inf 1141 Unidad 6 Arreglos Abiertos Sem 2 2015

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

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

¿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

¿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

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

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

¿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

¿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

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

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

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

Fundamentos de Algoritmos

Inicialización de arreglos en SL

Page 16: Inf 1141 Unidad 6 Arreglos Abiertos Sem 2 2015

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

¿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

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

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

Fundamentos de Algoritmos

COPIA DE ARREGLOS EN SL

Page 21: Inf 1141 Unidad 6 Arreglos Abiertos Sem 2 2015

¿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

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

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

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

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

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

¿ Cómo resolvería Usted este problema ?

FUNDAMENTOS DE PROGRAMACIÓN