Está en la página 1de 30

Gu Didctica de Programacin II a a o

4a edicin o

Jos Ignacio Mayorga Toledano e Fernando Lpez Ostenero o

Curso 20062007

Indice general
1. Lgica y Especicacin o o 1.1. Introduccin y motivacin . . o o 1.2. Lgica de Predicados . . . . . o 1.3. Predicados y formalizacin de o 1.4. Especicacin pre-post . . . . o 5 5 5 7 8 10 10 11 14 15 18 21 21 21 23 24 25 26 28 28

. . . . . . . . . . . . . . enunciados . . . . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

2. Recursividad 2.1. Induccin . . . . . . . . . . . . . . . . . . . o 2.2. Vericacin formal de programas recursivos o 2.3. Diseo de programas recursivos . . . . . . . n 2.4. Tcnicas de inmersin . . . . . . . . . . . . e o 2.5. Clculo de la eciencia en programas a recursivos . . . . . . . . . . . . . . . . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . . . . . . . . . . . .

3. Iteracin o 3.1. Introduccin . . . . . . . . . . . . . . . . . . . o 3.2. Semntica Iterativa . . . . . . . . . . . . . . . a 3.3. Bucles y concepto de invariante . . . . . . . . 3.4. Esquema general y vericacin formal de o bucles . . . . . . . . . . . . . . . . . . . . . . 3.5. Derivacin formal de programas . . . . . . . . o 3.6. Clculo de eciencia en programas iterativos . a

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4. Transformacin de Recursividad en Iteratividad o 4.1. Transformacin nal . . . . . . . . . . . . . . . . . . . . . . . . . . . o

Curso 2006-2007

Introduccin o
La presente Gu Didctica pretende ser un apoyo al estudio de la asignatura, a a completando y complementando (pero en ningn caso substituyendo) el material u ya existente en forma bibliogrca y la Coleccin de Problemas, a la que se hace a o constante referencia. El propsito concreto del presente documento estriba en ayudar al alumno a o enfocar y dirigir el estudio de la disciplina de la Metodolog de la Programacin, tal a o y como lo plantea la asignatura de Programacin II, marcando pautas para abordar o la comprensin de los distintos temas mediante la signicacin de los conceptos o o ms importantes, planteando ejercicios introductorios, recomendando la realizacin a o de otros ejercicios o problemas complementarios, o haciendo notar los errores ms a frecuentemente cometidos en los ditintos puntos tratados. Dichos puntos, que dividen las tcnicas estudiadas en la asignatura en temas, e son los siguientes: I. Lgica y Especicacin o o II. Dise o Recursivo n III. Dise o Iterativo n IV. Transformacin RecursivoIterativo o A su vez, cada tema se dividir en una serie de unidades para facilitar la proa gresin en el estudio de los diversos conceptos y tcnicas de los que ste trate. La o e e estructura de cada unidad o seccin ser la siguiente: o a 1. Introduccin, que dar cuenta de lo que se va a explicar as como de su o a utilidad en el conjunto de la asignatura. 2. Conceptos fundamentales, donde se detallar cules son los principales a a conocimientos que se deben adquirir con el estudio de la unidad. Se recomendarn las fuentes bibliogrcas y los cap a a tulos o secciones en stas para su e estudio. 3. Ejercicios y ejemplos. En este apartado se darn ejemplos y se propondrn a a ejercicios sobre los conceptos previamente detallados, con los que se relacionarn. Los ejercicios se enunciarn y desarrollarn en la Coleccin de Problea a a o mas, en la parte dedicada a Ejercicios, donde habr algunos resueltos y otros a propuestos. 4. Errores ms habituales. Se detallarn aqu algunos de los fallos ms coa a a munes en la aplicacin prctica de los conceptos propuestos. o a 5. Cuestiones propuestas. Sern preguntas de autocontrol que el alumno dea ber ser capaz de contestar una vez estudiada la unidad. a 6. Temporizacin y requisitos. Aqu se dar una idea del tiempo que ser o a a razonable emplear en el estudio de la unidad, adems de enumerar los conoa cimientos necesarios para su comprensin. o Ntese que cuando se detallan los conceptos fundamentales no se hace por excluo sin, o sea, estos no son los unicos conceptos que se deben aprender en el marco del o

Gu didctica de Programacin II a a o

tema o apartado que se est estudiando, sino los ms relevantes. Por lo tanto, cada e a tema ha de estudiarse y comprenderse en su completitud, teniendo en cuenta, sin embargo, que es fundamental llegar a saber utilizar adecuadamente los conceptos enumerados bajo tal ep grafe. Es importante igualmente dejar claro que aqu se propone una forma de estu dio que, si bien es adecuada, no es unica, como no lo son tampoco las cuestiones planteadas o los ejercicios propuestos. Esto quiere decir que pretendemos aportar un complemento que facilite y apoye el estudio de la materia, mas no pretendemos realizar el documento denitivo al respecto, sino que el alumno debe utilizarlo con esp ritu cr tico no asumiendo ni su infalibilidad ni su completitud, cualidades que el Equipo Docente no espera alcanzar con el presente documento. La Gu Didctica se completa con la Coleccin de Problemas y con el Cuaa a o dernillo de Prcticas en cuanto al material producido por el Equipo Docente de a la Asignatura para el estudio de la misma, y a su vez se apoyan y complementan al texto base ([Pea93], [Pea97] o [Pea05]) y al texto alternativo ([Balc93]) que n n n sirven de fundamento terico para el estudio de esta disciplina. o

Cap tulo 1

Lgica y Especicacin o o
1.1. Introduccin y motivacin o o

En este apartado nos proponemos motivar el estudio de la Especicacin Formal o de Algoritmos como base de la materia completa que nos atae: la programacin n o como una actividad de desarrollo y diseo disciplinada y precisa. n El tema que nos ocupa, la Lgica de Predicados y Especicacin de Algorito o mos, trata de establecer el punto de partida para el diseo de algoritmos tales que n sea demostrable que cumplen el objetivo para el que fueron desarrollados. Comoquiera que los algoritmos, al ejecutarse, transforman un estado inicial en un estado nal, especicar consistir en poder identicar un conjunto de estados iniciales posia bles a partir de los que el algoritmo terminar en uno de los estados nales objetivo a descritos. Es decir, especicar signica jar el resultado de un algoritmo a priori, siempre que se cumplan ciertas condiciones iniciales. Eso nos permitir comparar a el resultado previsto con el resultado obtenido de la ejecucin del algoritmo. Pero, o sobre todo, la especicacin supondr para nosotros, y en el mbito de la asignatura o a a de Programacin II, una gu para el diseo de algoritmos. A partir de dicha gu o a n a, tanto el implementador de un algoritmo como cualquiera de los usuarios de ste, e sabrn a qu atenerse. Es ms, lo sabrn independientemente de la implementacin a e a a o concreta, lo que deja libertad al implementador para elegir la que sea ms adecuada a a sus propsitos. o La especicacin formal de un algoritmo debe ser precisa (no ambigua) y, en la o medida de lo posible, concisa. Esta es la razn para usar la Lgica de Predicados o o como lenguaje para especicar. A este respecto, hemos de decir que, si bien es recomendable cursar a la par que Programacin II, la asignatura de Lgica Matemtica, o o a la bibliograf propuesta es autosuciente. a Para una introduccin y motivacin del tema en la bibliograf vanse [Balc93, o o a, e Tema I, Especicacin y Correccin, pg(s) 1 a 4] y [Pea93, Tema 2, Especicao o a n cin de Problemas, pg(s) 21 a 24], [Pea97, Tema 2, Especicacin de Problemas, o a n o pg(s) 25 a 28] o [Pea05, Tema 2, Especicacin de Problemas, pg(s) 29 a 32] a n o a

1.2.

Lgica de Predicados o

Introduccin o
qu se va a estudiar? e Sintaxis y semntica de la lgica de predicados para expresar las precondicioa o nes y postcondiciones de las sentencias y de los algoritmos diseados. n 5

Gu didctica de Programacin II a a o

Semntica de un predicado y reglas de la lgica de predicados para la inferena o cia. qu utilidad tiene? La utilidad de este apartado es la de introducir la lgie o ca de predicados como herramienta formal para la especicacin y vericacin de o o algoritmos. Es util que el alumno lea detenidamente la introduccin tanto del texto de la o asignatura ([Pea93] o [Pea97] o [Pea05], [Balc93] o ambos autores) como del n n n cap tulo correspondiente a este apartado en el libro de Ricardo Pea (en cualquiera n de sus ediciones) con el n de ubicar correctamente los conceptos de este cap tulo en el contexto de la asignatura.

