ALGORITMOS Y ESTRUCTURAS DE DATOS.pdf

Embed Size (px)

Citation preview

  • 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