You are on page 1of 194
NC a Bona ee ESS TABLA DE MATERIAS PRESENTACION INFRODUCCION DE LOS TRADUCTORES PROLOG |. ESTRUCTURAS FUNDAMENTALES DE DATOS. Itroduccion Conceptos tipo de datos TiposCementaes de datos Tipos elementales ormalizados ‘Tpos subearpo Uterus say estructura resto Wariantes de ta estructura registro Ta estructura conjunto (oct) [Representacion de las estructures array, reiseoy conjunto 110. Represemaciin de fas erays 10:2. Representacton dels extructras registro 1103, Representactin dels confunos struct fichero secaenciat 1 Operadares clementales de fcheres 3: Ribtron con swetnutura 5. Textos L114 Un programa para edicin de ficheros Ejerion Referencias Bi 2 ORDENACION 21, Tatroduesion 22) Ordenacioa de arrays ‘Ordenacion por inserciin directa Ordenacion por seleceiin directa Ordenacion por inercambio directo ‘Ondenacion por insercin com ierementasdecrecentes rdenacion Sein wr airbol Ordenacion por partcion btenchin dela mediana 228. Comparacidn de fs metodos de ordenacin de arrays 23, Ordenaciom de icherosseovencales 2. Método de mezela directa, 232) Mescla natural 233. Mezea equilbrada mitiple 334. Ondenasian poston 233. Disraeid de fos tramos iniciles Bjercicios Referencias vu TABLA DE MATERIAS 4. ALGORITMOS RECURSIVOS a1 Introduccion Yh Cine no utiliza ls recursion \ Wor'jomplos de programas recursivos Algoritmo de wrtta tri 15. Tfprobloma de as ocho reins {1 problema de los atrimonios stables 11 11 problema de a seleceton Optima Tereieios 4. USTRIUCTURAS DINAMICAS DE INFORMACION 1. ‘tipos recursos de datos 1 Punioroso referencias 4A Ustas ncales, 5.1. Operacones basics 412) Utes ordenadae'y lista reorgantzables G5, Cra aplcacién: dndenaciontopoliica ag 44, TSiructurasdPbot A Defiicones» concepos Bésicos 1°02. Operactone basens con drbotes Binaries JA lsgueda e inserclon en arboles S49. ora on arbotes S43. Anois dela buoqueda e msercion en airtotes 148. Arboles equitbrados 442 invercin en aboles equilbrades SUS. Bora en irbote eguibrados 449. Arboles de bisqucda optimos 4410, “Presentacin deextructurasdnbol 45, ‘Aiboes multeamting 131 aboles 8 432. Arboles B binarias +46, Transtormaciones de claves (shashing») 46.) Blecclon dela fncin de iransformacion 452 Manejo decoliiones 43. Anil de Método de transformactén de claves Bacieios erencias S._ESTRUCTURAS ¥ COMPILADORES DE LENGUAJES 5.1. efinicon y estructura de los Iengusies Smits de eases 3.) Construceion de un grafo sintético 34. Consteuceton de un Snalizador para una sintaie dada 55. Construcctoa de un programa analizador drgido por tabla Su Unteaductor de BNF en estructuras de datos para digit tnabzadores 57. ELlenguaje de programacion PLO SK Unlanatizdar sintitieo para PLO 39. Tratamiento de errressintaeticos vil Un procesador PLO VI Generacon de obdigo ersiciow Referencias APENDICES, A EL CONJUNTO DE CARACTERES ASCH DIAGHAMAS SINFACTICOS DE PASCAL INDICE DE MA INDICE DE Pred RIAs HAMAS PRESENTACION Debido a la complejidad de los temas » al proceso de cambio constante en el campo de ta informética, las publicaciones en este sirea oscilan habitualmente entre Jos simples manuales de programaciin v la monografia excesivamente especializada, tn siendo, en cambio, jicil encontrar textos adecuados para la enseftanza de pro- sramaciin que aionen modernidad, generalidad profundidad en el tratamiento, cn fuarcionalidad didictica Un texto que cumple las condiciones anteriores, como lo demuestran tas siete ‘ediciones en menos de tres ais que se han Hlevado a efecto de su versién inglesa, «el presente libro del profesor Wirth, que incorpora los desarroltostiltimos, tanto 1 to referente a la gama de algoritmos que describe, como a su metodologia de construcin. Ta Facultad de Informética, que sigue una linea de apoyo a la creaciém de una ‘ruse auténticamente cientifiea de la informitica en nuestro pais, es consciente de a inportancia que tiene este libro tanto para la consulta de los profesionales como nara texto de ensefianza de programacién en los centros universtarias y, por ello, ww hat dudado en impulsar la iniciativa de los profesores Angel Alvarez Rodriguez v José Cuena Bartolomé de esta Facultad de realizar su version castellana, conside- ‘urudo la indudable calidad de esta publicacién, RAVAEL PORTAENCASA DECANO DE LA EACULTAD DE INFORMATICA DE MADRID 1 ESTRUCTURAS FUNDAMENTALES DE DATOS 1.1. INTRODUCCION Los modernos computedores digitales fueron inventados con Ia idea de facilitar y acelerar célculos complicados y onerosos de tiempo. En la mayoria de las aplicaciones, su capacidad de almacenamiento y acceso a grandes masas de informacién juega un papel dominante y, por ello, se considera esta su carac- teristica primordial, es decir, su capacidad para realizar calculos aritméticos ha Megado a tener escaso relieve en muchos casos. En todos estos casos, Ia gran masa de informacién que es necesario procesar representa, en cierta forma, una abstraccién de una parte del mundo real. La informacién utilizable por el computador consiste en una seleccién de daros dela realidad, precisamente el conjunto de datos que se considera relevante para el problema en estudio, y a partir del cual se cree que pueden obtenerse los resulta- dos deseados. Los datos representan una abstraccién de la realidad en el sentido tic que ciertas propiedades y caracteristicas de los objetos reales se ignoran por- «que no interesan para el problema concreto que se estudia. Por ello, una abstrac- cin es, también, una simplificacién de la realidad. Puede tomarse como ejemplo el fichero de personal de una empresa. Cada cmpleado se representa (en forma abstracta) en este fichero por un conjunto de slatos de interés bien para la empresa o para sus procesos contables. Esta infor- tmacién puede incluir datos de identificacién del empleado, por ejemplo, su nom- Ihre y sueldo, Pero, seguramente, no contendra datos sin interés tales como el color del pelo, peso y estatura. Al resolver un problema, s¢ utilice o no el computador, es necesario elegir una mn de la realidad, es decir, definir un conjunto de datos para representar li situacién real, Esta eleccién debe estar guiada por el problema a resolver. A con- tinuacién, debe seleccionarse la forma de representar esta informacion, Esta » ESTRUCTURAS FUNDAMENTALES DE DATOS segunda eleccién debe hacerse en base al instrumento con que va a resolverse el problema, por ejemplo en base a las posibilidades concretas que oftece el com- initador. En muchos casos, estas dos etapas de dis endienies una de otra La eleccién de ta representaciOn de los datos es a menudo bastante dificil y hno esté determinada exclusivamente por los instrumentos disponibles. Deben tenerse siempre en cuenta las operaciones a realizar con los datos. Un buen ejem- bio ilustrativo de esto es la representacién de los ntimeros que son, a su Vez, abs- twacciones de propiedades de objetos a caracterizar. Sila adicién es la tnica (0 al ‘ncnos predominante) operacién a realizar, una buena forma de representar el wvinero n es escribir n barras. La regla de adieién, con esta representacidn, es real- swente obvia y muy sencilla, La numeracién romana se basa en el mismo principio sencillo y Tas reglas para sumar son igualmente simples para nimeros pequeiios, tin cambio, Ia numeracién arabe requiere reglas que estén lejos de ser obvias (para niimeros pequetios) y por tanto deben ser aprendidas de memoria, Sin «mbargo, la situacin se invierte cuando se considera la suma de grandes niimeros «la multiplicacion y division. La descomposiciéa de estas operaciones en otras ‘nas simples es mucho mas fécil en el caso de la numeracién arabe, debido a su principio sistemitico basado en el distinto peso posicional de los digitos. Es bien sabido que fos computadores usan una representacién interta basada cn digitos binarios (bits). Esta representacién no es viable para las personas de- bdo al niimero, frecuentemente clevado, de digitos que son necesatios pero, «n cambio, es muy adecuada para lo circuitos electrénicos porque los dos valores ‘Vy | pueden representarse en forma conveniente y fiable por la presencia o ausen- wit de corrientes eléctrieas, carga eléctrica y campos magnéticos, A partir de este ejemplo, puede verse también que el problema de representa- «in, a menudo, abarca varios niveles de detalle. Dado el problema de representar, ior ejemplo, la posicién de un objeto, ln primera decisién puede conducir a la vleccin de una pareja de niimeros reales que sean, por ejemplo, sus coordenadas varlesianas o polates. La segunda decision puede llevar a una representacién wn coma flotante, donde cada nimero real se describe por un par de niémeros sateros que representan una fraction fy un exponente ¢ al que se eleva dcter- sinasdt base (por ejemplo, x ~ f- 2"). La tercera decisién, basada en el conoci= snicito de que los datos se almacenarin en un computador, puede conducit a una ‘presentacién binaria posicional de los niimeros enteros y la decisi6n final podria ot representar los digitos binarios por la direecién del flujo en un dispositive snapmetico de almacenamiento. Evidentemente, Ia primera decisién en esta ca- «lena est prineipalmente influida por el planteamiento del problema y las si wirales son cada vez més dependienies de la herramienta a utilizar y su teeno- tipua. Asi pues, dificiimente podra pedirse a un programador que decida sobre ls forma de representar los nimeros que deben emplearse o, incluso, sobre las “snteristicas del dispositive magnético de almacenamiento, Estas «decisiones «lc hajo nivel» pueden encomendarse a Tos disefiadores de equipos que tienen a st “Inpwsicidn ti ms completa informacién sobre la tecnologi © no son totalmente inde- ‘actual, con fa que INTRODUCCION 3 pueden adoptar una decisiOn sensata que, en general, seré aceptable para todas (0 casi todas) las aplicaciones en que intervengan numeros. En este contexto adquiere significado el concepto de lenguajes de programa- cién, Un lenguaje de programacién representa un computador abstracto capaz de entender los términos'utilizados en este lenguaje, que pueden ser mas abstrac- tos que los de los objetos utilizados por la maquina real. De esta manera, el programador que utiliza este tipo de lenguaje de «alto nivel» estara liberado (e impedido) de tener que considerar cuestiones relativas a la representacion de los nimeros, caso-de-que el niimero sea un objeto clemental de este fenguaje. La importancia de utilizar un lenguaje que ofrezca un conjunto conveniente de abstracciones biisicas, comunes a la mayoria de los problemas de proceso de datos, reside principalmente en Ia fiabilidad de los programas resultantes. Es mds ficil diseilar un programa razonando sobre los conceptos familiares de nnlimeros, conjuntos, sucesiones y repeticiones que razonando con bits, «pala- bras», y saltos de secuencia. Desde luego, un computador real representara todos los datos, ya sean miimeros, conjuntos 0 sucesiones como grandes masas de bits. Pero esto carece de importancia para el programador, mientras no tenga que pre- ‘ocuparse de los detalles de representacién de las abstracciones que ha elegido pueda estar seguro de que la representacién elegida por el computador (o el com- pilador) es adecuada para sus fines. Cuanto més préximas son las abstracciones a un computador dado, mas Ficil Ie resutta al ingeniero o técnico de implantacién del lenguaje la eleccibn de fa forma de representacién, y mas alta es la probabilidad de que una eleccién iiica sea adecuada para todas (0 casi todas) las aplicaciones posibles. Este hecho de- termina limites definidos al grado de abstraccién a realizar a partir de un com- putador real dado, Por ejemplo, no tendria sentido incluir objetos geométricos, ‘como clementos bisicos de datos, en un lenguaje de uso general, ya que su ade ‘cuada representacion dependerd, en forma importante, debido. su inherente com- tilejidad, de las operaciones. realizar con tales objetos, La naturaleza y frecuencia ile estas operaciones, sin embargo, sern desconocidas para el disefiador de un lenguaje de uso general y de su compilador y, por tanto, cualquier eleccién que uulopte puede no ser apropiada para alguna de las posibles aplicaciones. Las consideraciones anteriores han determinado en este libro la eleccién de la notacion a utilizar en la descripcién de los algoritmos y sus datos. Por un lado, .© quiere utilizar nociones familiares en matemiticas, (ales como niimeros, con- iuntos, sucesiones y similares, miis que entidades dependientes del computador tales como secuencias de bits. Igualmente interesa utilizar una notacién para la nyse se conozea la existencia de compiladores eficientes. Tan inadecvado es utili- sar lenguajes fuertemente orientados a la maquina y, por tanto, fuertemente de- pendientes de ella, como describir los programas en una notacién abstracta sine deje penilientes de resolver los problemas de representacién. EL lenguaje de programacion PASCAL ha sido disetado con la intencién de rieontrar un compromise entre ambos extremos y se utiliza a lo largo de todo este libro [Ly LS]. Hste lenusje se ha implintado satisfactoriamente en varios 4 ESTRUCTURAS FUNDAMENTALES DF DATOS computadores y se ha comprobado que su notacidn es lo suficientemente pré- xima a las miquinas existentes como para que las caracteristicas elegidas y su tepresentacién, puedan explicarse en forma clara, El lenguaje es también sufi- cientemente proximo a otros lenguajes, en particular a ALGOL 60 como para ‘que las Tecciones explicadas aqui puedan aplicarse, igualmente bien, para uso de estos lenguajes. . 1.2. CONCEPTO DE TIPO DE DATOS En mateméticas se acostumbra clasificar las variables de acuerdo con ciertas caracteristicas importantes. Se hacen distinciones claras entre variables ldgicas, reales y complejas, 0 entre variables que representan valores individuales, con- juntos de valores, conjuntos de conjuntos, o entre funciones, funcionales, con: juntos de funciones, y asi sucesivamente, Esta nocién de clasificacién es impor- tante en igual medida, si no mas, en proceso de datos. Se adoptard de aqui en adelante el principio basico de que cada constant, variable, expresién o funcién es de wn tipo determinado, Este tipo caracteriza csencialmente el conjuto de valores al que pertenece una constante o sobre el que puede tomar valores una variable 0 expresion, o cuyos elementos pueden ser generados por una funcién, En los textos matemiticos el tipo de una variable se deduce, generalmente de fa forma de escritura, sin tener en cuenta el contexto; esto no es factible en los Programas, ya que, normalmente, s6lo hay un tipo de escritura utilizable en los ‘cquipos de proceso de datos (alfabeto latino). Debido a esto, la norma comén- mente aceptada es que el tipo asociado se manifieste explicitamente en una deela- racién de la constante, variable o funcién y esta declaracién preceda en el texto ‘ala utilizacién de cada constante, variable 6 funcién. Esta norma es especialmente ‘oportuna sise tiene en cuenta que un compilador tiene que elegir la representacién del objeto en la memoria del computador. Evidentemente, la capacidad de me- ‘moria asignada a una variable debe decidirse de acuerdo con el tamafio del campo dle valores que la variable puede adoptar. Si esta informacién es conocida por el compilador, puede evitarse la Hamada asignacién dinamica de memoria, Esta «8 muy frecuentemente la clave de una ejecucién eficiente de un algoritmo. Loa tant, les caactersticas principales del conepto de tio que ee utiliza «to largo de este texto, y que estén incorporadas en el lenguaje de programacién PASCAL, son ls siguientes [12]. iste ce oe |. Un tipo de datos determina el conjunto de valores al que pertenece una constante, 0 que puede tomar una variable o expresién, o que pueden ser nenerados por un operador funcién. 2. 111 tipo del vator identificado por una constante, variable, o expresién puede deduciese de su forma o de su declaracién sin necesidad de sjecutar cl proceso. CONGEPTO DE TIPO DE DATOS 5 3. Cada operador o funcién presupone argumentos de un determinado tipo y produce un resultado también de un tipo determinado. Si un operador ‘admite argumentos de varios tipos (por ejemplo, se utiliza + igualmente para tniimeros enteros y reales), el tipo del resultado puede determinarse a partir de reglas especificas’ de! lenguaje. Por tanto, un compilador puede utilizar esta informacién sobre tipos para comprobar la compatibilidad y observancia de normas de las distintas cons- trucciones de un programa, Por ejemplo, puede detectarse, sin ejecutar el progra- ima, la asignacién de un valor de tipo boolean (Jégico) a una variable de tipo aaritmético (real), Este tipo de redundancias en el texto de un programa es muy Util en el desarrollo de los mismos y debe considerarse la principal ventaja de los hhuenos lenguajes de alto nivel sobre los lenguajes en cédigo de maquina (0 en- sambladores). Evidentemente, los datos acaban representandose pot un gran imimero de digitos binarios, independientemente de que el programa haya sido concebido inicialmente en un lenguaje de alto nivel, utilizando el concepto de tipo, «en un lenguaje ensamblador que no lo tenga en cuenta. Para el computador, la memoria es una masa homogénea de bits sin estructura aparente, Pero ¢s, precisamente, esta estructura abstracta, la tnica que permite a los programadores reconocer significado en el mondtono paisaje de la memoria de un computador, La teoria presentada en este libro y el lenguaje de programacién PASCAL cspecifican ciertos métodos de definicién de tipos de datos. En la mayoria de los casos se definen nuevos tipos de datos en funcién de otros definidos previa- mente. Los valores de tal tipo son usualmente agrupaciones de valores compo- nentes de los tipos constituyentes definidos previamente y se dice que estin estruc- turados. Si solamente hay un tipo constituyente, esto es, si todos los componentes son del mismo tipo, entonces éste se denomina tipo base. El mimero de valores distintos que pertenecen a un tipo 7 se llama cardina- lidad (0 cardinal) de T. La cardinalidad proporciona una medida de la cantidad de memoria que se necesita para representar una variable x de tipo 7 y esto iiltimo se expresa de la forma x: T. ‘Como los tipos constituyentes, a su vez, pueden también estar estructurados, pueden construirse verdaderas jerarquias de estructuras pero, obviamente, los ‘componentes iiltimos de una estructura deben ser atémicos. Por esto, también ces necesaria una notacién para introducir tales tipos elementales, no estructura- dos. Un método directo es el de emumeracién de los valores que van a constituir cl tipo. Por ejemplo, en un programa que trate figuras geométricas planas puede introducirse un tipo elemental llamado forma cuyos valores pueden designarse con los identificadores: rectdngulo, cuadrado, elipse, circulo. Pero ademas de tsstos tipos definidos por el programador debe haber algunos tipas normalizados (o estindar) que se Taman tipos predefinidos: incluirén frecuentemente los vulares numéricas y Higicas. Si existe un orden entte los valores individuales el Lipo se dive que est ordenado o que es un escalar, En PASCAL se supone que foxlos los tipos no esiructurados estin ordenados: en el caso de enumeracién 6 ISIRUCTURAS FUNDAMENTALES DE DATOS “xplivita, los valores se suponen ordenados segiin la secuencia de enumeracién. Con este instrumento es posible definirtjpos elementales y consttuir agru- twcinnes, tipos estructurados, hasta el grado de complejidad que se desee, En li pyfictics-no es suficiemte tener s6lo un método general de combinar los tipos onstituyentes en una estructura. Teniendo en cuenta os problemas practicos «le tepresentacién y utilizacién, un lenguaje de programacién, de uso general, sIche ofrecer varios métodos de estructuracién de datos. Matemiticamente pueden «1 tos equivalentes; se diferenciarén en los operadores utilizados para cons- tinue sus valores y para seleceionar componentes de estos valores. Los métodos Inisivos de estructuracién presentados agul son el array'*, el registro, el conjunto ¥ el fickero secuencial. No se definen habitualmente estructuras mas compli« caus como tipos «estiticos»; éstas son, més bien, generadas «dindmicamenten sIurante la ejecueién del programa en la cual pueden variar de tamaio y de forma Hales estructuras son el tema del capitulo 4 e ineluyen listas, anillos,arboles y yrtos Finitos genéricos. {Las variables y ls tipos de datos se introducen en un programa para ser uti ‘aulos eH proceso, A este fin debe disponerse de un conjunto de operadores. Tal ‘amo sueéde con los tipos de datos, los lenguajes de programacion ofrecen un cierto nGimero de operadores clementales normalizados (at6micos) y un mimero «le metodos de estructuracién, de forma que pueden definirse operaciones com blejas en funcién de los operadores elementales. La composicién de operaciones w considera, a menudo, la tarea fundamental del arte de programar. Sin embar- 10, lo sucesivo, se pondré en evidencia que una apropiada composicién de los datos es igualmente fundamental y esencial. {ns operadores bisicos mas importantes son la comparacién y la asignacién, «ss decir, fa comprobacién de igualdad (y de orden en el caso de tipos ordenados) ¥ lu instruceién que obliga a la igualdad. La diferencia fundamental entre estas «los operaciones se pone de relieve mediante la distincién clara en su notacion a lo Lingo de este texto, aunque, desgraciadamente, esta distincién aparece osci~ ‘evida en lenguajes tan amptiamente usados como el FORTRAN y PL/I que uti- isan ef signo de igualdad como operador de asignacidn. Comprobacién (test) de igualdad: x = y Asignacién a x ximy Fstos operadores fundamentales se definen para la mayotia de los tipos de status, pero hay que advertir que su ejecucién puede involucrar una cantidad tmporiante de esfuerze de proceso si 10s datos son extensos y altamente estruc- tos, Adtemivs del test de igualdad (u orden) y el operador de asignacién, existe * nada tcc de eta palabra yt diticua de encontrar un teeing eastellan adc ua 4 ati esl Fa is pa ingles qe, pow al ex icenteene fy 1h goes de inst Ne doy P TIPOS ELEMENTALES DE DATOS 7 tuna clase de operadores fundamentales, definidos implicitamente, lamados ‘operadores de transferencia, Estos aplican unos tipos de datos en otros. Son particularmente importantes en relacién con los tipos estructurados. Los valores estructurados se generan a pagtir de sus valores correspondientes por los Ilamados constructores y los valores componentes son extraidos de los valores estructurados ‘mediante los llamados selectores. Constructores y selectores son, asi, operadores de transferencia que aplican los tipos constituyentes en los extructurados y rec procamente. Cada método de estructuracién tiene su pareja particular de cons- tructores y selectores.que se diferencian claramente por su notacién. Los tipos de datos clementales estandarizados también requieren un con- junto de operadores primitivos normalizados. Asi, junto con los tipos de datos normalizados de ntimeros y valores ldgicos también se introducen las operaciones convencionales de aritmética y légica proposicional. 1.3. TIPOS ELEMENTALES DE DATOS En muchos programas los niimeros enteos se utlizan cuando no estin invo~ lucradas propiedades numéricas y cuando cada entero representa una eleccién centre un pequefio nimero de alternativas. Para estos casos, e introduce un nuevo {ipo elemental, no estructurado, definido por enumeracién del conjunto de todos los posibles valores ¢,, Ca, «--+ Ex type T= (even 2) | ap La cardinalidad de T es card(T) ~ n. Tse MPLos type forma = (rectangulo, cuadrado, elipse, circulo) type color = (rojo, amarillo, verde) type sexo ~ (masculino, femenino) type boolean ~ (false, true) - type diasemana = (lunes, martes, miercoles, jueves, viernes, sabado, domingo) type moneda = (peseta, franco, marco, libra, dolar, lira, rublo, eruzeiro, yen) type destino ~ (infierno, purgatorio, cielo) type vehiculo = (ren, autobus, automovit, barco, avion) type graduacion = (soldado, cabo, sargento, teniente, capitan, comandante, coronel, general) type objeto ~ (constante, tipo, variable, procedimiento, funcion) type estructura ~ (fichero, array, registro, conjunto) type concn (manual, descargads, prided, dsalineada) La definicidn de tales tipos introduce no s6lo un nuevo identificador de tipo 1 ESTRUCTURAS FUNDAMENTALES DE DATOS sino también el conjunto de identificadores que designan los valores de este nuevo ‘ipo, Estos identificadores pueden ser usados como constantes a Io largo del programa con Io que aumenta de una manera considerable su inteligibilidad, por cjemplo, se introducen las variables s, d, g y b. var s: sexo var d: diasemana var g: graduacion var b: boolean cs posible escribir las siguientes asignaciones = masculine - domingo = comandante := true wae videntemente estas instrucciones son mucho mas informativas que sus corres pondientes en cédigo numérico: si=l d:=7 g 6 2 resultantes de suponer que las variables s, d, gy b estuvieran definidas como de lipo integer y que, a las constantes de los tipos anteriores, se hubiera hecho co- responder el ntimero natural indicativo de su situacién en el orden de enuimera: cin, Ademas, un compilador puede controlar el uso indebido de operadores arit- Inigo con tales variables, definidas como no numérias, asi como sucede en instruecién Sin embargo, si se considera un tipo como ordenado, es razonable introducir Iunciones que generen el predecesor y el sucesor de su argumento. Estas se deno- ‘minan pred(x) y succ(x). El orden de los valores de T se define por la regla 10, p= false y q= true. El tipo normalizado char comprende el conjunto de caracteres imprimibles. Vesgraciadamente, no existe ningin conjunto normatizado de caracteres gene- ralmente aceptado para todos los equipos de proceso de datos. Por ello el adjetivo «normalizadon puede ser equivoco en este caso; debe entenderse camo norma- lizado en el equipo de proceso de datos en el que se va a ejecutar determinado programa. E1 conjunto de caracteres definido por la International Standards Organi- vation (J.S.0.) y, en particular, su version americana ASCII (American Standard Code for Information Interchange), es probablemente el cédigo mas amplia- mente admitido. Por ello este cédigo se presenta en el Apéndice A, Consta de 95 caracteres de impresién (grificos) y 33 caracteres de control; estos tltimos se ntilizan principalmente en transmisién de datos y control del equipo de im- presion, Un subconjunto de 64 caracteres grificos (solo las letras maytisculas) se utiliza de forma generalizada y se denomina el cddigo restringido ASCI. Para disefar algoritmos que trabajen con caracteres (es decir, valores de tipo char) que sean independientes del equipo de proceso de datos especifico, es con- veniente hacer la hipétesis de que todos los conjuntos de caracteres tienen ciestas propiedades obligatorias 1. 1 tipo char contiene las 26 letras del alfabeto latino, los diez digitos de la numeracién arabe y cierto némero de otros caracteres graficos, como, por iemplo, tos signos de puntuacién Fox subconjuntos de letras y niimeros estin ordenadas y son coherentes, wos decies CA 0} i: =0y 4? (15) i+ 1 until (@{i] = 2) V (= N): if ali] # xthen eno estd este elemento en a» Puede realizarse wha’ variante de este programa utilizando la técnica del vvntinela apostado al final del array. El objetivo de este centinela es permitir ‘una simplificacién de Ia condicién que seftala el final de la iteracién. vara: array(1...V + 1of 7; [Nb AJ: = xy (1.16) repeat i: = 1 + Lunt {i} = x; if] > N then «no estd este elemento en a» 1a asignacion a[W + 1]: —.x es un ejemplo de actualizacién selectiva, es de- ‘su. de alteracién de un componente particular de una variable estructurada, {hn condicién esencial que se verifca, cualquiera que sea el nimero de veces que w repita la instruccion i: =i + 1, es Ulex, para j= 4y...5i-1 y esto en ambas versiones (1.15) y (1.16). Esta condicién se denomina por ello ww invariante del cielo. Ia bisqueda puede, desde luego, acelerarse considerablemente silos elementos satin ya ordenados, En este caso el método de trabajo mas usual es el de division tepetida en partes iguales del intervalo en que debe buscarse el elemento. Este {uct se conoce con el nombre de hiisqueda binaria 0 de biseccién y se muestra vw (1.17), Bn cada iteracién se divide en partes iguales el intervalo entre los in- wes Zy J. EI nimero necesario de comparaciones es, por ello, como mucho Hon (ND) d= ij jr Ny repeat k= (i +f) div2; an ix > alk] then i: = k + 1 else j: wntil (afk] = 3) VG> A) {hn este caso la condicién invariante a la entrada de la instruccién repetitiva es ath]

You might also like