Conceptos fundamentales
Frmula lgica y predicado lgico [Pea93, Def. 2.1, pg(s) 25] [Pea97, o o o n a n Def. 2.1, pg(s) 29] [Pea05, Def. 2.1, pg(s) 33] a n a Variables y cuanticadores. Semntica, satisfactibilidad, consecuencia lgica y equivalencia: [Pea93, Def. a o n 2.7 y s.s., pg(s) 30 y 31], [Pea97, Def. 2.7 y s.s., pg(s) 36 - 38] o [Pea05, a n a n Def. 2.7 y s.s., pg(s) 40-42] a Conjunto de estados denidos por un predicado. [Pea93, Def. 2.14, pg(s) 34], n a [Pea97, Def. 2.12, pg(s) 41] o [Pea05, Def. 2.12, pg(s) 46] n a n a Fuerza y debilidad relativas de un predicado respecto a otros. [Pea93, Def. 2.15, n pg(s) 35], [Pea97, Def. 2.13, pg(s) 42] o [Pea05, Def. 2.13, pg(s) 47] a n a n a

Ejercicios y ejemplos
[Pea93, Ejemplo 2.2, pg(s) 26], [Pea97, Ejemplo 2.2, pg(s) 31] o [Pea05, n a n a n Ejemplo 2.2, pg(s) 35] a [Pea93, Ejercicio 2.2, pg(s) 35], [Pea97, Ejercicio 2.2, pg(s) 42] o [Pea05, n a n a n Ejercicio 2.2, pg(s) 47] a Ejercicio 1.1.1 [Col2k3, pg. 10] a

Errores ms habituales a
El concepto de predicado ms fuerte ms dbil debe quedar claro. De no ser a o a e as se comprenden mal algunas explicaciones referentes a cmo hallar invarian o tes o precondiciones debilitando la postcondicin, as como las demostraciones o a la hora de vericar la correccin de los algoritmos, ya que stas se apoyan o e en cadenas de implicaciones de predicados. Confundir la implicacin de predicados con la igualdad. o

Cuestiones propuestas
Qu relacin lgica existe entre predicados cuyos conjuntos de estados tienen e o o interseccin no nula?. Y con interseccin nula? o o

Curso 2006-2007

Temporizacin y requisitos o
La comprensin de la teor y la solucin de los ejercicios deber ocupar 3 4 o a o an o horas de estudio.

1.3.

Predicados y formalizacin de enunciados o

Introduccin o
qu se va a estudiar? e Cmo expresar un enunciado descrito en lenguaje natural mediante Lgica de o o Predicados. Cmo denir predicados y qu propiedades tienen los distintos constructores o e y los predicados resultantes. Cmo se relacionan los predicados con los estados que denen. o Cmo se pueden establecer comparaciones entre predicados. o qu utilidad tiene? e Obtener expresiones no ambiguas, manipulables y comparables de conjuntos de estados, requisitos y comportamientos de algoritmos, lo que permitir dea tallar los resultados esperados del funcionamiento de estos (o sea, qu han de e hacer). Lograr determinar en cada ocasin el predicado necesario y establecer compao raciones entre estos de cara a decidir cul es el que satisface mejor todas las a restricciones que sean aplicables para cada problema.

Conceptos fundamentales
Formalizacin de un enunciado y propiedades (no ambigedad, precisin, cono u o cisin): [Pea93, Tema 2, Introduccin, pg(s) 23, prrafo 2], [Pea97, Tema 2, o n o a a n Introduccin, pg(s) 27, prrafo 4] o [Pea05, Tema 2, Introduccin, pg(s) 31, o a a n o a prrafo 4]. a Conjunto de estados denidos por un predicado: [Pea93, Denicin 2.14, n o pg(s) 34], [Pea97, Denicin 2.12, pg(s) 41] o [Pea05, Denicin 2.12, a n o a n o pg(s) 46] [Balc93, Tema I, Motivacin y Conceptos, pg(s) 10, prrafo 4, a o a a l neas 1 a 3] Comparacin de predicados [Pea93, Denicin 2.15 y ejercicios 2.1 y 2.2, o n o pg(s) 35], [Pea97, Denicin 2.13 y ejercicios 2.1 y 2.2, pg(s) 42] o [Pea05, a n o a n Denicin 2.13 y ejercicios 2.1 y 2.2, pg(s) 42], [Balc93, Tema I, Motivacin o a o y Conceptos, pg(s) 10, prrafo 4, desde la l a a nea 4]

Ejercicios y ejemplos
1. Denicin de conjuntos de estados: o extension(enumeracin de los elementos que componen el conjunto): Ejero cicio 1.2.1 [Col2k3, pg. 11] a intension(expresin que dene cuando un elemento pertenece al conjuno to): Ejercicio 1.2.2 [Col2k3, pg. 12] a

Gu didctica de Programacin II a a o

2. 3.

Comparacin de predicados: Ejercicio 1.2.3 [Col2k3, pg. 13] o a Formalizacin de Enunciados: o formalizacion, 1 : Ejercicio 1.2.4 [Col2k3, pg. 14] a formalizacion, 2 : Ejercicio 1.2.5 [Col2k3, pg. 14] a

Errores ms habituales a
Imprecisin (bien por ambigedad bien por sub o sobreformalizacin). Es o u o decir, formalizar un enunciado (ligeramente) distinto del necesario. Eleccin de conectivas o de cuanticadores incorrecta. o Eleccin incorrecta de los rangos de los cuanticadores (habitualmente por o tratamiento incorrecto de los extremos o de los rangos vac os).

Cuestiones propuestas
Qu efecto tiene aadir una conjuncin a un predicado?y una disyuncin? e n o o (siempre respecto al conjunto de estados denidos por el predicado). Cul es la utilidad prctica de comparar estados (y por tanto predicados)? a a (esta cuestin podr aplazarse hasta el siguiente apartado, pero deber poder o a a discutirse aqu ).

Temporizacin y requisitos o
1h para la teor (leer y entender los puntos propuestos) + 1 h para los a ejercicios (hacer los propuestos, los [Pea93, Tema 2, ejercicios adicionales 2.3 n y 2.4, pg(s) 44] [Pea97, Tema 2, ejercicios adicionales 2.1 y 2.2, pg(s) 52], a o n a adems de algunos de los que se encuentran en [Balc93, Tema I, Ejercicio 1, a pg(s) 20], hasta adquirir soltura en la formalizacin de enunciados) a o Conceptos de Lgica de Predicados de primer orden, tal como se encuentra o en [Pea93, Cap n tulo 2, 2.2 Lgica de predicados, pg(s) 24 a 34] , [Pea97, o a n Cap tulo 2, 2.2 Lgica de predicados, pg(s) 29 a 40] o [Pea05, Cap o a n tulo 2, 2.2 Lgica de predicados, pg(s) 34 a 45]. o a

1.4.

Especicacin pre-post o

Introduccin o
qu se va a estudiar? e Cmo detallar el comportamiento esperado de un programa o Propiedades de una especicacin pre-post o qu utilidad tiene? e Permitir jar a priori el resultado esperado de un programa. Permitir razonar (inductivamente) sobre el comportamiento de un programa (con respecto a su resultado). Comparar el resultado esperado de un programa con el resultado de su comportamiento real.

Curso 2006-2007

Conceptos fundamentales
Elementos de una especicacin: [Pea93, Tema 2, especicaciones de probleo n mas, pg(s) 38], [Pea97, Tema 2, especicaciones de problemas, pg(s) 45] a n a o [Pea05, Tema 2, especicaciones de problemas, pg(s) 50], [Balc93, I, n a pg(s) 15-16], y de una forma ms sencilla, [CCM+ 93, 1, pg(s) 6 y ss.]) a a a Precondiciones y postcondiciones ([Pea93, Tema 2, denicin 2.17, pg(s) 39], n o a [Pea97, Tema 2, denicin 2.15, pg(s) 46], [Pea05, Tema 2, denicin 2.15, n o a n o pg(s) 51] [Balc93, I, pg(s) 12], [CCM+ 93, 1, pg(s) 6-8]) a a a Propiedades de una especicacin axiomtica ([Balc93, I, pg(s) 14], y tamo a a bin, de una forma ms sencilla, [CCM+ 93, 1, pg(s) 9 y 10]). e a a

Ejercicios y ejemplos
1. 2. Ejercicio 1.3.1 [Col2k3, pg. 15]. a Algunos de entre [Pea93, Tema 2, problemas 2.5 y siguientes, pg(s) 44,45], n a [Pea97, Tema 2, problemas 2.5 y siguientes, pg(s) 52,53] o [Pea05, Tema n a n 2, problemas 2.5 y siguientes, pg(s) 57 a 59]. a [Balc93, Tema I, Ejercicio 1, pg(s) 20]. a Algunos de entre [Col2k3, 6, pg(s) 38], con especial atencin a los siguientes: a o Ejercicio 5.4 [Col2k3, pg. 34], Ejercicio 5.5 [Col2k3, pg. 35], Ejercicio 5.7 a a [Col2k3, pg. 36], Ejercicio 5.6 [Col2k3, pg. 35], Ejercicio 5.1 [Col2k3, pg. 32] a a a y Ejercicio 5.8 [Col2k3, pg. 36] en primera instancia, pudindose abordar el a e resto ms adelante. a

