View
231
Download
0
Embed Size (px)
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
1/72
AL GORIT MOS Y E ST RUCT URAS DE DAT OS
DOCUMENTO 0:
OBJETIVOS, PROGRAMA Y
EVALUACIÓN.
INF
681 31 0
U NÍ
doc
NO PRÉSTAMO
BIBLIOTECA UNIVERSITARIA
LAS PALMAS DE G. CANARIA
N. Documento.
N. opia dSS. ::f £ £ —
E. U. de INFORMÁTICA DE LA ULPGC
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
2/72
OBJETIVOS
Los objetivos que dsbtn cubrlrst con la asignatura son:
A .- Familiarizar al alumno con los elementos básicos de la construcción y análisis de algoritmos y de la estructuración
de la información, con especial énfasis en el concepto de abstracción.
B.> Promover en el alumno la capacidad de desarrollar algoritmos para problemas sendUos.
C - Capacitar al alumno para implementar los algoritmos asi desarrollados en un lenguaje de programación, y
adaptarse a nuevos lenguajes cuando sea necesario.
Para la consecución de estos objetivos, la asignatura se halla dividida en dos partes autónomas:
Mód ulo 1 : Programación Estructurada.
Ob jet ivo s: Introducir los elementos básicos de la algorítmica: estructuras básicas, procedimientos, funciones y los
tipos elementales de datos.
Módulo 2: Estructuras de Datos y TAD s.
Ob jetiv os : Introducir el concepto de abstracción de datos y estudiar algunas estructuras de datos de a mplia aplicación.
o.
Documento -2
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
3/72
PROGRAMA
Módulo 1 : Programación Estructurada.
1. -
Ela ma nto s bá sic os . Estructuras algorítmicas liásicas. Variables . Tipo. Estructuras
de datos
eiem entales (conjuntos
dimensíonados, ristras , registros).
2.-
Técn icas de reso lución de proble ma s y diseño de al go ritm os . Análisis de problemas. Especificaciones. OiseAo
descende nte. Procedimientos. Fun done s. Parámetros fom iales y
reales.
Va riables locales y globales. R ecursividad.
3.- Me can ismo s da estr uct urac ión de dato s. Ficheros. Ubicación encad enada . Ubicación dinámica.
4.- Diseño de programas correctos. Asertos. Precondiciones y poscondiciones. Documentación. Pruet>a.
Módulo 2: Estructuras de Datos y TA D s.
S.. TAD s. Concepto. TAD s simples y contenedores. Módulos y TAD s. Ejemplos de TAD s.
6.- TAD ll s u . El TAD lista. E TAD pila, El TAD cola. Implementadones y a plicadones.
7.- Arboles. Conceptos generales. TA D árbol binario. Imp leme ntado nes. Aplic ado nes (Árt>ol binario de tMisqueda,
árboles de expresiones).
8.- Gratos. Conceptos fundamentales. El TAD grafo. Implementadones.
Documento -3
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
4/72
BIBLIOGRAFÍA
(AH88] Aho. A., Hopcroft. E. y Ullman. J.: Estructuras de datos y algoritmos . Ad diso n-W esle y. 1 988.
ISBN 0-201-64024-4.
[BC85 a] Biondi, J., Clavel, G.: lntroducción a la programación. Tomo 1 Algorítmica y lenguajes . Masson, 198 5.
ISBN 84-311-0360-4.
[BC85b] Biondi, J., Clavel. G.: lntroducción a la programación. Tomo 2 Estructuras de datos . Masson, 198 5.
ISBN 84-311-0374-4.
[BC85c] Biondi, J.. Clavel, G.: lntroducción a la programación. Tomo 3 Ejercicios corregidos . Masso n, 1985 .
ISBN 84-311-0415-5.
[C 08 6] Colema n, O.: Organización de datos y programación estructurada . Editorial Gustavo GI. 19 86 .
ISBN 84-252-1296-0
[CU91] Cueva s Agustín, G.: Ingeniería del software: práctica de la programación , ra-ma , 19 91 .
ISBN 84-7897-032-0
[HS76]
E Horowitz
& S.Shani: Fundamentáis of Data Structures . Computer Science Press, 19 78.
ISBN 273 01062 X
[PU8 9] Prieto, A., Uoris, A., Torres, J .C : Introducción a la informática . McG raw
Hitl,
1989.
ISBN 84 -7615-367-8.
[AR92] Alonso.M* O., Rumeu S.: Metodología de la Programación: Programación estructurada . Paraninfo, 1992.
ISBN 84-283-1954-5.
(DL89] Dale, N., Lilly. S.: Pascal y Estructuras de Datos . McGraw Hlll, 1991.
ISBN 0-669-15284.
[SA931 Salmón, W. I.: Introducción a la computación con TurboPascal. Estructuras y Atwtracdo nes . Addison-Wesley
lt>eroamericana, 1993.
ISBN 0-20160134-6.
(WI8 6] Wirtti, N.: Algoritmos + Estructuras de datos = Programas . Ediciones del Castillo. 198 6.
ISBN 84-219-0172-9.
(AM871 Alonso Amo. F., Morales Lozan o. A : 'Técnic as de Programación . Paraninfo, 1987.
ISBN 84-283-1568-X.
Documento -4
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
5/72
EVALUACIÓN
G n ral
La evaluación objetiva de la asignatura de Algorítmoa y Estructuras de Datos, se realizará en base a dos tipos de
pruebas:
- Pru eba s e sc rita s. Se compondrán de ejercicios de desarrollo de algoritmos en un mínimo del 60 , y de preguntas
teóricas, sin que haya un mínimo para ellas.
Contribuirán al 90 de la nota total.
- Prácticas. Su adecuada realización será requisito previo para acceder a las pruebas escritas. Una vez que estas
últimas se h ayan superado con áxito, las prácticas aportarán el 1 0 restante de la nota total.
Pruebas escritas
Habrá dos tipos de pruebas escritas:
a) evaluación pardal.
b) evaluación completa.
En las prueba s del tipo b existirán ejercicios diferenciados para ca da parcial, debiend o supe rarse independientemente
para superar la prueba.
Prácticas
La evaluación de las prácticas será individualizada, com prendiendo: Valoración de l trabajo realizado y evaluación del
dominio alcanzado en el entomo de programación estipulado. Se llevará a cabo ante el ordenador.
Evaluación por partes
A efectos de evaluación, la asignatura se considerará estructurada en dos evaluaciones parciales correspondientes
a los dos módulos en los que se divide.
La prueba escrita correspondiente al
1 ' '
pa rdal se debe rta veríltcar entre el 1 de Febrero y el 1 de M arzo, y la del 2*
pardal entre el 20 y el 30 de Mayo, si las drcustandas no lo impiden.
Las memorias correspondientes a los trabajos prácticos realizados en cada caso se det>erán entregar antes de la
realizadón de la prueba escrita correspondiente. La evaluadón personal de las prácticas se llevará a cabo en fecha
posterior.
Los Alumnos que superen todos los pardales, habrán superado la asignatura, y no tendrán que presentarse a la
evaluadón final de Junio o a las evaluadones extraordinarias.
Evaluación de Junio
Los alumnos que se presenten a la evalu adó n final de Junio teniendo pend iente sólo un pard al, serán ev aluados sólo
del pardal en cuestión, y en las mismas condidones que si se tratase de la evalu adón pardal correspondiente. El resto
realizarán una evaluadón especifica que abarcará toda la asignatura (prueba escrita del tipo b).
Si no se han entregado con anterioridad, las memorias de las prácticas correspondientes a ambos pardales deberán
entregarse antes de la realizadón de la prueba escrita de Junio. Realizándose la evaluadón de las prácticas
posteriormente. Lo mismo regirá para las convocatorias extraordinarias.
Convocatorias exUaordinarlas
En las convocatorias extraordinarias la evaluadón comprenderá toda la asignatura.
Documento
-
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
6/72
Criterios de corrección de aigoritmos
1 . *
Cu mp limie nto da las « ip tc ifl ca ci on ca . - El algoritmo cumple las especificaciones si hace lo que se ha pedido que
haga, en la forma e n que se ha pedido que lo haga, utilizando los elementos que s e ha pedido que utilice y no utilizando
los que se ha pedido que no utilice.
Ejemplos de incumplimiento de especificaciones:
- Hacer una función cuando se ha pedido un procedimiento o viceversa.
• Utiizar una estructura de datos prohibida explicitamente, o no usar una mandada.
- Construir un módulo iterativo cuando se ha pedido recursivo o viceversa.
- No utilizar parámetros que se han especificado, o, al contrarío, utilizar más parámetros de los que se ha especificado
explicitamente que se podían usar.
Los ejemplos nteriores no incluyen utilizar elementos que no se han prohibido exp lícitamente, si bien ahí debe ev lu rse
la diferenci de eficacia entre usar unos elementos u otros).
2 .- F un clo na m lan to. - E l algoritmo funciona si, por todas sus posibles bifurcaciones, alcanza siemp re un final en tiempo
finito y con una solución correcta. Naturalmente, esto no sirve de nada si no cum ple en absoluto las especificaciones,
y no hace lo que debe hacer).
Ejemplos de mal funcionamiento:
- Algoritmos no terminados.
- Budes infinitos.
• Asignaciones indefinidas.
- Invocación de módulos no desarrollados.
3.- M anejo adec uad o de los elem ento s de AE O. - Tanto las estructuras algorítmicas como los elementos de datos deben
ser utilizados de forma correcta.
Ejemplos de manejo inadecuado de los elementos:
- Cambiar el valor de la variable controiadora de un para dentro del mismo.
• Asignar o utilizar juntas variables de tipos incompatibles.
4.- Estru cturac ión y a bs trac ció n. - El algoritmo debe estar bien estructurado, dividido en módulos de la m anera más
conveniente y definir y utilizar los tipos de datos adecuados.
5.- Efic aci a. - La eficacia de un algoritmo reside en su m ínima utilización de recursos tiem po y espacto. S e valorarán los
métodos que consigan un ahorro en uno de ambos factores o los dos), sin penalizar exageradam ente al otro. Será muy
positiva la consecución de aigoritmos de menor complejidad algorítmica.
Restan eficacia:
- Preguntas en orden inadecuado.
- Iteraciones innecesarias.
- Varíat>le8 innecesarias.
Téngase en cuenta que nada es re lmente inneces rio si contribuye de forma sust nci l a conseguir un lgoritmo mis
claro, siempre que la forma en que le resta eficacia no sea igualmente sustancial).
S. -
Cla rid ad .- El algoritmo no presentará borrones, se dispondrá de forma que s u estructura sea fácilmente reconocible
y legible, se comentará adecuadamente, y se utilizarán nombres significativos para los principales identificadores.
Los Algoritmos se puntuarán de a 10 ptos., aplicando los criterios anteriores de la manera siguiente:
- Los criterios del 1 al 3 proporcionan los primeros 5 ptos ., haciéndo se necesario cubririos suficientemente para optar
al aprobado.
- Los criterios 4 y 5 proporcionan los siguientes 4 ptos.
• El criterio 6 proporciona, una vez cubiertos suficientemente los anteriores, el último punto, dando opción al 10.
Documento -4
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
7/72
ALGORITMOS Y ESTRUCTURAS DE DATOS
DOCUMENTO 1:
NOTACIÓN ALGORÍTMICA
E U de INFORMÁTICA DE LA ULPGC
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
8/72
PREFACIO
El objetivo de la presente guía de notación algorítmica es establecer un documento de referencia para
es diversas, se puedan m anejar algoritmos con otras notaciones, elaborados siempre por otros autores.
Para la realización de esta guía se han seguido las siguientes convenciones de estilo:
su rio
Para los elementos definibles por el usuario.
[Opcional] Para los elementos que se pueden utilizar opd onalm ente.
Palabra reserv ada Para los elementos del lenguaje algorítmico utilizado.
Elección|Alternativa Para expresar una lista de elementos de los que se puede utilizar uno.
{Repetición} Las llaves indican que los elementos encerrados en ellas pueden repetirse
caro o más veces.
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
9/72
NORMAS GENERALES
Identif icadores:
Son los nombres por los que nos referimos a elementos del programa, ya sean elementos de datos
variables, tipos) como elementos ejecutables fund one s, procedimientos).
LETRA e {ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz}
NUM ERO 6 {0123456789} SÍMBOLO 6 { _ }
Un identif icador se fo m » como: LETRA{LETRA |NUMER O|SIMBOLO } Ab1_c agro.c1 ,c_1
Los nom bres de los identificadores deben ser significativos, proporcionando información en sí m ismos:
Una variable que represente el nombre de un empleado, es mejor llamarla NombreEmpleado, o
Nom_empleado que llamarla X.
Declaración de variables:
variables
Nombrejipo vl{ v2}
variables entero a, b, c
No ta: Se admiten variaciones en la declaración de variables en orden a mantener concordancias
lingüísticas por ejemplo, variables enteras en ve z de variables entero), en aquellos casos
que no den tugar a amtxgOedades.
Declaración de constantes:
constante
Nom brejtipo v1{ v2}
constantes entero a.b.c
No ta: Se admiten variaciones en la declaración de constantes en orden a mantener
concordancias lingüísticas, al igual que con las varial}ies.
Cuestión de estilo:
- Anidamicnto.
A fin de mostrar claramente los anidamientos de las estructuras aigorítnúcas, contribuyendo así a la
más fácil comprensión del algoritmo, es conveniente que las estructuras o acciones que estén contenidas en
otras estructuras se escriban Bgeramente desplazadas respecto al comienzo de aquellas.
nventras condición hacer mientras condición hacer
si condición entonces si condición entonces
Acd ón 1 Acción 1
si no si no
Acción 2 Acción 2
fin si - fin si
Acción 3 Acción 3
fin nventras fin m ie n tm
Bien anidado M al anidado
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
10/72
- Comentarios.
Para que un algoritmo sea comprensible es fundamental que esté adecua damente comentado. Los
comentarios deben incluir un breve párrafo inicial explicando las líneas generales del método que se aplica
para la realización del algoritmo. Debe explicarse también la función de las variables principales que se
empleen.
Se distribuirán luego comentarios cortos y concisos en los puntos clave del algoritmo. Estos
comentarios deberán ser suficientes pero no excesivos y se dispondrán de ta l manera que no dificulten la
claridad en la visión de la estructura del algoritmo.
los comentarios se cerraran entre llaves Oi Oi si están en una linea con instrucciones seguirán a una
barra vertical |
{comentario}
instrucción |comentario
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
11/72
>
TIPOS
Tipos Elamantales simpks:
Entero
Real
Lógico
1 Carácter
1 Puntero
Ejenfipk) de declaración
Variables Entero i, j k
Variables Real r
Variables Lógico 1, h
Variables Carácter a,b,c
Variables Puntero p, q
Operadores que soporta 1
Aritméticos y Relaciónales 1
Aritméticos y Relaciónales 1
Lógicos
Relaciónales
Estructuras de Datos Elementales:
- Conjuntos Oimensionados
Variables Tipo_el0mento Nom_CÍO[Dím1[ Dim2}]
Variables Entero Vector 10 ]. Matriz[5,5]
Nota: En cada dimensión D im l, Dim2, ...) se indica el número máximo de elementos, entero
positivo. Los índices que se utilicen para referendar el Conjunto Dimensionado deben ser
enteros, entre 1 y la dimensión máxima.
- Ristra ver epígrafe específico.
- F ichero ver epígrafe especifico.
Construcción de Tipos:
Las declaraciones de tipos se ubicarán al comienzo del algoritmo, función o procedimiento.
Tipo Nombrejtipo es
A/o/n_//po|Campo Nomjipo
Nom_campo{ Nom_campó}
{Campo
Nomjipo
Nom_campo[ Nom_campo}}
f in t ipo
Tipo Complejo es IDeclaradón de un Tipo Estructurado Registro)
Campo Real ParteR.Partel
fin tipo
Tipo NuevoEntero es Entero fin tipo |Oeclarar un nuevo nombre para un tipo.
Tipo VectorEnteros es |Un registro conteniendo un vector
Campo Entero Vector 100], TamActual
fin tipo
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
12/72
Refe rencia a u n cam po Se utiliza el punto .) como operador de referencia a campo.
Sean:
Variables Complejo C1 Los campos serían d .P ar te R , Cl.P arte l.
Variables Complejo C2[100] Los campos serían C2[i].ParteR, C2[i].Partel.
Variables VectorEntero V Un elemento del campo Vector sería V.Vector i].
Variables NuevoEntero NE No hay campos, se usaría igual que el tipo base, y sería
compatible con él.
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
13/72
H
OPERADORES
Asignación:
Aritméticos:
Rslacionales:
Lógicos:
0, V
y. A
no
a elevado a b
igual ^ menor o igual
menor ¿ mayor o igual
mayor < > , * distinto
0 lógico
y lógico
no lógico
De Ristras: Concatenación
(Otros operadores de ristras en e l epígrafe correspondiente)
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
14/72
MANEJO DE RISTRAS DE CARACTERES
Declara ción: Variables Ristra var1{,var2}
Ristra nula o vacia:
Operaciones:
Relaciónales, utilizando cualquier operador relacional
con s Albacete
Cálculo de la longitud: variablejentera V - 7
- Subristras:
> Localización:
variable_entera < - Posiristra_de__búsqueda,ri5tra_búscada
V • - PosfLas Palma s' .Tal ) => V«5
No ta: La función Pos devuelve un valor entero que indica la posición dentro de
ristra_de_búsqueda en que convenza la primera ocurrencia de rístra.búscada, o
devuelve
si no hubiese ninguna. Las posiciones en las ristras empiezan a contar
en 1.
- Manejo:
ristra_resultado Lon(ristra_origen) => resulta la ristra vacía
Si pos_comienzo ^ =» resulta la ristra vacia
Si num_caracteres ¿ ^ resulta la ristra vac ia
Si pos_comienzo -•• num_caracteres > Lon(rístra_origen) ••-1 o si se omite num_caracteres =»
se supone num_caracters«Lon(ristra_origen)-pos_comienzo+1
Sub fEsc uela Universitaria de lnformática .9,4) devuelve Univ
SubfEscuela Universitaria de lnformática',40,5) devuelve
SubfEscuela Universitaria de lnformática ,-3,7) devuelve
Sub fEsc uela Universitaria de lnformática ,26,50) devuelve Informática*
Sub fEsc uela Universitaria de lnformática ,30) devuelve mática
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
15/72
MEMORIA DINÁMICA
Declarac ión: Variables Puntero [a Nom Tipo] var1{,var2}
Referencia al contenido de un bloque señalado por un puntero:
- • Indica el contenido del bloque señalado por el puntero
ombre puntero
- •
Si el bloque es de tipo compuesto registro)
A un campo: Nombnjpuntero -¥ Nombnjcampo
Puntero Nulo: se indica por la palabra Nulo
Asignación de memoria:
ombre puntero
4- TomarBloque f/po_nodo)
Nota :
Si no hay espacio disponible TomarBIoque devolverá Nulo
Liberación de memoria:
Llberar A/omí)f0j)uníero)
No ta: Tanto TomarBIoque como Liberar se consideran predefinidos.
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
16/72
INSTRUCCIONES ELEMENTALES
Sentencias, Funclones,Procedimientos)
abs va/or) Función) Devuelve el valor absoluto de su argumento
ent va/or_rea/) Función) Devuelve la parte entera de un argumento real
escribir varf{,var2}| A/om_/7c/j,varí{,var2})
escribir i,j,k
escríbír fsalida,empleado)
leer varf{,vaf2}| /\/om _/ích,varí{,
var2}
leer ij.k
leer fentrada,empleado)
sqrt valor)
val Argumento,Err)
Función) Calcula la raiz cuadrada.
Pseudofunción) si el argumento es un número entero o real), devuelve una ristra
que lo represente, y si es una ristra representando un número devuelve su
conversión a numérico. El parámetro Err es de tipo lógico y toma el valor verdadero
cuando se produce algún fallo en la conversión.
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
17/72
c
ESTRUCTURAS ALGORÍTMICAS
Estructura S ecuen cial :
Las acdones en Estructura Secuencial se escribirán una detrás de otra, separándolas p o r ; si se escriben
en la misma linea:
acciónZ
acdón ; acdón4; AcciónS
Acdónñ
Estructura Alternativa:
si
condición
entonces
acción
[sí no
acción
alternativa]
fin si
Nota : condición es cualquier expresión que produzca un valor lógico, y por acción se entiende cualquier
secuencia váUda de acciones simples.
Estructuras Repetitivas:
mientras
condición
hacer
acción
fin mientras
para
var_control
desde valorjnicial hasta vaiorjinal [paso
tam_j aso]
hacer
acdón
fin para
No ta : La variable de control debe ser e ntera , asimismo, tanto valo rjnic ial como valor_final y
tam_paso deben ser valores o expresiones enteros,
repetir
acción
hasta que conátíón
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
18/72
Proceso por Casos
según expresión hacer
caso :
acción
{caso acción2}
[en otro caso acción_altemativá\
fin según
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
19/72
MANEJO DE FICHEROS
Declaración: Variables fichero var1{,var2}
Apertura:
Abrir fenf) en modo lectura
Abrir {fsal) en mo do escritura
Abrir {fdií) en modo directo
Lectura/Escritura:
- Secuencia :
Ieer(fení,varí{,var2})
escribir(ísa/. vaff{,var2})
- Directo:
leer(ft//r,[#pos,]varí{,var2})
escribir(fcfff.(#pos,lvarí{,var2}) ¡
No ta: Pos es una expresión entera. Una vez realizada lectura o escritura en modo directo con i
posicionamiento, se podrá continuar realizando lecturas escrituras sec uenda les a partir de la misma I
sin indicar posición, hasta que se des ee efectuar un nuevo acceso con posicionamiento. |
Cierre: |
Cerrar{nombre_fichero) f
i
Inspección del final de fichero : |
EOF{nombre_fíchero) Verdadero cuando se ha alcanzado el final del fichero. |
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
20/72
PROCEDIMIENTOS Y FUNCIONES
Procedimiento
nombre_Proc
[ par
{,pai
[Entradas:
pa r
{.par}]
[Salidas:
par{,pai)
E/S:
par{,par}][
[PRECONDICIONES]
[POSTCONDICIONES]
eclaración
de
variables
acciones
retomar
No ta: La acción de retomar se puede ejecutar en cualquier punto donde se haya cumpKda el objetivo
del Procedimiento o Función Postcondición).
Función
TipoJFunc nombreJFunc {{par
{,par
[Entradas: par
{.par}]
[Salidas: par {.par} E/S: par {,par}\^
[PRECONDICIONES]
[POSTCONDICIONES]
eclaración de variables
acciones
retomar | devolver valor
No ta: Si la función termina con un retomar, deberá haberse e jecutado previamente la asignación del
valor a devolver al nombre de la función, como si éste fuese una variable.
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
21/72
ORIENTADO A OBJETOS
Construcción de una clasa:
clase Nom bre_clase [hereda de Nombre_clase_base{,Nombre_clase_base}]
[atributos
[protegido] Tlpo_atríbuto Nombre_atríbuto{,Nombre_atríbuto}
{[protegido] Tipo_atributo Nombre_atributo{,Nombre_atributo}}l
[constructor [ par
{,pai
Entradas: p r {.pai ]
Cuerpo de Procedimiento
fin constructor]
[destructor
Cuerpo de Procedimiento
fin destructor]
[servicios
Oeciaradón de nombres y parámetros de funciones y procedimientos]
fin clase
La definición del cuerpo de los servicios se realiza de la misma forma que la de funciones y
procedimientos normales pero precediendo el nombre de estos con el nombre de la clase y un punto.
clase punto
atributos
protegido entero x.y
constructor xaux, yaux)
Entradas: entero xaux, yaux
X 4- xaux
y 4- yaux
fin constructor
servicios
mostrar
sumar otro)
restar otro)
fin clase
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
22/72
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
23/72
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
24/72
LGORITMOS Y ESTRUCTUR S DE D TOS
DOCUMENTO 2:
APUNTES
( 1
Parcial)
E U de INFORMÁTICA DE LA ULPGC
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
25/72
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
26/72
ELEMENTOS BÁSICOS
1.-Algoritmo.
Dado un problema a resolver, se d enomina
algoritmo
a una descripción no
ambigua
de los pasos que deben seguirse
a partir de los datos para obtener una solución correcta en tiempo finito
En otras palabras, si alguien conoce el modo de resolver
un
cierto problema, podrá escribir
el
algoritmo adecuado. Este
algoritmo, comunicado a otra persona, ha de permitir que esta última también pueda resolveilo correctamente y sin
ambigüedades. A fin de evitar las ambigüedades que existirían si se escribiesen en un lenguaje natural, se utiliza un
lenguaje muy restringido y preciso, como se verá posteriormente.
Por
lo
tanto, los algoritmos juega n un p apel muy importante en la comunicación de métodos de solución de problemas,
y en particular, en el trabajo informático. El desarrollo de un algoritmo adecuado constituye la primera etapa en la
preparación de un programa de ordenador para un problema dado.
Nótese además como característica fundamental de un algoritmo el que debe conducir a la solución en iempo inito.
En [AH87] se destaca esa característica como diferencia primordial entre algoritmo y programa. En [AH87] y [AR92] se
relacionan también otras condiciones que debe cumplir un algoritmo:
i) entrada: contará con cero o más valores proporcionados externamente,
ii) salida: producirá al menos un resultado.
iii) definición: todas las instrucciones deb en ser claras y no ambiguas,
iv) finitud: para todos los casos, el algoritmo debe terminar en un numero finito de pasos,
v) efectividad: todas las instrucciones deben ser suficientemente básicas como para poder ser realizadas por una
persona usando papel y lápiz.
De la definición dad a de algoritmo, se induce que si alguien o algo) realiza los p asos indicados en el mismo en la
secuencia prescrita ejecuta el algoritmo), obtendrá la solución al problema planteado. A fin de facilitar la comprensión de
todos los conceptos implicados, es interesante fijar quien ejecuta un algoritmo:
Se llama Procesador [BC85a], a un ente capaz de ejecutar un algoritmo. Para ello habrá de ser capaz de entender
las instrucciones expresadas en el mismo. Todo procesador es capaz de entender un conjunto limitado de intrucdones,
que se conocerán como /nsfrucc/ones Primitivas
de l
Procesador y por tanto, solo será capa z de ejecutar algoritmos que
estén expresados en función de sus acciones primitivas.
Por consiguiente, un algoritmo se realizará para un procesad or concreto, y consistirá en una secuen cia de instrucciones
primitivas de ese procesador.
En esta signatura los algoritmos se restringirán normalmente a procesos de cálculo o de tratamiento de la información;
en otras palabras, a aquellos que se p uedan resolver mediante un ordenador procesador informático).
2. - Conceptos de Variable y Tipo.
Un procesador trabaja en un entorno, y es capaz de resolver prot>lemas que se hallen definidos dentro del mismo. Este
entorno está contituido por objetos que se encuentran en cada momento en una situación determinada, y que en conjunto
conforman el estado del entorno en un momento dado. El trabajo del procesador consiste en variar la situación de los
objetos del entorno de forma que se pase del estado inicial que definía el problema al estado final que define la solución.
En el caso de un procesador informático, los objetos que constituyen su entorno de trabajo vienen representados por
variables, y las acciones irán encaminadas a cambiar el estado de las mismas.
Una variable es un ente que consta de tres elementos: Nombre, Valor y Tlpo.[BC85a]
El nombre identifica a la variable, se le da en el momento de su declaración y perma nece fijo durante toda la vida de
la misma. Al darte nombre a una variable es con veniente suministrarte uno que s ea significativo en cuanto que de alguna
idea de lo que va a contener o para que se va a utilizar la misma.
l valor define el estado de la variable, y puede ser cam biado e n cualquier mom ento m edíante acciones del procesador
de ahi la denominación de variable). La acción que permite a un procesador cambiar directamente
el
valor d e una variable
Tema I «I
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
27/72
M la
asignación.
También se puede cambiar el valor mediante operaciones de entrada, que ímpiidtamente asignan a una
variable un valor procedente de fuera del entorno del procesador las operaciones de E ntrada/Salida permiten al
procesador comunicarse con el exterior, más allá de su entorno).
El conjunto de los valores de todas las variables de un algoritmo en un momento dado constituye el estado de la
ejecución del algoritmo en ese mom ento, o st do dal algoritmo. Es posible seguir la evolución del estado de un algoritmo
paso a paso, a medida que se va ejecutando cada una de las acciones, a esto se le Uama realizar una Traza. La
realización de una traza pude resultar útil para detectar errores en un algoritmo, pero no sirve para garantizar su correcto
funcionamiento, puesto que para construir la traza se ha de probar el algoritmo con unos valoras da antrada concretos,
y no se puede asegurar qu e, aunque el algoritmo funcione bien con estos valores, también lo hará con todos los posibles
valores de entrada.
Q tipo de una variable determina la dase y conjunto de valores que puede tomar y las operaciones que se le pueden
apiicar.[BC85a], [BC85b], [PUSQ]
Las variables siempre son de capacidad Kmítada, lo cual quiere decir que e l conjunto de valores distintos que pueden
tomar es finito una variable que no cumpliese esta hipótesis precisarla una máqu ina de complejidad infinita para ser
tratada). B conjunto de valores viene condictonado por la forma en que estos se representen en la máquina.
En cuanto a los conceptos de dase de valores y operadonas apücablas baste un ejemplo: un número y el nombre de
una persona son objetos intrínsecamente diferentes, de hech o en un ordenador se representan de forma diferente), y con
ellos se hacen cosas diferentes un núm ero se puede m ultiplicar con otro, pero ¿qué es la muttípiicadón de dos nombres?.
Las operadones apticabies están por tanto vinculadas con la dase de valores que se representen.
Un procesador, asi como tiene un conjunto de acd one s primitivas que pued e realizar, dispone de un conjunto de tipos
básicos. En el Apéndice de Notadón Algorítmica se pueden encontrar los más típicos.
También podría ser posible definir otros tipos diferentes de los básicos, aunque basándose en ellos a efectos de
representadón y o perad ones . Por ejemplo, se podría definir un tipo color, que pud iese tomar
valores,
rojo, amarillo, verde,
etc. Al definir un tipo nuevo, deben especificarse tanto el conjunto de valores como las operadones que lleva asedados.
Dado que el tipo de una variable determina como se representa y lo que se puede hacer con eUa, antes de que una
variable pueda ser usada en un algoritmo debe dedararse de que tipo es.
En ocasiones existen datos que han de permanecer invariables durante las eje cud one s del algoritmo, para poner esto
de manifiesto, conviene tener otra dase de objeto, que se denominará constanta teniendo los mismos atributos que las
variables Nombre, tipo y valor), pero diferendarándose de estas en que el valor se e8tat)lecerá en la dedaradón, y no
podrá ser alterado.[BC85a][AR92]
3.- Estructuras Algorítmicas Básicas.
Se ha definido un algoritmo como una secuenda de instrucdones, y de hecho esto es lo que ejecuta el procesador
cuando se le da un algoritmo. Sin embargo, sólo como una secuenda, no es posible expresar un algoritmo general para
un tipo de problema dado. Para poder hacer esto, es necesario poder combinar las acdones utiizando estructuras que
permitan controlar el flujo de ejecudón del algoritmo. Es posible conseguirío con solo tres estructuras algorítmicas, que
por ello se denominan básicas. Más adelante se estudiarán otras que simplifican la so ludó n de der tos problemas, aunque,
de cualquier modo se podrán poner en fundón de las tres estructuras básicas.
Las tres estructuras presentan una única entrada y una única salida: por lo tanto, es posible encadenarías de forma
efectiva.
3 .1 . • Estructura aacuancial.
Es una sucesión ordenada de acdones que se aplican una después de otra. En este caso la resoludón del problema
implica la reatizadón de un conjunto de acdones:
Acción 1 ; Acción 2; . .. ; Acción n
de forma que la acdón K^l se em piece a ejecutar cuan k) se haya terminado la ac dón K. La soludón del problema se
obtiene al in ttz r a acdón n.
Tema I -2
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
28/72
La notación que caracteriza a esta estructura consiste en poner las acciones se parad as po r ; o bien escritxrlas en
lineas consecutivas;
o bien:
Aadont
Acción 1; Acción 2 ; Acción 3
Acción 1
Acción 2
Acción 3
3.2.- E structura altamatíva.
Dos acciones se excluyen mutuamente en función de una condición. Siempre se ejecuta una y sólo una de las
acciones, aunque dichas acciones pueden ser compuestas.
En este caso, la resolución del problema conduce a que se ejecute exclusivamente una d e las acciones, Acción 1 o
Acción 2, según se cumpla o no, una condición.
La notación a utilizar para representar esta estructura hace uso de las palabras d av e si , en ton ce s, sino y fin si para
separar la condición y las acciones de manera, que, el conjunto sea fácilmente legible.
En m uchas ocasiones, sobre todo cuando las acciones son com puestas, se escribe la estructura en varias lineas, con
las acciones más a la derecha que las palabras dave si y fin si:
si condidón entonces
Acdón
sino
Acdón 2
fin si
Esta notadón permite una lectura muy cómoda de la estructura. En el caso
particular de que la Acdón 2 consista en no hacer nada se puede escribir
si condición entonces
Acdón
fin si
CtoM
Aodml
/u-N
\Cafiá1 ?^
PdH
Aatlwt
r
3.3.- Estructura rapatitiva.
Acción que dependiendo de una condidón se aplica de forma iterativa un número finito de veces. En este caso, la
soludón del problema consiste en la repetidón de una acdón más sendlla mientras sea
derta una condición. (Al igual que en la estnjctura alternativa, dicha acdón puede ser
compuesta). Lo que es evidente, es que la acdón debe modificar los términos de la
condidón de modo que en algún momento se termine la repetidón.
Cada vez que se ejecuta la acdón se dice que se ha efectuado una iteradón de la
estructura repetitiva; como se observa en el diagrama, la condidón se evalúa al prlndpio
de cada iteradón.
mientras condidón hacer acdón fin mientras
o bien
«
• Cfl i
tal y •
C M B
Aooianl
1
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
29/72
mientras condición hacar
Acción
fin mlantras
4.- Un EJamplo.
En este punto, ya se dispone de elementos suficientes como para presentar un pequeAo algoritmo.
Se parte de la hipótesis de que se tiene un procesador que no es capaz de realizar la operación de multiplicación de
enteros, pero si la operación su ma , y s e pretende construir un algoritmo para llevar a cabo la m ultiplicación de dos enteros
positivos mediante sumas repetidas.
Alg-1 Alg oritm o multiplica
variables entero m 1, m2, prod, cont
leer m 1, m2
si (m1 ¿ 0) y (m2 ¿0) entonces
prod 4- O;cont
-
O
mientras cont < m2 hacer
prod 4- prod
m1
cont • - cont • 1
fln mientras
escribir prod
si no
escribir l a s entrada* no son válidas
fin si
parar
I Este algoritmo multiplica mediante sumas dos
I valores enteros positivos, leídos en las variables
i m t y m 2, obteniendo el resultado e n
prod
\
ont actúa como variable contadora
Otwérvese como en el margen derecho se ha puesto un breve comentario que explica el algoritmo sin restarte
legibilidad. Para que un algoritmo sea comprensible, es fundamental que esté adecuadamente comentado. Los
comentarios deben induir un breve párrafo inicial explicando las lineas generales del método que se aplica para la
realización del algoritmo. Det>e explicarse también la función de las variatiles principales qu e se em pleen. Se distribuirán
luego comentarios cortos y concisos en los puntos dave del algoritmo. Estos comentario* deberán ser sufidentes, pero
no excesivos, y se dispondrán de tal manera que no dificulten la daridad en la visión de la estructura del algoritmo.
Se presenta la traza del algoritmo d el ejemplo, para los valores de entrada m i « i y m2 S. En esta traza se muestra
el estado de las variables del algoritmo después de cada asignadón en que aparezca la variable cont (confO y
cont»eont+1):
mi
13
13
13
13
13
13
m2
5
5
5
5
5
5
prod
13
26
39
52
65
cont
1
2
3
4
5
Es aconsejable que se mediten las siguientes cuestiones:
¿Qué valor de prod se escritM?, ¿Por qué la variable m i no varía de valor?
Si al final también se escribiese con t. ¿Cuánto valdría?
¿Existe alguna razón espedal que pueda justificar el escoger el momento de realizar las asignadones en que aparece
la variable cont para escribir la traza?
Obsén/ese que, tal y como se habla mendonado, la fundón de la variable cont es la de actuar como contador de
sumas.
Tema I -4
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
30/72
Las tres siguientes secciones están dedicadas a la presentación y estudio de tres estructuras algoritmicas
Como ya se ha mencionado, dicha* estructuras te podrán expresar siempre como una combinación
uras algorítmicas t)ásicas ya estudiadas. Sin embargo , la utilidad qu e presentan en ciertas aplicaciones,
ientemente fuerte como para justificar su presentación e n e ste punto.
Estructura algorítmica
para.
Centrando el estudio en la estructura que da titulo a esta sección, se presenta a continuación una construcción
ítmica que refleja un hecho que aparec e a m enudo e n ei diseAo de algoritmos. E s frecuente encontrar problemas que
resolución, la colaboración de u na variable de tipo contador. Generalmente, dicha variable realiza la
ción de contar el numero de ve ces que se h a llevado a cabo una cierta acción que se encuentra dentro de un b ude
Se trata de una estructura repetitiva en la qu e se sab e, a priori, que se repetirá n vec es. E n este sentido es diferente,
más se ndlla, que los algoritmos primitivos que s e ha n visto hasta ahora; por ejemplo, se puede asegurar que el algoritmo
- la inicializadón del contador fuera del bucle,
• el incremento del mismo dentro de la estructura repetitiva, y
• la condidón, que examina el estado de la variable contador.
Considérese, por ejemplo, ei algoritmo para multiplicar dos números m ediante sum as presentado en el punto anterior.
ce la pena introdudr una nueva estructura algorítmica, caso particular de la estructura repetitiva), que permite tratar
para,
y se expresa según el siguiente
e valor inidal hasta valor final hacer
Acdón
Acdón
n
para
v ar
es la variable contadora, la cual se des ea hacer variar desde
v lor inici l
hasta
valor
fínal con incrementos de
paso.
Por ejemplo:
Acdón
La acdón se repite n veces, dando en cada iteradón los sucesivos valores a la variable contador i «1 . i« 2
i n
Aunque se podría pensar en una estructura del tipo:
repetir n veces
Acdón
fin repetir
Ha de observarse que su utilidad sería menor que la de la estructura para, dado que se perdería la posibilidad de
acceder al valor de la variable contador dentro del bude.
Tema I 41
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
31/72
Al utilizar la estructura para, el algoritmo de multiplicación mediante sumas queda como sigue:
Alg-2 A lg or itm o multiplica | Este algoritmo multiplica me diante sum as dos
variable s enteras m i, m 2, prod, cont
|
valores enteros positivos, leídos en las variables
leer m1, m2
m f y
m2
obteniendo el resultado en
prod
si (m1 ¿ 0) y (m2 ¿0) entonc es |
cont
actúa como variable contadora
prod 4 - O
para cont desde 1 hasta m2 hacer
prod 4- prod > m1
fin para
escribir prod
si no
escrib ir l a s entradas no son válidas
fin si
parar
Nótese que la estructura para incluye las acciones cont^O, cont^cont-t-l y la condición. Asimismo, se ha de observar
que este ejemplo es un caso típico para la estructura:
repetir n veces
Acción
fin repetir
propuesta anteriormente, dado que no hace uso de la variable contador más que para controlar el número de iteraciones.
Sin embargo existen multitud de aplicaciones en las que es mucho más conveniente el uso de la estructura para.
Aunque se ha introducido la estructura para con ayuda de una variable contador, la opción paso pone de manifiesto
que no es esa la única fundón posible de la variable definida en la estructura. De hech o, con dos ejemplos queda daro
que las secuendas de dicha variable pueden ser bien diferentes. En la estructura:
para i desde 3 hasta 9 paso 2 hacer
Acdón
fin para
la variable / toma los valores: 3, 5, 7, 9, y en la construcdón:
para i desd e 3 hasta -5 paso -2 hacer
Acdón
fin para
toma los valores: 3. 1.
- 1
-3. -5
S.2.* Proceso por casos.
El proceso por casos es una acd ón que se descompone en diversas acd one s paralelas de las cuales únicamente se
ejecuta una. dependiendo del valor de una expresión distribuidora.
La notadón a utilizar, correspondiente al esquema de bloques de la figura, será:
según expresión hacer
1:
Acdón 1
2:
Acdón 2
n: Acdón n
fin según
Evidentemente, esta estructura es un caso particular de la estructura altemativa. puesto que, obviamente, se podría
Tema i •«
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
32/72
expresar tarribién en la forma que se muestra a continuación,
mediante un anidamíento de alternativas:
si expresión^l entonces
Acción 1
sino
si expresión=2 entonces
Acción 2
sino
nn si
fin si
pero es de gran utilidad en cierto tipo de problemas.
Aoclanl
»
Acdcnt
, w « i i » / •••
fl
Aootann
EJEMPLO
Algoritmo que suma, resta, multiplica o divide dos enteros, x e y, según un código dado, I, (1
3 s multiplicación y 4 = división). Su expresión con estructuras alternativas seria:
suma, 2 - resta.
variables enteras i,x,y
variable real z
leer i,x.y
si i = 1 entonces
2
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
33/72
La notación a utilizar es como sigue:
repetir
Acción
hasta que condición
Esta estructura iterativa con condición final constituye un caso particular de la estructura mientras, ya que, es
equivalente a:
Acción
mientras no conddón hacer
Acción
fin mientras
y al igual que las restantes estructuras algorítmicas no fundamentales, proporciona, en ciertos casos, considerables
ventajas en la facilidad de disefío de algoritmos y en la lectura de los mismos.
Una manera alternativa de sintetizar esta estructura a partir de la construcción mientras, se basa en el uso de una
variable ló^ca auxiliar
variable lógica continuar
continuar *- verdadero
mientras continuar hacer
Acción
continuar 4- no condición
fin mientras
éste esquema tiene la ventaja de no repetir expiicitamente la acción, que puede ser muy larga.
Es conveniente pensar detenidamente el significado de este último párrafo y buscar respuesta a la siguiente cuestión;
¿Por qué se incluye la palabra expiicitamente?.
EJEMPLO
Como Ejemplo de aplicación de la estructura repetitiva con condición final, véase una nueva versión del algoritmo
multiplica, que permanece leyendo las entradas hasta que estas sean válidas.
Algoritmo multiplica
variables entero m1, m2, prod, cont
repetir
leer m1, m2
hasta que m1 2 0) y m 2 íO
prod 4- O
para cont desde 1 hasta m2 hacer
prod 4 - prod • m i
fin para
escribir prod
parar
Para concluir, es interesante remarcar que las únicas estructuras fundamentales son las tres básicas, y que todo
algoritmo se puede construir utilizando únicamente estos tres tipos. Las que se acat>an de estudiar, pueden ser muy útiles
en casos determinados, pero no debe olvidarse que son casos particulares.
Tema i •*
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
34/72
EJERCICIOS
un algoritmo que lea tres valores enteros en tres varíat>les, a , b y c, y los intercambie de tal manera
que en a quede el menor de los tres, en b el intermedio, y en c el mayor, escribiéndolos a continuación
ordenadamente. Realice trazas para varias posibles combinaciones de entrada.
Se dispone de un procesador de dibujo con las acciones Inicio, que sitúa un dispositivo de dibujo plumilla) en el
centro de un área d e dibujo, y preparado para em pezar a m overse hacia la derech a, Dibu ja N), que dibuja una linea
recta de longitud N, y G ira Ang), que hace girar el dispositivo de dibujo un ángulo A ng en el sentido de las agujas
del reloj. Se desea desarrollar un algoritmo que lea dos valores, Nlados y Uado, y dibuje un polígono de Nlados
lados de longitud Uado, siempre que los ángulos del polígono sean enteros.
Supóngase qu e en el ejercicio anterior el área de dibujo tiene un tamafto de 10 00 x1 00 0 u.m., y que se dispone de
una instrucción M ueve , que desplaza el dispositivo de dibujo sin dibujar. M odifique el algoritmo anterior, d e manera
que se empieze a dibujar en la esquina inferior izquierda, y que si un polígono no cabe en el área de dibujo, se
dibujen las partes que entrarían dentro de la misma.
Desarrolle un algoritmo que lea una serie de números, con valores entre
y 100, y cuente cuantos son pares. La
serie se considera terminada cuando se entra un valor fuera del rango establecido.
Desarrolle un algoritmo para calcular y escribir la media aritmética de una serie de números como la anterior.
Desarrolle un algoritmo que escriba el valor máximo de una serie de valores positivos leídos. La serie concluye
cuando se introduce un valor negativo.
Calcular y escribir la sucesión de Fibon acd:
F 0) = 1. F 1) = 1. F k-H) » F k) • F k.1)
Dado a, construir un algoritmo para calcular x=sqrt a), teniendo en cuenta que la sucesión: x 0) « a, x 1), ... x n),
... donde x k-*-1) = 1/2* x k)4-aA k)), converge siempre hada 8qrt a). Utilizar x**2-a para la condidón.
Nota:
sqrt indica raíz cuadrada.
Desarrolle un algoritmo para calcular y escribir los números primos comp rendidos entre 1 y N.
-1 0) Desarrollar un algoritmo que descom ponga un número en factores primos y los escriba.
Se denomina conjunto dimensionado a un
conjunto
de
elementO
del
mismo tipo
que ae
designen mediente un nombre
uno
o
varios índices
que deben tomar un valor
entero comprendido
dentro de un
intervalo prefijado.
Asi,
{x[1]...
x[i]...
x[201} es un conjunto dimensionado de una dimensión y x i,k] {i-1,10, k«1...20} es un conjunto de
Cuando se habla de un elemento de l conjunto dimensionado x. se escribe x[i] o bien x^ xp,j]; también se puede hablar
Para declarar una variable dimensionada es preciso especificar su
dimensión
además de su tipo.
Variable Real X[30],M0[20.151
ca que se utiliza un conjunto dimensionado d e una dimensión , X vector) de 3 0 com ponen tes reales
X[1]...
X 30] y
e un conjunto de 2 dimensiones matriz) con 300 co mpo nentes reales.
Variab le Real M0 1,1],M0[1,21 M0[20.15]
La declaración de conjuntos dimensionados implica una reserva de memoria contigua por parte del intérprete o
ompilador. Por ejemplo, la dedaración de MO comporta una reserva de 300*4*1200 bytes.
Para leer o escribir un conjunto dimensionado, se deben especificarlos compo nentes q ue se d esea leer o escribir. Para
eer o escribir un conjunto dimensionado de una dimensión se hará:
para i desde 1 hasta n hacer
leer 10]
para I desde 1 hasta n hacer
escribir afi]
fin para Tem a I -•
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
35/72
y para dos dimensiones:
para i desde 1 hasta n hacer
para j desde 1 hasta m hacer
leer afij]
fin para
fin para
para I desde 1 hasta n hacer
para j desde 1 hasta m hacer
escribir afij]
fin para
fin para
EJEMPLO
Multiplicación de dos matrices. Dada s dos matrices, M1 de dimensiones M1 01 xM 10 2, y M 2, de dimensiones
M 20 1x M 20 2, y tales que M1 02 =M 2 01 , el producto M1*M 2 es otra matriz, Mresul, da dimensiones M1D 1xM 2D2 , de forma
que:
UtOB
Mresu IJi
£ M1\l,líi M2ikJi
t x
|¿son compatibles las matrices?
(Lectura de la primera matriz
(Lectura de la segunda matriz
variables reales M1[20,20].M2[20.20],Mresul[20,20].Sum
variables entera s M1 01,IVI102,M201.M2D 2,Mresul01,Mresu l02,i,j.k
leer M101 .M102 .M201 .M2D2
sí M1D2=M201 entonces
para í desde 1 hasta M1D1 hacer
para j desde 1 hasta M102 hacer
leer MlfLll
fin para
fin para
para i desde 1 hasta M 2D1 hacer
para j desde 1 hasta M2D2 hacer
leer M2p,j]
fin para
fin para
MresulOI - M1D1
Mresul02 M1[i.k]* M2[k.j]
fin para
fin para
fin para
para i de sd e 1 has ta Mre sulD I hacer (salida de resultados
para j desde 1 hasta MresulD2 hacer
leer Mfesulfijl
fin para
fin para
si no
es cri bir matrices incompatibles
fin si
parar
(Dimensiones de la matriz resultado
(Triple bude para calcular todos los componentes del resultado
Tema I -10
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
36/72
•(Q
t
2 4
6 7 9
. V .
11
1
14 0
„
\ / \ /
„ \ / _ . ^ ^ V
1 2 4
1 2
4
5
r
§E SÍ)^3
^
«
7;-
^
^ < J
11 1 14 0
_
kan r i t íe da^kaada
11
1
14 0
-
T
EJERCICIOS
Cálculo del producto escalar de dos vectores.
Cálculo del elemento máximo de un vector y de su posición.
Cálculo del elemento máximo de una matriz y de su posición.
Localizadón de la posición de un elemento en un vector. Se tiene un vector a y un elemento e. Si algún
componente ap] tiene el valor e, se desea escribir la posición i de ese componente.
Localizadón de la posidón de un elemento en un
vector ordenado. Si el vector a ya está ordenado,
a[i] aü) si iea[j], para todo i=j,
estando adem ás ordenados, a[k ]> a[l] si k
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
37/72
6.2.- Ristras da Caracteres.
6.2 .1 . - Coneaptos y Ttrmlnología .
Una ristra es una secuencia ordenada de caracteres pertenecientes a un alfabeto. Por ejemplo, dado el alfabeto
P(,Y,Z],
son ristras X, XY, XXY YZ , ZYX X. Una ristra puede contener ningún carácter, dicha ristra se representa por *
y se llama ristra nula o vacía. Aqu í se usará el símbolo Q para indicar el carácter b lanco, cuando sea significativo a
efectos docentes. Ha de notarse que la
ristra
*Q contiene el carácter blanco y no debe confundirse con la ristra , vacia.
Los dos conjuntos de caracteres o alfabetos mayores y m ás popu lares son los conocidos por el nombre EB CDIC y
ASC II. Q primero de ellos es usado fundamentalmente e n la serie de ordenad ores IB M/3 60-3 70. AS CII fue desarrollado
como un código estandard y es usado en muchos ordenadores. Los caracteres qu e proporcionan amb os códigos son los
siguientes:
ódigo ASCII
1. Alfabeto inglés, tanto en mayúsculas como en minúsculas {a, b z, A, B Zi
2. Dígitos decimales {O, 1, 2. 3. 4, 5, 6, 7, 8, 9}
3. Caracteres de operación y especiales: •-*/>«
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
38/72
Dadas dos ristras X e Y (X= X,. ..X „,Y -Y , Y„ ), la condición de igualdad de ristras X - Y , es cierta si se verifica que:
1 .
B número de caracteres en X e Y es el mismo (esto es, n=m).
2.
X,=Y, para todo i tal que {1ái^n}.
Por ejemplo. JUAN = JUAN es cierta pero JOSE = JOSELE y JOSELE = JUSELE son falsas. La reladón de
distinción es la negación de igualdad. Asi, JOS EITJO SEL E y JU A Nr rjU AN ® son ciertas.
Es fácil expandir esta comparación de modo que incluya otros operadores de relación tales como , y ¿. B
significado de estas comparaciones viene dado por una
secuencia de confront ción
que se t>asa en la representación
interna de los caracteres.
Con los alfabetos usuales, el orden de las ristras es similar al encontrado en una gula da teléfono. Asi:
JOSE < JOSELE . -ANA-< JUAN - y JUAN-^'BEA son ciertas, mientras que *TOLED O < ARM AS , RAFAEL > SUSO
y CA RLO S-rAN TON IO son falsas.
De los ejemplos, es ot>vio que la condición se comprueba haciendo una secuencia de comparacionss de izquierda a
derecha. Nótese que la presencia de cualquier carácter (aún un espado) es siempre considerada como mayor que la
omisión de un carácter. Asi JUAN @ >''JUANr es derto.
La comparación de ristras es muy importante en la dasificadón de datos-carácter.
Cilculo de la Longitud.
La longitud de una ristra es el número de caracrteres de la misma. El cálculo de la longitud de una ristra, se lleva a
cabo mediante la construcdón de la fundón Lon. Asi, Lon( COLEG IO U NIVE RSIT AR IO ) es 2 1 .
Nótese que aunque el argumento de esta fundón es una ristra el resultado es un en ter o.. Puesto que el resultado es
numérico, puede usarse como parte de una expresión aritmética. Por ejemplo: 2'*^3'^Lon( AHORA ) d a como resultado 1 0.
Manijo de Subrlstras.
La operadó n que permite extraer una pordó n especifica de un a
ristr
dada se conoce como op eradón subrístra. Hay
varios formatos posibles para dicha operadón. Aquí se adoptaré el siguiente: Sub(a,,a2,a,), donde
a^- Es la ristra de la cual se quiere extraer una subristra.
a,.- Es la posidón dentro de la ristra original, donde comienza la subristra deseada.
a,.- Es la longitud de la subristra deseada.
Nótese que a, es una ristra y que a, y a , son enteros.
Por ejemplo, el resultado de la operadón Sub fAL GO RITM OS Y P ROGR AMA S ,5.6) es la ristra RITMOS .
Es posible omitir el tercer argumento, en dicho caso se supone que la subristra comienza en la posidón a, y termina
con el último carácter de la subristra original.
Se pueden combinar operadon es de ristra en una expresión. Asi:
Sub( LASARTE ,1,3) + @ • Sub ( PRINCIPAL ,7,3) • Sub( MARISMAS .6,3)
produce como resultado LAS@ PAL MA S .
Para completar la definición de Sub. se verán algunos casos espedales:
1 -
Si a,áO (independientemente de a,), entonces se devu elve la ristra vacía.
2.-
Si a^^O (independientemente de a,), entonces se devuelve la ristra vacía.
3.- Si a,>K donde K-Lon(a,). entonces se devuelve la ristra vacia.
4.- Si
a2-^a,>K'^1,
donde K«Lon(aJ, entonces se supone que
a,aK-a,-^1.
EJEMPLO
Dada una variable ristra Nombre la cual representa el nombre y los dos apelUdos de una persona, se desea obtener
un nombre equivalente, llamado Equinombre en la forma d el segundo apellido seguido de las inidales del nombre y primer
apellido. Las variables ristra IN, IA1 y Apellido2 indican la inidal del nombre, la inidal del primer apellido y el segundo
Tema I -13
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
39/72
apeilido, respectivamente.
Algoritmo EditNombre (Versión 1)
varia bles ristra Nombre, Equinom bre, IN, IA 1, Apellido2
variable entera i
leer Nombre
IN4-8ub Nombre.1,1)
i - 1
mien tras Sub(Nom bre,i,1) # 6 hacer {Encontrar el primer blanco}
i
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
40/72
EJEMPLO
Dada una variable ristra
Texto,
se des ea calcular la frecuencia relativa de aparición de cada letra de l alfabeto
El número de apariciones para cad a letra pued e acum ularse en un vector. Se asocia la letra A con el primer elemento
1 .- Inictalizar los contadores de frecuencia para cada letra, asi como el contador que representa el número total de
letras en ei texto
2. -
Barrer el texto carácter a carácter hasta que todo él ha ya sido procesado. Si un carácter es una letra, se actualiza
el contador correspondiente así como el que guarda el número total de letras en el texto.
3.- Obtener la frecuencia relativa y escrit>ir los resultados.
Para conocer la posición del contador particular de una letra se puede usar el operador Pos. Sea la variable
lfabeto
Frecuencia
que representa la ocurrencia de cada letra. Si
Alfabeto.
-
27;Alfabeto
i-
ABCDEFGHIJKLMNÑOPQRSTUVWXYZabcdefghijWmnfSopqrstuvwxyz
-
Lon(Texto)
Frecuenda(l]
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
41/72
EJERCICIOS
E-1) Escribir un algoritmo que, dada una ristra de caracteres, encuentre la
n ésima
palabra para una n dada, si no
hubiese n palabras, devolverla la ristra vacia.
E-2) Realizar un algoritmo que lea una ristra, Rentrad a, conteniendo solame nte caracteres alfat>óticos, y genere y
escriba otra ristra, Rsalida, que solo contendrá caracteres numéricos. Rsalida será del mismo tamaAo que
Rentrada. Cada posición de Rsalida será ocupada por un dígito representando el número de posiciones que
separan el carácter en la misma posición de la ristra Renetrada de su anterior aparición. Si el número es mayor
que nueve, o el carácter no ha aparecido anteriormente, se pondrá un cero. Ejemplo:
Rentrada: AABCDBEFFEABGHIJKXYLMNOPQRSTUBWB-
Rsalída: 0 1 0 0 0 3 0 0 1 3 9 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2
E-3) Desarrolle un algoritmo que lea una ristra, Ren trada, y un número entero , n, y construya una ri8tra,R saiida ,
escribiéndola a continuación, la ristra Rsalida se genera a partir de grupos de n caracteres de Rentrada. si fuese
necesario, el último grupo se completará con espacios. A partir de estos grupos, se toma ordenadamente un
carácter de cada uno hasta alcanzar los n caracteres que forman cada uno de eUos. Véase un ejemplo para n'4:
Rentrada: glQmyndol^alGievésQQQ
Rsalida: euQrsInaeOQdh/QmoQe
E-4) Desarrolle un algoritmo que dada u na ristra, Ro má n, la cual contiene un número en cifras romanas, calcule su
equivalente en decimal.
Equivalencia de las cifras romanas respecto de los árabes: l»1 , V= 5, X= 10 , L=5 0, C=1 00 , M =10 00
E-5) Se pide desarrollar un algoritmo que , dada una ristra O p1 , conteniendo caracteres nu méricos, y una variable ristra
de un soto carácter numérico, Op2, genere una ristra Re, que represente el resultado de multiplicar Op1 y Op2.
Para generar R e se utilizará una m atriz de ristras de 10x10 (las más largas tendrán dos caracteres), que contendrá
la tabla de multiplicar.
t . 3 . - Registros.
Al presentar los conjuntos dimensionados, vimos que se trataba de una colección de elementos del mismo tipo. En
la práctica es a veces necesario dsp on er d e estructuras qu e permitan agrupar datos d e dmtinto tipo, piénsese por ejemplo
en la ficha de un empleado, en la que se almacenan su nomt>re, dni,antigúedad....
Se define un rvgistro como un tipo de datos estructurado formado por una colección finita de elementos no
necesariamente homogéneos, llamados campos. Cada campo se identifica por un nombre único.
EJEMPLO
tipo Coche es jDefiníción de un tipo registro con 4 camp os
Campo entero
o
Campo ristra Marca, Matricula
Campo real Precio
fin tipo
variab les Coch e UnCoche. OtroCoche |Se declaran variables del tipo Coche
Unco che.AA o4-1993 {Manejo individual de los campos
Uncoche.Marca«-Toyota
Uncoche. Matricuia4- GC-0001-BB
Uncoche.PrecioUn Coche {Manejo de las variables completas
Tema I -16
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
42/72
TÉCNICAS DE RESOLUCIÓN DE PROBLEMAS
Y DISEÑO DE ALGORITMOS
1 . - Análisis dal problama y «scritura d« •spaciflcaclonas.
B primer paso al afrontar la tarea d a construir un algoritmo es asegurarse d e qu e se comprende d e una forma d ará
y concisa el problema que se desea resolver [OL89], [RA92]. Es necesario estudiarlo detalladamente con el fin de
determinar
• La Entrada: los datos iniciales que necesita el algoritmo, su tipo y su formato.
-
B
Tratamiento: lo que el algoritmo det>e hacer con esos datos.
• La Salida: cuales, cómo y donde se han de presentar los resultados .
Además se ha de determinar todos aquellos requerimientos que puedan influir en la realización del algoritmo. Por
ejemplo, si se ha de primar la velocidad de ejecución frente al almacenamiento.
B
conjunto de todo lo anterior es lo que se conoce como las
» p»cifícacion»a
del problema.
2. - Construcción de algoritmos: OlseAo Descendente.
La cuestión da ve es cóm o, dado un problema con un cierto nivel de comp lejidad, otitener un algoritmo que lo resuelva.
El dis0ño
d0sc0ndenf
es una metodología de análisis de problemas que se basa e n una deseompo sidón reiterada del
problema en subproblemas. En esta deseomposidón, lo que se considera como u na a cdó n e n un derto paso del análisis,
se descompondrá al siguiente paso, en acdones más simples. B proceso se repite hasta llegar a unas acdones
inmediatamente ínterpretables. BC85a], [PLI89], [SA93]
Este método propone el diserto del algoritmo por concredón de lo general a lo particular. Consiste en subdividir el
problema inidal e n subproblemas m ás peque ños de tal fomfia que a partir de las soluciones d e los subproblemas se pueda
construir la soludón del problema entero.
2 . 1 . - Conceptos de Abstracción y ocultación da la Inform ación.
En el curso del diserto descendente se van ot)teniendo sucesivos algoritmos del problema que van en un orden
decreaente de abstracción La Abstracdón se puede definir como la separadón entre lo qu a det>e hacerse y la forma
como debe hacerse OL89 ]. Para obtener estos algoritmos
lo que se hace es suponer en cada nivel de
deseomposidón que se dispone de un procesador virtual
capaz de realizar acd one s de la complejidad requerida.
B
proceso termina cuando se ha alcanzado el nivel en que
los algoritmos están expresados en fundón de
instrucaones primitivas del procesador real.
Con la abstracaón resultante del diserto descendente
los detalles espedficados en los niveles inferiores
permanecen ocultos a los niveles superiores, esta
ocultación
da la información
evita que los niveles más
altos sean dependientes de los detalles de bajo nivel que
pueden cambiar con una mayor probabilidad. DL89 ]
Problime de
lrtwMoiún
ds IM4
OMMWdMosi OidantrOMMi
\ ^̂ ___
fM^tm
OUHrarRagMroi
• MMMaMiMl
•
VnpnRW nVMMMQI
lOIMMrPsiabrai
3. - Procedimientos.
Es muy recomendable utilizar la técnica del diserto descen dente para la elab orad ón de algoritmos. Asi, en cad a paso,
el problema se limita al refinamiento de un subproblema muy concreto y muy a menudo el problema general permanece
en ei olvido, para pasar a analizar sus partes componen tes. Ahora bien, si al final se unen los subalgoritmos p ara Negar
Tema I I . 1
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
43/72
al algontnio completo, se pierde esta visión separada de cada parte del problema y el atgoiitmo visto de un golpe puede
ser dificit de interpretar.
(fiseAo modular permite escritxr, para la resolución de un problema dado, un algoritmo principal, que muestra la
estructura más general del algoritmo y que pide a otros algoritmos auxiliares, deno mina dos procedimientos, que resuelvan
los subproblemas más particulares. De este modo, cada problema tiene un algoritmo sencillo y comprensible. Se ha de
aftacfir que un procedimiento también puede pedir que cteitas faenas sean resueltas por otros procedimientos más
sencillos, y asi sucesivamente.
Como ejem plo, se muestra un caso de dse ño modular, que corresponde a un algoritmo que lleva a cabo el cálculo
de las raices de una función f(x) en un intervalo, mediante el método de la bisección.
En un diseño no modular, se plantea el siguiente algoritmo:
variables reales a,b.x,x1,x2,y.y1,ep8Ílon,z
leer a,b,epsilon
x«-a;x14-a-»'epsilon
y4-f(x);y1^f(x1)
mientras x
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
44/72
A u vez, s« p uede desarrollar urt módulo para llevar a cabo la acción de g uardar el intervalo qu e contenga un cambio
x1*-z
y1
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
45/72
• VariabiM locales: y2
En efecto , las variables x, x 1 , y, y1 y epsilon' entran valores al procedimiento CalcularRaiz. procedentes del algoritmo
principal. OtȎtvese la ausencia de variables de entrada/salida, dado que ninguna variable es modificada por el
procedimiento a p ai tr d e un valor Inicial que este ut ice y devu elve, al algoritmo p rincipal, valores calculados por d mismo.
Sin embargo, la variable z. es una variable de salida, ya que es donde el procedimiento calcula y devuelve el valor de la
raíz, sin importarte el valor que tuviera a la entrada.
Nótese, asimismo, que la variable epsüon' podría convertiree en una variable interna al procedimiento si se calculara
dentro de este, en lugar de hacerto en el algoritmo principal.
Según esta división del conjunto de variables de un módulo, se observa q ue únicamente los tres primeros subconjuntos
realizan una función de comunicación de valores entre el módulo llamador y el llamado. Debido a etto, el cuarto
subconjunto no tiene ningún valor, en lo referente a la especificación de los parámetros concretos con los que ha de
tratMjar un módulo. Dichos parámetros están constituidos por el conjunto de valores que entran y/o salen del módulo a
través de las variables de entrada (E), salida (S) y entradaMalida (E/S).
La notación utilizada para expresar la definición de un procedimiento y sus parámetros es:
Procedimiento nombre (e l ek, s i si, h1 hm)
Declaración de variables locales y parámetros
Acdón
retomar
(véase apéndice de notación para más detalles)
donde nombre es el nombre del procedimiento, e1 ek son las k variables de entrada, s1 si son las I variables de
salida y h 1 , .... hm son las m variables de E/S.
Como es lógico suponer, normalmente, la acción del procedimiento es una acción compuesta. Como ejemplo se
muestra a continuación la definición del procedimiento CalcularRaiz:
Pro eed imle nto CalcularRaiz (x, x1 , epsüon',z)
Entradas:x. x 1 , epsüon'
Selidat:z
variable real z,x,x1,epsüon',y,y2
si y«0 e ntonces
zepsüon') y (y2 0) hacer
Guardartntervalo
z -{x ^ f2: y2«-f(z)
fin mientras
fin si
retomar
Obsérvese como la declaración de ta variable y2, aparece ahora en el procedimiento, debido a que es una variable
interna del mismo y ya no deb ería aparecer en el algoritmo principal. Y también la variable y q ue a parece declarada en
el procedimiento lo es, aunque en este caso permanecería otra variable y declarada en el algoritmo principal: pero esto
se sdarará más tarde.
La notación para rapizar un a llamada a un procedimiento será: nombre ( e 1 , . . . , ek . s i , . . . . s l ,h1 , . . . , hm), donde bastará
con citar el nombre del procedimiento, e indicar a continuación las variables adecuadas.
De esta fonna. el algoritmo principal del ejemplo queda como sigua:
(Algoritmo en la siguiente págirta)
Tema II -4
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
46/72
a b ep8íion
y1
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
47/72
Procad lmlcnto Guardarintervalo (z, x. x1 , y. y1 , y2)
Entradas:z,y2
E/S:x.x1,y,y1
varlabla raal Z,x,x1,y,y1,y2
si y2*y
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
48/72
Se observa, por lo tanto, que los parámetros reales pueden ser variables o constantes.
4.2.- Variables globales.
Hasta el momento se han clasificado las variables en relación con los módulos en dos clases: las que aparecen en
la lista de p arámetros, sirviendo para establecer la conexión entre módulos, y las locales, que son internas a un módulo,
y no son conocidas por ningún otro; sin embargo se ha de tener en cuenta una dase más: la dase de las variabies
globales, que son accesibles de sde cualquier módulo, sin necesidad de que estén definidas en el módulo que las emp lea.
as
variables globales deben e vitarse, ya que an ulan muchas de
las
ventajas de la program adón modular, al establecer
un punto de conexión entre módulos no expUctto, como lo es la lista de parámetros.
S.- Funcionas.
En este punto, se debe recordar que una llamada a procedimiento constituye, por si misma, una acdón del módulo
llamador. Existe, sin emt>argo, otro tipo de módulos cuya invoca dón no constituye un a a cd ón en si mism a. Los módulos
de este tipo se denominan funciones y, normalmente, engloban una serie de acd one s sobre una variable d e salida, que
da nombre a la fundón, en base a unos parámetros de entrada.
Como ejem plo, se muestra a continuadó n un diseAo con este tipo de módulos para el problema de calcular los valores
de la fundón: z »
x 2
• 2*x - y 3 • 5, para dos pares de valores (x,y] dados .
variables reales x1,x2,y1,y2,z1,z2
Itar x1,y1,x2,y2 Función real MiFundon (x.y)
z14-MiFundon(x1 ,y 1) vartables reales x.y
z2«-MiFuncion(x2,y2) MiFundon4-x'*2*2'x-y'*3*5
t«er lblrz1,z2 retomar
parar
A diferenda de los procedimientos, las fundones devuelven un valor cada vez que aparece en una expresión. Dicho
valor viene dado por la variable del módulo que tenga igual nombre que la fundón. Aunque se ha mendonado que.
normalmente, sólo devu elve este valor, también es po sible utilizar su lista de parám etros para induir variables d e salida
y entrada/salida.
Como notad ón alternativa, se pued e sustituir la ac dó n d e asignar un valor a la variable de igual nomtire que la fundón
y luego retomar, por la expresión devolver valor
Función real MiFundon (x,y)
variables reales x,y
devolver x 2*2*x-y 3*5
Obsérvese, en el ejemplo que se muestra, que las llamadas a fundones no se realizan citando su nombre como ac dón,
sino que este aparece envuelto en una expresión, en la cual actúa de forma similar a una variable. Oe h echo, se podría
establecer una reladón de los procedimientos y las fundo nes como abstracdones de los dos elementos de acd ón t)ásicos
de los algontmos; asi, un procedimiento correspondería a una instrucdón abstracta, mientras que una fundón vendría a
ser la abstracdón de un operador.
Por lo que se ha mostrado aquí, la programadón modular propordona una seria de ventajea al diseAo algorítmico:
• Clarifica los algoritmos, al ser menos extensos.
• Evita el tener que repetir la codificadón de una acdón que debe realizarse varías veces a lo largo del algorítmo.
• Permite, en una aplicadón compleja con muchos módulos, ir analizando aquellos cuyo fundonamiento es erróneo,
sin preocuparse de loa que fundonan correctamente.
• Evita la redunda nda de esfuerzos: si alguien ha preparado una rutina para hacer un a de rta tarea , este mismo módulo
podrá ser utilizado después por otros algontmos:
módu ha tnnsportabl»».
Tema II -7
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
49/72
Anldamlantos.
A lo largo da la sección anterior se ha mostrado como es posible dividir un algoritmo en módulos interconectabies.
En el primer nivel de anidamiento se encuentran los
o 3 y aparece de nuevo el módulo 2; y en el tercer
Una característica importante, a tener siempre
uerda desde q ué módulo y d esde q ué punto
ución. Por ahora, no se entrará en mayores ¡
IZLZ
~ ,. ,
~.~ZJ
Por último, una breve introducción a u na c aracterística de l diseAo modular, que potencia mucho la ejecución de cierto
EJERCICIOS
n »n'(n-1)*(n-2r(n-3r.. .*1 y 0 «1
Utiice la función del ejera do anterior para desarrollar un algoritmo que , dados do s núm eros naturales, m y n, siendo
m2n,
calcule el n* combinatorio C"=m /(n *(m-n)l)
Desarrolle una función Busca(RistraTrabaio,RistraBuscar.P) que dada una ristra. RistraTrabajo, una ristra a buscar,
Ristrabuscar, y una posición. P. encuentre la primera ocurrencia d Ristrabuscar en RistraTrabajo a partir de la posidón
P, devolviendo la posición donde comienza, o cero si no se encuentra.
Desarrolle un procedimiento Reem plazar(RistraT rbajo,RistraB uscar,R istraSustCo nO. Busq ue y todas las ocurrendas
de RistraBuscar en RistraTrabajo y las sustituya por RistraSust Si el parámetro Conf es verdadero deberá preguntar
antes de realizar cada sustitudón si la misma se lleva a cabo.
5.-
Escribir una fundó n que permita contar el número de palat)ras en una ristra. Las palabras pueden estar separadas
por u o o varios aspad os, y puede haber caracteres de p untuadó n, como comas, puntos, etc., que deben tratarse Igual
que los esp ades.
E7.-
Desarrolle una fundón Numero
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
50/72
EB.-
Desarrolla un procedimiento NuniARistra(Num,rNum), con Num real y rNum ristra, de tal manera que en rNum
construya una ristra de caracteres que representa el número pasado en Num.
E9.- Repita el ejerctcto E7 admitiendo números reales(aparta de los caracteres numéricos habrá que permitir un punto
decimal en la ristra).
E10.- Realizar una función que dado un vector de números enteros, ordena los pares d e mayor a menor en la derecha
del vector, y los impares de m enor a m ayor en la izaquierda (el cero es par), devolviendo la posición del menor númaro
par en el vector ordenado, o cero si no hay ninguno.
E11.-
Desarrolla un algoritmo que, dada una matriz, Mat de dimansión MxN y otra matriz, Cat da dimensión PxQ.
encuentre todas las ocurrencias da la matriz Cat en la Matriz Mat, escribiendo las posiciones de Mat donde empieza
cada ocurrencia de Cat Las ocurrencias pueden estar solapadas. El algoritmo debe evitar búsquedas innecesarias.
7.- Reeursividad.
Ya se conoce la posibilidad da que un procedimiento llama a otro procadimiantD. Esta es un concapto muy útil y que
no presenta ningún problema para el programador. Aquí se va a considerar un caso espacial de lo anterior, en el cual un
procedimiento puede llamarse a si mismo. Tal procedimiento sa dice que es recursivo. Se introducirá el concepto da
recursividad a través de varios ejemplos.
Un problema se presta particularmente bien a un proceso racursivo cuando pued a ser descompuesto en una sucesión
de acciones, alguna de las cuales es un subproblema similar al problema d e orige n, pero aplicado a un entorno reducido.
Toda la dificultad consiste en encontrar la solución correspondiente al entomo mínimo, que no utilizará recursividad. La
recursividad es costosa, pero da soluciones más concisas que las iterativas correspondientes.
Sin embargo, si la solución iterativa es simple de formular, no es aco nsejatila utilizar una solución recursiva, dado su
mayor coste. A menudo, un algoritmo en el cual la llamada recursiva es la última acción ejecutada no es más que una
solución iterativa disfrazada.
Por el contrario, existe una d as e de problemas para la cual es difícil dar una solución no recursiva. Son los problamas
en los que la búsqueda de la solución se realiza por intentos sucesivos, como e l recorrido d e un laberinto: hay que probar
un camino y, si no conduce a la solución, se vuelve abas y se intenta un nuevo camino. Estos problemas se presentan,
paiticularmente, en investigación operativa (recorridos de gratos) y en inteligencia artificial (exploración d e alternativas).
7.1.- Ejemplo: Cálculo del factorial.
Anteriormente se desarrolló un algoritmo que calculaba el factorial de un num ero. Q algontmo calculaba cada uno da
los multiplicadores sucesivos restando del último valor usado y se calculaban productos hasta que el multiplicador llegase
a ser 1. Este es un proceso iterativo.
Considérese
la
siguiente definición alternativa de factorial: I si n«K)
n »
[
n*(n-l) si n>0
En esta formulación, el factorial se define en témiinos de si mismo. En un principio, podría parecer que fuese una
definición drcuiar, pero no lo es, debido al caso especial que se produce cuando se verifica la condidón n«0 (condidón
de base).
3 > 3x2 Se aplica la definidón para el caso general
« 3 x 2 x 1 . - - -
«3x 2x1 x0 - - •. »
« 3x2x1x11 Se aplica la definidón para al caso particular por que se verifica la condidó n de base
« 6
Tema U ••
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
51/72
Se podría definir una función recursiva que calculara N de la siguiente forma:
Funden entera FactRec(N)
En trada s:N; Precondictón: N>sO
variable entera N
si NsQ entonces
devolver 1
si no
devolver (N*FactRec(N-1))
nn si
Véase gráficamente cómo se produciría la secuencia
de llamadas a la fundón:
Debe notarse que a excepción da la última linea del
esquema (que corresponde con la condición de base), el
valor de una linea no puede ot)tenerse hasta que al
resultado de la linea de abajo haya sido recibido. Asi, se
desciende por una cadena de llamadas hasta FactRec - l • -
T ra za da FACTRECURSIVE 4)
7.2.- Cálculo de la sucesión de fibonaccl.
A continuadón se muestra la computadón recursiva de la serie de Fitwnacd. La serie en si es muy simple:
0,1,1,2,3,5,8,13.21,... Los dos primeros términos son
y 1, cada uno de los demás términos se calcula como la suma de
los dos que le preceden ^=^,-*'V2-
Q problema de encontrar el n ésimo término de Fibonacd presenta una dará formuladón recursiva.
FIBONACCI N) •
FIB0NACCI N-1)+FIB0NACCI N-2) Si N>2
1 Sí N-2
O Si N-1
Fundón entera Fibonacct(N)
{Esta fundón calcula el elemento n ésimo de Fibonaca recursivamente. Se
supone N entero no negativo.)
Entrada-.N
variable entera N
si N«1 entonces
devolver O
si no
si N32 entonces
devolver 1
si no
devolver (Fibonacd(N-1)>Rbonacd(N-2))
fin si
fin si
Tema II -10
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
52/72
Puesto que la fundón contiene dos posibles llamadas recursivas la ejecución de la traza es m ás compleja que en el
caso de la factorial. Se obtiene un valor para la primera llamada recursiva igual qu e antes descendiendo por una cadena
de llamadas hasta llegar al valor base, a continuación se asciende la misma cadena obteniendo al igual un valor. Este
proceso se repite para la segunda llamada recursiva.
7.3.- Torres de Hanoi.
Un viejo problema que se puede resolver por recursión es el de las TO R R E S D E H A N O r. Hay tres varillas, la primera
de las cuales pasa por el centro d e u na serie d e N discos concéntricos. Cada uno d e eUos tiene un diámetro más pequeAo
que el que está justo debajo de e l. Las otras dos varillas están v acias. B problema consists en transferir todos lo* discos
a la varilla tres, un disco cada vez, de manera que nunca haya un disco mayor sobre uno menor.
La solución de mover N discos de la varilla 1 a la 3 consiste en mover N-1 discos de la varWa 1 a la 2. Seguidamente
se mueve un dsco de la 1 a la 3 y entonces se mueven los N-1 discos de la 2 a la 3 . Para resolver el problema, se
necesita un procedimiento para mover N discos de la varilla I a la J.
T tm a i l . 1 1
8/17/2019 ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf
53/72
Se llama al procadimiento, por medio de 'n-l(N,l,J) . El procedimiento com prueba si N ^L Si lo es, la solución es trivial;
nada mas que moverlo de la I a la J. Si N>1, la solución consiste en tres partes como la que se acaba de comentar,
siendo cada una de ellas una llamadas recursiva al procedimiento. La solución completa se muestra a continuación:
1) Pasar N-1 cfiscos de la varilla original a la varilla intermedia.
2) Pasar 1 disco de la varilla original a la varilla final.
3) Pasar N-1 discos de la varilla intermedia a la varilla final.
Nótese que en un desarrollo gen eral la varilla intermedia no es necesariamente la varilla 2, sino que se considera como
varilla intermedia la que no es ni la original ni la final.
Lógicamente el problema no se resuelve directamente con este mótodo, sino que es necesario un desglose de este
procedimiento hasta conseguir que todos los pasos se realicen con un sólo disco.
Por ejemplo: En e l caso de 3 (fiscos, si se
tiene el procedimiento TH (N ,0,D ), siendo N el
número de anillas, O la varilla original y O la
varilla de destino, el procedimiento sería
TH(3,1,3) el cual generaría otros 3
procedimientos: TH(2,1.2), TH(1.1.3) y
TH(2,2,3). A su vez, TH(2,1.2) generaría los
siguientes: TH(1,1,3), TH(1,1,2) y TH(1.3.2).
TH(1 ,1,3) no generaría ninguno pues el mismo
ya es un procedimiento de un sólo disco.
TH (2,2,3) genera loa siguientes: TH (1.2, 1), TH (1,2,3) y TH (1,1 ,3). Nótese que estos procesos coinciden con los realizados
en el procedimiento particular para 3 discos.
A fin de conseguir un algoritmo gen eral se h a de hallar una recurrencta en la que dados O y O proporcione la varilla
intermedia, y esta es: |s6 -O -0.
T H 3 , 1 , 3 )
T H 2 , 1 , 2 )
T H 1 , 1 , 3 )
T H 2 , 2 , 3 )
e
T H 1 , 1 , 3 )
T H { 1 , 1 . 2 )
T H 1 , 3 , 2 )
T H 1 , 2 , 1 )T H 1 , 2 , 3 )
T H 1 , 1 , 3 )
Procedimient