Sunteți pe pagina 1din 27

FUNDAMENTOS DE ALGORITMOS

INF 1141

UNIDAD 6: CARACTERSTICAS
AVANZADAS DE ARREGLOS EN SL
l.griffiths.m@gmail.com
2 Semestre 2015

Fundamentos de Algoritmos

Qu aprenderemos hoy?
1. Caractersticas avanzadas de los arreglos en SL
1. Arreglos Abiertos
2. Inicializacin de Arreglos
3. Asignacin de Arreglos

Fundamentos de Algoritmos

ARREGLOS ABIERTOS

Fundamentos de Algoritmos

Arreglos Dinmicos/Abiertos

Existen PROBLEMAS de la vida real en los que

NO es posible conocer o NO es
conveniente establecer la
cantidad mxima de elementos
que se almacenaran en un
arreglo en TIEMPO DE
COMPILACIN

Fundamentos de Algoritmos

el valor mximo del nmero de


elementos de un arreglo vara de
en el tiempo

Ejemplo

Se desea almacenar las temperaturas mximas registradas en un perodo de n


das en la ciudad de Valparaso, para luego determinar cual fue el promedio de
temperaturas mximas durante ese perodo de das.

Fundamentos de Algoritmos

Cmo se declara un
Arreglo Abierto Unidimensional en SL?

Para la declaracin de un arreglo abierto unidimensional en vez del indicar el


tamao fsico escribimos un asterisco para indicar que ese valor an no es
conocido.
EJEMPLOS

A: vector [*] cadena


B: vector [*] numerico
C: vector [*] logico

Fundamentos de Algoritmos

Cmo dimensionamos en tiempo de ejecucin el


tamao del arreglo?

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)

Fundamentos de Algoritmos

Veamos un Ejemplo
programa ejemplo
var
temperaturas : vector [*] numerico
n : numerico
inicio
cls()
repetir
imprimir("Ingrese nmero de das : ")
leer(n)
hasta (n>0)
dim(temperaturas , n)
leerArreglo(temperaturas , n)
imprimir(promedio (temperaturas , n) )
fin

Fundamentos de Algoritmos

sub leerArreglo (ref A:vector [*] numerico; max:numerico)


var i:numerico
inicio
desde i=1 hasta max
{
imprimir("Ingrese temperatura da ",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
Fundamentos de Algoritmos

Cmo se declara un
Arreglo Abierto Bidimensional en SL?

Para la declaracin de un arreglo abierto bidimensional en vez del indicar el


tamao fsico fila y columna escribimos un asterisco en su reemplazo para
indicar que ese valor an no es conocido.
EJEMPLOS

A: matriz [*,*] cadena


B: matriz [*,*] numerico
C: matriz [*,*] logico

Fundamentos de Algoritmos

Cmo dimensionamos en tiempo de ejecucin el


tamao del arreglo?

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)

Fundamentos de Algoritmos

Veamos un Ejemplo
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
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

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

Fundamentos de Algoritmos

Inicializacin de arreglos en SL

Fundamentos de Algoritmos

Ejemplo

Se desea registrar la temperatura promedio entre enero y diciembre del ao


2014 en la ciudad de Valparaso. Al solicitar los datos de entrada queremos
indicarle al usuario el nombre de cada mes.

Fundamentos de Algoritmos

Cmo inicializamos un arreglo en SL?


Veamos unos Ejemplos:
var

topeMeses : vector [12] numerico


mesesAo : vector [12] cadena
A: matriz [5, 3] numerico

inicio
topeMeses = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
mesesAo = {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} }
:
Fundamentos de Algoritmos

Veamos un Ejemplo
programa ejemplo
const
MESES=12
var
mesesAo: vector [MESES] cadena
temperaturas: vector [MESES] numerico
inicio
cls()
mesesAo = { enero, febrero, marzo, abril, mayo, junio,
julio, agosto, septiembre, octubre, noviembre,
diciembre}
leerArreglo(temperaturas, mesesAo, MESES)
fin

Fundamentos de Algoritmos

Veamos un Ejemplo
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

Fundamentos de Algoritmos

COPIA DE ARREGLOS EN SL

Fundamentos de Algoritmos

Cmo le asignamos el contenido de un arreglo en


SL a otro ?
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}
:

Fundamentos de Algoritmos

Veamos un Ejemplo
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

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

Fundamentos de Algoritmos

INVESTIGUE

1. Se puede obtener la cantidad de elementos de un arreglo con ALGUNA


funcin?
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?

Fundamentos de Algoritmos

La pequea Lisa va frecuentemente a visitar a su abuelo Abraham. El abuelo


tiene un gran jardn, que puede ser representado como un rectngulo de
tamao 1 n, cuando se mira desde arriba. Este rectngulo est dividido en n
secciones cuadradas iguales. El jardn 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 seccin.

Pero crear lluvia artificial es una operacin muy costosa. Por lo anterior, el
abuelo de Lisa debe limitarse a crear lluvia sobre solo una seccin, para que
el agua de la seccin seleccionada fluya a las secciones vecinas si su altura no
supera la altura de dicha seccin.

Fundamentos de Algoritmos

Por ejemplo: El jardn puede ser representado por un rectngulo de tamao 1


5, donde las alturas de cada seccin 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 travs de todas las secciones, excepto las que tiene altura 4.

Lisa est decidida a encontrar una seccin tal que si su abuelo crea lluvia
artificial sobre ella, el nmero de secciones regadas sea la mxima.
Aydela a determinar el nmero mximo de secciones que es
posible regar al seleccionar alguna seccin!, escriba un programa en SL
que resuelva el problema de Lisa.

Fundamentos de Algoritmos

Cmo resolvera Usted este problema ?

FUNDAMENTOS DE PROGRAMACIN

S-ar putea să vă placă și