3. 4.

Errores ms habituales a
Sub y sobreespecicacin: especicar ms o menos de lo que se necesita (este o a error se relaciona con el del anterior punto, o sea, la formalizacin incorrecta o de enunciados). Utilizacin incorrecta de los tipos de datos: comparar variables de tipos diso tintos (booleanas con enteras, v.gr.). Desconocimiento del resultado y equivalencias de las operaciones lgicas (por o ejemplo, (b P ) (b P ) (en vez de b = P )).

Cuestiones propuestas
Cul es el efecto producido cuando se refuerza una precondicin?y cuando a o se debilita una postcondicin? o Cules son el signicado e implicaciones de una precondicin (o postcondia o cin) sobre un programa? o Ahora puede verse ms extensa y precisamente la utilidad de la comparacin a o entre predicados/conjuntos de estados sugerida en el punto anterior (formalizacin). o

Temporizacin y requisitos o
1 2 h para entender la teor + 2 3h para hacer ejercicios y problemas de entre a o los anteriormente propuestos hasta adquirir un buen dominio de la tcnica de e especicacin axiomtica explicada. o a
1

Cap tulo 2

Recursividad
2.1. Induccin o

Introduccin o
qu se va a estudiar? e Principio de induccin completa. o Prerdenes y prerdenes bien fundados. o o Induccin noetheriana. o qu utilidad tiene? e Poder analizar el comportamiento y resultado de los programas recursivos. Poder demostrar, bajo ciertas condiciones, que un programa recursivo termina.

Conceptos fundamentales
Principio de induccin: [Balc93, Tema III, punto 1, Motivacin y formulaciones o o alternativas, pg(s) 77 a 79] a Prerdenes y prerdenes bien fundados: [Pea93, Tema 3, seccin 2, Induccin o o n o o noetheriana, pg(s) 54 a 57], [Pea97, Tema 3, seccin 2, Induccin noethea n o o riana, pg(s) 63 a 67] o [Pea05, Tema 3, seccin 2, Induccin noetheriana, a n o o pg(s) 69 a 74] a Induccin noetheriana (o en prerdenes bien fundados): [Pea93, Tema 3, o o n seccin 2, Induccin noetheriana, pg(s) 57 a 58], [Pea97, Tema 3, seccin 2, o o a n o Induccin noetheriana, pg(s) 67 a 68] o [Pea05, Tema 3, seccin 2, Induccin o a n o o noetheriana, pg(s) 74] Para ampliar, vase [Balc93, Tema III, excursin, La a e o induccin en prerdenes bien fundados, pg(s) 90 a 94] o o a

Ejercicios y ejemplos
Induccin: elegir algunos de entre los propuestos en [Balc93, Tema III, ejercio cios 1 al 10, especialmente este ultimo, pg(s) 94, 95] a Prerdenes y prerdenes bien fundados: [Pea93, Tema 3, ejercicios 3.1 al 3.7, o o n pg(s) 55 a 57] o [Pea97, Tema 3, ejercicios 3.1 al 3.7, pg(s) 64 a 67]. Se a n a recomienda su realizacin mientras se estudia la teor sobre el tema. o a 10

Curso 2006-2007

11

Induccin noetheriana: [Pea93, Tema 3, ejercicio 3.8, pg(s) 58] [Pea97, o n a n Tema 3, ejercicio 3.8, pg(s) 68] a Ejercicio 2.1.1 [Col2k3, pg. 19] y Ejercicio 2.1.2 [Col2k3, pg. 21]. a a

Errores ms habituales a
Eleccin incorrecta de la base de induccin (vase el ejercicio [Balc93, III.10, o o e pg(s) 95]) a Eleccin incorrecta del conjunto sobre el que se quiere establecer un preorden o bien fundado (vanse los ejemplos que tratan sobre la denicin de p.b.f.: e o [Pea93, Tema 3, seccin 2, induccin noetheriana, pg(s) 56] o [Pea97, Tema n o o a n 3, seccin 2, induccin noetheriana, pg(s) 65], as como el ejercicio [Pea93, o o a n Ejercicio 3.4, pg(s) 56], [Pea97, Ejercicio 3.4, pg(s) 65] o [Pea05, Ejercicio a n a n 3.4, pg(s) 72]) a

Cuestiones propuestas
Cmo se puede obtener un preorden bien fundado a partir de otro conocido? o Se puede obtener cualquier p.b.f. a partir de (I <) N,

Temporizacin y requisitos o
El estudio de la teor propuesta as como la realizacin de los ejercicios ina o tercalados en sta, deber ocupar al alumno aproximadamente una hora y e a media. No son necesarios prerrequisitos dentro de la asignatura, pero ser conveniente a una cierta familiaridad con las tcnicas de demostracin (especialmente con e o la propia induccin y con la deduccin natural). o o

2.2.

Vericacin formal de programas recursivos o

Introduccin o
qu se va a estudiar? e Qu es una funcin recursiva y qu elementos la componen. e o e Correccin parcial de un programa recursivo. o Correccin total de un programa recursivo. o Forma de vericar la correccin de una funcin recursiva. o o qu utilidad tiene? e Denir funciones recursivas. Disear funciones recursivas. n Vericar la correccin de funciones recursivas. o

12

Gu didctica de Programacin II a a o

Conceptos fundamentales
Forma abstracta o general de una funcin recursiva: [Pea93, Tema 3, seccin o n o 1, terminolog tabla 3.2, pg(s) 53], [Pea97, Tema 3, seccin 1, terminoa, a n o log tabla 3.2, pg(s) 61] o [Pea05, Tema 3, seccin 1, terminolog tabla a, a n o a, 3.2, pg(s) 68], [Balc93, Tema III, apartado 3, Vericacin de programas rea o cursivos, pg(s) 84]. a Elementos de una funcin recursiva: [Pea93, Tema 3, seccin 1, pg(s) 53 y o n o a ss.], [Pea97, Tema 3, seccin 1, pg(s) 61 y ss.] o [Pea05, Tema 3, seccin n o a n o 1, pg(s) 68 y ss.], [Balc93, III,3, pg(s) 84] a a Esquema de vericacin a posteriori de una funcin recursiva: [Pea93, Tema o o n 3, 3.3.2, Correccin y coste de programas recursivos, pg(s) 60, 61], [Pea97, o a n Tema 3, 3.3.2, Correccin y coste de programas recursivos, pg(s) 70, 71] o o a [Pea05, Tema 3, 3.3.2, Correccin y coste de programas recursivos, pg(s) 77, n o a 78] y, de forma resumida en [Pea93, 3.3.2, tabla 3.2, pg(s) 62], [Pea97, 3.3.2, n a n tabla 3.2, pg(s) 71] o [Pea05, 3.3.2, tabla 3.2, pg(s) 79]; [Balc93, Tema III, a n a apartado 3, Vericacin de programas recursivos, pg(s) 83 a 86] o a

Ejercicios y ejemplos
1. Forma genrica de una funcin recursiva y elementos de una funcin recursiva: e o o identicar y discutir parmetros de funciones, esto es, para los algoritmos que a se estudien, deber identicarse los elementos que los componen, en relacin an o con la ya citada [Pea93, tabla 3.2, pg(s) 62], [Pea97, tabla 3.2, pg(s) 71] n a n a o [Pea05, tabla 3.2, pg(s) 79]. n a El trabajo realizado en este ejercicio deber repetirse para todas las funciones a recursivas que se veriquen en este tema. 2. Esquema de vericacin a posteriori de una funcin recursiva: Ejercicio 2.2.1 o o [Col2k3, pg. 22],Ejercicio 6.3 [Col2k3, pg. 40]. a a Es importante vericar, adems, los siguientes aspectos en cuantos algoritmos a recursivos se pueda: Completitudes de alternativas y exclusividad mutua de las protecciones. Bases y pasos de induccin. o Prerdenes bien fundados. o Funciones completas1 : [Pea93, Tema 3, terminolog mximo comn n a, a u divisor (ambas versiones, empezando por la de Euclides), pg(s) 54], a [Pea97, Tema 3, terminolog mximo comn divisor (ambas version a, a u nes, empezando por la de Euclides), pg(s) 62 - 63] o [Pea05, Tema 3, a n terminolog mximo comn divisor (ambas versiones, empezando por a, a u la de Euclides), pg(s) 69], [Balc93, Tema IV, ejemplos sencillos, fact, a pg(s) 100], [op. cit., ejemplos sencillos, trad, pg(s) 103], [op. cit., IV.2 a a Aritmtica, multiplicacin, pg(s) 109], [Pea93, gura 3.3, divisin ene o a n o tera mediante restas, pg(s) 64], [Pea97, gura 3.3, divisin entera mea n o diante restas, pg(s) 74], [Pea05, gura 3.3, divisin entera mediante a n o restas, pg(s) 81] [Pea93, Figura 3.5, pg(s) 68], [Pea97, Figura 3.5, a n a n pg(s) 79], [Pea05, Figura 3.5, pg(s) 87] a n a
1 para las funciones propuestas para vericar en este apartado no deber utilizarse ms que el a a cdigo de stas, no las indicaciones sobre su dise o que en los textos pudieran hacerse o e n

3.

Curso 2006-2007

13

Errores ms habituales a
Algunos de los errores t picos cometidos en la vericacin provienen de una o especicacin deciente, por lo que se recomienda repasar los errores y conceptos o de especicacin. o Identicacin errnea de cualesquiera de los elementos que componen una funo o cin recursiva o eleccin incorrecta de los asertos que inspiran y documentan o o su diseo. Por ejemplo, una precondicin o una alternativa inadecuadas no n o permitirn demostrar que la postcondicin elegida es alcanzable a partir de a o dichos asertos. Pasos de demostracin que no se siguen de la aplicacin de las reglas de deduco o cin a los asertos disponibles. Esto incluye tanto demostraciones decientes o (deducciones incorrectas o incompletas) como conclusiones no demostrables (por ejemplo, a partir de asertos demasiado dbiles). Este tipo de errores puee den, a veces, referirse a otros del tipo anteriormente citado, y otras a un manejo inadecuado de los mecanismos de demostracin disponibles en la Lgica de o o predicados.

Cuestiones propuestas
Qu implicaciones tendr una alternativa no exclusiva?y una alternativa e a incompleta (que no cubriese todos los casos posibles)? Qu suceder en el caso de que una funcin fuese invocada con parmetros e a o a de entrada que no cumplieran la precondicin? o A la demostracin de los primeros cuatro puntos del esquema de vericacin o o se le denomina vericacin de la correccin parcial. Expl o o quese el signicado e implicaciones de dicha denominacin. o Postcondiciones demasiado complejas (a partir de las cuales ser dif razoa cil nar sobre o derivar programas). Esto se produce como consecuencia de una mala comprensin del problema que se debe tratar y es resultado de una mala o especicacin. o

Temporizacin y requisitos o
La teor de este punto deber estudiarse de una manera incremental, con a a varias revisiones del material, comenzando por una lectura ligera para establecer el mbito de lo que se va a estudiar, seguida por un estudio de la materia a siguiendo los pasos propuestos para, en un ultimo repaso, tratar de reprodu cirlos sin contar con los textos donde se explican. Esta fase podr dividirse a en varias para jar mejor los conceptos. De cualquier forma, a la teor proa piamente dicha as como a los ejercicios que en los textos ayudan a explicarla se le deber dedicar entre tres y cuatro horas. Tras haberla comprendido y an adquirido cierta conanza en su uso deber hacerse el resto de los ejercicios an propuestos (o cualesquiera vericaciones que el alumno pudiera proponer). Esta fase es importante para el correcto desarrollo y la comprensin del diseo o n recursivo, por lo cual deber dedicrsele suciente tiempo como para asentar a a los conocimientos en que se fundamenta. Estimamos que unas tres horas dedicadas a la solucin de los ejercicios propuestos de vericacin es un tiempo o o razonable para tal popsito. o Este punto se apoya directa y fuertemente tanto en el dedicado a la lgica de o predicados como en el que trata de la especicacin axiomtica. o a

14

Gu didctica de Programacin II a a o

2.3.

Dise o de programas recursivos n

Introduccin o
El estudio de este apartado introduce la tcnica de construccin de programas e o recursivos a partir de su especicacin axiomtica. Estos programas se van a dio a sear y posteriormente se van a vericar conforme al esquema del que trataba la n seccin anterior, pero ambas actividades son partes de un todo y se pretende que o los algoritmos se escriban teniendo en cuenta la vericacin de su correccin. o o qu se va a estudiar? e Proceso de diseo de programas recursivos. n Relacin entre el diseo y la vericacin recursiva. o n o qu utilidad tiene? e Construir programas recursivos de acuerdo con su especicacin axiomtica o a (pre-post), esto es, programas recursivos correctos. Orientar el diseo recursivo hacia su vericacin formal. n o

Conceptos fundamentales
Fases del diseo recursivo: [Pea93, Tema 3, Diseo y vericacin de progran n n o mas recursivos, pg(s) 58 y 59] o [Pea97, Tema 3, Diseo y vericacin de a n n o programas recursivos, pg(s) 68] o [Pea05, Tema 3, Diseo y vericacin de a n n o programas recursivos, pg(s) 75] y tambin en [Balc93, Tema IV, Mtodo de a e e diseo, pg(s) 98 y 99]. n a Especicacin del algoritmo: vase el apartado 1.4. o e Anlisis a Anlisis a Anlisis a Anlisis a por casos y composicin algor o tmica: [Pea93, seccin 3.3.1, n o por casos y composicin, pg(s) 59,60], [Pea97, seccin 3.3.1, o a n o por casos y composicin, pg(s) 69,70].o [Pea05, seccin 3.3.1, o a n o por casos y escritura del programa, pg(s) 75 a 77] . a

Vericacin formal de la correccin: vase el apartado 2.2. o o e Estudio de la eciencia: vase el apartado 2.5. e

Ejercicios y ejemplos
Los ejercicios aqu propuestos deber primero leerse detenidamente para com an prenderlos, despus tratar de realizar por s mismos los razonamientos acudiendo lo e menos posible al texto, y, por ultimo, tratar de disear los algoritmos a partir de la n especicacin y sin consultar las explicaciones dadas en las referencias bibliogrcas. o a Es conveniente comenzar por el Ejercicio 7.1 [Col2k3, pg. 44]. a Clculo del factorial de un natural: [Balc93, Ejemplos sencillos, pg(s) 99 y a a ss.]. Vase el uso de la funcin oculta en la denicin de la postcondicin y e o o o su posterior reescritura de cara al diseo de la funcin. n o Representacin binaria de un natural: [op. cit., Ejemplos sencillos, pg(s) 102 y o a ss.]. Vase el uso aqu de la funcin oculta como ayuda al clculo del resultado. e o a Multiplicacin: [op. cit., Aritmtica, ejemplo: multiplicacin, pg(s) 107 a 113] o e o a

Curso 2006-2007

15

Divisin entera: [Pea93, seccin 3.3.3, ejemplos, pg(s) 63 a 66], [Pea97, o n o a n seccin 3.3.3, ejemplos, pg(s) 73 a 77] o [Pea05, seccin 3.3.3, ejemplos, o a n o pg(s) 81 a 88] y [Balc93, ejemplo:divisin, pg(s) 113 a 119]. Comprense las a o a a distintas formas e ideas para abordar el mismo problema. Ejercicio 7.2 [Col2k3, pg. 46], Ejercicio 7.3 [Col2k3, pg. 47], Ejercicio 7.4 a a [Col2k3, pg. 48]. a

Errores ms habituales a
El error ms comn (observado en multitud de exmenes) consiste en proponer a u a el cdigo de un algoritmo que ms tarde se quiere vericar, pero que no ha o a sido diseado siguiendo las pautas antedichas, lo que diculta sobremanera la n comprobacin de su correccin. Ntese que el diseo y la vericacin de su o o o n o correccin son, de hecho, ms importantes para la Asignatura que el propio o a cdigo resultante, ya que ste viene dado por una buena aplicacin del mtodo o e o e propuesto. Anlisis por casos incompleto o errneo. Esto implicar, indefectiblemente, un a o a programa incorrecto. La solucin es una buena comprensin del problema y o o un estudio exhaustivo de las diferentes posibilidades de abordar el algoritmo. Eleccin precipitada de la forma de acercarse al nal del problema. Esta es, a o n de cuentas, una variante del anterior tipo de error concerniente a los casos recursivos del diseo. En algunos casos, lleva a una v muerta en el diseo, n a n ya que, o bien no hay forma de avanzar as o bien no hay forma de demostrar , que esa eleccin es correcta. En otras ocasiones, este error slo conlleva una o o prdida de eciencia, lo que es mucho menos grave ya que sta siempre suele e e poder mejorarse a posteriori.

Cuestiones propuestas
Qu papel juega la induccin en el proceso de dise o recursivo? e o n De nuevo, qu efecto sobre el diseo tendr una alternativa no exclusiva? e n a

Temporizacin y requisitos o
En este punto es importante decir que el estudio del apartado requiere volver al anterior (vericacin), ya que, para cada algoritmo diseado, el esquema o n exige la comprobacin de su correccin. Habida cuenta de tal apoyo, el estudio o o de la construccin de algoritmos recursivos y la realizacin de los ejercicios o o sugeridos deber ocupar unas tres horas. a Los conocimientos previos al estudio de esta materia incluyen, como temas ms cercanos, la vericacin formal y la especicacin de algoritmos. a o o

2.4.

Tcnicas de inmersin e o

Introduccin o
Las tcnicas de inmersin permiten obtener programas ms generales a partir de e o a otros ya realizados. Esto facilita lograr especicaciones abordables en casos donde la descomposicin recursiva era dif o no era factible, mejorar la eciencia de un o cil programa dado o conseguir que el algoritmo resultante exhiba ciertas caracter sticas deseables.

16

Gu didctica de Programacin II a a o

qu se va a estudiar? e Concepto de funcin inmersora o generalizacin de la funcin sumergida. o o o Tcnicas de inmersin. e o qu utilidad tiene? e obtener una funcin cuya especicacin permite diserla recursivamente a paro o n tir de una cuyos datos de entrada no permit una descomposicin recursiva an o (en la que los datos deben, de alguna forma, decrecer) y cuyo resultado, en ciertas condiciones, sea el esperado para la funcin inicial o Generalizar una funcin que hay que disear para obtener alguna caracter o n stica deseable Adaptar el tipo de generalizacin (inmersin) que se va a aplicar segn el o o u objetivo que la motiva Obtener funciones recursivas: que optimicen la funcin sumergida o nales con postcondicin constante o

Conceptos fundamentales
Generalizacin o inmersin de una funcin: [Pea93, 3.4 Tcnicas de inmero o o n e sin, pg(s) 70 a 72], [Pea97, 3.4 Tcnicas de inmersin, pg(s) 81 a 84] o o a n e o a [Pea05, 3.4 Tcnicas de inmersin, pg(s) 89 a 92] y tambin en [Balc93, n e o a e Tema V, Transformacin de programas por inmersin; introduccin a inmero o o siones: inmersin de eciencia, pg(s) 139]. o a Tcnicas de inmersin: e o Inmersin de diseo o de especicaciones: [Pea93, 3.4 Tcnicas de ino n n e mersin, pg(s) 70 a 72], [Pea97, 3.4 Tcnicas de inmersin, pg(s) 81 o a n e o a a 84] o [Pea05, 3.4 Tcnicas de inmersin, pg(s) 89 a 92] y [Balc93, n e o a Tema VI, Inmersin de Especicaciones, pg(s) 167, 168] o a Inmersin no nal (por debilitamiento de la postcondicin): [Pea93, o o n 3.4.1 Inmersin no nal, pg(s) 73, 74], [Pea97, 3.4.1 Inmersin no nal, o a n o pg(s) 84, 85] o [Pea05, 3.4.1 Inmersin no nal, pg(s) 92, 93] y [Balc93, a n o a VI.3 Debilitamiento de la postcondicin, pg(s) 174 a 176]. o a Inmersin nal (por reforzamiento de la precondicin): [Pea93, 3.4.2 o o n Inmersin nal, pg(s) 74, 75] o [Pea97, 3.4.2 Inmersin nal, pg(s) 85 a o a n o a 87] o [Pea05, 3.4.2 Inmersin nal, pg(s) 93 a 96] [Balc93, VI.2 Reforzar n o a la precondicin, pg(s) 168, 169] o a Inmersin de eciencia. Puede subdividirse atendiendo a si se precalculan o resultados o parmetros de entrada: [Pea93, 3.4.4 Inmersin por razoa n o nes de eciencia, pg(s) 79 a 81], [Pea97, 3.4.4 Inmersin por razones a n o de eciencia, pg(s) 90 a 93],[Pea05, 3.4.4 Inmersin por razones de ea n o ciencia, pg(s) 99 a 102] y [Balc93, Inmersiones de eciencia, pg(s) 140, a a 141]

Curso 2006-2007

17

Desplegado y plegado: [Pea93, 3.5 Tcnica de desplegado y plegado, n e pg(s) 81 a 84], [Pea97, 3.5 Tcnica de desplegado y plegado, pg(s) 93 a n e a a 96], [Pea05, 3.5 Tcnica de desplegado y plegado, pg(s) 102 a 109] n e a y [Balc93, V.2 Inmersin y recursividad nal: desplegado y plegado, o pg(s) 146 a 150] a Postcondicin constante: [Balc93, V.3 Obtencin de postcondicin conso o o tante, pg(s) 156 a 159] a

Ejercicios y ejemplos
Como en el resto de ejercicios de vericacin o diseo, los aqu propuestos deo n ber abordarse en, al menos, tres fases: una primera de lectura y comprensin an o de los conceptos fundamentales, una segunda en que se traten de desarrollar con algunas consultas al texto, y una tercera en que el ejemplo se realice sin apoyo bibliogrco. En las referencias hechas a [Pea93] en este punto no se requiere an a n u realizar el estudio del coste; ste se llevar a cabo ms adelante, en el apartado 2.5. e a a 1. Inmersin de diseo o especicaciones: [Pea93, Ejercicio 3.13, pg(s) 71], o n n a [Pea97, Ejercicio 3.13, pg(s) 82],[Pea05, Ejercicio 3.13, pg(s) 91] , [Balc93, n a n a VI.1 Introduccin y motivacin, ejercicio propuesto en el ultimo prrafo de la o o a pgina, con la inmersin propuesta en el segundo prrafo de la pgina 172, a o a a pg(s) 172 y 174] a Inmersin no nal (por debilitamiento de la postcondicin): [Pea93, Ejemo o n plo 3.2 y ejercicio 3.14, pg(s) 73, 74] o [Pea97, Ejemplo 3.2 y ejercicio 3.14, a n pg(s) 84, 85], [Pea05, Ejemplo 3.2 y ejercicio 3.14, pg(s) 93], [Balc93, Ejema n a plo: la suma de un vector, pg(s) 176, 177], [op. cit., Ejemplo: comprobar el a orden, pg(s) 177, 190] a Inmersin nal (por reforzamiento de la precondicin): [Pea93, Ejemplo 3.4.3 o o n La ra cuadrada entera, pg(s) 76, 77], [Pea97, Ejemplo 3.4.3 La ra cuaz a n z drada entera, pg(s) 88, 89], [Pea97, Ejemplo 3.4.3 La ra cuadrada entera, a n z pg(s) 96, 97] [Pea93, Ejercicios 3.18 y 3.19, pg(s) 78], [Pea97, Ejercicios a n a n 3.18 y 3.19, pg(s) 89], [Pea05, Ejercicios 3.18, 3.19 y 3.20 (sin atender, an, a n u al clculo del coste, que podremos revisar ms adelante), pg(s) 98 y 99] a a a Inmersin de eciencia: [Pea93, Obtnganse y verif o n e quense los algoritmos de las guras 3.11 y 3.12, pg(s) 80, 81], [Pea97, Obtnganse y verif a n e quense los algoritmos de las guras 3.11 y 3.12, pg(s) 92, 93], [Pea05, Obtnganse y a n e verif quense los algoritmos de las guras 3.11 y 3.12, pg(s) 101, 102], [Balc93, a Ejemplo: Fibonacci, pg(s) 141 a 143]. a Desplegado y plegado: [Pea93, Ejemplo 3.4 La potencia n-sima otra vez, n e pg(s) 84 a 86], [Pea97, Ejemplo 3.4 La potencia n-sima por n-sima vez, a n e e pg(s) 96 a 99], [Pea05, Ejemplo 3.4 La potencia n-sima por n-sima vez, a n e e pg(s) 105 a 108], [Pea93, Ejercicios 3.21 a 3.24, pg(s) 86, 87], [Pea97, a n a n Ejercicios 3.21 a 3.24, pg(s) 99],[Pea05, Ejercicios 3.21 a 3.24, pg(s) 108 y a n a 109], [Balc93, Ejemplo: el factorial, pg(s) 150, 151], [op. cit., Ejemplo: cambio a de base, pg(s) 151 a 153] a

2.

3.

4.

5.

Errores ms habituales a
Por lo general, los errores provienen de una aplicacin incorrecta o incompleta o de cada una de las tcnicas de inmersin propuestas. Por ejemplo, es t e o pico que, queriendo obtener una postcondicin constante o una funcin recursiva o o nal, se olvide reforzar la precondicin adecuadamente. o

18

Gu didctica de Programacin II a a o

Debilitar la postcondicin mediante la introduccin de disyuntivas. Esto no o o es en s mismo un error, pero la dicultad aadida del tratamiento de tales n derivaciones suele provocarlos. Al aplicar la tcnica de obtencin de recursividad nal mediante desplegado e o y plegado la especicacin de la funcin inmersora debe reejar los (nuevos) o o parmetros de inmersin. Para ello habr que reforzar bien la pre o la posta o a condicin (bajo distintos presupuestos y con diferentes resultados) con alguna o restriccin sobre dichos parmetros. o a

Cuestiones propuestas
Qu propiedades debe cumplir la funcin de combinacin (c en el esquema en e o o [Pea93, Figura 3.2 Funcin recursiva lineal, pg(s) 53], [Pea97, Figura 3.2 n o a n Funcin recursiva lineal, pg(s) 61] o [Pea05, Figura 3.2 Funcin recursiva o a n o lineal, pg(s) 68]) para que se pueda lograr una funcin recursiva nal a partir a o de la funcin recursiva lineal original y mediante desplegado y plegado? o En la especicacin de la funcin inmersora habrn de aparecer condciones o o a sobre los nuevos parmetros de inmersin. Expl a o quese qu efecto y utilidad e tendr a: 1. 2. reforzar la precondicin o reforzar la postcondicin o

Temporizacin y requisitos o
Esta seccin requiere, adems del estudio de la teor (siempre en la forma o a a activa enunciada en anteriores puntos) para la que unas tres horas deber an bastar, una buena cantidad de prctica, para la que recomendamos la realia zacin de los ejercicios propuestos anteriormente (y quiz alguno ms de los o a a propuestos en las referencias citadas); esto deber ocupar no menos de otras a tres horas. Para abordar con xito el estudio de este apartado deber estar aanzados e an los conocimientos enunciados en la seccin 1.4 (especicacin) y deber teo o a nerse un conocimiento operativo de los conceptos relativos a la vericacin y o al diseo recursivos, vistos en las secciones 2.2 y 2.3. n

2.5.

Clculo de la eciencia en programas a recursivos

Introduccin o
El enfoque que se pretende dar en la Asignatura al clculo de la eciencia de los a algoritmos es eminentemente prctico. Por esta razn, todo el aparato matemtico a o a que en el texto ([Pea93] o [Pea97]) conduce al clculo y resolucin de recurrencias n n a o y a la interpretacin de los resultados de dicha operacin debe entenderse, pero en o o funcin de la utilizacin de las recurrencias como herramienta y de la medida de la o o eciencia de un algoritmo como parte de la documentacin que ha de acompaar al o n diseo de ste. n e

Curso 2006-2007

19

qu se va a estudiar? e Cmo plantear y resolver ecuaciones de recurrencias. o Cmo calcular el coste de un programa recursivo. o Cmo comparar eciencias de algoritmos. o qu utilidad tiene? e Clculo de la eciencia de un algoritmo recursivo, o sea, cuantos recursos a (habitualmente temporales) consume en funcin del tamao del problema que o n resuelve, y respecto al crecimiento de ste. e Comparacin de la bondad relativa de diferentes soluciones correctas a un o mismo problema mediante diversos algoritmos.

Conceptos fundamentales
Tamao de un problema: [Pea93, Tema 1, La Eciencia de los algoritmos, n n Introduccin, pg(s) 4, 2o prrafo] o [Pea97, Tema 1, La Eciencia de los alo a a n goritmos, Introduccin, pg(s) 4, 4o prrafo] o [Pea05, Tema 1, La Eciencia o a a n de los algoritmos, Introduccin, pg(s) 4, ultimo prrafo] o a a Medidas asintticas, rdenes de complejidad, y comparacin entre dichos rdeo o o o nes: [Pea93, 1.2 Medidas asintticas, pg(s) 5 a 8], [Pea97, 1.2 Medidas n o a n asintticas, pg(s) 5 a 8] o [Pea97, 1.2 Medidas asintticas, pg(s) 5 a 9], o a n o a [Pea93, 1.3 Ordenes de complejidad, pg(s) 8 a 11] [Pea97, 1.3 Ordenes de n a n complejidad, pg(s) 8 a 12] o [Pea05, 1.3 Ordenes de complejidad, pg(s) 10 a n a a 13] Reglas prcticas para el clculo de la eciencia: [Pea93, 1.4 Reglas prcticas a a n a para el clculo de la eciencia, pg(s) 11 a 13], [Pea97, 1.4 Reglas prcticas a a n a para el clculo de la eciencia, pg(s) 12 a 16] o [Pea05, 1.4 Reglas prcticas a a n a para el clculo de la eciencia, pg(s) 13 a 16] a a Clculo del coste de programas recursivos: [Pea93, 1.5 Resolucin de recua n o rrencias, pg(s) 15 a 18], [Pea97, 1.5 Resolucin de recurrencias, pg(s) 16 a a n o a 20] o [Pea05, 1.5 Resolucin de recurrencias, pg(s) 16 a 21] n o a

Ejercicios y ejemplos
Ejercicio 4.1 [Col2k3, pg. 28], Ejercicio 4.3 [Col2k3, pg. 30]. a a Para cada uno de los algoritmos recursivos vistos en las secciones anteriores, calclese su coste y disctase el signicado comparativo de ste en aquellos u u e casos en que se disponga de diferentes versiones del mismo algoritmo.

Errores ms habituales a
Hay que entender que la medida de la eciencia que se pretende utilizar es el coste asinttico temporal en el caso peor o, lo que es lo mismo, cmo crece o o el coste cuando crece el tamao del problema. Es, por tanto, una medida de n crecimiento, dinmica, no una medida esttica. Por tanto, hay que enender que a a no tiene sentido de hablar de un coste n como si se tratase de las unidades de tiempo que el algoritmo consume para resolver una instancia del problema (su aplicacin a unos datos concretos de entrada). Antes bien, lo que se busca es o

20

Gu didctica de Programacin II a a o

poder comparar, llevndolo al l a mite, el crecimiento del tamao del problema n con el de los recursos que el algoritmo emplea para resolverlo. Eleccin inadecuada del tamao del problema. El tamao ha de ser un dato o n n calculable a partir de los parmetros de entrada del algoritmo, debe ser signia cativo para el problema que ste resuelve y debe poder medirse su crecimiento. e No es obligatorio que un solo dato represente el tamao de un problema dado. n Como norma bsica, si el algoritmo recursivo del que se desea saber su ea ciencia est bien diseado, la propia llamada recursiva interna nos deber dar a n a una idea clara de qu parmetros denen (y cmo) el tamao del problema. e a o n Identicacin errnea de los parmetros que permiten plantear la recurrencia. o o a Ello dar lugar a un resultado de sta anmalo, en el sentido de que el proa e o pio desarrollo o el cdigo de un algoritmo nos deber indicar intuitivamente o a (hasta cierto punto) cul puede ser su coste. a

Cuestiones propuestas
Cmo inuyen en el clculo del coste de un algoritmo recursivo las proteccioo a nes de la(s) alternativa(s) que separa(n) los casos directos de los recursivos? La pregunta anterior se puede (y se debe) generalizar a cada uno de los elementos que denen un algortimo (recursivo) segn [Pea93, Figura 3.2 Funu n cin recursiva lineal, pg(s) 53], [Pea97, Figura 3.2 Funcin recursiva lineal, o a n o pg(s) 61] o [Pea05, Figura 3.2 Funcin recursiva lineal, pg(s) 68] a n o a Si en vez de realizar un estudio del coste (asinttico) en el caso peor se desease o hacer el estudio en el caso medio, qu factores adicionales habr de ser e an tenidos en cuenta?

Temporizacin y requisitos o
El estudio de la teor ms la realizacin de algunos ejemplos y ejercicios no a a o deber ocupar ms de una hora. an a

Cap tulo 3

Iteracin o
3.1.
1. 2. 3.

Introduccin o

El diseo iterativo comprende tres cap n tulos fundamentales: La sintaxis y la semntica del lenguaje de programacin a o Las reglas de vericacin de programas o Las reglas de composicin y de derivacin formal de programas o o

Para detallar algunos de ellos se han desdoblado en otros siguiendo en parte la estructura de los libros de texto de la asignatura.

3.2.

Semntica Iterativa a

Introduccin o
qu se va a estudiar? La semntica iterativa dene el lenguaje que vamos e a a utilizar para componer programas imperativos (basados en la iteracn, en este o caso). Desde el punto de vista formal se describen las sentencias junto con el efecto que tiene su ejecucin para las variables libres involucradas en ellas. o Un programa iterativo se puede ver como una secuencia de predicados lgicos y o sentencias, donde los predicados son al mismo tiempo postcondicin de una senteno cia y precondicin de la siguiente. Esta perspectiva nos ayudar a disear y vericar o a n este tipo de algoritmos. qu utilidad tiene? Para la programacin y vericacin de programas iterae o o tivos es necesario conocer qu efecto tiene la ejecucin de una sentencia sobre las e o variables libres del algoritmo. De esta forma es posible tambin, dados dos pree dicados, deducir cul ha de ser la sentencia imperativa que tuviera uno de ellos a como precondicin y al otro como postcondicin, esto es, derivar la instruccin que o o o satisface una especicacin. As el algoritmo resultante, que ser composicin de o , a o dichas instrucciones, satisfar una especicacin global a base de ir cumpliendo a o subespecicaciones de las partes del mismo.

Conceptos fundamentales
Para comprender este cap tulo es importante saber: Cmo es un programa iterativo: Esquema general [Pea93, Figura 4.1, pg(s) 110], o n a [Pea97, Figura 4.1, pg(s) 125] o [Pea05, Figura 4.1, pg(s) 137] n a n a 21

22

Gu didctica de Programacin II a a o

Instruccin de asignacin, composicin secuencial e instrucciones condicionao o o les: [Pea93, Semntica de un lenguaje imperativo, pg(s) 99 a 108], [Pea97, n a a n Semntica de un lenguaje imperativo, pg(s) 114 a 124] o [Pea05, Semntica a a n a de un lenguaje imperativo, pg(s) 123 a 136] a

Ejercicios y ejemplos
1. 2. 3. 4. [Pea93, ejemplos 4.1, 4.3 y 4.4, pg(s) 101 a 105], [Pea97, ejemplos 4.1, 4.3 n a n y 4.4, pg(s) 115 a 120] o [Pea05, ejemplos 4.1, 4.3 y 4.4, pg(s) 127 a 133] a n a Ejercicio 6.4 [Col2k3, pg. 40]. a Ejercicio 3.1.1 [Col2k3, pg. 24]. a Ejercicio 3.2.1 [Col2k3, pg. 25]. a

Errores ms habituales a
Los ms frecuentes son aquellos referentes a la semntica de las instrucciones de a a asignacin y condicionales: o Como en el caso recursivo, es muy habitual encontrar exmenes en los que el a algoritmo iterativo no se disea o deriva sino que se propone. Esto diculta n su vericacin (que en dichos casos suele omitirse o es incorrecta). o El error ms normal es una expresin del anterior consistente en que se da el a o cuerpo de un bucle que no se ha obtenido a partir de un invariante y se intenta suplir dicha carencia proponiendo uno ad-hoc. Por lo general dicho invariante ser demasiado dbil o, lo que es lo mismo, no describir el comportamiento a e a del bucle. Slo es posible utilizar la propagacin hacia atrs para hallar la precondicin o o a o de un aserto, dada su postcondicin y no al revs. o e Siempre que en un algoritmo iterativo est involucrado una sentencia condie cional hay que tener en cuenta la semntica de la misma. A este respecto el a ejemplo [Pea93, Ej. 4.4, pg(s) 104], [Pea97, Ej. 4.4, pg(s) 119] o [Pea05, n a n a n Ej. 4.4, pg(s) 131] es fundamental a La inicializacin de las variables que intervienen en el bucle debe hacer que o se satisfaga el invariante a la entrada de ste. Esto debe tatar de conseguirse e a base de instrucciones sencillas (normalmente asignaciones).

Cuestiones propuestas
Si tenemos {Q}x := x + 1{R}, Por qu no tiene sentido calcular Qx+1 para e x hallar R? Cmo se har el ejemplo [Pea93, Ej. 4.4, pg(s) 104], [Pea97, Ej. 4.4, o a n a n pg(s) 119] o [Pea05, Ej. 4.4, pg(s) 131] de no existir la rama si no del a n a condicional?

Temporizacin y requisitos o
Con 1 2 horas es suciente para asimilar la parte terica y hacer algunos o o ejercicios.

Curso 2006-2007

23

3.3.

Bucles y concepto de invariante

Introduccin o
El concepto de invariante es el concepto ms importante dentro de la prograa macin iterativa. Un invariante es un predicado lgico que dene el conportamiento o o de un bucle y permite el diseo del mismo mediante la derivacin formal o bien n o permite su vericacin a posteriori si ste est ya diseado. o e a n qu se va a estudiar? e Cmo construir bucles con el lenguaje iterativo que hemos formalizado en el o cap tulo anterior. Qu es un invariante y qu importancia tiene para el diseo y la vericacin e e n o de los bucles. Cul es la expresin general de un programa iterativo. a o Cmo hallar un invariante. o qu utilidad tiene? La utilidad del invariante reside en que es un predicado e que expresa de qu manera estn ligadas en el bucle las variables que intervienen e a en el mismo. En particular un invariante debe cumplirse tambin inmediatamente e antes e inmediatemente despus de un bucle. e

Conceptos fundamentales
El concepto ms imporante es el recogido en la denicin [Pea93, Def. 4.1, a o n pg(s) 106], [Pea97, Def. 4.1, pg(s) 121] o [Pea05, Def. 4.1, pg(s) 133] y el a n a n a de bucle, descrito en [Pea93, Las instrucciones iterativas. Invariantes, pg(s) 105], n a [Pea97, Las instrucciones iterativas. Invariantes, pg(s) 120] o [Pea05, 4.1.5. Las n a n instrucciones iterativas. Invariantes, pg(s) 132]. Es necesario estudiar tambin cmo a e o hallar invariantes a partir de postcondiciones, ya que es una de las tcnicas ms e a utiles para hallarlos. Est explicado en [Pea93, Derivacin del invariante a partir a n o de la postcondicin, pg(s) 117], [Pea97, Derivacin del invariante a partir de la o a n o postcondicin, pg(s) 133] o [Pea05, 4.3.3.Derivacin del invariante a partir de la o a n o postcondicin, pg(s) 146] y como ejemplo vale el expuesto en [Balc93, Ejemplo: o a Suma de un vector, pg(s) 228]. a

Ejercicios y ejemplos
Como primer ejemplo sirve el del texto en [Pea93, Iteracin, pg(s) 106], n o a [Pea97, Iteracin, pg(s) 121] o [Pea05, Iteracin, pg(s) 134]. Un caso ms n o a n o a a comn de cmo hallar invariantes es el descrito en [Balc93, Ejemplo: la suma u o de un vector, pg(s) 228] y en el Ejercicio 10.1 [Col2k3, pg. 86] (Obtencin a a o del Invariante) Proponer un invariante para el [Pea93, ejercicio 4.4, pg(s) 114], [Pea97, n a n ejercicio 4.4, pg(s) 129] o [Pea05, ejercicio 4.5, pg(s) 142] a n a

Errores ms habituales a
Componer un invariante demasiado dbil en el que slo intervenga la variable e o del bucle y no las variables del cuerpo del bucle.

24

Gu didctica de Programacin II a a o

No tener en cuenta que el invariante debe cumplirse tambin inmediatamente e antes de comenzar el bucle (e inmediatamente despus de terminar). e

Cuestiones propuestas
Cuntos invariantes vlidos puede haber en un bucle? La respuesta en [Pea93, a a n 4.2 Vericacin a posteriori, pg(s) 109], [Pea97, 4.2 Vericacin a posteriori, o a n o pg(s) 125] o [Pea05, 4.2 Vericacin a posteriori, pg(s) 137] a n o a

Temporizacin y requisitos o
Entre 2 y 3 horas para la teor ms 1 2 para los ejercicios. a a
1

3.4.

Esquema general y vericacin formal de o bucles

Introduccin o
qu se va a estudiar? e Esquema general de un programa iterativo simple Pasos para la vericacin del esquema propuesto o qu utilidad tiene? La utilidad de este cap e tulo es la de aprender a vericar un programa iterativo que nos viene dado. Se denomina tambin vericacin a e o posteriori

Conceptos fundamentales
No hay conceptos nuevos. Se utilizarn los aprendidos en el apartado anterior. a Hay sin embargo elementos que hay que tener siempre en cuenta: El esquema general expuesto en [Pea93, Fig. 4.1, pg(s) 110], [Pea97, Fig. 4.1, n a n pg(s) 125] o [Pea05, Fig. 4.1, pg(s) 137] a n a Las reglas de vericacin de programas ya construidos tal y como aparecen en o [Pea93, Fig 4.2, pg(s) 110], [Pea97, Fig 4.2, pg(s) 126] o [Pea05, Fig 4.2, n a n a n pg(s) 138] a

Ejercicios y ejemplos
Ejercicio 10.1 [Col2k3, pg. 86]. a

Errores ms habituales a
Uno de los aspectos que ms hay que tener en cuenta es que los programas a iterativos no siempre tienen un esquema como el referido y por consiguiente, las reglas de vericacin expuestas para ese esquema pueden no ser sucientes para la o vericacin de otro programa. En particular hay que tener especial cuidado con: o Las instrucciones que van entre la nalizacin de un bucle y el nal del proo grama Las instrucciones que haya antes del comienzo del bucle, bien a continuacin o de la precondicin o bien a continuacin de otro bucle. o o

Curso 2006-2007

25

Cuestiones propuestas
En el ejercicio [Pea93, Ej 4.2, pg(s) 113] hay una errata de imprenta y n a i1 el invariante deber ser: s = =1 a[] 1 i n + 1. Por qu? (Este a e error no se encuentra en [Pea97], mismo ejercicio, ni en [Pea05], donde se n n corresponde con el 4.3) Una vez explicado el punto anterior, procdase a vericar el programa. e

Temporizacin y requisitos o
Para estudiar el esquema general y las reglas de vericacin bastar con 1 hora o a de estudio, sin embargo para tener soltura en el manejo y aplicacin de las reglas o de vericacin se precisarn varias horas de trabajo en la realizacin de ejercicios. o a o

3.5.

Derivacin formal de programas o

Introduccin o
qu se va a estudiar? Por Derivacin Formal se entiende la construccin de e o o las instrucciones del programa con posterioridad a la formalizacin de los requisitos o de las mismas (precondicin y postcondicin). o o qu utilidad tiene? Principalmente la de disear y construir el algoritmo al e n mismo tiempo que queda vericado por propia construccin. o

Conceptos fundamentales
Derivacin de una instruccin simple: [Pea93, Derivacin de instrucciones o o n o simples, pg(s) 115], [Pea97, Derivacin de instrucciones simples, pg(s) 131] a n o a o [Pea05, Derivacin de instrucciones simples, pg(s) 143] n o a Derivacin de un bucle a partir de un invariante: [Pea93, Derivacin de buo n o cles a partir de invariantes, pg(s) 116], [Pea97, Derivacin de bucles a partir a n o de invariantes, pg(s) 132] o [Pea05, Derivacin de bucles a partir de invaa n o riantes, pg(s) 145] y [Balc93, Derivacin directa de bucles, pg(s) 227]: Las a o a instrucciones de avanzar y de restablecer

Ejercicios y ejemplos
Para la derivacin de instrucciones hay un buen ejemplo en [Pea93, Ejemplo o n 4.5, pg(s) 115], [Pea97, Ejemplo 4.5, pg(s) 131] o [Pea05, Ejemplo 4.5, a n a n pg(s) 144] a La derivacin de un bucle se puede ilustrar en [Balc93, Ejemplo: la suma de o un vector, pg(s) 228] a

Errores ms habituales a
En general el error ms frecuente es el de mezclar mtodos de diseo formal con a e n mtodos de diseo directo, donde ste ultimo precisa de una vericacin posterior. e n e o

26

Gu didctica de Programacin II a a o

Cuestiones propuestas
En qu lugar del algoritmo se ubica el predicado {T } al que alude el apare tado b de [Pea93, Derivacin de bucles a partir de invariantes, pg(s) 117], n o a [Pea97, Derivacin de bucles a partir de invariantes, pg(s) 133] o [Pea05, n o a n 4.3.2.Derivacin de bucles a partir de invariantes, pg(s) 145]? o a En qu condiciones la instruccin restablecer se compone de la instruccin e o o nada?

Temporizacin y requisitos o
De 2 a 3 horas para la comprensin de la teor ms 4 5 para la realizacin de o a a o o ejercicios y ejemplos.

3.6.

Clculo de eciencia en programas iterativos a

Introduccin o
qu se va a estudiar? El clculo del orden de complejidad de un algoritmo e a iterativo. Para los iterativos se utilizarn las reglas de clculo de la eciencia de a a [Pea93, Cap. 1.4, pg(s) 11], [Pea97, Cap. 1.4, pg(s) 12] o [Pea05, Cap. 1.4, n a n a n pg(s) 13]. a qu utilidad tiene? El clculo del coste permite comparar el comportamiento e a de un algoritmo con otros y elegir el que ms nos convenga en funcin de su rapidez, a o consumo de recursos, etc.

Conceptos fundamentales
Orden de funciones: [Pea93, Def 1.1, pg(s) 5], [Pea97, Def 1.1, pg(s) 6] o n a n a [Pea05, Def 1.1, pg(s) 6] n a Orden exacto: [Pea93, def 1.3, pg(s) 7], [Pea97, def 1.3, pg(s) 8] o [Pea05, n a n a n def 1.3, pg(s) 9] a Operaciones entre rdenes de complejidad: [Pea93, Operaciones entre rdenes o n o de complejidad, pg(s) 8], [Pea97, Operaciones entre rdenes de complejidad, a n o pg(s) 9] o [Pea05, Operaciones entre rdenes de complejidad, pg(s) 9] a n o a Ecuacin de recurrencia: [Pea93, 1.5 Resolucin de recurrencias, pg(s) 14], o n o a [Pea97, 1.5 Resolucin de recurrencias, pg(s) 16] o [Pea05, 1.5 Resolucin n o a n o de recurrencias, pg(s) 16] a

Ejercicios y ejemplos
Hallar la complejidad de un programa iterativo como el de la suma de un vector que aparece en [Pea93, Ej 4.2, pg(s) 113], [Pea97, Ej 4.2, pg(s) 129] n a n a o [Pea05, Ej 4.3, pg(s) 141] n a Hallar la complejidad de un algoritmo recursivo que resuelva el problema por sustraccin como el del clculo del producto escalar de un vector que o a aparece en [Pea93, Fig. 3.6, pg(s) 72], [Pea97, Fig. 3.6, pg(s) 83] o [Pea05, n a n a n Fig. 3.6, pg(s) 91]. Para ste ultimo, comparar la complejidad del diseo no a e n nal con la complejidad del diseo con recursividad nal ([Pea93, Fig. 3.7, n n pg(s) 76], [Pea97, Fig. 3.7, pg(s) 87]) o [Pea05, Fig. 3.7, pg(s) 96]) a n a n a

Curso 2006-2007

27

Errores ms habituales a
Desconocer la jerarqu de rdenes de complejidad (Ver [Pea93, Ej. 1.3, a o n pg(s) 6], [Pea97, Ej. 1.3, pg(s) 7] o [Pea05, Ej. 1.3, pg(s) 8] y [Pea93, a n a n a n Fig. 1.1, pg(s) 9], [Pea97, Fig. 1.1, pg(s) 11] o [Pea05, Fig. 1.1, pg(s) 11] a n a n a

Cuestiones propuestas
Cundo se puede decir que un problema es intratable desde el punto de vista a computacional? Cmo afecta duplicar el tamao del problema para algoritmos con orden o n O(n log n)?

Temporizacin y requisitos o
Entre 2 y 4 horas para el estudio de las medidas asintticas y 1 2 horas para o o la realizacin de ejercicios o

Cap tulo 4

Transformacin de o Recursividad en Iteratividad


4.1. Transformacin nal o

Introduccin o
qu se va a estudiar? Se detalla una tcnica para pasar programas recursie e vos nales con esquema general como el descrito en [Pea93, Fig. 3.2, pg(s) 53], n a [Pea97, Fig. 3.2, pg(s) 61] o [Pea05, Fig. 3.2, pg(s) 68] a iterativos. n a n a qu utilidad tiene? e Nuestro lenguaje no soporta la recursividad Ahorro de memoria de pila.

Conceptos fundamentales
Es importante observar que lo que en realidad hace el esquema recursivo aludido
bucle

es calcular triv(s(s(. . . s(s(x)) . . .)))

Ejercicios y ejemplos
El ejemplo [Pea93, Ej. 3.5, pg(s) 91], [Pea97, Ej. 3.5, pg(s) 105] o [Pea05, n a n a n Ej. 3.5, pg(s) 114] es un ejercicio completo de transformacin. a o [Col2k3, 9.1, pg(s) 79]. a

Errores ms habituales a
Obtener un invariante incorrecto a causa de aplicar sin interpretar la expresin [Pea93, Frmula 3.19, pg(s) 88], [Pea97, Frmula 3.19, pg(s) 101] o n o a n o a o [Pea05, Frmula 3.19, pg(s) 110]. Para obtener dicho invariante se debe n o a proceder de la misma manera que cuando se refuerza la precondicin de una o funcin inmersora obtenida por desplegado y plegado de cara a conseguir que o la postcondicin sea constante (esto es, que no dependa de los parmetros de o a inmersin). o 28

Curso 2006-2007

29

Cuestiones propuestas
Por qu hace falta solo un bucle para implementar el equivalente iterativo de e un programa con recursividad nal?

Temporizacin y requisitos o
Entre 2 y 3 horas para el estudio del tema y otras 3 horas de realizacin de o ejercicios

Bibliograf a
[Balc93] [CCM+ 93] [Col2k3] [Pea93] n [Pea97] n [Pea05] n J.L. Balczar. Programacin Metdica. McGraw-Hill, 1993. a o o J. Castro, F. Cucker, X. Messeguer, A. Rubio, L. Solano y B. Valles. Curso de Programacin. McGraw-Hill, 1993. o J.I. Mayorga, F. Lpez y M. Rodr o guez. Coleccin de problemas de o Programacin II. 2003. o R. Pea. Diseo de Programas: formalismo y abstraccin. Prentice n n o Hall, 1993. o R. Pea. Diseo de Programas: formalismo y abstraccin, 2a Edicin. n n o Prentice Hall, 1997. R. Pea. Diseo de Programas: formalismo y abstraccin, 3a Edicin. n n o o Pearson-Prentice Hall, 2005.

30

También podría gustarte