Piensa en Haskell-libre

428
Piensa en Haskell (Ejercicios de programación funcional con Haskell) José A. Alonso Jiménez M a José Hidalgo Doblado Grupo de Lógica Computacional Dpto. de Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla Sevilla, 10 de Julio de 2012 (Versión de 11 de octubre de 2012)

description

programacion

Transcript of Piensa en Haskell-libre

Piensa en Haskell(Ejercicios de programación funcional con Haskell)

José A. Alonso JiménezMa José Hidalgo Doblado

Grupo de Lógica ComputacionalDpto. de Ciencias de la Computación e Inteligencia ArtificialUniversidad de SevillaSevilla, 10 de Julio de 2012 (Versión de 11 de octubre de 2012)

2

A mi amigo Felipe

3

Esta obra está bajo una licencia Reconocimiento–NoComercial–CompartirIgual 2.5 Spainde Creative Commons.

Se permite:

copiar, distribuir y comunicar públicamente la obra

hacer obras derivadas

Bajo las condiciones siguientes:

Reconocimiento. Debe reconocer los créditos de la obra de la manera especificadapor el autor.

No comercial. No puede utilizar esta obra para fines comerciales.

Compartir bajo la misma licencia. Si altera o transforma esta obra, o genera unaobra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica aésta.

Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia deesta obra.

Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de losderechos de autor.

Esto es un resumen del texto legal (la licencia completa). Para ver una copia de estalicencia, visite ❤tt♣✿✴✴❝r❡❛t✐✈❡❝♦♠♠♦♥s✳♦r❣✴❧✐❝❡♥s❡s✴❜②✲♥❝✲s❛✴✷✳✺✴❡s✴ o envie unacarta a Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.

4

Índice general

I Introducción a la programación funcional 19

1 Definiciones elementales de funciones 21

1.1 Media de 3 números . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221.2 Suma de euros de una colección de monedas . . . . . . . . . . . . . . . . 231.3 Volumen de la esfera . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231.4 Área de una corona circular . . . . . . . . . . . . . . . . . . . . . . . . . . 231.5 Última cifra de un número . . . . . . . . . . . . . . . . . . . . . . . . . . . 241.6 Máximo de 3 elementos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241.7 Disyunción excluyente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241.8 Rotación de listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251.9 Rango de una lista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261.10 Reconocimiento de palíndromos . . . . . . . . . . . . . . . . . . . . . . . . 261.11 Elementos interiores de una lista . . . . . . . . . . . . . . . . . . . . . . . . 261.12 Finales de una lista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271.13 Segmentos de una lista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271.14 Extremos de una lista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271.15 Mediano de 3 números . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271.16 Igualdad y diferencia de 3 elementos . . . . . . . . . . . . . . . . . . . . . 281.17 Igualdad de 4 elementos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291.18 Propiedad triangular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291.19 División segura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291.20 Disyunción excluyente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301.21 Módulo de un vector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301.22 Rectángulo de área máxima . . . . . . . . . . . . . . . . . . . . . . . . . . 311.23 Puntos del plano . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

1.23.1 Cuadrante de un punto . . . . . . . . . . . . . . . . . . . . . . . . . 311.23.2 Intercambio de coordenadas . . . . . . . . . . . . . . . . . . . . . . 31

5

6 Índice general

1.23.3 Punto simétrico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321.23.4 Distancia entre dos puntos . . . . . . . . . . . . . . . . . . . . . . . 321.23.5 Punto medio entre otros dos . . . . . . . . . . . . . . . . . . . . . . 32

1.24 Números complejos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331.24.1 Suma de dos números complejos . . . . . . . . . . . . . . . . . . . 331.24.2 Producto de dos números complejos . . . . . . . . . . . . . . . . . 331.24.3 Conjugado de un número complejo . . . . . . . . . . . . . . . . . . 33

1.25 Intercalación de pares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341.26 Permutación cíclica de una lista . . . . . . . . . . . . . . . . . . . . . . . . 341.27 Mayor número de 2 cifras con dos dígitos dados . . . . . . . . . . . . . . 341.28 Número de raíces de una ecuación cuadrática . . . . . . . . . . . . . . . . 351.29 Raíces de las ecuaciones cuadráticas . . . . . . . . . . . . . . . . . . . . . 351.30 Área de un triángulo mediante la fórmula de Herón . . . . . . . . . . . . 361.31 Números racionales como pares de enteros . . . . . . . . . . . . . . . . . 36

1.31.1 Forma reducida de un número racional . . . . . . . . . . . . . . . . 361.31.2 Suma de dos números racionales . . . . . . . . . . . . . . . . . . . 361.31.3 Producto de dos números racionales . . . . . . . . . . . . . . . . . 371.31.4 Igualdad de números racionales . . . . . . . . . . . . . . . . . . . . 37

2 Definiciones por comprensión 39

2.1 Suma de los cuadrados de los n primeros números . . . . . . . . . . . . . 402.2 Listas con un elemento replicado . . . . . . . . . . . . . . . . . . . . . . . 402.3 Triángulos aritméticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402.4 Números perfectos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412.5 Números abundantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422.6 Problema 1 del proyecto Euler . . . . . . . . . . . . . . . . . . . . . . . . . 432.7 Número de pares de naturales en un círculo . . . . . . . . . . . . . . . . . 442.8 Aproximación del número e . . . . . . . . . . . . . . . . . . . . . . . . . . 442.9 Aproximación del límite . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462.10 Cálculo del número π . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462.11 Ternas pitagóricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472.12 Problema 9 del Proyecto Euler . . . . . . . . . . . . . . . . . . . . . . . . . 482.13 Producto escalar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492.14 Suma de pares de elementos consecutivos . . . . . . . . . . . . . . . . . . 502.15 Posiciones de un elemento en una lista . . . . . . . . . . . . . . . . . . . . 502.16 Representación densa de un polinomio representado dispersamente . . . 512.17 Producto cartesiano . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

Índice general 7

2.18 Consulta de bases de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

3 Definiciones por recursión 55

3.1 Potencia de exponente natural . . . . . . . . . . . . . . . . . . . . . . . . . 563.2 Replicación de un elemento . . . . . . . . . . . . . . . . . . . . . . . . . . 563.3 Doble factorial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573.4 Algoritmo de Euclides del máximo común divisor . . . . . . . . . . . . . 573.5 Menor número divisible por una sucesión de números . . . . . . . . . . . 583.6 Número de pasos para resolver el problema de las torres de Hanoi . . . . 593.7 Conjunción de una lista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593.8 Pertenencia a una lista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603.9 Último elemento de una lista . . . . . . . . . . . . . . . . . . . . . . . . . . 603.10 Concatenación de una lista . . . . . . . . . . . . . . . . . . . . . . . . . . . 613.11 Selección de un elemento . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613.12 Selección de los primeros elementos . . . . . . . . . . . . . . . . . . . . . . 613.13 Intercalación de la media aritmética . . . . . . . . . . . . . . . . . . . . . . 623.14 Ordenación por mezcla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

3.14.1 Mezcla de listas ordenadas . . . . . . . . . . . . . . . . . . . . . . . 623.14.2 Mitades de una lista . . . . . . . . . . . . . . . . . . . . . . . . . . . 633.14.3 Ordenación por mezcla . . . . . . . . . . . . . . . . . . . . . . . . . 633.14.4 La ordenación por mezcla da listas ordenadas . . . . . . . . . . . . 633.14.5 La ordenación por mezcla da una permutación . . . . . . . . . . . 643.14.6 Determinación de permutaciones . . . . . . . . . . . . . . . . . . . 65

4 Definiciones por recursión y por comprensión 67

4.1 Suma de los cuadrados de los primeros números . . . . . . . . . . . . . . 684.2 Número de bloques de escaleras triangulares . . . . . . . . . . . . . . . . 704.3 Suma de los cuadrados de los impares entre los primeros números . . . . 714.4 Operaciones con los dígitos de los números . . . . . . . . . . . . . . . . . 72

4.4.1 Lista de los dígitos de un número . . . . . . . . . . . . . . . . . . . 724.4.2 Suma de los dígitos de un número . . . . . . . . . . . . . . . . . . 734.4.3 Decidir si es un dígito del número . . . . . . . . . . . . . . . . . . . 744.4.4 Número de dígitos de un número . . . . . . . . . . . . . . . . . . . 744.4.5 Número correspondiente a una lista de dígitos . . . . . . . . . . . 754.4.6 Concatenación de dos números . . . . . . . . . . . . . . . . . . . . 754.4.7 Primer dígito de un número . . . . . . . . . . . . . . . . . . . . . . 764.4.8 Último dígito de un número . . . . . . . . . . . . . . . . . . . . . . 774.4.9 Número con los dígitos invertidos . . . . . . . . . . . . . . . . . . 78

8 Índice general

4.4.10 Decidir si un número es capicúa . . . . . . . . . . . . . . . . . . . . 794.4.11 Suma de los dígitos de 21000 . . . . . . . . . . . . . . . . . . . . . . 794.4.12 Primitivo de un número . . . . . . . . . . . . . . . . . . . . . . . . 804.4.13 Números con igual media de sus dígitos . . . . . . . . . . . . . . . 804.4.14 Números con dígitos duplicados en su cuadrado . . . . . . . . . . 81

4.5 Cuadrados de los elementos de una lista . . . . . . . . . . . . . . . . . . . 824.6 Números impares de una lista . . . . . . . . . . . . . . . . . . . . . . . . . 834.7 Cuadrados de los elementos impares . . . . . . . . . . . . . . . . . . . . . 844.8 Suma de los cuadrados de los elementos impares . . . . . . . . . . . . . . 854.9 Intervalo numérico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 864.10 Mitades de los pares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 874.11 Pertenencia a un rango . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 884.12 Suma de elementos positivos . . . . . . . . . . . . . . . . . . . . . . . . . . 894.13 Aproximación del número π . . . . . . . . . . . . . . . . . . . . . . . . . . 904.14 Sustitución de impares por el siguiente par . . . . . . . . . . . . . . . . . 904.15 La compra de una persona agarrada . . . . . . . . . . . . . . . . . . . . . 914.16 Descomposición en productos de factores primos . . . . . . . . . . . . . . 92

4.16.1 Lista de los factores primos de un número . . . . . . . . . . . . . . 924.16.2 Decidir si un número es primo . . . . . . . . . . . . . . . . . . . . . 934.16.3 Factorización de un número . . . . . . . . . . . . . . . . . . . . . . 934.16.4 Exponente de la mayor potencia de un número que divide a otro . 934.16.5 Expansion de la factorización de un número . . . . . . . . . . . . . 94

4.17 Menor número con todos los dígitos en la factorización de su factorial . . 954.18 Suma de números especiales . . . . . . . . . . . . . . . . . . . . . . . . . . 984.19 Distancia de Hamming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 994.20 Traspuesta de una matriz . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1004.21 Números expresables como sumas acotadas de elementos de una lista . . 101

5 Funciones sobre cadenas 103

5.1 Suma de los dígitos de una cadena . . . . . . . . . . . . . . . . . . . . . . 1035.2 Capitalización de una cadena . . . . . . . . . . . . . . . . . . . . . . . . . 1055.3 Título con las reglas de mayúsculas iniciales . . . . . . . . . . . . . . . . . 1065.4 Búsqueda en crucigramas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1075.5 Posiciones de un carácter en una cadena . . . . . . . . . . . . . . . . . . . 1085.6 Decidir si una cadena es subcadena de otra . . . . . . . . . . . . . . . . . 1095.7 Codificación de mensajes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1115.8 Números de ceros finales . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

Índice general 9

6 Funciones de orden superior 117

6.1 Segmento inicial verificando una propiedad . . . . . . . . . . . . . . . . . 1186.2 Complementario del segmento inicial verificando una propiedad . . . . . 1186.3 Concatenación de una lista de listas . . . . . . . . . . . . . . . . . . . . . . 1196.4 División de una lista numérica según su media . . . . . . . . . . . . . . . 1196.5 Segmentos cuyos elementos verifican una propiedad . . . . . . . . . . . . 1226.6 Listas con elementos consecutivos relacionados . . . . . . . . . . . . . . . 1226.7 Agrupamiento de elementos de una lista de listas . . . . . . . . . . . . . . 1236.8 Números con dígitos pares . . . . . . . . . . . . . . . . . . . . . . . . . . . 1236.9 Lista de los valores de los elementos que cumplen una propiedad . . . . 1256.10 Máximo elemento de una lista . . . . . . . . . . . . . . . . . . . . . . . . . 1266.11 Mínimo elemento de una lista . . . . . . . . . . . . . . . . . . . . . . . . . 1276.12 Inversa de una lista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1276.13 Número correspondiente a la lista de sus cifras . . . . . . . . . . . . . . . 1306.14 Suma de valores de una aplicación a una lista . . . . . . . . . . . . . . . . 1316.15 Redefinición de la función ♠❛♣ usando ❢♦❧❞r . . . . . . . . . . . . . . . . 1326.16 Redefinición de la función ❢✐❧t❡r usando ❢♦❧❞r . . . . . . . . . . . . . . 1326.17 Suma de las sumas de las listas de una lista de listas . . . . . . . . . . . . 1336.18 Lista obtenida borrando las ocurrencias de un elemento . . . . . . . . . . 1346.19 Diferencia de dos listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1356.20 Producto de los números que verifican una propiedad . . . . . . . . . . . 1366.21 Las cabezas y las colas de una lista . . . . . . . . . . . . . . . . . . . . . . 137

7 Listas infinitas 141

7.1 Lista obtenida repitiendo un elemento . . . . . . . . . . . . . . . . . . . . 1427.2 Lista obtenida repitiendo cada elemento según su posición . . . . . . . . 1447.3 Potencias de un número menores que otro dado . . . . . . . . . . . . . . . 1447.4 Múltiplos cuyos dígitos verifican una propiedad . . . . . . . . . . . . . . 1457.5 Aplicación iterada de una función a un elemento . . . . . . . . . . . . . . 1457.6 Agrupamiento de elementos consecutivos . . . . . . . . . . . . . . . . . . 1467.7 La sucesión de Collatz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1487.8 Números primos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1507.9 Descomposiciones como suma de dos primos . . . . . . . . . . . . . . . . 1517.10 Números expresables como producto de dos primos . . . . . . . . . . . . 1527.11 Números muy compuestos . . . . . . . . . . . . . . . . . . . . . . . . . . . 152

10 Índice general

7.12 Suma de números primos truncables . . . . . . . . . . . . . . . . . . . . . 1547.13 Primos permutables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1557.14 Ordenación de los números enteros . . . . . . . . . . . . . . . . . . . . . . 1557.15 La sucesión de Hamming . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1577.16 Suma de los primos menores que n . . . . . . . . . . . . . . . . . . . . . . 1607.17 Menor número triangular con más de n divisores . . . . . . . . . . . . . . 1617.18 Números primos consecutivos con dígitos con igual media . . . . . . . . 1627.19 Decisión de pertenencia al rango de una función creciente . . . . . . . . . 1637.20 Pares ordenados por posición . . . . . . . . . . . . . . . . . . . . . . . . . 1637.21 Aplicación iterada de una función . . . . . . . . . . . . . . . . . . . . . . . 1657.22 Expresión de un número como suma de dos de una lista . . . . . . . . . . 1657.23 La bicicleta de Turing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1667.24 Sucesión de Golomb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167

8 Tipos definidos y de datos algebraicos 171

8.1 Puntos cercanos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1728.2 TDA de los números naturales . . . . . . . . . . . . . . . . . . . . . . . . . 173

8.2.1 Suma de números naturales . . . . . . . . . . . . . . . . . . . . . . 1738.2.2 Producto de números naturales . . . . . . . . . . . . . . . . . . . . 173

8.3 TDA de árboles binarios con valores en los nodos y en las hojas . . . . . . 1748.3.1 Ocurrencia de un elemento en el árbol . . . . . . . . . . . . . . . . 174

8.4 TDA de árboles binarios con valores en las hojas . . . . . . . . . . . . . . 1758.4.1 Número de hojas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1768.4.2 Carácter balanceado de un árbol . . . . . . . . . . . . . . . . . . . . 1768.4.3 Árbol balanceado correspondiente a una lista . . . . . . . . . . . . 177

8.5 TDA de árboles binarios con valores en los nodos . . . . . . . . . . . . . . 1778.5.1 Número de hojas de un árbol . . . . . . . . . . . . . . . . . . . . . 1788.5.2 Número de nodos de un árbol . . . . . . . . . . . . . . . . . . . . . 1788.5.3 Profundidad de un árbol . . . . . . . . . . . . . . . . . . . . . . . . 1798.5.4 Recorrido preorden de un árbol . . . . . . . . . . . . . . . . . . . . 1798.5.5 Recorrido postorden de un árbol . . . . . . . . . . . . . . . . . . . 1808.5.6 Recorrido preorden de forma iterativa . . . . . . . . . . . . . . . . 1808.5.7 Imagen especular de un árbol . . . . . . . . . . . . . . . . . . . . . 1818.5.8 Subárbol de profundidad dada . . . . . . . . . . . . . . . . . . . . 1818.5.9 Árbol infinito generado con un elemento . . . . . . . . . . . . . . . 1828.5.10 Árbol de profundidad dada cuyos nodos son iguales a un elemento1838.5.11 Rama izquierda de un árbol . . . . . . . . . . . . . . . . . . . . . . 183

8.6 TAD de fórmulas proposicionales . . . . . . . . . . . . . . . . . . . . . . . 184

Índice general 11

8.7 Modelización de un juego de cartas . . . . . . . . . . . . . . . . . . . . . . 1898.8 Evaluación de expresiones aritméticas . . . . . . . . . . . . . . . . . . . . 1968.9 Número de variables de una expresión aritmética . . . . . . . . . . . . . . 1978.10 Sustituciones en expresiones aritméticas . . . . . . . . . . . . . . . . . . . 198

9 Demostración de propiedades por inducción 199

9.1 Suma de los primeros números impares . . . . . . . . . . . . . . . . . . . 1999.2 Uno más la suma de potencias de dos . . . . . . . . . . . . . . . . . . . . . 2019.3 Copias de un elemento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203

II Tipos abstractos de datos y algorítmica 207

10 Polinomios 209

10.1 El TAD de los polinomios . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21010.1.1 Especificación del TAD de los polinomios . . . . . . . . . . . . . . 21010.1.2 Los polinomios como tipo de dato algebraico . . . . . . . . . . . . 21110.1.3 Los polinomios como listas dispersas . . . . . . . . . . . . . . . . . 21410.1.4 Los polinomios como listas densas . . . . . . . . . . . . . . . . . . 21710.1.5 Comprobación de las implementaciones con QuickCheck . . . . . 220

10.2 Operaciones con polinomios . . . . . . . . . . . . . . . . . . . . . . . . . . 22310.2.1 Funciones sobre términos . . . . . . . . . . . . . . . . . . . . . . . . 22410.2.2 Suma de polinomios . . . . . . . . . . . . . . . . . . . . . . . . . . 22510.2.3 Producto de polinomios . . . . . . . . . . . . . . . . . . . . . . . . 22610.2.4 El polinomio unidad . . . . . . . . . . . . . . . . . . . . . . . . . . 22710.2.5 Resta de polinomios . . . . . . . . . . . . . . . . . . . . . . . . . . . 22810.2.6 Valor de un polinomio en un punto . . . . . . . . . . . . . . . . . . 22810.2.7 Verificación de raices de polinomios . . . . . . . . . . . . . . . . . 22810.2.8 Derivación de polinomios . . . . . . . . . . . . . . . . . . . . . . . 229

10.3 Ejercicios sobre polinomios . . . . . . . . . . . . . . . . . . . . . . . . . . . 22910.3.1 Polinomio a partir de la representación dispersa . . . . . . . . . . 23010.3.2 Polinomio a partir de la representación densa . . . . . . . . . . . . 23010.3.3 Representación densa de un polinomio . . . . . . . . . . . . . . . . 23110.3.4 Transformación de la representación densa a dispersa . . . . . . . 23110.3.5 Representación dispersa de un polinomio . . . . . . . . . . . . . . 23110.3.6 Coeficiente del término de grado k . . . . . . . . . . . . . . . . . . 23210.3.7 Lista de los coeficientes de un polinomio . . . . . . . . . . . . . . . 23210.3.8 Potencia de un polinomio . . . . . . . . . . . . . . . . . . . . . . . 23310.3.9 Integración de polinomios . . . . . . . . . . . . . . . . . . . . . . . 23410.3.10 Multiplicación de un polinomio por un número . . . . . . . . . . . 235

12 Índice general

10.3.11 División de polinomios . . . . . . . . . . . . . . . . . . . . . . . . . 23510.3.12 Divisibilidad de polinomios . . . . . . . . . . . . . . . . . . . . . . 236

10.4 La regla de Ruffini . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23810.4.1 Divisores de un número . . . . . . . . . . . . . . . . . . . . . . . . 23810.4.2 Término independiente de un polinomio . . . . . . . . . . . . . . . 23810.4.3 Paso de la regla de Ruffini . . . . . . . . . . . . . . . . . . . . . . . 23910.4.4 Cociente mediante la regla de Ruffini . . . . . . . . . . . . . . . . . 23910.4.5 Resto mediante la regla de Ruffini . . . . . . . . . . . . . . . . . . . 24010.4.6 Raíces mediante la regla de Ruffini . . . . . . . . . . . . . . . . . . 24010.4.7 Factorización mediante la regla de Ruffini . . . . . . . . . . . . . . 241

11 Vectores y matrices 243

11.1 Posiciones de un elemento en una matriz . . . . . . . . . . . . . . . . . . . 24411.2 Tipos de los vectores y de las matrices . . . . . . . . . . . . . . . . . . . . 24411.3 Operaciones básicas con matrices . . . . . . . . . . . . . . . . . . . . . . . 24511.4 Suma de matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24711.5 Producto de matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24911.6 Traspuestas y simétricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25011.7 Diagonales de una matriz . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25111.8 Submatrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25211.9 Transformaciones elementales . . . . . . . . . . . . . . . . . . . . . . . . . 25211.10 Triangularización de matrices . . . . . . . . . . . . . . . . . . . . . . . . . 25511.11 Algoritmo de Gauss para triangularizar matrices . . . . . . . . . . . . . . 25711.12 Determinante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26011.13 Máximo de las sumas de elementos de una matriz en líneas distintas . . 261

12 Relaciones binarias homogéneas 265

12.1 Tipo de dato de las relaciones binarias . . . . . . . . . . . . . . . . . . . . 26612.2 Universo de una relación . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26612.3 Grafo de una relación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26712.4 Relaciones reflexivas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26712.5 Relaciones simétricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26712.6 Reconocimiento de subconjuntos . . . . . . . . . . . . . . . . . . . . . . . 26812.7 Composición de relaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . 26812.8 Relación transitiva . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26812.9 Relación de equivalencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26912.10 Relación irreflexiva . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269

Índice general 13

12.11 Relación antisimétrica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26912.12 Relación total . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27012.13 Clausura reflexiva . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27112.14 Clausura simétrica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27212.15 Clausura transitiva . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273

13 Operaciones con conjuntos 275

13.1 Representación de conjuntos y operaciones básicas . . . . . . . . . . . . . 27613.1.1 El tipo de los conjuntos . . . . . . . . . . . . . . . . . . . . . . . . . 27613.1.2 El conjunto vacío . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27713.1.3 Reconocimiento del conjunto vacío . . . . . . . . . . . . . . . . . . 27713.1.4 Pertenencia de un elemento a un conjunto . . . . . . . . . . . . . . 27713.1.5 Inserción de un elemento en un conjunto . . . . . . . . . . . . . . . 27813.1.6 Eliminación de un elemento de un conjunto . . . . . . . . . . . . . 278

13.2 Ejercicios sobre conjuntos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27813.2.1 Reconocimiento de subconjuntos . . . . . . . . . . . . . . . . . . . 27813.2.2 Reconocimiento de subconjunto propio . . . . . . . . . . . . . . . 28013.2.3 Conjunto unitario . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28113.2.4 Cardinal de un conjunto . . . . . . . . . . . . . . . . . . . . . . . . 28113.2.5 Unión de conjuntos . . . . . . . . . . . . . . . . . . . . . . . . . . . 28113.2.6 Unión de una lista de conjuntos . . . . . . . . . . . . . . . . . . . . 28213.2.7 Intersección de conjuntos . . . . . . . . . . . . . . . . . . . . . . . . 28313.2.8 Intersección de una lista de conjuntos . . . . . . . . . . . . . . . . . 28413.2.9 Conjuntos disjuntos . . . . . . . . . . . . . . . . . . . . . . . . . . . 28413.2.10 Diferencia de conjuntos . . . . . . . . . . . . . . . . . . . . . . . . . 28513.2.11 Diferencia simétrica de conjuntos . . . . . . . . . . . . . . . . . . . 28513.2.12 Filtrado en conjuntos . . . . . . . . . . . . . . . . . . . . . . . . . . 28513.2.13 Partición de un conjunto según una propiedad . . . . . . . . . . . 28613.2.14 División de un conjunto según un elemento . . . . . . . . . . . . . 28613.2.15 Aplicación de una función a un conjunto . . . . . . . . . . . . . . . 28613.2.16 Todos los elementos verifican una propiedad . . . . . . . . . . . . 28713.2.17 Algunos elementos verifican una propiedad . . . . . . . . . . . . . 28713.2.18 Producto cartesiano . . . . . . . . . . . . . . . . . . . . . . . . . . . 28713.2.19 Orden en el tipo de los conjuntos . . . . . . . . . . . . . . . . . . . 28813.2.20 Conjunto potencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28813.2.21 Verificación de propiedades de conjuntos . . . . . . . . . . . . . . 288

14 Grafos 295

14.1 El TAD de los grafos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29614.1.1 Especificación del TAD de los grafos . . . . . . . . . . . . . . . . . 296

14 Índice general

14.1.2 Los grafos como vectores de adyacencia . . . . . . . . . . . . . . . 29714.1.3 Los grafos como matrices de adyacencia . . . . . . . . . . . . . . . 30014.1.4 Los grafos como listas . . . . . . . . . . . . . . . . . . . . . . . . . . 304

14.2 Ejercicios sobre grafos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30914.2.1 Generador de grafos . . . . . . . . . . . . . . . . . . . . . . . . . . . 31014.2.2 El grafo completo de orden n . . . . . . . . . . . . . . . . . . . . . 31214.2.3 El ciclo de orden n . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31214.2.4 Número de vértices . . . . . . . . . . . . . . . . . . . . . . . . . . . 31314.2.5 Reconocimiento de grafos no dirigidos . . . . . . . . . . . . . . . . 31314.2.6 Vértices incidentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31414.2.7 Vértices contiguos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31414.2.8 Lazos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31414.2.9 Número de lazos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31514.2.10 Número de aristas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31514.2.11 Grado positivo de un vértice . . . . . . . . . . . . . . . . . . . . . . 31614.2.12 Grado negativo de un vértice . . . . . . . . . . . . . . . . . . . . . 31714.2.13 Grado de un vértice . . . . . . . . . . . . . . . . . . . . . . . . . . . 31714.2.14 Grafos regulares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31914.2.15 Grafos k–regulares . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320

III Casos de estudio 323

15 El cifrado César 325

15.1 Codificación y descodificación . . . . . . . . . . . . . . . . . . . . . . . . . 32515.2 Análisis de frecuencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32815.3 Descifrado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329

16 Codificación y transmisión de mensajes 331

16.1 Cambios de bases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33116.2 Codificación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33316.3 Descodificación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33516.4 Transmisión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336

17 Resolución de problemas matemáticos 337

17.1 El problema de Ullman sobre la existencia de subconjunto del tamañodado y con su suma acotada . . . . . . . . . . . . . . . . . . . . . . . . . . 338

17.2 Descomposiciones de un número como suma de dos cuadrados . . . . . 33917.3 Números reversibles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34017.4 Grafo de una función sobre los elementos que cumplen una propiedad . 341

Índice general 15

17.5 Números semiperfectos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34217.6 Decidir el carácter funcional de una relación . . . . . . . . . . . . . . . . . 34417.7 La identidad de Bézout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34417.8 Distancia entre dos conjuntos de números . . . . . . . . . . . . . . . . . . 34617.9 Expresables como suma de números consecutivos . . . . . . . . . . . . . 34617.10 Solución de una ecuación diofántica . . . . . . . . . . . . . . . . . . . . . . 348

18 El 2011 y los números primos 351

18.1 La criba de Eratótenes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35118.2 2011 es primo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35318.3 Primera propiedad del 2011 . . . . . . . . . . . . . . . . . . . . . . . . . . 35318.4 Segunda propiedad del 2011 . . . . . . . . . . . . . . . . . . . . . . . . . . 35518.5 Tercera propiedad del 2011 . . . . . . . . . . . . . . . . . . . . . . . . . . . 357

19 Combinatoria 359

19.1 Reconocimiento y generación de subconjuntos . . . . . . . . . . . . . . . 35919.2 Permutaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36119.3 Combinaciones sin repetición . . . . . . . . . . . . . . . . . . . . . . . . . 36419.4 Combinaciones con repetición . . . . . . . . . . . . . . . . . . . . . . . . . 36719.5 Variaciones sin repetición . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36919.6 Variaciones con repetición . . . . . . . . . . . . . . . . . . . . . . . . . . . 37019.7 El triángulo de Pascal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372

20 Cálculo numérico 375

20.1 Diferenciación numérica . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37520.2 Cálculo de la raíz cuadrada mediante el método de Herón . . . . . . . . . 37720.3 Cálculo de los ceros de una función por el método de Newton . . . . . . 37920.4 Cálculo de funciones inversas . . . . . . . . . . . . . . . . . . . . . . . . . 380

21 Ecuación con factoriales 385

21.1 Cálculo de factoriales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38521.2 Decisión de si un número es un factorial . . . . . . . . . . . . . . . . . . . 38621.3 Inversa del factorial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38621.4 Enumeración de los pares de números naturales . . . . . . . . . . . . . . 38721.5 Solución de la ecuación con factoriales . . . . . . . . . . . . . . . . . . . . 388

22 Cuadrados mágicos 391

22.1 Reconocimiento de los cuadrados mágicos . . . . . . . . . . . . . . . . . . 392

16 Índice general

22.1.1 Traspuesta de una matriz . . . . . . . . . . . . . . . . . . . . . . . . 39222.1.2 Suma de las filas de una matriz . . . . . . . . . . . . . . . . . . . . 39322.1.3 Suma de las columnas de una matriz . . . . . . . . . . . . . . . . . 39322.1.4 Diagonal principal de una matriz . . . . . . . . . . . . . . . . . . . 39322.1.5 Diagonal secundaria de una matriz . . . . . . . . . . . . . . . . . . 39422.1.6 Lista con todos los elementos iguales . . . . . . . . . . . . . . . . . 39422.1.7 Reconocimiento de matrices cuadradas . . . . . . . . . . . . . . . . 39422.1.8 Elementos de una lista de listas . . . . . . . . . . . . . . . . . . . . 39522.1.9 Eliminación de la primera ocurrencia de un elemento . . . . . . . 39522.1.10 Reconocimiento de permutaciones . . . . . . . . . . . . . . . . . . 39522.1.11 Reconocimiento de cuadrados mágicos . . . . . . . . . . . . . . . . 396

22.2 Cálculo de los cuadrados mágicos . . . . . . . . . . . . . . . . . . . . . . . 39622.2.1 Matriz cuadrada correspondiente a una lista de elementos . . . . 39622.2.2 Cálculo de cuadrados mágicos por permutaciones . . . . . . . . . 39722.2.3 Cálculo de los cuadradros mágicos mediante generación y poda . 397

23 Enumeraciones de los números racionales 401

23.1 Numeración de los racionales mediante representaciones hiperbinarias . 40223.1.1 Lista de potencias de dos . . . . . . . . . . . . . . . . . . . . . . . . 40223.1.2 Determinación si los dos primeros elementos son iguales a uno

dado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40223.1.3 Lista de las representaciones hiperbinarias de n . . . . . . . . . . . 40323.1.4 Número de representaciones hiperbinarias de n . . . . . . . . . . . 40323.1.5 Sucesiones hiperbinarias . . . . . . . . . . . . . . . . . . . . . . . . 404

23.2 Numeraciones mediante árboles de Calkin–Wilf . . . . . . . . . . . . . . . 40623.2.1 Hijos de un nodo en el árbol de Calvin–Wilf . . . . . . . . . . . . . 40623.2.2 Niveles del árbol de Calvin–Wilf . . . . . . . . . . . . . . . . . . . 40723.2.3 Sucesión de Calvin–Wilf . . . . . . . . . . . . . . . . . . . . . . . . 408

23.3 Número de representaciones hiperbinarias mediante la función ❢✉s❝ . . 40823.3.1 La función ❢✉s❝ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408

IV Apéndices 411

A Resumen de funciones predefinidas de Haskell 413

B Método de Pólya para la resolución de problemas 417

B.1 Método de Pólya para la resolución de problemas matemáticos . . . . . . 417B.2 Método de Pólya para resolver problemas de programación . . . . . . . . 418

Bibliografía 421

Índice general 17

Indice de definiciones 421

18 Índice general

Este libro es una introducción a la programación funcional con Haskell a través deejercicios que se complementa con los Temas de programación funcional1.

El libro consta de tres partes. En la primera parte se presentan los elementos básicosde la programación funcional. En la segunda, se estudian la implementación en Haskellde tipos abstractos de datos y sus aplicaciones así como cuestiones algorítmicas. En latercera, se presentan casos de estudios. También se han incluido dos apéndices: uno conun resumen de las funciones de Haskell utilizadas y otro con el método de Pólya parala resolución de problemas.

Estos ejercicios se han utilizado en los cursos de “Informática (del Grado en Mate-máticas)”2 y “Programación declarativa (de la Ingeniería en Informática)”3.

1❤tt♣✿✴✴✇✇✇✳❝s✳✉s✳❡s✴⑦❥❛❧♦♥s♦✴❝✉rs♦s✴✐✶♠✴t❡♠❛s✴✷✵✶✶✲✶✷✲■▼✲t❡♠❛s✲P❋✳♣❞❢2❤tt♣✿✴✴✇✇✇✳❝s✳✉s✳❡s✴⑦❥❛❧♦♥s♦✴❝✉rs♦s✴✐✶♠✲✶✶3❤tt♣✿✴✴✇✇✇✳❝s✳✉s✳❡s✴⑦❥❛❧♦♥s♦✴❝✉rs♦s✴♣❞✲✵✾

Parte I

Introducción a la programaciónfuncional

19

Capítulo 1

Definiciones elementales de funciones

En este capítulo se plantean ejercicios con definiciones elementales (no recursivas)de funciones. Se corresponden con los 4 primeros temas de [1].

Contenido1.1 Media de 3 números . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

1.2 Suma de euros de una colección de monedas . . . . . . . . . . . . . . . 23

1.3 Volumen de la esfera . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

1.4 Área de una corona circular . . . . . . . . . . . . . . . . . . . . . . . . . 23

1.5 Última cifra de un número . . . . . . . . . . . . . . . . . . . . . . . . . 24

1.6 Máximo de 3 elementos . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

1.7 Disyunción excluyente . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

1.8 Rotación de listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

1.9 Rango de una lista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

1.10 Reconocimiento de palíndromos . . . . . . . . . . . . . . . . . . . . . . 26

1.11 Elementos interiores de una lista . . . . . . . . . . . . . . . . . . . . . . 26

1.12 Finales de una lista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

1.13 Segmentos de una lista . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

1.14 Extremos de una lista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

1.15 Mediano de 3 números . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

1.16 Igualdad y diferencia de 3 elementos . . . . . . . . . . . . . . . . . . . 28

1.17 Igualdad de 4 elementos . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

1.18 Propiedad triangular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

21

22 Capítulo 1. Definiciones elementales de funciones

1.19 División segura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

1.20 Disyunción excluyente . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

1.21 Módulo de un vector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

1.22 Rectángulo de área máxima . . . . . . . . . . . . . . . . . . . . . . . . . 31

1.23 Puntos del plano . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

1.23.1 Cuadrante de un punto . . . . . . . . . . . . . . . . . . . . . . . 31

1.23.2 Intercambio de coordenadas . . . . . . . . . . . . . . . . . . . . 31

1.23.3 Punto simétrico . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

1.23.4 Distancia entre dos puntos . . . . . . . . . . . . . . . . . . . . . 32

1.23.5 Punto medio entre otros dos . . . . . . . . . . . . . . . . . . . . 32

1.24 Números complejos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

1.24.1 Suma de dos números complejos . . . . . . . . . . . . . . . . . 33

1.24.2 Producto de dos números complejos . . . . . . . . . . . . . . . 33

1.24.3 Conjugado de un número complejo . . . . . . . . . . . . . . . . 33

1.25 Intercalación de pares . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

1.26 Permutación cíclica de una lista . . . . . . . . . . . . . . . . . . . . . . . 34

1.27 Mayor número de 2 cifras con dos dígitos dados . . . . . . . . . . . . . 34

1.28 Número de raíces de una ecuación cuadrática . . . . . . . . . . . . . . 35

1.29 Raíces de las ecuaciones cuadráticas . . . . . . . . . . . . . . . . . . . . 35

1.30 Área de un triángulo mediante la fórmula de Herón . . . . . . . . . . . 36

1.31 Números racionales como pares de enteros . . . . . . . . . . . . . . . . 36

1.31.1 Forma reducida de un número racional . . . . . . . . . . . . . . 36

1.31.2 Suma de dos números racionales . . . . . . . . . . . . . . . . . 36

1.31.3 Producto de dos números racionales . . . . . . . . . . . . . . . 37

1.31.4 Igualdad de números racionales . . . . . . . . . . . . . . . . . . 37

1.1. Media de 3 números

Ejercicio 1.1.1. Definir la función ♠❡❞✐❛✸ tal que ✭♠❡❞✐❛✸ ① ② ③✮ es la media aritmética de

los números ①, ② y ③. Por ejemplo,

1.2. Suma de euros de una colección de monedas 23

♠❡❞✐❛✸ ✶ ✸ ✽ ❂❂ ✹✳✵

♠❡❞✐❛✸ ✭✲✶✮ ✵ ✼ ❂❂ ✷✳✵

♠❡❞✐❛✸ ✭✲✸✮ ✵ ✸ ❂❂ ✵✳✵

Solución:

♠❡❞✐❛✸ ① ② ③ ❂ ✭①✰②✰③✮✴✸

1.2. Suma de euros de una colección de monedas

Ejercicio 1.2.1. Definir la función s✉♠❛▼♦♥❡❞❛s tal que ✭s✉♠❛▼♦♥❡❞❛s ❛ ❜ ❝ ❞ ❡✮ es la

suma de los euros correspondientes a ❛ monedas de 1 euro, ❜ de 2 euros, ❝ de 5 euros, ❞ 10 euros

y ❡ de 20 euros. Por ejemplo,

s✉♠❛▼♦♥❡❞❛s ✵ ✵ ✵ ✵ ✶ ❂❂ ✷✵

s✉♠❛▼♦♥❡❞❛s ✵ ✵ ✽ ✵ ✸ ❂❂ ✶✵✵

s✉♠❛▼♦♥❡❞❛s ✶ ✶ ✶ ✶ ✶ ❂❂ ✸✽

Solución:

s✉♠❛▼♦♥❡❞❛s ❛ ❜ ❝ ❞ ❡ ❂ ✶✯❛✰✷✯❜✰✺✯❝✰✶✵✯❞✰✷✵✯❡

1.3. Volumen de la esfera

Ejercicio 1.3.1. Definir la función ✈♦❧✉♠❡♥❊s❢❡r❛ tal que ✭✈♦❧✉♠❡♥❊s❢❡r❛ r✮ es el volumen

de la esfera de radio r. Por ejemplo,

✈♦❧✉♠❡♥❊s❢❡r❛ ✶✵ ❂❂ ✹✶✽✽✳✼✾✵✷✵✹✼✽✻✸✾✶

Indicación: Usar la constante ♣✐.

Solución:

✈♦❧✉♠❡♥❊s❢❡r❛ r ❂ ✭✹✴✸✮✯♣✐✯r❫✸

1.4. Área de una corona circular

Ejercicio 1.4.1. Definir la función ❛r❡❛❉❡❈♦r♦♥❛❈✐r❝✉❧❛r tal que ✭❛r❡❛❉❡❈♦r♦♥❛❈✐r❝✉❧❛r r✶ r✷✮

es el área de una corona circular de radio interior r✶ y radio exterior r✷. Por ejemplo,

24 Capítulo 1. Definiciones elementales de funciones

❛r❡❛❉❡❈♦r♦♥❛❈✐r❝✉❧❛r ✶ ✷ ❂❂ ✾✳✹✷✹✼✼✼✾✻✵✼✻✾✸✽

❛r❡❛❉❡❈♦r♦♥❛❈✐r❝✉❧❛r ✷ ✺ ❂❂ ✻✺✳✾✼✸✹✹✺✼✷✺✸✽✺✻✻

❛r❡❛❉❡❈♦r♦♥❛❈✐r❝✉❧❛r ✸ ✺ ❂❂ ✺✵✳✷✻✺✹✽✷✹✺✼✹✸✻✻✾

Solución:

❛r❡❛❉❡❈♦r♦♥❛❈✐r❝✉❧❛r r✶ r✷ ❂ ♣✐✯✭r✷❫✷ ✲r✶❫✷✮

1.5. Última cifra de un número

Ejercicio 1.5.1. Definir la función ✉❧t✐♠❛❈✐❢r❛ tal que ✭✉❧t✐♠❛❈✐❢r❛ ①✮ es la última cifra

del número ①. Por ejemplo,

✉❧t✐♠❛❈✐❢r❛ ✸✷✺ ❂❂ ✺

Solución:

✉❧t✐♠❛❈✐❢r❛ ① ❂ r❡♠ ① ✶✵

1.6. Máximo de 3 elementos

Ejercicio 1.6.1. Definir la función ♠❛①❚r❡s tal que ✭♠❛①❚r❡s ① ② ③✮ es el máximo de ①, ② y

③. Por ejemplo,

♠❛①❚r❡s ✻ ✷ ✹ ❂❂ ✻

♠❛①❚r❡s ✻ ✼ ✹ ❂❂ ✼

♠❛①❚r❡s ✻ ✼ ✾ ❂❂ ✾

Solución:

♠❛①❚r❡s ① ② ③ ❂ ♠❛① ① ✭♠❛① ② ③✮

1.7. Disyunción excluyente

La disyunción excluyente ①♦r de dos fórmulas se verifica si una es verdadera y laotra es falsa.

Ejercicio 1.7.1. Definir la función ①♦r✶ que calcule la disyunción excluyente a partir de la tabla

de verdad. Usar 4 ecuaciones, una por cada línea de la tabla.

Solución:

1.8. Rotación de listas 25

①♦r✶ ❚r✉❡ ❚r✉❡ ❂ ❋❛❧s❡

①♦r✶ ❚r✉❡ ❋❛❧s❡ ❂ ❚r✉❡

①♦r✶ ❋❛❧s❡ ❚r✉❡ ❂ ❚r✉❡

①♦r✶ ❋❛❧s❡ ❋❛❧s❡ ❂ ❋❛❧s❡

Ejercicio 1.7.2. Definir la función ①♦r✷ que calcule la disyunción excluyente a partir de la tabla

de verdad y patrones. Usar 2 ecuaciones, una por cada valor del primer argumento.

Solución:

①♦r✷ ❚r✉❡ ② ❂ ♥♦t ②

①♦r✷ ❋❛❧s❡ ② ❂ ②

Ejercicio 1.7.3. Definir la función ①♦r✸ que calcule la disyunción excluyente a partir de la

disyunción (⑤⑤), conjunción (✫✫) y negación (♥♦t). Usar 1 ecuación.

Solución:

①♦r✸ ① ② ❂ ✭① ⑤⑤ ②✮ ✫✫ ♥♦t ✭① ✫✫ ②✮

Ejercicio 1.7.4. Definir la función ①♦r✹ que calcule la disyunción excluyente a partir de de-

sigualdad (✴❂). Usar 1 ecuación.

Solución:

①♦r✹ ① ② ❂ ① ✴❂ ②

1.8. Rotación de listas

Ejercicio 1.8.1. Definir la función r♦t❛✶ tal que ✭r♦t❛✶ ①s✮ es la lista obtenida poniendo el

primer elemento de ①s al final de la lista. Por ejemplo,

r♦t❛✶ ❬✸✱✷✱✺✱✼❪ ❂❂ ❬✷✱✺✱✼✱✸❪

Solución:

r♦t❛✶ ①s ❂ t❛✐❧ ①s ✰✰ ❬❤❡❛❞ ①s❪

Ejercicio 1.8.2. Definir la función r♦t❛ tal que ✭r♦t❛ ♥ ①s✮ es la lista obtenida poniendo los

♥ primeros elementos de ①s al final de la lista. Por ejemplo,

r♦t❛ ✶ ❬✸✱✷✱✺✱✼❪ ❂❂ ❬✷✱✺✱✼✱✸❪

r♦t❛ ✷ ❬✸✱✷✱✺✱✼❪ ❂❂ ❬✺✱✼✱✸✱✷❪

r♦t❛ ✸ ❬✸✱✷✱✺✱✼❪ ❂❂ ❬✼✱✸✱✷✱✺❪

Solución:

r♦t❛ ♥ ①s ❂ ❞r♦♣ ♥ ①s ✰✰ t❛❦❡ ♥ ①s

26 Capítulo 1. Definiciones elementales de funciones

1.9. Rango de una lista

Ejercicio 1.9.1. Definir la función r❛♥❣♦ tal que ✭r❛♥❣♦ ①s✮ es la lista formada por el menor

y mayor elemento de ①s. Por ejemplo,

r❛♥❣♦ ❬✸✱✷✱✼✱✺❪ ❂❂ ❬✷✱✼❪

Indicación: Se pueden usar ♠✐♥✐♠✉♠ y ♠❛①✐♠✉♠.

Solución:

r❛♥❣♦ ①s ❂ ❬♠✐♥✐♠✉♠ ①s✱ ♠❛①✐♠✉♠ ①s❪

1.10. Reconocimiento de palíndromos

Ejercicio 1.10.1. Definir la función ♣❛❧✐♥❞r♦♠♦ tal que ✭♣❛❧✐♥❞r♦♠♦ ①s✮ se verifica si ①s es

un palíndromo; es decir, es lo mismo leer ①s de izquierda a derecha que de derecha a izquierda.

Por ejemplo,

♣❛❧✐♥❞r♦♠♦ ❬✸✱✷✱✺✱✷✱✸❪ ❂❂ ❚r✉❡

♣❛❧✐♥❞r♦♠♦ ❬✸✱✷✱✺✱✻✱✷✱✸❪ ❂❂ ❋❛❧s❡

Solución:

♣❛❧✐♥❞r♦♠♦ ①s ❂ ①s ❂❂ r❡✈❡rs❡ ①s

1.11. Elementos interiores de una lista

Ejercicio 1.11.1. Definir la función ✐♥t❡r✐♦r tal que ✭✐♥t❡r✐♦r ①s✮ es la lista obtenida eli-

minando los extremos de la lista ①s. Por ejemplo,

✐♥t❡r✐♦r ❬✷✱✺✱✸✱✼✱✸❪ ❂❂ ❬✺✱✸✱✼❪

✐♥t❡r✐♦r ❬✷✳✳✼❪ ❂❂ ❬✸✱✹✱✺✱✻❪

Solución:

✐♥t❡r✐♦r ①s ❂ t❛✐❧ ✭✐♥✐t ①s✮

1.12. Finales de una lista 27

1.12. Finales de una lista

Ejercicio 1.12.1. Definir la función ❢✐♥❛❧❡s tal que ✭❢✐♥❛❧❡s ♥ ①s✮ es la lista formada por

los ♥ finales elementos de ①s. Por ejemplo,

❢✐♥❛❧❡s ✸ ❬✷✱✺✱✹✱✼✱✾✱✻❪ ❂❂ ❬✼✱✾✱✻❪

Solución:

❢✐♥❛❧❡s ♥ ①s ❂ ❞r♦♣ ✭❧❡♥❣t❤ ①s ✲ ♥✮ ①s

1.13. Segmentos de una lista

Ejercicio 1.13.1. Definir la función s❡❣♠❡♥t♦ tal que ✭s❡❣♠❡♥t♦ ♠ ♥ ①s✮ es la lista de los

elementos de ①s comprendidos entre las posiciones ♠ y ♥. Por ejemplo,

s❡❣♠❡♥t♦ ✸ ✹ ❬✸✱✹✱✶✱✷✱✼✱✾✱✵❪ ❂❂ ❬✶✱✷❪

s❡❣♠❡♥t♦ ✸ ✺ ❬✸✱✹✱✶✱✷✱✼✱✾✱✵❪ ❂❂ ❬✶✱✷✱✼❪

s❡❣♠❡♥t♦ ✺ ✸ ❬✸✱✹✱✶✱✷✱✼✱✾✱✵❪ ❂❂ ❬❪

Solución:

s❡❣♠❡♥t♦ ♠ ♥ ①s ❂ ❞r♦♣ ✭♠✲✶✮ ✭t❛❦❡ ♥ ①s✮

1.14. Extremos de una lista

Ejercicio 1.14.1. Definir la función ❡①tr❡♠♦s tal que ✭❡①tr❡♠♦s ♥ ①s✮ es la lista formada

por los ♥ primeros elementos de ①s y los ♥ finales elementos de ①s. Por ejemplo,

❡①tr❡♠♦s ✸ ❬✷✱✻✱✼✱✶✱✷✱✹✱✺✱✽✱✾✱✷✱✸❪ ❂❂ ❬✷✱✻✱✼✱✾✱✷✱✸❪

Solución:

❡①tr❡♠♦s ♥ ①s ❂ t❛❦❡ ♥ ①s ✰✰ ❞r♦♣ ✭❧❡♥❣t❤ ①s ✲ ♥✮ ①s

1.15. Mediano de 3 números

Ejercicio 1.15.1. Definir la función ♠❡❞✐❛♥♦ tal que ✭♠❡❞✐❛♥♦ ① ② ③✮ es el número mediano

de los tres números ①, ② y ③. Por ejemplo,

28 Capítulo 1. Definiciones elementales de funciones

♠❡❞✐❛♥♦ ✸ ✷ ✺ ❂❂ ✸

♠❡❞✐❛♥♦ ✷ ✹ ✺ ❂❂ ✹

♠❡❞✐❛♥♦ ✷ ✻ ✺ ❂❂ ✺

♠❡❞✐❛♥♦ ✷ ✻ ✻ ❂❂ ✻

Solución: Se presentan dos soluciones. La primera es

♠❡❞✐❛♥♦ ① ② ③ ❂ ① ✰ ② ✰ ③✲ ♠✐♥✐♠✉♠ ❬①✱②✱③❪ ✲ ♠❛①✐♠✉♠ ❬①✱②✱③❪

La segunda es

♠❡❞✐❛♥♦✬ ① ② ③

⑤ ❛ ❁❂ ① ✫✫ ① ❁❂ ❜ ❂ ①

⑤ ❛ ❁❂ ② ✫✫ ② ❁❂ ❜ ❂ ②

⑤ ♦t❤❡r✇✐s❡ ❂ ③

✇❤❡r❡ ❛ ❂ ♠✐♥✐♠✉♠ ❬①✱②✱③❪

❜ ❂ ♠❛①✐♠✉♠ ❬①✱②✱③❪

1.16. Igualdad y diferencia de 3 elementos

Ejercicio 1.16.1. Definir la función tr❡s■❣✉❛❧❡s tal que ✭tr❡s■❣✉❛❧❡s ① ② ③✮ se verifica si

los elementos ①, ② y ③ son iguales. Por ejemplo,

tr❡s■❣✉❛❧❡s ✹ ✹ ✹ ❂❂ ❚r✉❡

tr❡s■❣✉❛❧❡s ✹ ✸ ✹ ❂❂ ❋❛❧s❡

Solución:

tr❡s■❣✉❛❧❡s ① ② ③ ❂ ① ❂❂ ② ✫✫ ② ❂❂ ③

Ejercicio 1.16.2. Definir la función tr❡s❉✐❢❡r❡♥t❡s tal que ✭tr❡s❉✐❢❡r❡♥t❡s ① ② ③✮ se

verifica si los elementos ①, ② y ③ son distintos. Por ejemplo,

tr❡s❉✐❢❡r❡♥t❡s ✸ ✺ ✷ ❂❂ ❚r✉❡

tr❡s❉✐❢❡r❡♥t❡s ✸ ✺ ✸ ❂❂ ❋❛❧s❡

Solución:

tr❡s❉✐❢❡r❡♥t❡s ① ② ③ ❂ ① ✴❂ ② ✫✫ ① ✴❂ ③ ✫✫ ② ✴❂ ③

1.17. Igualdad de 4 elementos 29

1.17. Igualdad de 4 elementos

Ejercicio 1.17.1. Definir la función ❝✉❛tr♦■❣✉❛❧❡s tal que ✭❝✉❛tr♦■❣✉❛❧❡s ① ② ③ ✉✮ se

verifica si los elementos ①, ②, ③ y ✉ son iguales. Por ejemplo,

❝✉❛tr♦■❣✉❛❧❡s ✺ ✺ ✺ ✺ ❂❂ ❚r✉❡

❝✉❛tr♦■❣✉❛❧❡s ✺ ✺ ✹ ✺ ❂❂ ❋❛❧s❡

Indicación: Usar la función tr❡s■❣✉❛❧❡s.

Solución:

❝✉❛tr♦■❣✉❛❧❡s ① ② ③ ✉ ❂ ① ❂❂ ② ✫✫ tr❡s■❣✉❛❧❡s ② ③ ✉

1.18. Propiedad triangular

Ejercicio 1.18.1. Las longitudes de los lados de un triángulo no pueden ser cualesquiera. Para

que pueda construirse el triángulo, tiene que cumplirse la propiedad triangular; es decir, longitud

de cada lado tiene que ser menor que la suma de los otros dos lados.

Definir la función tr✐❛♥❣✉❧❛r tal que ✭tr✐❛♥❣✉❧❛r ❛ ❜ ❝✮ se verifica si ❛, ❜ y ❝ complen

la propiedad triangular. Por ejemplo,

tr✐❛♥❣✉❧❛r ✸ ✹ ✺ ❂❂ ❚r✉❡

tr✐❛♥❣✉❧❛r ✸✵ ✹ ✺ ❂❂ ❋❛❧s❡

tr✐❛♥❣✉❧❛r ✸ ✹✵ ✺ ❂❂ ❋❛❧s❡

tr✐❛♥❣✉❧❛r ✸ ✹ ✺✵ ❂❂ ❋❛❧s❡

Solución:

tr✐❛♥❣✉❧❛r ❛ ❜ ❝ ❂ ❛ ❁ ❜✰❝ ✫✫ ❜ ❁ ❛✰❝ ✫✫ ❝ ❁ ❛✰❜

1.19. División segura

Ejercicio 1.19.1. Definir la función ❞✐✈✐s✐♦♥❙❡❣✉r❛ tal que ✭❞✐✈✐s✐♦♥❙❡❣✉r❛ ① ②✮ es xy si

y no es cero y 9999 en caso contrario. Por ejemplo,

❞✐✈✐s✐♦♥❙❡❣✉r❛ ✼ ✷ ❂❂ ✸✳✺

❞✐✈✐s✐♦♥❙❡❣✉r❛ ✼ ✵ ❂❂ ✾✾✾✾✳✵

Solución:

❞✐✈✐s✐♦♥❙❡❣✉r❛ ❴ ✵ ❂ ✾✾✾✾

❞✐✈✐s✐♦♥❙❡❣✉r❛ ① ② ❂ ①✴②

30 Capítulo 1. Definiciones elementales de funciones

1.20. Disyunción excluyente

La disyunción excluyente ①♦r de dos fórmulas se verifica si una es verdadera y laotra es falsa.

Ejercicio 1.20.1. Definir la función ①♦r✶ que calcule la disyunción excluyente a partir de la

tabla de verdad. Usar 4 ecuaciones, una por cada línea de la tabla.

Solución:

①♦r✶ ❚r✉❡ ❚r✉❡ ❂ ❋❛❧s❡

①♦r✶ ❚r✉❡ ❋❛❧s❡ ❂ ❚r✉❡

①♦r✶ ❋❛❧s❡ ❚r✉❡ ❂ ❚r✉❡

①♦r✶ ❋❛❧s❡ ❋❛❧s❡ ❂ ❋❛❧s❡

Ejercicio 1.20.2. Definir la función ①♦r✷ que calcule la disyunción excluyente a partir de la

tabla de verdad y patrones. Usar 2 ecuaciones, una por cada valor del primer argumento.

Solución:

①♦r✷ ❚r✉❡ ② ❂ ♥♦t ②

①♦r✷ ❋❛❧s❡ ② ❂ ②

Ejercicio 1.20.3. Definir la función ①♦r✸ que calcule la disyunción excluyente a partir de la

disyunción (⑤⑤), conjunción (✫✫) y negación (♥♦t). Usar 1 ecuación.

Solución:

①♦r✸ ① ② ❂ ✭① ⑤⑤ ②✮ ✫✫ ♥♦t ✭① ✫✫ ②✮

Ejercicio 1.20.4. Definir la función ①♦r✹ que calcule la disyunción excluyente a partir de de-

sigualdad (✴❂). Usar 1 ecuación.

Solución:

①♦r✹ ① ② ❂ ① ✴❂ ②

1.21. Módulo de un vector

Ejercicio 1.21.1. Definir la función ♠♦❞✉❧♦ tal que ✭♠♦❞✉❧♦ ✈✮ es el módulo del vector ✈. Por

ejemplo,

♠♦❞✉❧♦ ✭✸✱✹✮ ❂❂ ✺✳✵

Solución:

♠♦❞✉❧♦ ✭①✱②✮ ❂ sqrt✭①❫✷✰②❫✷✮

1.22. Rectángulo de área máxima 31

1.22. Rectángulo de área máxima

Ejercicio 1.22.1. Las dimensiones de los rectángulos puede representarse por pares; por ejemplo,

(5,3) representa a un rectángulo de base 5 y altura 3. Definir la función ♠❛②♦r❘❡❝t❛♥❣✉❧♦ tal

que ✭♠❛②♦r❘❡❝t❛♥❣✉❧♦ r✶ r✷✮ es el rectángulo de mayor área entre r✶ y r✷. Por ejemplo,

♠❛②♦r❘❡❝t❛♥❣✉❧♦ ✭✹✱✻✮ ✭✸✱✼✮ ❂❂ ✭✹✱✻✮

♠❛②♦r❘❡❝t❛♥❣✉❧♦ ✭✹✱✻✮ ✭✸✱✽✮ ❂❂ ✭✹✱✻✮

♠❛②♦r❘❡❝t❛♥❣✉❧♦ ✭✹✱✻✮ ✭✸✱✾✮ ❂❂ ✭✸✱✾✮

Solución:

♠❛②♦r❘❡❝t❛♥❣❧♦ ✭❛✱❜✮ ✭❝✱❞✮ ⑤ ❛✯❜ ❃❂ ❝✯❞ ❂ ✭❛✱❜✮

⑤ ♦t❤❡r✇✐s❡ ❂ ✭❝✱❞✮

1.23. Puntos del plano

Los puntos del plano se puede representar por un par de números que son sus coor-denadas.

1.23.1. Cuadrante de un punto

Ejercicio 1.23.1. Definir la función ❝✉❛❞r❛♥t❡ tal que ✭❝✉❛❞r❛♥t❡ ♣✮ es es cuadrante del

punto ♣ (se supone que ♣ no está sobre los ejes). Por ejemplo,

❝✉❛❞r❛♥t❡ ✭✸✱✺✮ ❂❂ ✶

❝✉❛❞r❛♥t❡ ✭✲✸✱✺✮ ❂❂ ✷

❝✉❛❞r❛♥t❡ ✭✲✸✱✲✺✮ ❂❂ ✸

❝✉❛❞r❛♥t❡ ✭✸✱✲✺✮ ❂❂ ✹

Solución:

❝✉❛❞r❛♥t❡ ✭①✱②✮

⑤ ① ❃ ✵ ✫✫ ② ❃ ✵ ❂ ✶

⑤ ① ❁ ✵ ✫✫ ② ❃ ✵ ❂ ✷

⑤ ① ❁ ✵ ✫✫ ② ❁ ✵ ❂ ✸

⑤ ① ❃ ✵ ✫✫ ② ❁ ✵ ❂ ✹

1.23.2. Intercambio de coordenadas

Ejercicio 1.23.2. Definir la función ✐♥t❡r❝❛♠❜✐❛ tal que ✭✐♥t❡r❝❛♠❜✐❛ ♣✮ es el punto obte-

nido intercambiando las coordenadas del punto ♣. Por ejemplo,

32 Capítulo 1. Definiciones elementales de funciones

✐♥t❡r❝❛♠❜✐❛ ✭✷✱✺✮ ❂❂ ✭✺✱✷✮

✐♥t❡r❝❛♠❜✐❛ ✭✺✱✷✮ ❂❂ ✭✷✱✺✮

Solución:

✐♥t❡r❝❛♠❜✐❛ ✭①✱②✮ ❂ ✭②✱①✮

1.23.3. Punto simétrico

Ejercicio 1.23.3. Definir la función s✐♠❡tr✐❝♦❍ tal que ✭s✐♠❡tr✐❝♦❍ ♣✮ es el punto simétrico

de ♣ respecto del eje horizontal. Por ejemplo,

s✐♠❡tr✐❝♦❍ ✭✷✱✺✮ ❂❂ ✭✷✱✲✺✮

s✐♠❡tr✐❝♦❍ ✭✷✱✲✺✮ ❂❂ ✭✷✱✺✮

Solución:

s✐♠❡tr✐❝♦❍ ✭①✱②✮ ❂ ✭①✱✲②✮

1.23.4. Distancia entre dos puntos

Ejercicio 1.23.4. Definir la función ❞✐st❛♥❝✐❛ tal que ✭❞✐st❛♥❝✐❛ ♣✶ ♣✷✮ es la distancia

entre los puntos ♣✶ y ♣✷. Por ejemplo,

❞✐st❛♥❝✐❛ ✭✶✱✷✮ ✭✹✱✻✮ ❂❂ ✺✳✵

Solución:

❞✐st❛♥❝✐❛ ✭①✶✱②✶✮ ✭①✷✱②✷✮ ❂ sqrt✭✭①✶✲①✷✮❫✷✰✭②✶✲②✷✮❫✷✮

1.23.5. Punto medio entre otros dos

Ejercicio 1.23.5. Definir la función ♣✉♥t♦▼❡❞✐♦ tal que ✭♣✉♥t♦▼❡❞✐♦ ♣✶ ♣✷✮ es el punto

medio entre los puntos ♣✶ y ♣✷. Por ejemplo,

♣✉♥t♦▼❡❞✐♦ ✭✵✱✷✮ ✭✵✱✻✮ ❂❂ ✭✵✳✵✱✹✳✵✮

♣✉♥t♦▼❡❞✐♦ ✭✲✶✱✷✮ ✭✼✱✻✮ ❂❂ ✭✸✳✵✱✹✳✵✮

Solución:

♣✉♥t♦▼❡❞✐♦ ✭①✶✱②✶✮ ✭①✷✱②✷✮ ❂ ✭✭①✶✰①✷✮✴✷✱ ✭②✶✰②✷✮✴✷✮

1.24. Números complejos 33

1.24. Números complejos

Los números complejos pueden representarse mediante pares de números comple-jos. Por ejemplo, el número 2 + 5i puede representarse mediante el par ✭✷✱✺✮.

1.24.1. Suma de dos números complejos

Ejercicio 1.24.1. Definir la función s✉♠❛❈♦♠♣❧❡❥♦s tal que ✭s✉♠❛❈♦♠♣❧❡❥♦s ① ②✮ es la suma

de los números complejos ① e ②. Por ejemplo,

s✉♠❛❈♦♠♣❧❡❥♦s ✭✷✱✸✮ ✭✺✱✻✮ ❂❂ ✭✼✱✾✮

Solución:

s✉♠❛❈♦♠♣❧❡❥♦s ✭❛✱❜✮ ✭❝✱❞✮ ❂ ✭❛✰❝✱ ❜✰❞✮

1.24.2. Producto de dos números complejos

Ejercicio 1.24.2. Definir la función ♣r♦❞✉❝t♦❈♦♠♣❧❡❥♦s tal que ✭♣r♦❞✉❝t♦❈♦♠♣❧❡❥♦s ① ②✮

es el producto de los números complejos ① e ②. Por ejemplo,

♣r♦❞✉❝t♦❈♦♠♣❧❡❥♦s ✭✷✱✸✮ ✭✺✱✻✮ ❂❂ ✭✲✽✱✷✼✮

Solución:

♣r♦❞✉❝t♦❈♦♠♣❧❡❥♦s ✭❛✱❜✮ ✭❝✱❞✮ ❂ ✭❛✯❝✲❜✯❞✱ ❛✯❞✰❜✯❝✮

1.24.3. Conjugado de un número complejo

Ejercicio 1.24.3. Definir la función ❝♦♥❥✉❣❛❞♦ tal que ✭❝♦♥❥✉❣❛❞♦ ③✮ es el conjugado del

número complejo ③. Por ejemplo,

❝♦♥❥✉❣❛❞♦ ✭✷✱✸✮ ❂❂ ✭✷✱✲✸✮

Solución:

❝♦♥❥✉❣❛❞♦ ✭❛✱❜✮ ❂ ✭❛✱✲❜✮

34 Capítulo 1. Definiciones elementales de funciones

1.25. Intercalación de pares

Ejercicio 1.25.1. Definir la función ✐♥t❡r❝❛❧❛ que reciba dos listas ①s e ②s de dos elementos

cada una, y devuelva una lista de cuatro elementos, construida intercalando los elementos de ①s

e ②s. Por ejemplo,

✐♥t❡r❝❛❧❛ ❬✶✱✹❪ ❬✸✱✷❪ ❂❂ ❬✶✱✸✱✹✱✷❪

Solución:

✐♥t❡r❝❛❧❛ ❬①✶✱①✷❪ ❬②✶✱②✷❪ ❂ ❬①✶✱②✶✱①✷✱②✷❪

1.26. Permutación cíclica de una lista

Ejercicio 1.26.1. Definir una función ❝✐❝❧♦ que permute cíclicamente los elementos de una

lista, pasando el último elemento al principio de la lista. Por ejemplo,

❝✐❝❧♦ ❬✷✱ ✺✱ ✼✱ ✾❪ ❂❂ ❬✾✱✷✱✺✱✼❪

❝✐❝❧♦ ❬❪ ❂❂ ❬✾✱✷✱✺✱✼❪

❝✐❝❧♦ ❬✷❪ ❂❂ ❬✷❪

Solución:

❝✐❝❧♦ ❬❪ ❂ ❬❪

❝✐❝❧♦ ①s ❂ ❧❛st ①s ✿ ✐♥✐t ①s

1.27. Mayor número de 2 cifras con dos dígitos dados

Ejercicio 1.27.1. Definir la funcion ♥✉♠❡r♦▼❛②♦r tal que ✭♥✉♠❡r♦▼❛②♦r ① ②✮ es el mayor

número de dos cifras que puede construirse con los dígitos ① e ②. Por ejemplo,

♥✉♠❡r♦▼❛②♦r ✷ ✺ ❂❂ ✺✷

♥✉♠❡r♦▼❛②♦r ✺ ✷ ❂❂ ✺✷

Solución:

♥✉♠❡r♦▼❛②♦r ① ② ❂ ❛✯✶✵ ✰ ❜

✇❤❡r❡ ❛ ❂ ♠❛① ① ②

❜ ❂ ♠✐♥ ① ②

1.28. Número de raíces de una ecuación cuadrática 35

1.28. Número de raíces de una ecuación cuadrática

Ejercicio 1.28.1. Definir la función ♥✉♠❡r♦❉❡❘❛✐❝❡s tal que ✭♥✉♠❡r♦❉❡❘❛✐❝❡s ❛ ❜ ❝✮ es el

número de raíces reales de la ecuación ax2 + bx + c = 0. Por ejemplo,

♥✉♠❡r♦❉❡❘❛✐❝❡s ✷ ✵ ✸ ❂❂ ✵

♥✉♠❡r♦❉❡❘❛✐❝❡s ✹ ✹ ✶ ❂❂ ✶

♥✉♠❡r♦❉❡❘❛✐❝❡s ✺ ✷✸ ✶✷ ❂❂ ✷

Solución:

♥✉♠❡r♦❉❡❘❛✐❝❡s ❛ ❜ ❝

⑤ ❞ ❁ ✵ ❂ ✵

⑤ ❞ ❂❂ ✵ ❂ ✶

⑤ ♦t❤❡r✇✐s❡ ❂ ✷

✇❤❡r❡ ❞ ❂ ❜❫✷✲✹✯❛✯❝

1.29. Raíces de las ecuaciones cuadráticas

Ejercicio 1.29.1. Definir la función r❛✐❝❡s de forma que ✭r❛✐❝❡s ❛ ❜ ❝✮ devuelve la lista de

las raices reales de la ecuación ax2 + bx + c = 0. Por ejemplo,

r❛✐❝❡s ✶ ✭✲✷✮ ✶ ❂❂ ❬✶✳✵✱✶✳✵❪

r❛✐❝❡s ✶ ✸ ✷ ❂❂ ❬✲✶✳✵✱✲✷✳✵❪

Solución: Se presenta dos soluciones. La primera es

r❛✐❝❡s❴✶ ❛ ❜ ❝ ❂ ❬✭✲❜✰❞✮✴t✱✭✲❜✲❞✮✴t❪

✇❤❡r❡ ❞ ❂ sqrt ✭❜❫✷ ✲ ✹✯❛✯❝✮

t ❂ ✷✯❛

La segunda es

r❛✐❝❡s❴✷ ❛ ❜ ❝

⑤ ❞ ❃❂ ✵ ❂ ❬✭✲❜✰❡✮✴✭✷✯❛✮✱ ✭✲❜✲❡✮✴✭✷✯❛✮❪

⑤ ♦t❤❡r✇✐s❡ ❂ ❡rr♦r ✧◆♦ t✐♥❡ r❛✐❝❡s r❡❛❧❡s✧

✇❤❡r❡ ❞ ❂ ❜❫✷✲✹✯❛✯❝

❡ ❂ sqrt ❞

36 Capítulo 1. Definiciones elementales de funciones

1.30. Área de un triángulo mediante la fórmula de Herón

Ejercicio 1.30.1. En geometría, la fórmula de Herón, descubierta por Herón de Alejandría, dice

que el área de un triángulo cuyo lados miden a, b y c es√

s(s − a)(s − b)(s − c), donde s es el

semiperímetro(

s = a+b+c2

)

.

Definir la función ❛r❡❛ tal que ✭❛r❡❛ ❛ ❜ ❝✮ es el área de un triángulo de lados ❛, ❜ y ❝.

Por ejemplo,

❛r❡❛ ✸ ✹ ✺ ❂❂ ✻✳✵

Solución:

❛r❡❛ ❛ ❜ ❝ ❂ sqrt ✭s✯✭s✲❛✮✯✭s✲❜✮✯✭s✲❝✮✮

✇❤❡r❡ s ❂ ✭❛✰❜✰❝✮✴✷

1.31. Números racionales como pares de enteros

Los números racionales pueden representarse mediante pares de números enteros.Por ejemplo, el número 2

5 puede representarse mediante el par ✭✷✱✺✮.

1.31.1. Forma reducida de un número racional

Ejercicio 1.31.1. Definir la función ❢♦r♠❛❘❡❞✉❝✐❞❛ tal que ✭❢♦r♠❛❘❡❞✉❝✐❞❛ ①✮ es la forma

reducida del número racional ①. Por ejemplo,

❢♦r♠❛❘❡❞✉❝✐❞❛ ✭✹✱✶✵✮ ❂❂ ✭✷✱✺✮

Solución:

❢♦r♠❛❘❡❞✉❝✐❞❛ ✭❛✱❜✮ ❂ ✭❛ ❵❞✐✈❵ ❝✱ ❜ ❵❞✐✈❵ ❝✮

✇❤❡r❡ ❝ ❂ ❣❝❞ ❛ ❜

1.31.2. Suma de dos números racionales

Ejercicio 1.31.2. Definir la función s✉♠❛❘❛❝✐♦♥❛❧ tal que ✭s✉♠❛❘❛❝✐♦♥❛❧ ① ②✮ es la suma

de los números racionales ① e ②. Por ejemplo,

s✉♠❛❘❛❝✐♦♥❛❧ ✭✷✱✸✮ ✭✺✱✻✮ ❂❂ ✭✸✱✷✮

Solución:

s✉♠❛❘❛❝✐♦♥❛❧ ✭❛✱❜✮ ✭❝✱❞✮ ❂ ❢♦r♠❛❘❡❞✉❝✐❞❛ ✭❛✯❞✰❜✯❝✱ ❜✯❞✮

1.31. Números racionales como pares de enteros 37

1.31.3. Producto de dos números racionales

Ejercicio 1.31.3. Definir la función ♣r♦❞✉❝t♦❘❛❝✐♦♥❛❧ tal que ✭♣r♦❞✉❝t♦❘❛❝✐♦♥❛❧ ① ②✮ es

el producto de los números racionales ① e ②. Por ejemplo,

♣r♦❞✉❝t♦❘❛❝✐♦♥❛❧ ✭✷✱✸✮ ✭✺✱✻✮ ❂❂ ✭✺✱✾✮

Solución:

♣r♦❞✉❝t♦❘❛❝✐♦♥❛❧ ✭❛✱❜✮ ✭❝✱❞✮ ❂ ❢♦r♠❛❘❡❞✉❝✐❞❛ ✭❛✯❝✱ ❜✯❞✮

1.31.4. Igualdad de números racionales

Ejercicio 1.31.4. Definir la función ✐❣✉❛❧❞❛❞❘❛❝✐♦♥❛❧ tal que ✭✐❣✉❛❧❞❛❞❘❛❝✐♦♥❛❧ ① ②✮ se

verifica si los números racionales ① e ② son iguales. Por ejemplo,

✐❣✉❛❧❞❛❞❘❛❝✐♦♥❛❧ ✭✻✱✾✮ ✭✶✵✱✶✺✮ ❂❂ ❚r✉❡

✐❣✉❛❧❞❛❞❘❛❝✐♦♥❛❧ ✭✻✱✾✮ ✭✶✶✱✶✺✮ ❂❂ ❋❛❧s❡

Solución:

✐❣✉❛❧❞❛❞❘❛❝✐♦♥❛❧ ✭❛✱❜✮ ✭❝✱❞✮ ❂

❢♦r♠❛❘❡❞✉❝✐❞❛ ✭❛✱❜✮ ❂❂ ❢♦r♠❛❘❡❞✉❝✐❞❛ ✭❝✱❞✮

38 Capítulo 1. Definiciones elementales de funciones

Capítulo 2

Definiciones por comprensión

En este capítulo se presentan ejercicios con definiciones por comprensión. Se corres-ponden con el tema 5 de [1].

Contenido2.1 Suma de los cuadrados de los n primeros números . . . . . . . . . . . 40

2.2 Listas con un elemento replicado . . . . . . . . . . . . . . . . . . . . . . 40

2.3 Triángulos aritméticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

2.4 Números perfectos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

2.5 Números abundantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

2.6 Problema 1 del proyecto Euler . . . . . . . . . . . . . . . . . . . . . . . 43

2.7 Número de pares de naturales en un círculo . . . . . . . . . . . . . . . 44

2.8 Aproximación del número e . . . . . . . . . . . . . . . . . . . . . . . . . 44

2.9 Aproximación del límite . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

2.10 Cálculo del número π . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

2.11 Ternas pitagóricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

2.12 Problema 9 del Proyecto Euler . . . . . . . . . . . . . . . . . . . . . . . 48

2.13 Producto escalar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

2.14 Suma de pares de elementos consecutivos . . . . . . . . . . . . . . . . . 50

2.15 Posiciones de un elemento en una lista . . . . . . . . . . . . . . . . . . 50

2.16 Representación densa de un polinomio representado dispersamente . 51

2.17 Producto cartesiano . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

2.18 Consulta de bases de datos . . . . . . . . . . . . . . . . . . . . . . . . . 52

39

40 Capítulo 2. Definiciones por comprensión

2.1. Suma de los cuadrados de los n primeros números

Ejercicio 2.1.1. Definir, por comprensión, la función

s✉♠❛❉❡❈✉❛❞r❛❞♦s ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

tal que s✉♠❛❉❡❈✉❛❞r❛❞♦s ♥✮ es la suma de los cuadrados de los primeros ♥ números; es decir,

12 + 22 + · · ·+ n2. Por ejemplo,

s✉♠❛❉❡❈✉❛❞r❛❞♦s ✸ ❂❂ ✶✹

s✉♠❛❉❡❈✉❛❞r❛❞♦s ✶✵✵ ❂❂ ✸✸✽✸✺✵

Solución:

s✉♠❛❉❡❈✉❛❞r❛❞♦s ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

s✉♠❛❉❡❈✉❛❞r❛❞♦s ♥ ❂ s✉♠ ❬①❫✷ ⑤ ① ❁✲ ❬✶✳✳♥❪❪

2.2. Listas con un elemento replicado

Ejercicio 2.2.1. Definir por comprensión la función

r❡♣❧✐❝❛ ✿✿ ■♥t ✲❃ ❛ ✲❃ ❬❛❪

tal que ✭r❡♣❧✐❝❛ ♥ ①✮ es la lista formada por ♥ copias del elemento ①. Por ejemplo,

r❡♣❧✐❝❛ ✸ ❚r✉❡ ❂❂ ❬❚r✉❡✱ ❚r✉❡✱ ❚r✉❡❪

Nota: La función r❡♣❧✐❝❛ es equivalente a la predefinida r❡♣❧✐❝❛t❡.

Solución:

r❡♣❧✐❝❛ ✿✿ ■♥t ✲❃ ❛ ✲❃ ❬❛❪

r❡♣❧✐❝❛ ♥ ① ❂ ❬① ⑤ ❴ ❁✲ ❬✶✳✳♥❪❪

2.3. Triángulos aritméticos

Ejercicio 2.3.1. Definir la función s✉♠❛ tal ✭s✉♠❛ ♥✮ es la suma de los ♥ primeros números.

Por ejemplo,

s✉♠❛ ✸ ❂❂ ✻

2.4. Números perfectos 41

Solución:

s✉♠❛ ♥ ❂ s✉♠ ❬✶✳✳♥❪

Otra definición es

s✉♠❛✬ ♥ ❂ ✭✶✰♥✮✯♥ ❵❞✐✈❵ ✷

Ejercicio 2.3.2. Los triángulo aritmético se forman como sigue

✷ ✸

✹ ✺ ✻

✼ ✽ ✾ ✶✵

✶✶ ✶✷ ✶✸ ✶✹ ✶✺

✶✻ ✶✻ ✶✽ ✶✾ ✷✵ ✷✶

Definir la función ❧✐♥❡❛ tal que ✭❧✐♥❡❛ ♥✮ es la línea ♥–ésima de los triángulos aritméticos.

Por ejemplo,

❧✐♥❡❛ ✹ ❂❂ ❬✼✱✽✱✾✱✶✵❪

❧✐♥❡❛ ✺ ❂❂ ❬✶✶✱✶✷✱✶✸✱✶✹✱✶✺❪

Solución:

❧✐♥❡❛ ♥ ❂ ❬s✉♠❛ ✭♥✲✶✮✰✶✳✳s✉♠❛ ♥❪

Ejercicio 2.3.3. Definir la función tr✐❛♥❣✉❧♦ tal que ✭tr✐❛♥❣✉❧♦ ♥✮ es el triángulo aritmé-

tico de altura n. Por ejemplo,

tr✐❛♥❣✉❧♦ ✸ ❂❂ ❬❬✶❪✱❬✷✱✸❪✱❬✹✱✺✱✻❪❪

tr✐❛♥❣✉❧♦ ✹ ❂❂ ❬❬✶❪✱❬✷✱✸❪✱❬✹✱✺✱✻❪✱❬✼✱✽✱✾✱✶✵❪❪

Solución:

tr✐❛♥❣✉❧♦ ♥ ❂ ❬❧✐♥❡❛ ♠ ⑤ ♠ ❁✲ ❬✶✳✳♥❪❪

2.4. Números perfectos

Ejercicio 2.4.1. Un entero positivo es perfecto si es igual a la suma de sus factores, excluyendo

el propio número. Definir por comprensión la función

♣❡r❢❡❝t♦s ✿✿ ■♥t ✲❃ ❬■♥t❪

42 Capítulo 2. Definiciones por comprensión

tal que ✭♣❡r❢❡❝t♦s ♥✮ es la lista de todos los números perfectos menores que ♥. Por ejemplo,

♣❡r❢❡❝t♦s ✺✵✵ ❂❂ ❬✻✱✷✽✱✹✾✻❪

Solución:

♣❡r❢❡❝t♦s ✿✿ ■♥t ✲❃ ❬■♥t❪

♣❡r❢❡❝t♦s ♥ ❂ ❬① ⑤ ① ❁✲ ❬✶✳✳♥❪✱ s✉♠ ✭✐♥✐t ✭❢❛❝t♦r❡s ①✮✮ ❂❂ ①❪

donde ✭❢❛❝t♦r❡s ♥✮ es la lista de los factores de ♥

❢❛❝t♦r❡s ✿✿ ■♥t ✲❃ ❬■♥t❪

❢❛❝t♦r❡s ♥ ❂ ❬① ⑤ ① ❁✲ ❬✶✳✳♥❪✱ ♥ ❵♠♦❞❵ ① ❂❂ ✵❪

2.5. Números abundantes

Un número natural n se denomina abundante si es menor que la suma de sus diviso-res propios. Por ejemplo, 12 y 30 son abundantes pero 5 y 28 no lo son.

Ejercicio 2.5.1. Definir la función ♥✉♠❡r♦❆❜✉♥❞❛♥t❡ tal que ✭♥✉♠❡r♦❆❜✉♥❞❛♥t❡ ♥✮ se veri-

fica si ♥ es un número abundante. Por ejemplo,

♥✉♠❡r♦❆❜✉♥❞❛♥t❡ ✺ ❂❂ ❋❛❧s❡

♥✉♠❡r♦❆❜✉♥❞❛♥t❡ ✶✷ ❂❂ ❚r✉❡

♥✉♠❡r♦❆❜✉♥❞❛♥t❡ ✷✽ ❂❂ ❋❛❧s❡

♥✉♠❡r♦❆❜✉♥❞❛♥t❡ ✸✵ ❂❂ ❚r✉❡

Solución:

♥✉♠❡r♦❆❜✉♥❞❛♥t❡ ✿✿ ■♥t ✲❃ ❇♦♦❧

♥✉♠❡r♦❆❜✉♥❞❛♥t❡ ♥ ❂ ♥ ❁ s✉♠ ✭❞✐✈✐s♦r❡s ♥✮

❞✐✈✐s♦r❡s ✿✿ ■♥t ✲❃ ❬■♥t❪

❞✐✈✐s♦r❡s ♥ ❂ ❬♠ ⑤ ♠ ❁✲ ❬✶✳✳♥✲✶❪✱ ♥ ❵♠♦❞❵ ♠ ❂❂ ✵❪

Ejercicio 2.5.2. Definir la función ♥✉♠❡r♦s❆❜✉♥❞❛♥t❡s▼❡♥♦r❡s tal que ✭♥✉♠❡r♦s❆❜✉♥❞❛♥t❡s▼❡♥♦r❡s ♥✮

es la lista de números abundantes menores o iguales que ♥. Por ejemplo,

♥✉♠❡r♦s❆❜✉♥❞❛♥t❡s▼❡♥♦r❡s ✺✵ ❂❂ ❬✶✷✱✶✽✱✷✵✱✷✹✱✸✵✱✸✻✱✹✵✱✹✷✱✹✽❪

Solución:

♥✉♠❡r♦s❆❜✉♥❞❛♥t❡s▼❡♥♦r❡s ✿✿ ■♥t ✲❃ ❬■♥t❪

♥✉♠❡r♦s❆❜✉♥❞❛♥t❡s▼❡♥♦r❡s ♥ ❂ ❬① ⑤ ① ❁✲ ❬✶✳✳♥❪✱ ♥✉♠❡r♦❆❜✉♥❞❛♥t❡ ①❪

2.6. Problema 1 del proyecto Euler 43

Ejercicio 2.5.3. Definir la función t♦❞♦sP❛r❡s tal que ✭t♦❞♦sP❛r❡s ♥✮ se verifica si todos los

números abundantes menores o iguales que ♥ son pares. Por ejemplo,

t♦❞♦sP❛r❡s ✶✵ ❂❂ ❚r✉❡

t♦❞♦sP❛r❡s ✶✵✵ ❂❂ ❚r✉❡

t♦❞♦sP❛r❡s ✶✵✵✵ ❂❂ ❋❛❧s❡

Solución:

t♦❞♦sP❛r❡s ✿✿ ■♥t ✲❃ ❇♦♦❧

t♦❞♦sP❛r❡s ♥ ❂ ❛♥❞ ❬❡✈❡♥ ① ⑤ ① ❁✲ ♥✉♠❡r♦s❆❜✉♥❞❛♥t❡s▼❡♥♦r❡s ♥❪

Ejercicio 2.5.4. Definir la constante ♣r✐♠❡r❆❜✉♥❞❛♥t❡■♠♣❛r que calcule el primer número

natural abundante impar. Determinar el valor de dicho número.

Solución:

♣r✐♠❡r❆❜✉♥❞❛♥t❡■♠♣❛r ✿✿ ■♥t

♣r✐♠❡r❆❜✉♥❞❛♥t❡■♠♣❛r ❂ ❤❡❛❞ ❬① ⑤ ① ❁✲❬✶✳✳❪✱ ♥✉♠❡r♦❆❜✉♥❞❛♥t❡ ①✱ ♦❞❞ ①❪

Su cálculo es

❣❤❝✐❃ ♣r✐♠❡r❆❜✉♥❞❛♥t❡■♠♣❛r

✾✹✺

2.6. Problema 1 del proyecto Euler

Ejercicio 2.6.1. Definir la función

❡✉❧❡r✶ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

tal que ✭❡✉❧❡r✶ ♥✮ es la suma de todos los múltiplos de 3 ó 5 menores que ♥. Por ejemplo,

❡✉❧❡r✶ ✶✵ ❂❂ ✷✸

Calcular la suma de todos los múltiplos de 3 ó 5 menores que 1000.

Solución:

❡✉❧❡r✶ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

❡✉❧❡r✶ ♥ ❂ s✉♠ ❬① ⑤ ① ❁✲ ❬✶✳✳♥✲✶❪✱ ♠✉❧t✐♣❧♦ ① ✸ ⑤⑤ ♠✉❧t✐♣❧♦ ① ✺❪

✇❤❡r❡ ♠✉❧t✐♣❧♦ ① ② ❂ ♠♦❞ ① ② ❂❂ ✵

El cálculo es

❣❤❝✐❃ ❡✉❧❡r✶ ✶✵✵✵

✷✸✸✶✻✽

44 Capítulo 2. Definiciones por comprensión

2.7. Número de pares de naturales en un círculo

Ejercicio 2.7.1. Definir la función

❝✐r❝✉❧♦ ✿✿ ■♥t ✲❃ ■♥t

tal que ✭❝✐r❝✉❧♦ ♥✮ es la cantidad de pares de números naturales ✭①✱②✮ que se encuentran

dentro del círculo de radio ♥. Por ejemplo,

❝✐r❝✉❧♦ ✸ ❂❂ ✾

❝✐r❝✉❧♦ ✹ ❂❂ ✶✺

❝✐r❝✉❧♦ ✺ ❂❂ ✷✷

Solución:

❝✐r❝✉❧♦ ✿✿ ■♥t ✲❃ ■♥t

❝✐r❝✉❧♦ ♥ ❂ ❧❡♥❣t❤ ❬✭①✱②✮ ⑤ ① ❁✲ ❬✵✳✳♥❪✱ ② ❁✲ ❬✵✳✳♥❪✱ ①❫✷✰②❫✷ ❁ ♥❫✷❪

La eficiencia puede mejorarse con

❝✐r❝✉❧♦✬ ✿✿ ■♥t ✲❃ ■♥t

❝✐r❝✉❧♦✬ ♥ ❂ ❧❡♥❣t❤ ❬✭①✱②✮ ⑤ ① ❁✲ ❬✵✳✳♠❪✱ ② ❁✲ ❬✵✳✳♠❪✱ ①❫✷✰②❫✷ ❁ ♥❫✷❪

✇❤❡r❡ ♠ ❂ r❛✐③❈✉❛❞r❛❞❛❊♥t❡r❛ ♥

donde ✭r❛✐③❈✉❛❞r❛❞❛❊♥t❡r❛ ♥✮ es la parte entera de la raíz cuadrada de ♥. Por ejemplo,

r❛✐③❈✉❛❞r❛❞❛❊♥t❡r❛ ✶✼ ❂❂ ✹

r❛✐③❈✉❛❞r❛❞❛❊♥t❡r❛ ✿✿ ■♥t ✲❃ ■♥t

r❛✐③❈✉❛❞r❛❞❛❊♥t❡r❛ ♥ ❂ tr✉♥❝❛t❡ ✭sqrt ✭❢r♦♠■♥t❡❣r❛❧ ♥✮✮

2.8. Aproximación del número e

Ejercicio 2.8.1. Definir la función ❛♣r♦①❊ tal que ✭❛♣r♦❳❊ ♥✮ es la lista cuyos elementos son

los términos de la sucesión(

1 + 1m

)mdesde 1 hasta ♥. Por ejemplo,

❛♣r♦①❊ ✶ ❂❂ ❬✷✳✵❪

❛♣r♦①❊ ✹ ❂❂ ❬✷✳✵✱✷✳✷✺✱✷✳✸✼✵✸✼✵✸✼✵✸✼✵✸✼✱✷✳✹✹✶✹✵✻✷✺❪

Solución:

❛♣r♦①❊ ♥ ❂ ❬✭✶✰✶✴♠✮✯✯♠ ⑤ ♠ ❁✲ ❬✶✳✳♥❪❪

2.8. Aproximación del número e 45

Ejercicio 2.8.2. ¿Cuál es el límite de la sucesión(

1 + 1m

)m?

Solución: El límite de la sucesión es el número e.

Ejercicio 2.8.3. Definir la función ❡rr♦r❊ tal que ✭❡rr♦r❊ ①✮ es el menor número de térmi-

nos de la sucesión(

1 + 1m

)mnecesarios para obtener su límite con un error menor que ①. Por

ejemplo,

❡rr♦r❆♣r♦①❊ ✵✳✶ ❂❂ ✶✸✳✵

❡rr♦r❆♣r♦①❊ ✵✳✵✶ ❂❂ ✶✸✺✳✵

❡rr♦r❆♣r♦①❊ ✵✳✵✵✶ ❂❂ ✶✸✺✾✳✵

Indicación: En Haskell, ❡ se calcula como ✭❡①♣ ✶✮.

Solución:

❡rr♦r❆♣r♦①❊ ① ❂ ❤❡❛❞ ❬♠ ⑤ ♠ ❁✲ ❬✶✳✳❪✱ ❛❜s✭✭❡①♣ ✶✮ ✲ ✭✶✰✶✴♠✮✯✯♠✮ ❁ ①❪

Ejercicio 2.8.4. El número e también se puede definir como la suma de la serie:

10!

+11!

+12!

+13!

+ . . .

Definir la función ❛♣r♦①❊✬ tal que ✭❛♣r♦①❊✬ ♥✮ es la aproximación de e que se obtiene sumando

los términos de la serie hasta 1n! . Por ejemplo,

❛♣r♦①❊✬ ✶✵ ❂❂ ✷✳✼✶✽✷✽✶✽✵✶✶✹✻✸✽✺

❛♣r♦①❊✬ ✶✵✵ ❂❂ ✷✳✼✶✽✷✽✶✽✷✽✹✺✾✵✹✺✺

Solución:

❛♣r♦①❊✬ ♥ ❂ ✶ ✰ s✉♠ ❬ ✶ ✴ ❢❛❝t♦r✐❛❧ ❦ ⑤ ❦ ❁✲ ❬✶✳✳♥❪❪

❢❛❝t♦r✐❛❧ ♥ ❂ ♣r♦❞✉❝t ❬✶✳✳♥❪

Ejercicio 2.8.5. Definir la constante e como 2,71828459.

Solución:

❡ ❂ ✷✳✼✶✽✷✽✹✺✾

Ejercicio 2.8.6. Definir la función ❡rr♦r❊✬ tal que ✭❡rr♦r❊✬ ①✮ es el menor número de tér-

minos de la serie anterior necesarios para obtener e con un error menor que ①. Por ejemplo,

❡rr♦r❊✬ ✵✳✶ ❂❂ ✸✳✵

❡rr♦r❊✬ ✵✳✵✶ ❂❂ ✹✳✵

❡rr♦r❊✬ ✵✳✵✵✶ ❂❂ ✻✳✵

❡rr♦r❊✬ ✵✳✵✵✵✶ ❂❂ ✼✳✵

Solución:

❡rr♦r❊✬ ① ❂ ❤❡❛❞ ❬♥ ⑤ ♥ ❁✲ ❬✵✳✳❪✱ ❛❜s✭❛♣r♦①❊✬ ♥ ✲ ❡✮ ❁ ①❪

46 Capítulo 2. Definiciones por comprensión

2.9. Aproximación del límite

Ejercicio 2.9.1. Definir la función ❛♣r♦①▲✐♠❙❡♥♦ tal que ✭❛♣r♦①▲✐♠❙❡♥♦ ♥✮ es la lista cuyos

elementos son los términos de la sucesiónsen( 1

m )1m

desde 1 hasta ♥. Por ejemplo,

❛♣r♦①▲✐♠❙❡♥♦ ✶ ❂❂ ❬✵✳✽✹✶✹✼✵✾✽✹✽✵✼✽✾✻✺❪

❛♣r♦①▲✐♠❙❡♥♦ ✷ ❂❂ ❬✵✳✽✹✶✹✼✵✾✽✹✽✵✼✽✾✻✺✱✵✳✾✺✽✽✺✶✵✼✼✷✵✽✹✵✻❪

Solución:

❛♣r♦①▲✐♠❙❡♥♦ ♥ ❂ ❬s✐♥✭✶✴♠✮✴✭✶✴♠✮ ⑤ ♠ ❁✲ ❬✶✳✳♥❪❪

Ejercicio 2.9.2. ¿Cuál es el límite de la sucesiónsen( 1

m )1m

?

Solución: El límite es 1.

Ejercicio 2.9.3. Definir la función ❡rr♦r▲✐♠❙❡♥♦ tal que ✭❡rr♦r▲✐♠❙❡♥♦ ①✮ es el menor nú-

mero de términos de la sucesiónsen( 1

m )1m

necesarios para obtener su límite con un error menor que

①. Por ejemplo,

❡rr♦r▲✐♠❙❡♥♦ ✵✳✶ ❂❂ ✷✳✵

❡rr♦r▲✐♠❙❡♥♦ ✵✳✵✶ ❂❂ ✺✳✵

❡rr♦r▲✐♠❙❡♥♦ ✵✳✵✵✶ ❂❂ ✶✸✳✵

❡rr♦r▲✐♠❙❡♥♦ ✵✳✵✵✵✶ ❂❂ ✹✶✳✵

Solución:

❡rr♦r▲✐♠❙❡♥♦ ① ❂ ❤❡❛❞ ❬♠ ⑤ ♠ ❁✲ ❬✶✳✳❪✱ ❛❜s✭✶ ✲ s✐♥✭✶✴♠✮✴✭✶✴♠✮✮ ❁ ①❪

2.10. Cálculo del número π

Ejercicio 2.10.1. Definir la función ❝❛❧❝✉❧❛P✐ tal que ✭❝❛❧❝✉❧❛P✐ ♥✮ es la aproximación del

número π calculada mediante la expresión

4 ∗ (1 −13+

15−

17+ · · ·+

(−1)n

2n + 1)

Por ejemplo,

❝❛❧❝✉❧❛P✐ ✸ ❂❂ ✷✳✽✾✺✷✸✽✵✾✺✷✸✽✵✾✺✻

❝❛❧❝✉❧❛P✐ ✸✵✵ ❂❂ ✸✳✶✹✹✾✶✹✾✵✸✺✺✽✽✺✷✻

Solución:

2.11. Ternas pitagóricas 47

❝❛❧❝✉❧❛P✐ ♥ ❂ ✹ ✯ s✉♠ ❬✭✲✶✮✯✯①✴✭✷✯①✰✶✮ ⑤ ① ❁✲ ❬✵✳✳♥❪❪

Ejercicio 2.10.2. Definir la función ❡rr♦rP✐ tal que ✭❡rr♦rP✐ ①✮ es el menor número de

términos de la serie

4 ∗ (1 −13+

15−

17+ · · ·+

(−1)n

2n + 1)

necesarios para obtener π con un error menor que ①. Por ejemplo,

❡rr♦rP✐ ✵✳✶ ❂❂ ✾✳✵

❡rr♦rP✐ ✵✳✵✶ ❂❂ ✾✾✳✵

❡rr♦rP✐ ✵✳✵✵✶ ❂❂ ✾✾✾✳✵

Solución:

❡rr♦rP✐ ① ❂ ❤❡❛❞ ❬♥ ⑤ ♥ ❁✲ ❬✶✳✳❪✱ ❛❜s ✭♣✐ ✲ ✭❝❛❧❝✉❧❛P✐ ♥✮✮ ❁ ①❪

2.11. Ternas pitagóricas

Ejercicio 2.11.1. Una terna (x, y, z) de enteros positivos es pitagórica si x2 + y2 = z2. Usando

una lista por comprensión, definir la función

♣✐t❛❣♦r✐❝❛s ✿✿ ■♥t ✲❃ ❬✭■♥t✱■♥t✱■♥t✮❪

tal que ✭♣✐t❛❣♦r✐❝❛s ♥✮ es la lista de todas las ternas pitagóricas cuyas componentes están

entre ✶ y ♥. Por ejemplo,

♣✐t❛❣♦r✐❝❛s ✶✵ ❂❂ ❬✭✸✱✹✱✺✮✱✭✹✱✸✱✺✮✱✭✻✱✽✱✶✵✮✱✭✽✱✻✱✶✵✮❪

Solución:

♣✐t❛❣♦r✐❝❛s ✿✿ ■♥t ✲❃ ❬✭■♥t✱■♥t✱■♥t✮❪

♣✐t❛❣♦r✐❝❛s ♥ ❂ ❬✭①✱②✱③✮ ⑤ ① ❁✲ ❬✶✳✳♥❪✱

② ❁✲ ❬✶✳✳♥❪✱

③ ❁✲ ❬✶✳✳♥❪✱

①❫✷ ✰ ②❫✷ ❂❂ ③❫✷❪

Ejercicio 2.11.2. Definir la función

♥✉♠❡r♦❉❡P❛r❡s ✿✿ ✭■♥t✱■♥t✱■♥t✮ ✲❃ ■♥t

tal que ✭♥✉♠❡r♦❉❡P❛r❡s t✮ es el número de elementos pares de la terna t. Por ejemplo,

48 Capítulo 2. Definiciones por comprensión

♥✉♠❡r♦❉❡P❛r❡s ✭✸✱✺✱✼✮ ❂❂ ✵

♥✉♠❡r♦❉❡P❛r❡s ✭✸✱✻✱✼✮ ❂❂ ✶

♥✉♠❡r♦❉❡P❛r❡s ✭✸✱✻✱✹✮ ❂❂ ✷

♥✉♠❡r♦❉❡P❛r❡s ✭✹✱✻✱✹✮ ❂❂ ✸

Solución:

♥✉♠❡r♦❉❡P❛r❡s ✿✿ ✭■♥t✱■♥t✱■♥t✮ ✲❃ ■♥t

♥✉♠❡r♦❉❡P❛r❡s ✭①✱②✱③✮ ❂ s✉♠ ❬✶ ⑤ ♥ ❁✲ ❬①✱②✱③❪✱ ❡✈❡♥ ♥❪

Ejercicio 2.11.3. Definir la función

❝♦♥❥❡t✉r❛ ✿✿ ■♥t ✲❃ ❇♦♦❧

tal que ✭❝♦♥❥❡t✉r❛ ♥✮ se verifica si todas las ternas pitagóricas cuyas componentes están entre

✶ y ♥ tiene un número impar de números pares. Por ejemplo,

❝♦♥❥❡t✉r❛ ✶✵ ❂❂ ❚r✉❡

Solución:

❝♦♥❥❡t✉r❛ ✿✿ ■♥t ✲❃ ❇♦♦❧

❝♦♥❥❡t✉r❛ ♥ ❂ ❛♥❞ ❬♦❞❞ ✭♥✉♠❡r♦❉❡P❛r❡s t✮ ⑤ t ❁✲ ♣✐t❛❣♦r✐❝❛s ♥❪

Ejercicio 2.11.4. Demostrar la conjetura para todas las ternas pitagóricas.

Solución: Sea (x, y, z) una terna pitagórica. Entonces x2 + y2 = z2. Pueden darse 4 casos:Caso 1: x e y son pares. Entonces, x2, y2 y z2 también lo son. Luego el número de

componentes pares es 3 que es impar.Caso 2: x es par e y es impar. Entonces, x2 es par, y2 es impar y z2 es impar. Luego el

número de componentes pares es 1 que es impar.Caso 3: x es impar e y es par. Análogo al caso 2.Caso 4: x e y son impares. Entonces, x2 e y2 también son impares y z2 es par. Luego

el número de componentes pares es 1 que es impar.

2.12. Problema 9 del Proyecto Euler

Ejercicio 2.12.1. Una terna pitagórica es una terna de números naturales (a, b, c) tal que a <

b < c y a2 + b2 = c2. Por ejemplo (3, 4, 5) es una terna pitagórica. Definir la función

t❡r♥❛sP✐t❛❣♦r✐❝❛s ✿✿ ■♥t❡❣❡r ✲❃ ❬❬■♥t❡❣❡r❪❪

tal que ✭t❡r♥❛sP✐t❛❣♦r✐❝❛s ①✮ es la lista de las ternas pitagóricas cuya suma es ①. Por

ejemplo,

2.13. Producto escalar 49

t❡r♥❛sP✐t❛❣♦r✐❝❛s ✶✷ ❂❂ ❬✭✸✱✹✱✺✮❪

t❡r♥❛sP✐t❛❣♦r✐❝❛s ✻✵ ❂❂ ❬✭✶✵✱✷✹✱✷✻✮✱✭✶✺✱✷✵✱✷✺✮❪

Solución:

t❡r♥❛sP✐t❛❣♦r✐❝❛s ✿✿ ■♥t❡❣❡r ✲❃ ❬✭■♥t❡❣❡r✱■♥t❡❣❡r✱■♥t❡❣❡r✮❪

t❡r♥❛sP✐t❛❣♦r✐❝❛s ① ❂ ❬✭❛✱❜✱❝✮ ⑤ ❛ ❁✲ ❬✶✳✳①❪✱

❜ ❁✲ ❬❛✰✶✳✳①❪✱

❝ ❁✲ ❬①✲❛✲❜❪✱

❛❫✷ ✰ ❜❫✷ ❂❂ ❝❫✷❪

Ejercicio 2.12.2. Definir la constante ❡✉❧❡r✾ tal que ❡✉❧❡r✾ es producto abc donde (a, b, c) es

la única terna pitagórica tal que a + b + c = 1000. Calcular el valor de ❡✉❧❡r✾.

Solución:

❡✉❧❡r✾ ❂ ❛✯❜✯❝

✇❤❡r❡ ✭❛✱❜✱❝✮ ❂ ❤❡❛❞ ✭t❡r♥❛sP✐t❛❣♦r✐❝❛s ✶✵✵✵✮

El cálculo del valor de euler9 es

❣❤❝✐❃ ❡✉❧❡r✾

✸✶✽✼✺✵✵✵

2.13. Producto escalar

Ejercicio 2.13.1. El producto escalar de dos listas de enteros ①s e ②s de longitud ♥ viene dado por

la suma de los productos de los elementos correspondientes. Definir por comprensión la función

♣r♦❞✉❝t♦❊s❝❛❧❛r ✿✿ ❬■♥t❪ ✲❃ ❬■♥t❪ ✲❃ ■♥t

tal que ✭♣r♦❞✉❝t♦❊s❝❛❧❛r ①s ②s✮ es el producto escalar de las listas ①s e ②s. Por ejemplo,

♣r♦❞✉❝t♦❊s❝❛❧❛r ❬✶✱✷✱✸❪ ❬✹✱✺✱✻❪ ❂❂ ✸✷

Solución:

♣r♦❞✉❝t♦❊s❝❛❧❛r ✿✿ ❬■♥t❪ ✲❃ ❬■♥t❪ ✲❃ ■♥t

♣r♦❞✉❝t♦❊s❝❛❧❛r ①s ②s ❂ s✉♠ ❬①✯② ⑤ ✭①✱②✮ ❁✲ ③✐♣ ①s ②s❪

50 Capítulo 2. Definiciones por comprensión

2.14. Suma de pares de elementos consecutivos

Ejercicio 2.14.1. Definir, por comprensión, la función

s✉♠❛❈♦♥s❡❝✉t✐✈♦s ✿✿ ❬■♥t❪ ✲❃ ❬■♥t❪

tal que ✭s✉♠❛❈♦♥s❡❝✉t✐✈♦s ①s✮ es la suma de los pares de elementos consecutivos de la lista

①s. Por ejemplo,

s✉♠❛❈♦♥s❡❝✉t✐✈♦s ❬✸✱✶✱✺✱✷❪ ❂❂ ❬✹✱✻✱✼❪

s✉♠❛❈♦♥s❡❝✉t✐✈♦s ❬✸❪ ❂❂ ❬❪

Solución:

s✉♠❛❈♦♥s❡❝✉t✐✈♦s ✿✿ ❬■♥t❪ ✲❃ ❬■♥t❪

s✉♠❛❈♦♥s❡❝✉t✐✈♦s ①s ❂ ❬①✰② ⑤ ✭①✱②✮ ❁✲ ③✐♣ ①s ✭t❛✐❧ ①s✮❪

2.15. Posiciones de un elemento en una lista

Ejercicio 2.15.1. En el tema se ha definido la función

♣♦s✐❝✐♦♥❡s ✿✿ ❊q ❛ ❂❃ ❛ ✲❃ ❬❛❪ ✲❃ ❬■♥t❪

tal que ✭♣♦s✐❝✐♦♥❡s ① ①s✮ es la lista de las posiciones ocupadas por el elemento ① en la lista

①s. Por ejemplo,

♣♦s✐❝✐♦♥❡s ✺ ❬✶✱✺✱✸✱✺✱✺✱✼❪ ❂❂ ❬✶✱✸✱✹❪

Definir, usando la función ❜✉s❝❛ (definida en el tema 5), la función

♣♦s✐❝✐♦♥❡s✬ ✿✿ ❊q ❛ ❂❃ ❛ ✲❃ ❬❛❪ ✲❃ ❬■♥t❪

tal que ♣♦s✐❝✐♦♥❡s✬ sea equivalente a ♣♦s✐❝✐♦♥❡s.

Solución: La definición de posiciones es

♣♦s✐❝✐♦♥❡s ✿✿ ❊q ❛ ❂❃ ❛ ✲❃ ❬❛❪ ✲❃ ❬■♥t❪

♣♦s✐❝✐♦♥❡s ① ①s ❂

❬✐ ⑤ ✭①✬✱✐✮ ❁✲ ③✐♣ ①s ❬✵✳✳♥❪✱ ① ❂❂ ①✬❪

✇❤❡r❡ ♥ ❂ ❧❡♥❣t❤ ①s ✲ ✶

La definición de busca es

❜✉s❝❛ ✿✿ ❊q ❛ ❂❃ ❛ ✲❃ ❬✭❛✱ ❜✮❪ ✲❃ ❬❜❪

❜✉s❝❛ ❝ t ❂ ❬✈ ⑤ ✭❝✬✱ ✈✮ ❁✲ t✱ ❝✬ ❂❂ ❝❪

La redefinición de posiciones es

♣♦s✐❝✐♦♥❡s✬ ✿✿ ❊q ❛ ❂❃ ❛ ✲❃ ❬❛❪ ✲❃ ❬■♥t❪

♣♦s✐❝✐♦♥❡s✬ ① ①s ❂ ❜✉s❝❛ ① ✭③✐♣ ①s ❬✵✳✳❪✮

2.16. Representación densa de un polinomio representado dispersamente 51

2.16. Representación densa de un polinomio representa-do dispersamente

Ejercicio 2.16.1. Los polinomios pueden representarse de forma dispersa o densa. Por ejemplo,

el polinomio 6x4 − 5x2 + 4x − 7 se puede representar de forma dispersa por ❬✻✱✵✱✲✺✱✹✱✲✼❪ y

de forma densa por ❬✭✹✱✻✮✱✭✷✱✲✺✮✱✭✶✱✹✮✱✭✵✱✲✼✮❪. Definir la función

❞❡♥s❛ ✿✿ ❬■♥t❪ ✲❃ ❬✭■♥t✱■♥t✮❪

tal que (❞❡♥s❛ xs) es la representación densa del polinomio cuya representación dispersa es ①s.

Por ejemplo,

❞❡♥s❛ ❬✻✱✵✱✲✺✱✹✱✲✼❪ ❂❂ ❬✭✹✱✻✮✱✭✷✱✲✺✮✱✭✶✱✹✮✱✭✵✱✲✼✮❪

❞❡♥s❛ ❬✻✱✵✱✵✱✸✱✵✱✹❪ ❂❂ ❬✭✺✱✻✮✱✭✷✱✸✮✱✭✵✱✹✮❪

Solución:

❞❡♥s❛ ✿✿ ❬■♥t❪ ✲❃ ❬✭■♥t✱■♥t✮❪

❞❡♥s❛ ①s ❂ ❬✭①✱②✮ ⑤ ✭①✱②✮ ❁✲ ③✐♣ ❬♥✲✶✱♥✲✷✳✳✵❪ ①s✱ ② ✴❂ ✵❪

✇❤❡r❡ ♥ ❂ ❧❡♥❣t❤ ①s

2.17. Producto cartesiano

Ejercicio 2.17.1. La función

♣❛r❡s ✿✿ ❬❛❪ ✲❃ ❬❜❪ ✲❃ ❬✭❛✱❜✮❪

definida por

♣❛r❡s ①s ②s ❂ ❬✭①✱②✮ ⑤ ① ❁✲ ①s✱ ② ❁✲ ②s❪

toma como argumento dos listas y devuelve la listas de los pares con el primer elemento de la

primera lista y el segundo de la segunda. Por ejemplo,

❣❤❝✐❃ ♣❛r❡s ❬✶✳✳✸❪ ❬✹✳✳✻❪

❬✭✶✱✹✮✱✭✶✱✺✮✱✭✶✱✻✮✱✭✷✱✹✮✱✭✷✱✺✮✱✭✷✱✻✮✱✭✸✱✹✮✱✭✸✱✺✮✱✭✸✱✻✮❪

Definir, usando dos listas por comprensión con un generador cada una, la función

♣❛r❡s✬ ✿✿ ❬❛❪ ✲❃ ❬❜❪ ✲❃ ❬✭❛✱❜✮❪

tal que ♣❛r❡s✬ sea equivalente a ♣❛r❡s.

Indicación: Utilizar la función predefinida ❝♦♥❝❛t y encajar una lista por comprensión

dentro de la otra.

Solución:

♣❛r❡s✬ ✿✿ ❬❛❪ ✲❃ ❬❜❪ ✲❃ ❬✭❛✱❜✮❪

♣❛r❡s✬ ①s ②s ❂ ❝♦♥❝❛t ❬❬✭①✱②✮ ⑤ ② ❁✲ ②s❪ ⑤ ① ❁✲ ①s❪

52 Capítulo 2. Definiciones por comprensión

2.18. Consulta de bases de datos

La bases de datos sobre actividades de personas pueden representarse mediante lis-tas de elementos de la forma (a, b, c, d), donde a es el nombre de la persona, b su activi-dad, c su fecha de nacimiento y d la de su fallecimiento. Un ejemplo es la siguiente queusaremos a lo largo de los siguientes ejercicios

♣❡rs♦♥❛s ✿✿ ❬✭❙tr✐♥❣✱❙tr✐♥❣✱■♥t✱■♥t✮❪

♣❡rs♦♥❛s ❂ ❬✭✧❈❡r✈❛♥t❡s✧✱✧▲✐t❡r❛t✉r❛✧✱✶✺✹✼✱✶✻✶✻✮✱

✭✧❱❡❧❛③q✉❡③✧✱✧P✐♥t✉r❛✧✱✶✺✾✾✱✶✻✻✵✮✱

✭✧P✐❝❛ss♦✧✱✧P✐♥t✉r❛✧✱✶✽✽✶✱✶✾✼✸✮✱

✭✧❇❡❡t❤♦✈❡♥✧✱✧▼✉s✐❝❛✧✱✶✼✼✵✱✶✽✷✸✮✱

✭✧P♦✐♥❝❛r❡✧✱✧❈✐❡♥❝✐❛✧✱✶✽✺✹✱✶✾✶✷✮✱

✭✧◗✉❡✈❡❞♦✧✱✧▲✐t❡r❛t✉r❛✧✱✶✺✽✵✱✶✻✺✹✮✱

✭✧●♦②❛✧✱✧P✐♥t✉r❛✧✱✶✼✹✻✱✶✽✷✽✮✱

✭✧❊✐♥st❡✐♥✧✱✧❈✐❡♥❝✐❛✧✱✶✽✼✾✱✶✾✺✺✮✱

✭✧▼♦③❛rt✧✱✧▼✉s✐❝❛✧✱✶✼✺✻✱✶✼✾✶✮✱

✭✧❇♦tt✐❝❡❧❧✐✧✱✧P✐♥t✉r❛✧✱✶✹✹✺✱✶✺✶✵✮✱

✭✧❇♦rr♦♠✐♥✐✧✱✧❆rq✉✐t❡❝t✉r❛✧✱✶✺✾✾✱✶✻✻✼✮✱

✭✧❇❛❝❤✧✱✧▼✉s✐❝❛✧✱✶✻✽✺✱✶✼✺✵✮❪

Ejercicio 2.18.1. Definir la función ♥♦♠❜r❡s tal que ✭♥♦♠❜r❡s ❜❞✮ es la lista de los nombres

de las personas de la base de datos ❜❞. Por ejemplo,

❣❤❝✐❃ ♥♦♠❜r❡s ♣❡rs♦♥❛s

❬✧❈❡r✈❛♥t❡s✧✱✧❱❡❧❛③q✉❡③✧✱✧P✐❝❛ss♦✧✱✧❇❡❡t❤♦✈❡♥✧✱✧P♦✐♥❝❛r❡✧✱

✧◗✉❡✈❡❞♦✧✱✧●♦②❛✧✱✧❊✐♥st❡✐♥✧✱✧▼♦③❛rt✧✱✧❇♦tt✐❝❡❧❧✐✧✱✧❇♦rr♦♠✐♥✐✧✱✧❇❛❝❤✧❪

Solución:

♥♦♠❜r❡s ✿✿ ❬✭❙tr✐♥❣✱❙tr✐♥❣✱■♥t✱■♥t✮❪ ✲❃ ❬❙tr✐♥❣❪

♥♦♠❜r❡s ❜❞ ❂ ❬① ⑤ ✭①✱❴✱❴✱❴✮ ❁✲ ❜❞❪

Ejercicio 2.18.2. Definir la función ♠✉s✐❝♦s tal que ✭♠✉s✐❝♦s ❜❞✮ es la lista de los nombres

de los músicos de la base de datos ❜❞. Por ejemplo,

❣❤❝✐❃ ♠✉s✐❝♦s ♣❡rs♦♥❛s

❬✧❇❡❡t❤♦✈❡♥✧✱✧▼♦③❛rt✧✱✧❇❛❝❤✧❪

Solución:

♠✉s✐❝♦s ✿✿ ❬✭❙tr✐♥❣✱❙tr✐♥❣✱■♥t✱■♥t✮❪ ✲❃ ❬❙tr✐♥❣❪

♠✉s✐❝♦s ❜❞ ❂ ❬① ⑤ ✭①✱♠✱❴✱❴✮ ❁✲ ❜❞✱ ♠ ❂❂ ✧▼✉s✐❝❛✧❪

2.18. Consulta de bases de datos 53

Ejercicio 2.18.3. Definir la función s❡❧❡❝❝✐♦♥ tal que ✭s❡❧❡❝❝✐♦♥ ❜❞ ♠✮ es la lista de los

nombres de las personas de la base de datos ❜❞ cuya actividad es ♠. Por ejemplo,

❣❤❝✐❃ s❡❧❡❝❝✐♦♥ ♣❡rs♦♥❛s ✧P✐♥t✉r❛✧

❬✧❱❡❧❛③q✉❡③✧✱✧P✐❝❛ss♦✧✱✧●♦②❛✧✱✧❇♦tt✐❝❡❧❧✐✧❪

Solución:

s❡❧❡❝❝✐♦♥ ✿✿ ❬✭❙tr✐♥❣✱❙tr✐♥❣✱■♥t✱■♥t✮❪ ✲❃ ❙tr✐♥❣ ✲❃ ❬❙tr✐♥❣❪

s❡❧❡❝❝✐♦♥ ❜❞ ♠ ❂ ❬ ① ⑤ ✭①✱♠✬✱❴✱❴✮ ❁✲ ❜❞✱ ♠ ❂❂ ♠✬ ❪

Ejercicio 2.18.4. Definir, usando el apartado anterior, la función ♠✉s✐❝♦s✬ tal que ✭♠✉s✐❝♦s✬ ❜❞✮

es la lista de los nombres de los músicos de la base de datos ❜❞. Por ejemplo,

❣❤❝✐❃ ♠✉s✐❝♦s✬ ♣❡rs♦♥❛s

❬✧❇❡❡t❤♦✈❡♥✧✱✧▼♦③❛rt✧✱✧❇❛❝❤✧❪

Solución:

♠✉s✐❝♦s✬ ✿✿ ❬✭❙tr✐♥❣✱❙tr✐♥❣✱■♥t✱■♥t✮❪ ✲❃ ❬❙tr✐♥❣❪

♠✉s✐❝♦s✬ ❜❞ ❂ s❡❧❡❝❝✐♦♥ ❜❞ ✧▼✉s✐❝❛✧

Ejercicio 2.18.5. Definir la función ✈✐✈❛s tal que ✭✈✐✈❛s ❜❞ ❛✮ es la lista de los nombres de

las personas de la base de datos ❜❞ que estaban vivas en el año ❛. Por ejemplo,

❣❤❝✐❃ ✈✐✈❛s ♣❡rs♦♥❛s ✶✻✵✵

❬✧❈❡r✈❛♥t❡s✧✱✧❱❡❧❛③q✉❡③✧✱✧◗✉❡✈❡❞♦✧✱✧❇♦rr♦♠✐♥✐✧❪

Solución:

✈✐✈❛s ✿✿ ❬✭❙tr✐♥❣✱❙tr✐♥❣✱■♥t✱■♥t✮❪ ✲❃ ■♥t ✲❃ ❬❙tr✐♥❣❪

✈✐✈❛s ♣s ❛ ❂ ❬① ⑤ ✭①✱❴✱❛✶✱❛✷✮ ❁✲ ♣s✱ ❛✶ ❁❂ ❛✱ ❛ ❁❂ ❛✷❪

Nota. Un caso de estudio para las definiciones por comprensión es el capítulo 15 “El

cifrado César” (página 325).

54 Capítulo 2. Definiciones por comprensión

Capítulo 3

Definiciones por recursión

En este capítulo se presentan ejercicios con definiciones por recursión. Se correspon-den con el tema 6 de [1].

Contenido3.1 Potencia de exponente natural . . . . . . . . . . . . . . . . . . . . . . . 56

3.2 Replicación de un elemento . . . . . . . . . . . . . . . . . . . . . . . . . 56

3.3 Doble factorial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

3.4 Algoritmo de Euclides del máximo común divisor . . . . . . . . . . . . 57

3.5 Menor número divisible por una sucesión de números . . . . . . . . . 58

3.6 Número de pasos para resolver el problema de las torres de Hanoi . . 59

3.7 Conjunción de una lista . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

3.8 Pertenencia a una lista . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

3.9 Último elemento de una lista . . . . . . . . . . . . . . . . . . . . . . . . 60

3.10 Concatenación de una lista . . . . . . . . . . . . . . . . . . . . . . . . . 61

3.11 Selección de un elemento . . . . . . . . . . . . . . . . . . . . . . . . . . 61

3.12 Selección de los primeros elementos . . . . . . . . . . . . . . . . . . . . 61

3.13 Intercalación de la media aritmética . . . . . . . . . . . . . . . . . . . . 62

3.14 Ordenación por mezcla . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

3.14.1 Mezcla de listas ordenadas . . . . . . . . . . . . . . . . . . . . . 62

3.14.2 Mitades de una lista . . . . . . . . . . . . . . . . . . . . . . . . . 63

3.14.3 Ordenación por mezcla . . . . . . . . . . . . . . . . . . . . . . . 63

3.14.4 La ordenación por mezcla da listas ordenadas . . . . . . . . . . 63

55

56 Capítulo 3. Definiciones por recursión

3.14.5 La ordenación por mezcla da una permutación . . . . . . . . . 64

3.14.6 Determinación de permutaciones . . . . . . . . . . . . . . . . . 65

Nota. En esta relación se usa la librería de ◗✉✐❝❦❈❤❡❝❦.

✐♠♣♦rt ❚❡st✳◗✉✐❝❦❈❤❡❝❦

3.1. Potencia de exponente natural

Ejercicio 3.1.1. Definir por recursión la función

♣♦t❡♥❝✐❛ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

tal que ✭♣♦t❡♥❝✐❛ ① ♥✮ es ① elevado al número natural ♥. Por ejemplo,

♣♦t❡♥❝✐❛ ✷ ✸ ❂❂ ✽

Solución:

♣♦t❡♥❝✐❛ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

♣♦t❡♥❝✐❛ ♠ ✵ ❂ ✶

♣♦t❡♥❝✐❛ ♠ ♥ ❂ ♠✯✭♣♦t❡♥❝✐❛ ♠ ✭♥✲✶✮✮

3.2. Replicación de un elemento

Ejercicio 3.2.1. Definir por recursión la función

r❡♣❧✐❝❛t❡✬ ✿✿ ■♥t ✲❃ ❛ ✲❃ ❬❛❪

tal que ✭r❡♣❧✐❝❛t❡✬ ♥ ①✮ es la lista formado por ♥ copias del elemento ①. Por ejemplo,

r❡♣❧✐❝❛t❡✬ ✸ ✷ ❂❂ ❬✷✱✷✱✷❪

Solución:

r❡♣❧✐❝❛t❡✬ ✿✿ ■♥t ✲❃ ❛ ✲❃ ❬❛❪

r❡♣❧✐❝❛t❡✬ ✵ ❴ ❂ ❬❪

r❡♣❧✐❝❛t❡✬ ✭♥✰✶✮ ① ❂ ① ✿ r❡♣❧✐❝❛t❡✬ ♥ ①

3.3. Doble factorial 57

3.3. Doble factorial

Ejercicio 3.3.1. El doble factorial de un número ♥ se define por

✵✦✦ ❂ ✶

✶✦✦ ❂ ✶

♥✦✦ ❂ ♥✯✭♥✲✷✮✯ ✳✳✳ ✯ ✸ ✯ ✶✱ s✐ ♥ ❡s ✐♠♣❛r

♥✦✦ ❂ ♥✯✭♥✲✷✮✯ ✳✳✳ ✯ ✹ ✯ ✷✱ s✐ ♥ ❡s ♣❛r

Por ejemplo,

✽✦✦ ❂ ✽✯✻✯✹✯✷ ❂ ✸✽✹

✾✦✦ ❂ ✾✯✼✯✺✯✸✯✶ ❂ ✾✹✺

Definir, por recursión, la función

❞♦❜❧❡❋❛❝t♦r✐❛❧ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

tal que ✭❞♦❜❧❡❋❛❝t♦r✐❛❧ ♥✮ es el doble factorial de ♥. Por ejemplo,

❞♦❜❧❡❋❛❝t♦r✐❛❧ ✽ ❂❂ ✸✽✹

❞♦❜❧❡❋❛❝t♦r✐❛❧ ✾ ❂❂ ✾✹✺

Solución:

❞♦❜❧❡❋❛❝t♦r✐❛❧ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

❞♦❜❧❡❋❛❝t♦r✐❛❧ ✵ ❂ ✶

❞♦❜❧❡❋❛❝t♦r✐❛❧ ✶ ❂ ✶

❞♦❜❧❡❋❛❝t♦r✐❛❧ ♥ ❂ ♥ ✯ ❞♦❜❧❡❋❛❝t♦r✐❛❧ ✭♥✲✷✮

3.4. Algoritmo de Euclides del máximo común divisor

Ejercicio 3.4.1. Dados dos números naturales, a y b, es posible calcular su máximo común divi-

sor mediante el Algoritmo de Euclides. Este algoritmo se puede resumir en la siguiente fórmula:

mcd(a, b) =

{

a, si b = 0

mcd(b, a módulo b), si b > 0

Definir la función

♠❝❞ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

tal que ✭♠❝❞ ❛ ❜✮ es el máximo común divisor de ❛ y ❜ calculado mediante el algoritmo de

Euclides. Por ejemplo,

58 Capítulo 3. Definiciones por recursión

♠❝❞ ✸✵ ✹✺ ❂❂ ✶✺

Solución:

♠❝❞ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

♠❝❞ ❛ ✵ ❂ ❛

♠❝❞ ❛ ❜ ❂ ♠❝❞ ❜ ✭❛ ❵♠♦❞❵ ❜✮

3.5. Menor número divisible por una sucesión de núme-ros

Los siguientes ejercicios tienen como objetivo resolver el problema 5 del proyectoEuler que consiste en calcular el menor número divisible por los números del 1 al 20.

Ejercicio 3.5.1. Definir por recursión la función

♠❡♥♦r❉✐✈✐s✐❜❧❡ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

tal que ✭♠❡♥♦r❉✐✈✐s✐❜❧❡ ❛ ❜✮ es el menor número divisible por los números del ❛ al ❜. Por

ejemplo,

♠❡♥♦r❉✐✈✐s✐❜❧❡ ✷ ✺ ❂❂ ✻✵

Indicación: Usar la función ❧❝♠ tal que ✭❧❝♠ ① ②✮ es el mínimo común múltiplo de ① e ②.

Solución:

♠❡♥♦r❉✐✈✐s✐❜❧❡ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

♠❡♥♦r❉✐✈✐s✐❜❧❡ ❛ ❜

⑤ ❛ ❂❂ ❜ ❂ ❛

⑤ ♦t❤❡r✇✐s❡ ❂ ❧❝♠ ❛ ✭♠❡♥♦r❉✐✈✐s✐❜❧❡ ✭❛✰✶✮ ❜✮

Ejercicio 3.5.2. Definir la constante

❡✉❧❡r✺ ✿✿ ■♥t❡❣❡r

tal que ❡✉❧❡r✺ es el menor número divisible por los números del 1 al 20 y calcular su valor.

Solución:

❡✉❧❡r✺ ✿✿ ■♥t❡❣❡r

❡✉❧❡r✺ ❂ ♠❡♥♦r❉✐✈✐s✐❜❧❡ ✶ ✷✵

El cálculo es

❣❤❝✐❃ ❡✉❧❡r✺

✷✸✷✼✾✷✺✻✵

3.6. Número de pasos para resolver el problema de las torres de Hanoi 59

3.6. Número de pasos para resolver el problema de las to-rres de Hanoi

Ejercicio 3.6.1. En un templo hindú se encuentran tres varillas de platino. En una de ellas, hay

64 anillos de oro de distintos radios, colocados de mayor a menor.

El trabajo de los monjes de ese templo consiste en pasarlos todos a la tercera varilla, usando

la segunda como varilla auxiliar, con las siguientes condiciones:

En cada paso sólo se puede mover un anillo.

Nunca puede haber un anillo de mayor diámetro encima de uno de menor diámetro.

La leyenda dice que cuando todos los anillos se encuentren en la tercera varilla, será el fin del

mundo.

Definir la función

♥✉♠P❛s♦s❍❛♥♦✐ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

tal que ✭♥✉♠P❛s♦s❍❛♥♦✐ ♥✮ es el número de pasos necesarios para trasladar ♥ anillos. Por ejem-

plo,

♥✉♠P❛s♦s❍❛♥♦✐ ✷ ❂❂ ✸

♥✉♠P❛s♦s❍❛♥♦✐ ✼ ❂❂ ✶✷✼

♥✉♠P❛s♦s❍❛♥♦✐ ✻✹ ❂❂ ✶✽✹✹✻✼✹✹✵✼✸✼✵✾✺✺✶✻✶✺

Solución: Sean A, B y C las tres varillas. La estrategia recursiva es la siguiente:

Caso base (n = 1): Se mueve el disco de A a C.

Caso inductivo (n = m + 1): Se mueven m discos de A a C. Se mueve el disco deA a B. Se mueven m discos de C a B.

Por tanto,

♥✉♠P❛s♦s❍❛♥♦✐ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

♥✉♠P❛s♦s❍❛♥♦✐ ✶ ❂ ✶

♥✉♠P❛s♦s❍❛♥♦✐ ✭♥✰✶✮ ❂ ✶ ✰ ✷ ✯ ♥✉♠P❛s♦s❍❛♥♦✐ ♥

3.7. Conjunción de una lista

Ejercicio 3.7.1. Definir por recursión la función

❛♥❞✬ ✿✿ ❬❇♦♦❧❪ ✲❃ ❇♦♦❧

60 Capítulo 3. Definiciones por recursión

tal que ✭❛♥❞✬ ①s✮ se verifica si todos los elementos de ①s son verdadero. Por ejemplo,

❛♥❞✬ ❬✶✰✷ ❁ ✹✱ ✷✿❬✸❪ ❂❂ ❬✷✱✸❪❪ ❂❂ ❚r✉❡

❛♥❞✬ ❬✶✰✷ ❁ ✸✱ ✷✿❬✸❪ ❂❂ ❬✷✱✸❪❪ ❂❂ ❋❛❧s❡

Solución:

❛♥❞✬ ✿✿ ❬❇♦♦❧❪ ✲❃ ❇♦♦❧

❛♥❞✬ ❬❪ ❂ ❚r✉❡

❛♥❞✬ ✭❜✿❜s✮ ❂ ❜ ✫✫ ❛♥❞✬ ❜s

3.8. Pertenencia a una lista

Ejercicio 3.8.1. Definir por recursión la función

❡❧❡♠✬ ✿✿ ❊q ❛ ❂❃ ❛ ✲❃ ❬❛❪ ✲❃ ❇♦♦❧

tal que ✭❡❧❡♠✬ ① ①s✮ se verifica si ① pertenece a la lista ①s. Por ejemplo,

❡❧❡♠✬ ✸ ❬✷✱✸✱✺❪ ❂❂ ❚r✉❡

❡❧❡♠✬ ✹ ❬✷✱✸✱✺❪ ❂❂ ❋❛❧s❡

Solución:

❡❧❡♠✬ ✿✿ ❊q ❛ ❂❃ ❛ ✲❃ ❬❛❪ ✲❃ ❇♦♦❧

❡❧❡♠✬ ① ❬❪ ❂ ❋❛❧s❡

❡❧❡♠✬ ① ✭②✿②s✮ ⑤ ① ❂❂ ② ❂ ❚r✉❡

⑤ ♦t❤❡r✇✐s❡ ❂ ❡❧❡♠✬ ① ②s

3.9. Último elemento de una lista

Ejercicio 3.9.1. Definir por recursión la función

❧❛st✬ ✿✿ ❬❛❪ ✲❃ ❛

tal que ✭❧❛st ①s✮ es el último elemento de ①s. Por ejemplo,

❧❛st✬ ❬✷✱✸✱✺❪ ❂❃ ✺

Solución:

❧❛st✬ ✿✿ ❬❛❪ ✲❃ ❛

❧❛st✬ ❬①❪ ❂ ①

❧❛st✬ ✭❴✿①s✮ ❂ ❧❛st✬ ①s

3.10. Concatenación de una lista 61

3.10. Concatenación de una lista

Ejercicio 3.10.1. Definir por recursión la función

❝♦♥❝❛t✬ ✿✿ ❬❬❛❪❪ ✲❃ ❬❛❪

tal que ✭❝♦♥❝❛t✬ ①ss✮ es la lista obtenida concatenando las listas de ①ss. Por ejemplo,

❝♦♥❝❛t✬ ❬❬✶✳✳✸❪✱❬✺✳✳✼❪✱❬✽✳✳✶✵❪❪ ❂❂ ❬✶✱✷✱✸✱✺✱✻✱✼✱✽✱✾✱✶✵❪

Solución:

❝♦♥❝❛t✬ ✿✿ ❬❬❛❪❪ ✲❃ ❬❛❪

❝♦♥❝❛t✬ ❬❪ ❂ ❬❪

❝♦♥❝❛t✬ ✭①s✿①ss✮ ❂ ①s ✰✰ ❝♦♥❝❛t✬ ①ss

3.11. Selección de un elemento

Ejercicio 3.11.1. Definir por recursión la función

s❡❧❡❝❝✐♦♥❛ ✿✿ ❬❛❪ ✲❃ ■♥t ✲❃ ❛

tal que ✭s❡❧❡❝❝✐♦♥❛ ①s ♥✮ es el ♥–ésimo elemento de ①s. Por ejemplo,

s❡❧❡❝❝✐♦♥❛ ❬✷✱✸✱✺✱✼❪ ✷ ❂❂ ✺

Solución:

s❡❧❡❝❝✐♦♥❛ ✿✿ ❬❛❪ ✲❃ ■♥t ✲❃ ❛

s❡❧❡❝❝✐♦♥❛ ✭①✿❴✮ ✵ ❂ ①

s❡❧❡❝❝✐♦♥❛ ✭❴✿①s✮ ♥ ❂ s❡❧❡❝❝✐♦♥❛ ①s ✭♥✲✶✮

3.12. Selección de los primeros elementos

Ejercicio 3.12.1. Definir por recursión la función

t❛❦❡✬ ✿✿ ■♥t ✲❃ ❬❛❪ ✲❃ ❬❛❪

tal que ✭t❛❦❡✬ ♥ ①s✮ es la lista de los ♥ primeros elementos de ①s. Por ejemplo,

t❛❦❡✬ ✸ ❬✹✳✳✶✷❪ ❂❂ ❬✹✱✺✱✻❪

Solución:

t❛❦❡✬ ✿✿ ■♥t ✲❃ ❬❛❪ ✲❃ ❬❛❪

t❛❦❡✬ ✵ ❴ ❂ ❬❪

t❛❦❡✬ ❴ ❬❪ ❂ ❬❪

t❛❦❡✬ ♥ ✭①✿①s✮ ❂ ① ✿ t❛❦❡✬ ✭♥✲✶✮ ①s

62 Capítulo 3. Definiciones por recursión

3.13. Intercalación de la media aritmética

Ejercicio 3.13.1. Definir la función

r❡❢✐♥❛❞❛ ✿✿ ❬❋❧♦❛t❪ ✲❃ ❬❋❧♦❛t❪

tal que ✭r❡❢✐♥❛❞❛ ①s✮ es la lista obtenida intercalando entre cada dos elementos consecutivos

de ①s su media aritmética. Por ejemplo,

r❡❢✐♥❛❞❛ ❬✷✱✼✱✶✱✽❪ ❂❂ ❬✷✳✵✱✹✳✺✱✼✳✵✱✹✳✵✱✶✳✵✱✹✳✺✱✽✳✵❪

r❡❢✐♥❛❞❛ ❬✷❪ ❂❂ ❬✷✳✵❪

r❡❢✐♥❛❞❛ ❬❪ ❂❂ ❬❪

Solución:

r❡❢✐♥❛❞❛ ✿✿ ❬❋❧♦❛t❪ ✲❃ ❬❋❧♦❛t❪

r❡❢✐♥❛❞❛ ✭①✿②✿③s✮ ❂ ① ✿ ✭①✰②✮✴✷ ✿ r❡❢✐♥❛❞❛ ✭②✿③s✮

r❡❢✐♥❛❞❛ ①s ❂ ①s

3.14. Ordenación por mezcla

3.14.1. Mezcla de listas ordenadas

Ejercicio 3.14.1. Definir por recursión la función

♠❡③❝❧❛ ✿✿ ❖r❞ ❛ ❂❃ ❬❛❪ ✲❃ ❬❛❪ ✲❃ ❬❛❪

tal que ✭♠❡③❝❧❛ ①s ②s✮ es la lista obtenida mezclando las listas ordenadas ①s e ②s. Por ejemplo,

♠❡③❝❧❛ ❬✷✱✺✱✻❪ ❬✶✱✸✱✹❪ ❂❂ ❬✶✱✷✱✸✱✹✱✺✱✻❪

Solución:

♠❡③❝❧❛ ✿✿ ❖r❞ ❛ ❂❃ ❬❛❪ ✲❃ ❬❛❪ ✲❃ ❬❛❪

♠❡③❝❧❛ ❬❪ ②s ❂ ②s

♠❡③❝❧❛ ①s ❬❪ ❂ ①s

♠❡③❝❧❛ ✭①✿①s✮ ✭②✿②s✮ ⑤ ① ❁❂ ② ❂ ① ✿ ♠❡③❝❧❛ ①s ✭②✿②s✮

⑤ ♦t❤❡r✇✐s❡ ❂ ② ✿ ♠❡③❝❧❛ ✭①✿①s✮ ②s

3.14. Ordenación por mezcla 63

3.14.2. Mitades de una lista

Ejercicio 3.14.2. Definir la función

♠✐t❛❞❡s ✿✿ ❬❛❪ ✲❃ ✭❬❛❪✱❬❛❪✮

tal que ✭♠✐t❛❞❡s ①s✮ es el par formado por las dos mitades en que se divide ①s tales que sus

longitudes difieren como máximo en uno. Por ejemplo,

♠✐t❛❞❡s ❬✷✱✸✱✺✱✼✱✾❪ ❂❂ ✭❬✷✱✸❪✱❬✺✱✼✱✾❪✮

Solución:

♠✐t❛❞❡s ✿✿ ❬❛❪ ✲❃ ✭❬❛❪✱❬❛❪✮

♠✐t❛❞❡s ①s ❂ s♣❧✐t❆t ✭❧❡♥❣t❤ ①s ❵❞✐✈❵ ✷✮ ①s

3.14.3. Ordenación por mezcla

Ejercicio 3.14.3. Definir por recursión la función

♦r❞▼❡③❝❧❛ ✿✿ ❖r❞ ❛ ❂❃ ❬❛❪ ✲❃ ❬❛❪

tal que ✭♦r❞▼❡③❝❧❛ ①s✮ es la lista obtenida ordenando ①s por mezcla (es decir, considerando

que la lista vacía y las listas unitarias están ordenadas y cualquier otra lista se ordena mezclando

las dos listas que resultan de ordenar sus dos mitades por separado). Por ejemplo,

♦r❞▼❡③❝❧❛ ❬✺✱✷✱✸✱✶✱✼✱✷✱✺❪ ❂❃ ❬✶✱✷✱✷✱✸✱✺✱✺✱✼❪

Solución:

♦r❞▼❡③❝❧❛ ✿✿ ❖r❞ ❛ ❂❃ ❬❛❪ ✲❃ ❬❛❪

♦r❞▼❡③❝❧❛ ❬❪ ❂ ❬❪

♦r❞▼❡③❝❧❛ ❬①❪ ❂ ❬①❪

♦r❞▼❡③❝❧❛ ①s ❂ ♠❡③❝❧❛ ✭♦r❞▼❡③❝❧❛ ②s✮ ✭♦r❞▼❡③❝❧❛ ③s✮

✇❤❡r❡ ✭②s✱③s✮ ❂ ♠✐t❛❞❡s ①s

3.14.4. La ordenación por mezcla da listas ordenadas

Ejercicio 3.14.4. Definir por recursión la función

♦r❞❡♥❛❞❛ ✿✿ ❖r❞ ❛ ❂❃ ❬❛❪ ✲❃ ❇♦♦❧

tal que ✭♦r❞❡♥❛❞❛ ①s✮ se verifica si ①s es una lista ordenada. Por ejemplo,

♦r❞❡♥❛❞❛ ❬✷✱✸✱✺❪ ❂❂ ❚r✉❡

♦r❞❡♥❛❞❛ ❬✷✱✺✱✸❪ ❂❂ ❋❛❧s❡

64 Capítulo 3. Definiciones por recursión

Solución:

♦r❞❡♥❛❞❛ ✿✿ ❖r❞ ❛ ❂❃ ❬❛❪ ✲❃ ❇♦♦❧

♦r❞❡♥❛❞❛ ❬❪ ❂ ❚r✉❡

♦r❞❡♥❛❞❛ ❬❴❪ ❂ ❚r✉❡

♦r❞❡♥❛❞❛ ✭①✿②✿①s✮ ❂ ① ❁❂ ② ✫✫ ♦r❞❡♥❛❞❛ ✭②✿①s✮

Ejercicio 3.14.5. Comprobar con QuickCheck que la ordenación por mezcla de una lista es una

lista ordenada.

Solución: La propiedad es

♣r♦♣❴♦r❞▼❡③❝❧❛❴♦r❞❡♥❛❞❛ ✿✿ ❖r❞ ❛ ❂❃ ❬❛❪ ✲❃ ❇♦♦❧

♣r♦♣❴♦r❞▼❡③❝❧❛❴♦r❞❡♥❛❞❛ ①s ❂ ♦r❞❡♥❛❞❛ ✭♦r❞▼❡③❝❧❛ ①s✮

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴♦r❞▼❡③❝❧❛❴♦r❞❡♥❛❞❛

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

3.14.5. La ordenación por mezcla da una permutación

Ejercicio 3.14.6. Definir por recursión la función

❜♦rr❛ ✿✿ ❊q ❛ ❂❃ ❛ ✲❃ ❬❛❪ ✲❃ ❬❛❪

tal que ✭❜♦rr❛ ① ①s✮ es la lista obtenida borrando una ocurrencia de ① en la lista ①s. Por

ejemplo,

❜♦rr❛ ✶ ❬✶✱✷✱✶❪ ❂❂ ❬✷✱✶❪

❜♦rr❛ ✸ ❬✶✱✷✱✶❪ ❂❂ ❬✶✱✷✱✶❪

Solución:

❜♦rr❛ ✿✿ ❊q ❛ ❂❃ ❛ ✲❃ ❬❛❪ ✲❃ ❬❛❪

❜♦rr❛ ① ❬❪ ❂ ❬❪

❜♦rr❛ ① ✭②✿②s✮ ⑤ ① ❂❂ ② ❂ ②s

⑤ ♦t❤❡r✇✐s❡ ❂ ② ✿ ❜♦rr❛ ① ②s

3.14. Ordenación por mezcla 65

3.14.6. Determinación de permutaciones

Ejercicio 3.14.7. Definir por recursión la función

❡sP❡r♠✉t❛❝✐♦♥ ✿✿ ❊q ❛ ❂❃ ❬❛❪ ✲❃ ❬❛❪ ✲❃ ❇♦♦❧

tal que ✭❡sP❡r♠✉t❛❝✐♦♥ ①s ②s✮ se verifica si ①s es una permutación de ②s. Por ejemplo,

❡sP❡r♠✉t❛❝✐♦♥ ❬✶✱✷✱✶❪ ❬✷✱✶✱✶❪ ❂❂ ❚r✉❡

❡sP❡r♠✉t❛❝✐♦♥ ❬✶✱✷✱✶❪ ❬✶✱✷✱✷❪ ❂❂ ❋❛❧s❡

Solución:

❡sP❡r♠✉t❛❝✐♦♥ ✿✿ ❊q ❛ ❂❃ ❬❛❪ ✲❃ ❬❛❪ ✲❃ ❇♦♦❧

❡sP❡r♠✉t❛❝✐♦♥ ❬❪ ❬❪ ❂ ❚r✉❡

❡sP❡r♠✉t❛❝✐♦♥ ❬❪ ✭②✿②s✮ ❂ ❋❛❧s❡

❡sP❡r♠✉t❛❝✐♦♥ ✭①✿①s✮ ②s ❂ ❡❧❡♠ ① ②s ✫✫ ❡sP❡r♠✉t❛❝✐♦♥ ①s ✭❜♦rr❛ ① ②s✮

Ejercicio 3.14.8. Comprobar con QuickCheck que la ordenación por mezcla de una lista es una

permutación de la lista.

Solución: La propiedad es

♣r♦♣❴♦r❞▼❡③❝❧❛❴♣❡♠✉t❛❝✐♦♥ ✿✿ ❖r❞ ❛ ❂❃ ❬❛❪ ✲❃ ❇♦♦❧

♣r♦♣❴♦r❞▼❡③❝❧❛❴♣❡♠✉t❛❝✐♦♥ ①s ❂ ❡sP❡r♠✉t❛❝✐♦♥ ✭♦r❞▼❡③❝❧❛ ①s✮ ①s

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴♦r❞▼❡③❝❧❛❴♣❡r♠✉t❛❝✐♦♥

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

66 Capítulo 3. Definiciones por recursión

Capítulo 4

Definiciones por recursión y porcomprensión

En este capítulo se presentan ejercicios con dos definiciones (una por recursión y otrapor comprensión). Los ejercicios se corresponden con los temas 5 y 6 de [1].

Contenido4.1 Suma de los cuadrados de los primeros números . . . . . . . . . . . . . 68

4.2 Número de bloques de escaleras triangulares . . . . . . . . . . . . . . . 70

4.3 Suma de los cuadrados de los impares entre los primeros números . . 71

4.4 Operaciones con los dígitos de los números . . . . . . . . . . . . . . . . 72

4.4.1 Lista de los dígitos de un número . . . . . . . . . . . . . . . . . 72

4.4.2 Suma de los dígitos de un número . . . . . . . . . . . . . . . . 73

4.4.3 Decidir si es un dígito del número . . . . . . . . . . . . . . . . . 74

4.4.4 Número de dígitos de un número . . . . . . . . . . . . . . . . . 74

4.4.5 Número correspondiente a una lista de dígitos . . . . . . . . . 75

4.4.6 Concatenación de dos números . . . . . . . . . . . . . . . . . . 75

4.4.7 Primer dígito de un número . . . . . . . . . . . . . . . . . . . . 76

4.4.8 Último dígito de un número . . . . . . . . . . . . . . . . . . . . 77

4.4.9 Número con los dígitos invertidos . . . . . . . . . . . . . . . . . 78

4.4.10 Decidir si un número es capicúa . . . . . . . . . . . . . . . . . . 79

4.4.11 Suma de los dígitos de 21000 . . . . . . . . . . . . . . . . . . . . 79

4.4.12 Primitivo de un número . . . . . . . . . . . . . . . . . . . . . . 80

4.4.13 Números con igual media de sus dígitos . . . . . . . . . . . . . 80

4.4.14 Números con dígitos duplicados en su cuadrado . . . . . . . . 81

67

68 Capítulo 4. Definiciones por recursión y por comprensión

4.5 Cuadrados de los elementos de una lista . . . . . . . . . . . . . . . . . 82

4.6 Números impares de una lista . . . . . . . . . . . . . . . . . . . . . . . 83

4.7 Cuadrados de los elementos impares . . . . . . . . . . . . . . . . . . . 84

4.8 Suma de los cuadrados de los elementos impares . . . . . . . . . . . . 85

4.9 Intervalo numérico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

4.10 Mitades de los pares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

4.11 Pertenencia a un rango . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

4.12 Suma de elementos positivos . . . . . . . . . . . . . . . . . . . . . . . . 89

4.13 Aproximación del número π . . . . . . . . . . . . . . . . . . . . . . . . 90

4.14 Sustitución de impares por el siguiente par . . . . . . . . . . . . . . . . 90

4.15 La compra de una persona agarrada . . . . . . . . . . . . . . . . . . . . 91

4.16 Descomposición en productos de factores primos . . . . . . . . . . . . 92

4.16.1 Lista de los factores primos de un número . . . . . . . . . . . . 92

4.16.2 Decidir si un número es primo . . . . . . . . . . . . . . . . . . . 93

4.16.3 Factorización de un número . . . . . . . . . . . . . . . . . . . . 93

4.16.4 Exponente de la mayor potencia de un número que divide aotro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

4.16.5 Expansion de la factorización de un número . . . . . . . . . . . 94

4.17 Menor número con todos los dígitos en la factorización de su factorial 95

4.18 Suma de números especiales . . . . . . . . . . . . . . . . . . . . . . . . 98

4.19 Distancia de Hamming . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99

4.20 Traspuesta de una matriz . . . . . . . . . . . . . . . . . . . . . . . . . . 100

4.21 Números expresables como sumas acotadas de elementos de una lista 101

Nota. Se usarán las librerías ▲✐st y ◗✉✐❝❦❈❤❡❝❦.

✐♠♣♦rt ❉❛t❛✳▲✐st

✐♠♣♦rt ❚❡st✳◗✉✐❝❦❈❤❡❝❦

4.1. Suma de los cuadrados de los primeros números

Ejercicio 4.1.1. Definir, por recursión; la función

4.1. Suma de los cuadrados de los primeros números 69

s✉♠❛❈✉❛❞r❛❞♦s❘ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

tal que ✭s✉♠❛❈✉❛❞r❛❞♦s❘ ♥✮ es la suma de los cuadrados de los números de 1 a ♥. Por ejemplo,

s✉♠❛❈✉❛❞r❛❞♦s❘ ✹ ❂❂ ✸✵

Solución:

s✉♠❛❈✉❛❞r❛❞♦s❘ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

s✉♠❛❈✉❛❞r❛❞♦s❘ ✵ ❂ ✵

s✉♠❛❈✉❛❞r❛❞♦s❘ ♥ ❂ ♥❫✷ ✰ s✉♠❛❈✉❛❞r❛❞♦s❘ ✭♥✲✶✮

Ejercicio 4.1.2. Comprobar con QuickCheck si ✭s✉♠❛❈✉❛❞r❛❞♦s❘ ♥✮ es igual an(n+1)(2n+1)

6 .

Solución: La propiedad es

♣r♦♣❴❙✉♠❛❈✉❛❞r❛❞♦s ♥ ❂

♥ ❃❂ ✵ ❂❂❃

s✉♠❛❈✉❛❞r❛❞♦s❘ ♥ ❂❂ ♥ ✯ ✭♥✰✶✮ ✯ ✭✷✯♥✰✶✮ ❵❞✐✈❵ ✻

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴❙✉♠❛❈✉❛❞r❛❞♦s

❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

Ejercicio 4.1.3. Definir, por comprensión, la función

s✉♠❛❈✉❛❞r❛❞♦s❈ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

tal que ✭s✉♠❛❈✉❛❞r❛❞♦s❈ ♥✮ es la suma de los cuadrados de los números de 1 a ♥. Por ejemplo,

s✉♠❛❈✉❛❞r❛❞♦s❈ ✹ ❂❂ ✸✵

Solución:

s✉♠❛❈✉❛❞r❛❞♦s❈ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

s✉♠❛❈✉❛❞r❛❞♦s❈ ♥ ❂ s✉♠ ❬①❫✷ ⑤ ① ❁✲ ❬✶✳✳♥❪❪

Ejercicio 4.1.4. Comprobar con QuickCheck que las funciones s✉♠❛❈✉❛❞r❛❞♦s❘ y s✉♠❛❈✉❛❞r❛❞♦s❈

son equivalentes sobre los números naturales.

Solución: La propiedad es

♣r♦♣❴s✉♠❛❈✉❛❞r❛❞♦s ♥ ❂

♥ ❃❂ ✵ ❂❂❃ s✉♠❛❈✉❛❞r❛❞♦s❘ ♥ ❂❂ s✉♠❛❈✉❛❞r❛❞♦s❈ ♥

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴s✉♠❛❈✉❛❞r❛❞♦s

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

70 Capítulo 4. Definiciones por recursión y por comprensión

4.2. Número de bloques de escaleras triangulares

Ejercicio 4.2.1. Se quiere formar una escalera con bloques cuadrados, de forma que tenga un nú-

mero determinado de escalones. Por ejemplo, una escalera con tres escalones tendría la siguiente

forma:

❳❳

❳❳❳❳

❳❳❳❳❳❳

Definir, por recursión, la función

♥✉♠❡r♦❇❧♦q✉❡s❘ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

tal que ✭♥✉♠❡r♦❇❧♦q✉❡s❘ ♥✮ es el número de bloques necesarios para construir una escalera

con ♥ escalones. Por ejemplo,

♥✉♠❡r♦❇❧♦q✉❡s❘ ✶ ❂❂ ✷

♥✉♠❡r♦❇❧♦q✉❡s❘ ✸ ❂❂ ✶✷

♥✉♠❡r♦❇❧♦q✉❡s❘ ✶✵ ❂❂ ✶✶✵

Solución:

♥✉♠❡r♦❇❧♦q✉❡s❘ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

♥✉♠❡r♦❇❧♦q✉❡s❘ ✵ ❂ ✵

♥✉♠❡r♦❇❧♦q✉❡s❘ ♥ ❂ ✷✯♥ ✰ ♥✉♠❡r♦❇❧♦q✉❡s❘ ✭♥✲✶✮

Ejercicio 4.2.2. Definir, por comprensión, la función

♥✉♠❡r♦❇❧♦q✉❡s❈ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

tal que ✭♥✉♠❡r♦❇❧♦q✉❡s❈ ♥✮ es el número de bloques necesarios para construir una escalera

con ♥ escalones. Por ejemplo,

♥✉♠❡r♦❇❧♦q✉❡s❈ ✶ ❂❂ ✷

♥✉♠❡r♦❇❧♦q✉❡s❈ ✸ ❂❂ ✶✷

♥✉♠❡r♦❇❧♦q✉❡s❈ ✶✵ ❂❂ ✶✶✵

Solución:

♥✉♠❡r♦❇❧♦q✉❡s❈ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

♥✉♠❡r♦❇❧♦q✉❡s❈ ♥ ❂ s✉♠ ❬✷✯① ⑤ ① ❁✲ ❬✶✳✳♥❪❪

Ejercicio 4.2.3. Comprobar con QuickCheck que ✭♥✉♠❡r♦❇❧♦q✉❡s❈ ♥✮ es igual a n + n2.

Solución: La propiedad es

4.3. Suma de los cuadrados de los impares entre los primeros números 71

♣r♦♣❴♥✉♠❡r♦❇❧♦q✉❡s ♥ ❂

♥ ❃ ✵ ❂❂❃ ♥✉♠❡r♦❇❧♦q✉❡s❈ ♥ ❂❂ ♥✰♥❫✷

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴♥✉♠❡r♦❇❧♦q✉❡s

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

4.3. Suma de los cuadrados de los impares entre los pri-meros números

Ejercicio 4.3.1. Definir, por recursión, la función

s✉♠❛❈✉❛❞r❛❞♦s■♠♣❛r❡s❘ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

tal que ✭s✉♠❛❈✉❛❞r❛❞♦s■♠♣❛r❡s❘ ♥✮ es la suma de los cuadrados de los números impares desde

1 hasta ♥. Por ejemplo,

s✉♠❛❈✉❛❞r❛❞♦s■♠♣❛r❡s❘ ✶ ❂❂ ✶

s✉♠❛❈✉❛❞r❛❞♦s■♠♣❛r❡s❘ ✼ ❂❂ ✽✹

s✉♠❛❈✉❛❞r❛❞♦s■♠♣❛r❡s❘ ✹ ❂❂ ✶✵

Solución:

s✉♠❛❈✉❛❞r❛❞♦s■♠♣❛r❡s❘ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

s✉♠❛❈✉❛❞r❛❞♦s■♠♣❛r❡s❘ ✶ ❂ ✶

s✉♠❛❈✉❛❞r❛❞♦s■♠♣❛r❡s❘ ♥

⑤ ♦❞❞ ♥ ❂ ♥❫✷ ✰ s✉♠❛❈✉❛❞r❛❞♦s■♠♣❛r❡s❘ ✭♥✲✶✮

⑤ ♦t❤❡r✇✐s❡ ❂ s✉♠❛❈✉❛❞r❛❞♦s■♠♣❛r❡s❘ ✭♥✲✶✮

Ejercicio 4.3.2. Definir, por comprensión, la función

s✉♠❛❈✉❛❞r❛❞♦s■♠♣❛r❡s❈ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

tal que ✭s✉♠❛❈✉❛❞r❛❞♦s■♠♣❛r❡s❈ ♥✮ es la suma de los cuadrados de los números impares desde

1 hasta ♥. Por ejemplo,

s✉♠❛❈✉❛❞r❛❞♦s■♠♣❛r❡s❈ ✶ ❂❂ ✶

s✉♠❛❈✉❛❞r❛❞♦s■♠♣❛r❡s❈ ✼ ❂❂ ✽✹

s✉♠❛❈✉❛❞r❛❞♦s■♠♣❛r❡s❈ ✹ ❂❂ ✶✵

Solución:

72 Capítulo 4. Definiciones por recursión y por comprensión

s✉♠❛❈✉❛❞r❛❞♦s■♠♣❛r❡s❈ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

s✉♠❛❈✉❛❞r❛❞♦s■♠♣❛r❡s❈ ♥ ❂ s✉♠ ❬①❫✷ ⑤ ① ❁✲ ❬✶✳✳♥❪✱ ♦❞❞ ①❪

Otra definición más simple es

s✉♠❛❈✉❛❞r❛❞♦s■♠♣❛r❡s❈✬ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

s✉♠❛❈✉❛❞r❛❞♦s■♠♣❛r❡s❈✬ ♥ ❂ s✉♠ ❬①❫✷ ⑤ ① ❁✲ ❬✶✱✸✳✳♥❪❪

4.4. Operaciones con los dígitos de los números

4.4.1. Lista de los dígitos de un número

Ejercicio 4.4.1. Definir, por recursión, la función

❞✐❣✐t♦s❘ ✿✿ ■♥t❡❣❡r ✲❃ ❬■♥t❪

tal que ✭❞✐❣✐t♦s❘ ♥✮ es la lista de los dígitos del número ♥. Por ejemplo,

❞✐❣✐t♦s❘ ✸✷✵✷✼✹ ❂❂ ❬✸✱✷✱✵✱✷✱✼✱✹❪

Solución:

❞✐❣✐t♦s❘ ✿✿ ■♥t❡❣❡r ✲❃ ❬■♥t❡❣❡r❪

❞✐❣✐t♦s❘ ♥ ❂ r❡✈❡rs❡ ✭❞✐❣✐t♦s❘✬ ♥✮

❞✐❣✐t♦s❘✬ ♥

⑤ ♥ ❁ ✶✵ ❂ ❬♥❪

⑤ ♦t❤❡r✇✐s❡ ❂ ✭♥ ❵r❡♠❵ ✶✵✮ ✿ ❞✐❣✐t♦s❘✬ ✭♥ ❵❞✐✈❵ ✶✵✮

Ejercicio 4.4.2. Definir, por comprensión, la función

❞✐❣✐t♦s❈ ✿✿ ■♥t❡❣❡r ✲❃ ❬■♥t❪

tal que ✭❞✐❣✐t♦s❈ ♥✮ es la lista de los dígitos del número ♥. Por ejemplo,

❞✐❣✐t♦s❈ ✸✷✵✷✼✹ ❂❂ ❬✸✱✷✱✵✱✷✱✼✱✹❪

Indicación: Usar las funciones s❤♦✇ y r❡❛❞.

Solución:

❞✐❣✐t♦s❈ ✿✿ ■♥t❡❣❡r ✲❃ ❬■♥t❡❣❡r❪

❞✐❣✐t♦s❈ ♥ ❂ ❬r❡❛❞ ❬①❪ ⑤ ① ❁✲ s❤♦✇ ♥❪

4.4. Operaciones con los dígitos de los números 73

Ejercicio 4.4.3. Comprobar con QuickCheck que las funciones ❞✐❣✐t♦s❘ y ❞✐❣✐t♦s son equi-

valentes.

Solución: La propiedad es

♣r♦♣❴❞í❣✐t♦s ♥ ❂

♥ ❃❂ ✵ ❂❂❃

❞✐❣✐t♦s❘ ♥ ❂❂ ❞✐❣✐t♦s❈ ♥

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴❞í❣✐t♦s

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

4.4.2. Suma de los dígitos de un número

Ejercicio 4.4.4. Definir, por recursión, la función

s✉♠❛❉✐❣✐t♦s❘ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

tal que ✭s✉♠❛❉✐❣✐t♦s❘ ♥✮ es la suma de los dígitos de ♥. Por ejemplo,

s✉♠❛❉✐❣✐t♦s❘ ✸ ❂❂ ✸

s✉♠❛❉✐❣✐t♦s❘ ✷✹✺✹ ❂❂ ✶✺

s✉♠❛❉✐❣✐t♦s❘ ✷✵✵✹✺ ❂❂ ✶✶

Solución:

s✉♠❛❉✐❣✐t♦s❘ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

s✉♠❛❉✐❣✐t♦s❘ ♥

⑤ ♥ ❁ ✶✵ ❂ ♥

⑤ ♦t❤❡r✇✐s❡ ❂ ♥ ❵r❡♠❵ ✶✵ ✰ s✉♠❛❉✐❣✐t♦s❘ ✭♥ ❵❞✐✈❵ ✶✵✮

Ejercicio 4.4.5. Definir, sin usar recursión, la función

s✉♠❛❉✐❣✐t♦s◆❘ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

tal que ✭s✉♠❛❉✐❣✐t♦s◆❘ ♥✮ es la suma de los dígitos de ♥. Por ejemplo,

s✉♠❛❉✐❣✐t♦s◆❘ ✸ ❂❂ ✸

s✉♠❛❉✐❣✐t♦s◆❘ ✷✹✺✹ ❂❂ ✶✺

s✉♠❛❉✐❣✐t♦s◆❘ ✷✵✵✹✺ ❂❂ ✶✶

Solución:

74 Capítulo 4. Definiciones por recursión y por comprensión

s✉♠❛❉✐❣✐t♦s◆❘ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

s✉♠❛❉✐❣✐t♦s◆❘ ♥ ❂ s✉♠ ✭❞✐❣✐t♦s❘ ♥✮

Ejercicio 4.4.6. Comprobar con QuickCheck que las funciones s✉♠❛❉✐❣✐t♦s❘ y s✉♠❛❉✐❣✐t♦s◆❘

son equivalentes.

Solución: La propiedad es

♣r♦♣❴s✉♠❛❉í❣✐t♦s ♥ ❂

♥ ❃❂ ✵ ❂❂❃

s✉♠❛❉✐❣✐t♦s❘ ♥ ❂❂ s✉♠❛❉✐❣✐t♦s◆❘ ♥

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴s✉♠❛❉í❣✐t♦s

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

4.4.3. Decidir si es un dígito del número

Ejercicio 4.4.7. Definir la función

❡s❉✐❣✐t♦ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r ✲❃ ❇♦♦❧

tal que ✭❡s❉✐❣✐t♦ ① ♥✮ se verifica si ① es una dígito de ♥. Por ejemplo,

❡s❉✐❣✐t♦ ✹ ✶✵✹✶ ❂❂ ❚r✉❡

❡s❉✐❣✐t♦ ✸ ✶✵✹✶ ❂❂ ❋❛❧s❡

Solución:

❡s❉✐❣✐t♦ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r ✲❃ ❇♦♦❧

❡s❉✐❣✐t♦ ① ♥ ❂ ❡❧❡♠ ① ✭❞✐❣✐t♦s❘ ♥✮

4.4.4. Número de dígitos de un número

Ejercicio 4.4.8. Definir la función

♥✉♠❡r♦❉❡❉✐❣✐t♦s ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

tal que ✭♥✉♠❡r♦❉❡❉✐❣✐t♦s ①✮ es el número de dígitos de ①. Por ejemplo,

♥✉♠❡r♦❉❡❉✐❣✐t♦s ✸✹✵✹✼ ❂❂ ✺

Solución:

♥✉♠❡r♦❉❡❉✐❣✐t♦s ✿✿ ■♥t❡❣❡r ✲❃ ■♥t

♥✉♠❡r♦❉❡❉✐❣✐t♦s ① ❂ ❧❡♥❣t❤ ✭❞✐❣✐t♦s❘ ①✮

4.4. Operaciones con los dígitos de los números 75

4.4.5. Número correspondiente a una lista de dígitos

Ejercicio 4.4.9. Definir, por recursión, la función

❧✐st❛◆✉♠❡r♦❘ ✿✿ ❬■♥t❡❣❡r❪ ✲❃ ■♥t❡❣❡r

tal que ✭❧✐st❛◆✉♠❡r♦❘ ①s✮ es el número formado por los dígitos de la lista ①s. Por ejemplo,

❧✐st❛◆✉♠❡r♦❘ ❬✺❪ ❂❂ ✺

❧✐st❛◆✉♠❡r♦❘ ❬✶✱✸✱✹✱✼❪ ❂❂ ✶✸✹✼

❧✐st❛◆✉♠❡r♦❘ ❬✵✱✵✱✶❪ ❂❂ ✶

Solución:

❧✐st❛◆✉♠❡r♦❘ ✿✿ ❬■♥t❡❣❡r❪ ✲❃ ■♥t❡❣❡r

❧✐st❛◆✉♠❡r♦❘ ①s ❂ ❧✐st❛◆✉♠❡r♦❘✬ ✭r❡✈❡rs❡ ①s✮

❧✐st❛◆✉♠❡r♦❘✬ ✿✿ ❬■♥t❡❣❡r❪ ✲❃ ■♥t❡❣❡r

❧✐st❛◆✉♠❡r♦❘✬ ❬①❪ ❂ ①

❧✐st❛◆✉♠❡r♦❘✬ ✭①✿①s✮ ❂ ① ✰ ✶✵ ✯ ✭❧✐st❛◆✉♠❡r♦❘✬ ①s✮

Ejercicio 4.4.10. Definir, por comprensión, la función

❧✐st❛◆✉♠❡r♦❈ ✿✿ ❬■♥t❡❣❡r❪ ✲❃ ■♥t❡❣❡r

tal que ✭❧✐st❛◆✉♠❡r♦❈ ①s✮ es el número formado por los dígitos de la lista ①s. Por ejemplo,

❧✐st❛◆✉♠❡r♦❈ ❬✺❪ ❂❂ ✺

❧✐st❛◆✉♠❡r♦❈ ❬✶✱✸✱✹✱✼❪ ❂❂ ✶✸✹✼

❧✐st❛◆✉♠❡r♦❈ ❬✵✱✵✱✶❪ ❂❂ ✶

Solución:

❧✐st❛◆✉♠❡r♦❈ ✿✿ ❬■♥t❡❣❡r❪ ✲❃ ■♥t❡❣❡r

❧✐st❛◆✉♠❡r♦❈ ①s ❂ s✉♠ ❬②✯✶✵❫♥ ⑤ ✭②✱♥✮ ❁✲ ③✐♣ ✭r❡✈❡rs❡ ①s✮ ❬✵✳✳❪❪

4.4.6. Concatenación de dos números

Ejercicio 4.4.11. Definir, por recursión, la función

♣❡❣❛◆✉♠❡r♦s❘ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

tal que ✭♣❡❣❛◆✉♠❡r♦s❘ ① ②✮ es el número resultante de “pegar” los números ① e ②. Por ejemplo,

♣❡❣❛◆✉♠❡r♦s❘ ✶✷ ✾✽✼ ❂❂ ✶✷✾✽✼

♣❡❣❛◆✉♠❡r♦s❘ ✶✷✵✹ ✼ ❂❂ ✶✷✵✹✼

♣❡❣❛◆✉♠❡r♦s❘ ✶✵✵ ✶✵✵ ❂❂ ✶✵✵✶✵✵

76 Capítulo 4. Definiciones por recursión y por comprensión

Solución:

♣❡❣❛◆✉♠❡r♦s❘ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

♣❡❣❛◆✉♠❡r♦s❘ ① ②

⑤ ② ❁ ✶✵ ❂ ✶✵✯①✰②

⑤ ♦t❤❡r✇✐s❡ ❂ ✶✵ ✯ ♣❡❣❛◆✉♠❡r♦s❘ ① ✭② ❵❞✐✈❵✶✵✮ ✰ ✭② ❵r❡♠❵ ✶✵✮

Ejercicio 4.4.12. Definir, sin usar recursión, la función

♣❡❣❛◆✉♠❡r♦s◆❘ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

tal que ✭♣❡❣❛◆✉♠❡r♦s◆❘ ① ②✮ es el número resultante de “pegar” los números ① e ②. Por ejem-

plo,

♣❡❣❛◆✉♠❡r♦s◆❘ ✶✷ ✾✽✼ ❂❂ ✶✷✾✽✼

♣❡❣❛◆✉♠❡r♦s◆❘ ✶✷✵✹ ✼ ❂❂ ✶✷✵✹✼

♣❡❣❛◆✉♠❡r♦s◆❘ ✶✵✵ ✶✵✵ ❂❂ ✶✵✵✶✵✵

Solución:

♣❡❣❛◆✉♠❡r♦s◆❘ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

♣❡❣❛◆✉♠❡r♦s◆❘ ① ② ❂ ❧✐st❛◆✉♠❡r♦❈ ✭❞✐❣✐t♦s❘ ① ✰✰ ❞✐❣✐t♦s❘ ②✮

Ejercicio 4.4.13. Comprobar con QuickCheck que las funciones ♣❡❣❛◆✉♠❡r♦s❘ y ♣❡❣❛◆✉♠❡r♦s◆❘

son equivalentes.

Solución: La propiedad es

♣r♦♣❴♣❡❣❛◆✉♠❡r♦s ① ② ❂

① ❃❂ ✵ ✫✫ ② ❃❂ ✵ ❂❂❃

♣❡❣❛◆✉♠❡r♦s❘ ① ② ❂❂ ♣❡❣❛◆✉♠❡r♦s◆❘ ① ②

La comprobción es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴♣❡❣❛◆✉♠❡r♦s

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

4.4.7. Primer dígito de un número

Ejercicio 4.4.14. Definir, por recursión, la función

♣r✐♠❡r❉✐❣✐t♦❘ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

tal que ✭♣r✐♠❡r❉✐❣✐t♦❘ ♥✮ es el primer dígito de ♥. Por ejemplo,

4.4. Operaciones con los dígitos de los números 77

♣r✐♠❡r❉✐❣✐t♦❘ ✹✷✺ ❂❂ ✹

Solución:

♣r✐♠❡r❉✐❣✐t♦❘ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

♣r✐♠❡r❉✐❣✐t♦❘ ♥

⑤ ♥ ❁ ✶✵ ❂ ♥

⑤ ♦t❤❡r✇✐s❡ ❂ ♣r✐♠❡r❉✐❣✐t♦❘ ✭♥ ❵❞✐✈❵ ✶✵✮

Ejercicio 4.4.15. Definir, sin usar recursión, la función

♣r✐♠❡r❉✐❣✐t♦◆❘ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

tal que ✭♣r✐♠❡r❉✐❣✐t♦◆❘ ♥✮ es el primer dígito de ♥. Por ejemplo,

♣r✐♠❡r❉✐❣✐t♦◆❘ ✹✷✺ ❂❂ ✹

Solución:

♣r✐♠❡r❉✐❣✐t♦◆❘ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

♣r✐♠❡r❉✐❣✐t♦◆❘ ♥ ❂ ❤❡❛❞ ✭❞✐❣✐t♦s❘ ♥✮

Ejercicio 4.4.16. Comprobar con QuickCheck que las funciones ♣r✐♠❡r❉✐❣✐t♦❘ y ♣r✐♠❡r❉✐❣✐t♦◆❘

son equivalentes.

Solución: La propiedad es

♣r♦♣❴♣r✐♠❡r❉✐❣✐t♦ ① ❂

① ❃❂ ✵ ❂❂❃

♣r✐♠❡r❉✐❣✐t♦❘ ① ❂❂ ♣r✐♠❡r❉✐❣✐t♦◆❘ ①

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴♣r✐♠❡r❉✐❣✐t♦

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

4.4.8. Último dígito de un número

Ejercicio 4.4.17. Definir la función

✉❧t✐♠♦❉✐❣✐t♦ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

tal que ✭✉❧t✐♠♦❉✐❣✐t♦ ♥✮ es el último dígito de ♥. Por ejemplo,

✉❧t✐♠♦❉✐❣✐t♦ ✹✷✺ ❂❂ ✺

Solución:

✉❧t✐♠♦❉✐❣✐t♦ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

✉❧t✐♠♦❉✐❣✐t♦ ♥ ❂ ♥ ❵r❡♠❵ ✶✵

78 Capítulo 4. Definiciones por recursión y por comprensión

4.4.9. Número con los dígitos invertidos

Ejercicio 4.4.18. Definir la función

✐♥✈❡rs♦ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

tal que ✭✐♥✈❡rs♦ ♥✮ es el número obtenido escribiendo los dígitos de ♥ en orden inverso. Por

ejemplo,

✐♥✈❡rs♦ ✹✷✺✼✽ ❂❂ ✽✼✺✷✹

✐♥✈❡rs♦ ✷✵✸ ❂❂ ✸✵✷

Solución:

✐♥✈❡rs♦ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

✐♥✈❡rs♦ ♥ ❂ ❧✐st❛◆✉♠❡r♦❈ ✭r❡✈❡rs❡ ✭❞✐❣✐t♦s❘ ♥✮✮

Ejercicio 4.4.19. Definir, usando s❤♦✇ y r❡❛❞, la función

✐♥✈❡rs♦✬ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

tal que ✭✐♥✈❡rs♦✬ ♥✮ es el número obtenido escribiendo los dígitos de ♥ en orden inverso’. Por

ejemplo,

✐♥✈❡rs♦✬ ✹✷✺✼✽ ❂❂ ✽✼✺✷✹

✐♥✈❡rs♦✬ ✷✵✸ ❂❂ ✸✵✷

Solución:

✐♥✈❡rs♦✬ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

✐♥✈❡rs♦✬ ♥ ❂ r❡❛❞ ✭r❡✈❡rs❡ ✭s❤♦✇ ♥✮✮

Ejercicio 4.4.20. Comprobar con QuickCheck que las funciones ✐♥✈❡rs♦ e ✐♥✈❡rs♦✬ son equi-

valentes.

Solución: La propiedad es

♣r♦♣❴✐♥✈❡rs♦ ♥ ❂

♥ ❃❂ ✵ ❂❂❃

✐♥✈❡rs♦ ♥ ❂❂ ✐♥✈❡rs♦✬ ♥

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴✐♥✈❡rs♦

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

4.4. Operaciones con los dígitos de los números 79

4.4.10. Decidir si un número es capicúa

Ejercicio 4.4.21. Definir la función

❝❛♣✐❝✉❛ ✿✿ ■♥t❡❣❡r ✲❃ ❇♦♦❧

tal que ✭❝❛♣✐❝✉❛ ♥✮ se verifica si los dígitos de ♥ son los mismos de izquierda a derecha que de

derecha a izquierda. Por ejemplo,

❝❛♣✐❝✉❛ ✶✷✸✹ ❂ ❋❛❧s❡

❝❛♣✐❝✉❛ ✶✷✷✶ ❂ ❚r✉❡

❝❛♣✐❝✉❛ ✹ ❂ ❚r✉❡

Solución:

❝❛♣✐❝✉❛ ✿✿ ■♥t❡❣❡r ✲❃ ❇♦♦❧

❝❛♣✐❝✉❛ ♥ ❂ ♥ ❂❂ ✐♥✈❡rs♦ ♥

4.4.11. Suma de los dígitos de 21000

En el problema 16 del proyecto Euler1 se pide calcular la suma de las dígitos de 21000.Lo resolveremos mediante los distintos apartados de este ejercicio.

Ejercicio 4.4.22. Definir la función

❡✉❧❡r✶✻ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

tal que ✭❡✉❧❡r✶✻ ♥✮ es la suma de los dígitos de 2n. Por ejemplo,

❡✉❧❡r✶✻ ✹ ❂❂ ✼

Solución:

❡✉❧❡r✶✻ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

❡✉❧❡r✶✻ ♥ ❂ s✉♠❛❉✐❣✐t♦s◆❘ ✭✷❫♥✮

Ejercicio 4.4.23. Calcular la suma de los dígitos de 21000.

Solución: El cálculo es

❣❤❝✐❃ ❡✉❧❡r✶✻ ✶✵✵✵

✶✸✻✻

1❤tt♣✿✴✴♣r♦❥❡❝t❡✉❧❡r✳♥❡t✴♣r♦❜❧❡♠❂✶✻

80 Capítulo 4. Definiciones por recursión y por comprensión

4.4.12. Primitivo de un número

Ejercicio 4.4.24. En el enunciado de uno de los problemas de las Olimpiadas matemáticas de

Brasil se define el primitivo de un número como sigue:

Dado un número natural n, multiplicamos todos sus dígitos, repetimos este procedi-

miento hasta que quede un solo dígito al cual llamamos primitivo de n. Por ejemplo

para 327 : 3 × 2 × 7 = 42 y 4 × 2 = 8. Por lo tanto, el primitivo de 327 es 8.

Definir la función

♣r✐♠✐t✐✈♦ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

tal que ✭♣r✐♠✐t✐✈♦ ♥✮ es el primitivo de ♥. Por ejemplo.

♣r✐♠✐t✐✈♦ ✸✷✼ ❂❂ ✽

Solución:

♣r✐♠✐t✐✈♦ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

♣r✐♠✐t✐✈♦ ♥ ⑤ ♥ ❁ ✶✵ ❂ ♥

⑤ ♦t❤❡r✇✐s❡ ❂ ♣r✐♠✐t✐✈♦ ✭♣r♦❞✉❝t♦ ♥✮

donde ✭♣r♦❞✉❝t♦ ♥✮ es el producto de los dígitos de ♥. Por ejemplo,

♣r♦❞✉❝t♦ ✸✷✼ ❂❂ ✹✷

♣r♦❞✉❝t♦ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

♣r♦❞✉❝t♦ ❂ ♣r♦❞✉❝t ✳ ❞✐❣✐t♦s❈

4.4.13. Números con igual media de sus dígitos

Ejercicio 4.4.25. Dos números son equivalentes si la media de sus dígitos son iguales. Por

ejemplo, 3205 y 41 son equivalentes ya que

3 + 2 + 0 + 54

=4 + 1

2

Definir la función

❡q✉✐✈❛❧❡♥t❡s ✿✿ ■♥t ✲❃ ■♥t ✲❃ ❇♦♦❧

tal que ✭❡q✉✐✈❛❧❡♥t❡s ① ②✮ se verifica si los números ① e ② son equivalentes. Por ejemplo,

❡q✉✐✈❛❧❡♥t❡s ✸✷✵✺ ✹✶ ❂❂ ❚r✉❡

❡q✉✐✈❛❧❡♥t❡s ✸✷✵✺ ✷✺ ❂❂ ❋❛❧s❡

4.4. Operaciones con los dígitos de los números 81

Solución:

❡q✉✐✈❛❧❡♥t❡s ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r ✲❃ ❇♦♦❧

❡q✉✐✈❛❧❡♥t❡s ① ② ❂ ♠❡❞✐❛ ✭❞✐❣✐t♦s❈ ①✮ ❂❂ ♠❡❞✐❛ ✭❞✐❣✐t♦s❈ ②✮

donde ✭♠❡❞✐❛ ①s✮ es la media de la lista ①s. Por ejemplo,

♠❡❞✐❛ ❬✸✱✷✱✵✱✺❪ ❂❂ ✷✳✺

♠❡❞✐❛ ✿✿ ❬■♥t❡❣❡r❪ ✲❃ ❋❧♦❛t

♠❡❞✐❛ ①s ❂ ✭❢r♦♠■♥t❡❣r❛❧ ✭s✉♠ ①s✮✮ ✴ ✭❢r♦♠■♥t❡❣r❛❧ ✭❧❡♥❣t❤ ①s✮✮

4.4.14. Números con dígitos duplicados en su cuadrado

Ejercicio 4.4.26. Un número ① es especial si el número de ocurrencia de cada dígito ❞ de ① en

x2 es el doble del número de ocurrencia de ❞ en ①. Por ejemplo, 72576 es especial porque tiene un

2, un 5, un 6 y dos 7 y su cuadrado es 5267275776 que tiene exactamente dos 2, dos 5, dos 6 y

cuatro 7.

Definir la función

❡s♣❡❝✐❛❧ ✿✿ ■♥t❡❣❡r ✲❃ ❇♦♦❧

tal que ✭❡s♣❡❝✐❛❧ ①✮ se verifica si ① es un número especial. Por ejemplo,

❡s♣❡❝✐❛❧ ✼✷✺✼✻ ❂❂ ❚r✉❡

❡s♣❡❝✐❛❧ ✶✷ ❂❂ ❋❛❧s❡

Calcular el menor número especial mayor que 72576.

Solución:

❡s♣❡❝✐❛❧ ✿✿ ■♥t❡❣❡r ✲❃ ❇♦♦❧

❡s♣❡❝✐❛❧ ① ❂

s♦rt ✭②s ✰✰ ②s✮ ❂❂ s♦rt ✭s❤♦✇ ✭①❫✷✮✮

✇❤❡r❡ ②s ❂ s❤♦✇ ①

El cálculo es

❣❤❝✐❃ ❤❡❛❞ ❬① ⑤ ① ❁✲ ❬✼✷✺✼✼✳✳❪✱ ❡s♣❡❝✐❛❧ ①❪

✹✵✻✺✶✷

82 Capítulo 4. Definiciones por recursión y por comprensión

4.5. Cuadrados de los elementos de una lista

Ejercicio 4.5.1. Definir, por comprensión, la función

❝✉❛❞r❛❞♦s❈ ✿✿ ❬■♥t❡❣❡r❪ ✲❃ ❬■♥t❡❣❡r❪

tal que ✭❝✉❛❞r❛❞♦s❈ ①s✮ es la lista de los cuadrados de ①s. Por ejemplo,

❝✉❛❞r❛❞♦s❈ ❬✶✱✷✱✸❪ ❂❂ ❬✶✱✹✱✾❪

Solución:

❝✉❛❞r❛❞♦s❈ ✿✿ ❬■♥t❡❣❡r❪ ✲❃ ❬■♥t❡❣❡r❪

❝✉❛❞r❛❞♦s❈ ①s ❂ ❬①✯① ⑤ ① ❁✲ ①s❪

Ejercicio 4.5.2. Definir, por recursión, la función

❝✉❛❞r❛❞♦s❘ ✿✿ ❬■♥t❡❣❡r❪ ✲❃ ❬■♥t❡❣❡r❪

tal que ✭❝✉❛❞r❛❞♦s❘ ①s✮ es la lista de los cuadrados de ①s. Por ejemplo,

❝✉❛❞r❛❞♦s❘ ❬✶✱✷✱✸❪ ❂❂ ❬✶✱✹✱✾❪

Solución:

❝✉❛❞r❛❞♦s❘ ✿✿ ❬■♥t❡❣❡r❪ ✲❃ ❬■♥t❡❣❡r❪

❝✉❛❞r❛❞♦s❘ ❬❪ ❂ ❬❪

❝✉❛❞r❛❞♦s❘ ✭①✿①s✮ ❂ ①✯① ✿ ❝✉❛❞r❛❞♦s❘ ①s

Ejercicio 4.5.3. Comprobar con QuickCheck que ambas definiciones son equivalentes.

Solución: La propiedad es

♣r♦♣❴❝✉❛❞r❛❞♦s ✿✿ ❬■♥t❡❣❡r❪ ✲❃ ❇♦♦❧

♣r♦♣❴❝✉❛❞r❛❞♦s ①s ❂

❝✉❛❞r❛❞♦s❈ ①s ❂❂ ❝✉❛❞r❛❞♦s❘ ①s

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴❝✉❛❞r❛❞♦s

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

4.6. Números impares de una lista 83

4.6. Números impares de una lista

Ejercicio 4.6.1. Definir, por comprensión, la función

✐♠♣❛r❡s❈ ✿✿ ❬■♥t❡❣❡r❪ ✲❃ ❬■♥t❡❣❡r❪

tal que ✭✐♠♣❛r❡s❈ ①s✮ es la lista de los números impares de ①s. Por ejemplo,

✐♠♣❛r❡s❈ ❬✶✱✷✱✹✱✸✱✻❪ ❂❂ ❬✶✱✸❪

Solución:

✐♠♣❛r❡s❈ ✿✿ ❬■♥t❡❣❡r❪ ✲❃ ❬■♥t❡❣❡r❪

✐♠♣❛r❡s❈ ①s ❂ ❬① ⑤ ① ❁✲ ①s✱ ♦❞❞ ①❪

Ejercicio 4.6.2. Definir, por recursión, la función

✐♠♣❛r❡s❘ ✿✿ ❬■♥t❡❣❡r❪ ✲❃ ❬■♥t❡❣❡r❪

tal que ✭✐♠♣❛r❡s❘ ①s✮ es la lista de los números impares de ①s. Por ejemplo,

✐♠♣❛r❡s❘ ❬✶✱✷✱✹✱✸✱✻❪ ❂❂ ❬✶✱✸❪

Solución:

✐♠♣❛r❡s❘ ✿✿ ❬■♥t❡❣❡r❪ ✲❃ ❬■♥t❡❣❡r❪

✐♠♣❛r❡s❘ ❬❪ ❂ ❬❪

✐♠♣❛r❡s❘ ✭①✿①s✮ ⑤ ♦❞❞ ① ❂ ① ✿ ✐♠♣❛r❡s❘ ①s

⑤ ♦t❤❡r✇✐s❡ ❂ ✐♠♣❛r❡s❘ ①s

Ejercicio 4.6.3. Comprobar con QuickCheck que ambas definiciones son equivalentes.

Solución: La propiedad es

♣r♦♣❴✐♠♣❛r❡s ✿✿ ❬■♥t❡❣❡r❪ ✲❃ ❇♦♦❧

♣r♦♣❴✐♠♣❛r❡s ①s ❂

✐♠♣❛r❡s❈ ①s ❂❂ ✐♠♣❛r❡s❘ ①s

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴✐♠♣❛r❡s

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

84 Capítulo 4. Definiciones por recursión y por comprensión

4.7. Cuadrados de los elementos impares

Ejercicio 4.7.1. Definir, por comprensión, la función

✐♠♣❛r❡s❈✉❛❞r❛❞♦s❈ ✿✿ ❬■♥t❡❣❡r❪ ✲❃ ❬■♥t❡❣❡r❪

tal que ✭✐♠♣❛r❡s❈✉❛❞r❛❞♦s❈ ①s✮ es la lista de los cuadrados de los números impares de ①s.

Por ejemplo, imparesCuadradosC [1,2,4,3,6] == [1,9]

Solución:

✐♠♣❛r❡s❈✉❛❞r❛❞♦s❈ ✿✿ ❬■♥t❡❣❡r❪ ✲❃ ❬■♥t❡❣❡r❪

✐♠♣❛r❡s❈✉❛❞r❛❞♦s❈ ①s ❂ ❬①✯① ⑤ ① ❁✲ ①s✱ ♦❞❞ ①❪

Ejercicio 4.7.2. Definir, por recursión, la función

✐♠♣❛r❡s❈✉❛❞r❛❞♦s❘ ✿✿ ❬■♥t❡❣❡r❪ ✲❃ ❬■♥t❡❣❡r❪

tal que ✭✐♠♣❛r❡s❈✉❛❞r❛❞♦s❘ ①s✮ es la lista de los cuadrados de los números impares de ①s.

Por ejemplo, imparesCuadradosR [1,2,4,3,6] == [1,9]

Solución:

✐♠♣❛r❡s❈✉❛❞r❛❞♦s❘ ✿✿ ❬■♥t❡❣❡r❪ ✲❃ ❬■♥t❡❣❡r❪

✐♠♣❛r❡s❈✉❛❞r❛❞♦s❘ ❬❪ ❂ ❬❪

✐♠♣❛r❡s❈✉❛❞r❛❞♦s❘ ✭①✿①s✮ ⑤ ♦❞❞ ① ❂ ①✯① ✿ ✐♠♣❛r❡s❈✉❛❞r❛❞♦s❘ ①s

⑤ ♦t❤❡r✇✐s❡ ❂ ✐♠♣❛r❡s❈✉❛❞r❛❞♦s❘ ①s

Ejercicio 4.7.3. Comprobar con QuickCheck que ambas definiciones son equivalentes.

Solución: La propiedad es

♣r♦♣❴✐♠♣❛r❡s❈✉❛❞r❛❞♦s ✿✿ ❬■♥t❡❣❡r❪ ✲❃ ❇♦♦❧

♣r♦♣❴✐♠♣❛r❡s❈✉❛❞r❛❞♦s ①s ❂

✐♠♣❛r❡s❈✉❛❞r❛❞♦s❈ ①s ❂❂ ✐♠♣❛r❡s❈✉❛❞r❛❞♦s❘ ①s

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴✐♠♣❛r❡s❈✉❛❞r❛❞♦s

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

4.8. Suma de los cuadrados de los elementos impares 85

4.8. Suma de los cuadrados de los elementos impares

Ejercicio 4.8.1. Definir, por comprensión, la función

s✉♠❛❈✉❛❞r❛❞♦s■♠♣❛r❡s❈ ✿✿ ❬■♥t❡❣❡r❪ ✲❃ ■♥t❡❣❡r

tal que ✭s✉♠❛❈✉❛❞r❛❞♦s■♠♣❛r❡s❈ ①s✮ es la suma de los cuadrados de los números impares de

la lista ①s. Por ejemplo, sumaCuadradosImparesC [1,2,4,3,6] == 10

Solución:

s✉♠❛❈✉❛❞r❛❞♦s■♠♣❛r❡s❈ ✿✿ ❬■♥t❡❣❡r❪ ✲❃ ■♥t❡❣❡r

s✉♠❛❈✉❛❞r❛❞♦s■♠♣❛r❡s❈ ①s ❂ s✉♠ ❬ ①✯① ⑤ ① ❁✲ ①s✱ ♦❞❞ ① ❪

Ejercicio 4.8.2. Definir, por recursión, la función

s✉♠❛❈✉❛❞r❛❞♦s■♠♣❛r❡s❘ ✿✿ ❬■♥t❡❣❡r❪ ✲❃ ■♥t❡❣❡r

tal que ✭s✉♠❛❈✉❛❞r❛❞♦s■♠♣❛r❡s❘ ①s✮ es la suma de los cuadrados de los números impares de

la lista ①s. Por ejemplo,

s✉♠❛❈✉❛❞r❛❞♦s■♠♣❛r❡s❘ ❬✶✱✷✱✹✱✸✱✻❪ ❂❂ ✶✵

Solución:

s✉♠❛❈✉❛❞r❛❞♦s■♠♣❛r❡s❘ ✿✿ ❬■♥t❡❣❡r❪ ✲❃ ■♥t❡❣❡r

s✉♠❛❈✉❛❞r❛❞♦s■♠♣❛r❡s❘ ❬❪ ❂ ✵

s✉♠❛❈✉❛❞r❛❞♦s■♠♣❛r❡s❘ ✭①✿①s✮

⑤ ♦❞❞ ① ❂ ①✯① ✰ s✉♠❛❈✉❛❞r❛❞♦s■♠♣❛r❡s❘ ①s

⑤ ♦t❤❡r✇✐s❡ ❂ s✉♠❛❈✉❛❞r❛❞♦s■♠♣❛r❡s❘ ①s

Ejercicio 4.8.3. Comprobar con QuickCheck que ambas definiciones son equivalentes.

Solución: La propiedad es

♣r♦♣❴s✉♠❛❈✉❛❞r❛❞♦s■♠♣❛r❡s ✿✿ ❬■♥t❡❣❡r❪ ✲❃ ❇♦♦❧

♣r♦♣❴s✉♠❛❈✉❛❞r❛❞♦s■♠♣❛r❡s ①s ❂

s✉♠❛❈✉❛❞r❛❞♦s■♠♣❛r❡s❈ ①s ❂❂ s✉♠❛❈✉❛❞r❛❞♦s■♠♣❛r❡s❘ ①s

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴s✉♠❛❈✉❛❞r❛❞♦s■♠♣❛r❡s

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

86 Capítulo 4. Definiciones por recursión y por comprensión

4.9. Intervalo numérico

Ejercicio 4.9.1. Definir, usando funciones predefinidas, la función

❡♥tr❡▲ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r ✲❃ ❬■♥t❡❣❡r❪

tal que ✭❡♥tr❡▲ ♠ ♥✮ es la lista de los números entre ♠ y ♥. Por ejemplo,

❡♥tr❡▲ ✷ ✺ ❂❂ ❬✷✱✸✱✹✱✺❪

Solución:

❡♥tr❡▲ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r ✲❃ ❬■♥t❡❣❡r❪

❡♥tr❡▲ ♠ ♥ ❂ ❬♠✳✳♥❪

Ejercicio 4.9.2. Definir, por recursión, la función

❡♥tr❡❘ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r ✲❃ ❬■♥t❡❣❡r❪

tal que ✭❡♥tr❡❘ ♠ ♥✮ es la lista de los números entre ♠ y ♥. Por ejemplo,

❡♥tr❡❘ ✷ ✺ ❂❂ ❬✷✱✸✱✹✱✺❪

Solución:

❡♥tr❡❘ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r ✲❃ ❬■♥t❡❣❡r❪

❡♥tr❡❘ ♠ ♥ ⑤ ♠ ❃ ♥ ❂ ❬❪

⑤ ♦t❤❡r✇✐s❡ ❂ ♠ ✿ ❡♥tr❡❘ ✭♠✰✶✮ ♥

Ejercicio 4.9.3. Comprobar con QuickCheck que ambas definiciones son equivalentes.

Solución: La propiedad es

♣r♦♣❴❡♥tr❡ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r ✲❃ ❇♦♦❧

♣r♦♣❴❡♥tr❡ ♠ ♥ ❂

❡♥tr❡▲ ♠ ♥ ❂❂ ❡♥tr❡❘ ♠ ♥

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴❡♥tr❡

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

4.10. Mitades de los pares 87

4.10. Mitades de los pares

Ejercicio 4.10.1. Definir, por comprensión, la función

♠✐t❛❞P❛r❡s❈ ✿✿ ❬■♥t❪ ✲❃ ❬■♥t❪

tal que ✭♠✐t❛❞P❛r❡s❈ ①s✮ es la lista de las mitades de los elementos de ①s que son pares. Por

ejemplo,

♠✐t❛❞P❛r❡s❈ ❬✵✱✷✱✶✱✼✱✽✱✺✻✱✶✼✱✶✽❪ ❂❂ ❬✵✱✶✱✹✱✷✽✱✾❪

Solución:

♠✐t❛❞P❛r❡s❈ ✿✿ ❬■♥t❪ ✲❃ ❬■♥t❪

♠✐t❛❞P❛r❡s❈ ①s ❂ ❬① ❵❞✐✈❵ ✷ ⑤ ① ❁✲ ①s✱ ① ❵♠♦❞❵ ✷ ❂❂ ✵❪

Ejercicio 4.10.2. Definir, por recursión, la función

♠✐t❛❞P❛r❡s❘ ✿✿ ❬■♥t❪ ✲❃ ❬■♥t❪

tal que ✭♠✐t❛❞P❛r❡s❘ ①s✮ es la lista de las mitades de los elementos de ①s que son pares. Por

ejemplo,

♠✐t❛❞P❛r❡s❘ ❬✵✱✷✱✶✱✼✱✽✱✺✻✱✶✼✱✶✽❪ ❂❂ ❬✵✱✶✱✹✱✷✽✱✾❪

Solución:

♠✐t❛❞P❛r❡s❘ ✿✿ ❬■♥t❪ ✲❃ ❬■♥t❪

♠✐t❛❞P❛r❡s❘ ❬❪ ❂ ❬❪

♠✐t❛❞P❛r❡s❘ ✭①✿①s✮

⑤ ❡✈❡♥ ① ❂ ① ❵❞✐✈❵ ✷ ✿ ♠✐t❛❞P❛r❡s❘ ①s

⑤ ♦t❤❡r✇✐s❡ ❂ ♠✐t❛❞P❛r❡s❘ ①s

Ejercicio 4.10.3. Comprobar con QuickCheck que ambas definiciones son equivalentes.

Solución: La propiedad es

♣r♦♣❴♠✐t❛❞P❛r❡s ✿✿ ❬■♥t❪ ✲❃ ❇♦♦❧

♣r♦♣❴♠✐t❛❞P❛r❡s ①s ❂

♠✐t❛❞P❛r❡s❈ ①s ❂❂ ♠✐t❛❞P❛r❡s❘ ①s

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴♠✐t❛❞P❛r❡s

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

88 Capítulo 4. Definiciones por recursión y por comprensión

4.11. Pertenencia a un rango

Ejercicio 4.11.1. Definir, por comprensión, la función

❡♥❘❛♥❣♦❈ ✿✿ ■♥t ✲❃ ■♥t ✲❃ ❬■♥t❪ ✲❃ ❬■♥t❪

tal que ✭❡♥❘❛♥❣♦❈ ❛ ❜ ①s✮ es la lista de los elementos de ①s mayores o iguales que ❛ y menores

o iguales que ❜. Por ejemplo,

❡♥❘❛♥❣♦❈ ✺ ✶✵ ❬✶✳✳✶✺❪ ❂❂ ❬✺✱✻✱✼✱✽✱✾✱✶✵❪

❡♥❘❛♥❣♦❈ ✶✵ ✺ ❬✶✳✳✶✺❪ ❂❂ ❬❪

❡♥❘❛♥❣♦❈ ✺ ✺ ❬✶✳✳✶✺❪ ❂❂ ❬✺❪

Solución:

❡♥❘❛♥❣♦❈ ✿✿ ■♥t ✲❃ ■♥t ✲❃ ❬■♥t❪ ✲❃ ❬■♥t❪

❡♥❘❛♥❣♦❈ ❛ ❜ ①s ❂ ❬① ⑤ ① ❁✲ ①s✱ ❛ ❁❂ ①✱ ① ❁❂ ❜❪

Ejercicio 4.11.2. Definir, por recursión, la función

❡♥❘❛♥❣♦❘ ✿✿ ■♥t ✲❃ ■♥t ✲❃ ❬■♥t❪ ✲❃ ❬■♥t❪

tal que ✭❡♥❘❛♥❣♦❘ ❛ ❜ ①s✮ es la lista de los elementos de ①s mayores o iguales que ❛ y menores

o iguales que ❜. Por ejemplo,

❡♥❘❛♥❣♦❘ ✺ ✶✵ ❬✶✳✳✶✺❪ ❂❂ ❬✺✱✻✱✼✱✽✱✾✱✶✵❪

❡♥❘❛♥❣♦❘ ✶✵ ✺ ❬✶✳✳✶✺❪ ❂❂ ❬❪

❡♥❘❛♥❣♦❘ ✺ ✺ ❬✶✳✳✶✺❪ ❂❂ ❬✺❪

Solución:

❡♥❘❛♥❣♦❘ ✿✿ ■♥t ✲❃ ■♥t ✲❃ ❬■♥t❪ ✲❃ ❬■♥t❪

❡♥❘❛♥❣♦❘ ❛ ❜ ❬❪ ❂ ❬❪

❡♥❘❛♥❣♦❘ ❛ ❜ ✭①✿①s✮

⑤ ❛ ❁❂ ① ✫✫ ① ❁❂ ❜ ❂ ① ✿ ❡♥❘❛♥❣♦❘ ❛ ❜ ①s

⑤ ♦t❤❡r✇✐s❡ ❂ ❡♥❘❛♥❣♦❘ ❛ ❜ ①s

Ejercicio 4.11.3. Comprobar con QuickCheck que ambas definiciones son equivalentes.

Solución: La propiedad es

♣r♦♣❴❡♥❘❛♥❣♦ ✿✿ ■♥t ✲❃ ■♥t ✲❃ ❬■♥t❪ ✲❃ ❇♦♦❧

♣r♦♣❴❡♥❘❛♥❣♦ ❛ ❜ ①s ❂

❡♥❘❛♥❣♦❈ ❛ ❜ ①s ❂❂ ❡♥❘❛♥❣♦❘ ❛ ❜ ①s

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴❡♥❘❛♥❣♦

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

4.12. Suma de elementos positivos 89

4.12. Suma de elementos positivos

Ejercicio 4.12.1. Definir, por comprensión, la función

s✉♠❛P♦s✐t✐✈♦s❈ ✿✿ ❬■♥t❪ ✲❃ ■♥t

tal que ✭s✉♠❛P♦s✐t✐✈♦s❈ ①s✮ es la suma de los números positivos de ①s. Por ejemplo,

s✉♠❛P♦s✐t✐✈♦s❈ ❬✵✱✶✱✲✸✱✲✷✱✽✱✲✶✱✻❪ ❂❂ ✶✺

Solución:

s✉♠❛P♦s✐t✐✈♦s❈ ✿✿ ❬■♥t❪ ✲❃ ■♥t

s✉♠❛P♦s✐t✐✈♦s❈ ①s ❂ s✉♠ ❬① ⑤ ① ❁✲ ①s✱ ① ❃ ✵❪

Ejercicio 4.12.2. Definir, por recursión, la función

s✉♠❛P♦s✐t✐✈♦s❘ ✿✿ ❬■♥t❪ ✲❃ ■♥t

tal que ✭s✉♠❛P♦s✐t✐✈♦s❘ ①s✮ es la suma de los números positivos de ①s. Por ejemplo,

s✉♠❛P♦s✐t✐✈♦s❘ ❬✵✱✶✱✲✸✱✲✷✱✽✱✲✶✱✻❪ ❂❂ ✶✺

Solución:

s✉♠❛P♦s✐t✐✈♦s❘ ✿✿ ❬■♥t❪ ✲❃ ■♥t

s✉♠❛P♦s✐t✐✈♦s❘ ❬❪ ❂ ✵

s✉♠❛P♦s✐t✐✈♦s❘ ✭①✿①s✮ ⑤ ① ❃ ✵ ❂ ① ✰ s✉♠❛P♦s✐t✐✈♦s❘ ①s

⑤ ♦t❤❡r✇✐s❡ ❂ s✉♠❛P♦s✐t✐✈♦s❘ ①s

Ejercicio 4.12.3. Comprobar con QuickCheck que ambas definiciones son equivalentes.

Solución: La propiedad es

♣r♦♣❴s✉♠❛P♦s✐t✐✈♦s ✿✿ ❬■♥t❪ ✲❃ ❇♦♦❧

♣r♦♣❴s✉♠❛P♦s✐t✐✈♦s ①s ❂

s✉♠❛P♦s✐t✐✈♦s❈ ①s ❂❂ s✉♠❛P♦s✐t✐✈♦s❘ ①s

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴s✉♠❛P♦s✐t✐✈♦s

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

90 Capítulo 4. Definiciones por recursión y por comprensión

4.13. Aproximación del número π

La suma de la serie112 +

122 +

132 +

142 + . . .

es π2

6 . Por tanto, π se puede aproximar mediante la raíz cuadrada de 6 por la suma dela serie.

Ejercicio 4.13.1. Definir, por comprensión, la función ❛♣r♦①✐♠❛P✐❈ tal que ✭❛♣r♦①✐♠❛P✐❈ ♥✮

es la aproximación de π obtenida mediante ♥ términos de la serie. Por ejemplo,

❛♣r♦①✐♠❛P✐❈ ✹ ❂❂ sqrt✭✻✯✭✶✴✶❫✷ ✰ ✶✴✷❫✷ ✰ ✶✴✸❫✷ ✰ ✶✴✹❫✷✮✮

❂❂ ✷✳✾✷✷✻✶✷✾✽✻✶✷✺✵✸✵✺

❛♣r♦①✐♠❛P✐❈ ✶✵✵✵ ❂❂ ✸✳✶✹✵✻✸✽✵✺✻✷✵✺✾✾✹✻

Solución:

❛♣r♦①✐♠❛P✐❈ ♥ ❂ sqrt✭✻✯s✉♠ ❬✶✴①❫✷ ⑤ ① ❁✲ ❬✶✳✳♥❪❪✮

Ejercicio 4.13.2. Definir, por comprensión, la función ❛♣r♦①✐♠❛P✐❘ tal que ✭❛♣r♦①✐♠❛P✐❘ ♥✮

es la aproximación de π obtenida mediante ♥ términos de la serie. Por ejemplo,

❛♣r♦①✐♠❛P✐❘ ✹ ❂❂ sqrt✭✻✯✭✶✴✶❫✷ ✰ ✶✴✷❫✷ ✰ ✶✴✸❫✷ ✰ ✶✴✹❫✷✮✮

❂❂ ✷✳✾✷✷✻✶✷✾✽✻✶✷✺✵✸✵✺

❛♣r♦①✐♠❛P✐❘ ✶✵✵✵ ❂❂ ✸✳✶✹✵✻✸✽✵✺✻✷✵✺✾✾✹✻

Solución:

❛♣r♦①✐♠❛P✐❘ ♥ ❂ sqrt✭✻✯❛♣r♦①✐♠❛P✐❘✬ ♥✮

❛♣r♦①✐♠❛P✐❘✬ ✶ ❂ ✶

❛♣r♦①✐♠❛P✐❘✬ ♥ ❂ ✶✴♥❫✷ ✰ ❛♣r♦①✐♠❛P✐❘✬ ✭♥✲✶✮

4.14. Sustitución de impares por el siguiente par

Ejercicio 4.14.1. Definir por recursión la función

s✉st✐t✉②❡■♠♣❛r ✿✿ ❬■♥t❪ ✲❃ ❬■♥t❪

tal que ✭s✉st✐t✉②❡■♠♣❛r ①s✮ es la lista obtenida sustituyendo cada número impar de ①s por

el siguiente número par. Por ejemplo,

s✉st✐t✉②❡■♠♣❛r ❬✷✱✺✱✼✱✹❪ ❂❂ ❬✷✱✻✱✽✱✹❪

4.15. La compra de una persona agarrada 91

Solución:

s✉st✐t✉②❡■♠♣❛r ✿✿ ❬■♥t❪ ✲❃ ❬■♥t❪

s✉st✐t✉②❡■♠♣❛r ❬❪ ❂ ❬❪

s✉st✐t✉②❡■♠♣❛r ✭①✿①s✮ ⑤ ♦❞❞ ① ❂ ✭①✰✶✮✿ s✉st✐t✉②❡■♠♣❛r ①s

⑤ ♦t❤❡r✇✐s❡ ❂ ①✿s✉st✐t✉②❡■♠♣❛r ①s

Ejercicio 4.14.2. Comprobar con QuickChek la siguiente propiedad: para cualquier lista de nú-

meros enteros ①s, todos los elementos de la lista ✭s✉st✐t✉②❡■♠♣❛r ①s✮ son números pares.

Solución: La propiedad es

♣r♦♣❴s✉st✐t✉②❡■♠♣❛r ✿✿ ❬■♥t❪ ✲❃ ❇♦♦❧

♣r♦♣❴s✉st✐t✉②❡■♠♣❛r ①s ❂ ❛♥❞ ❬❡✈❡♥ ① ⑤ ① ❁✲ s✉st✐t✉②❡■♠♣❛r ①s❪

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴s✉st✐t✉②❡■♠♣❛r

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

4.15. La compra de una persona agarrada

Ejercicio 4.15.1. Una persona es tan agarrada que sólo compra cuando le hacen un descuento

del 10 % y el precio (con el descuento) es menor o igual que 199.

Definir, usando comprensión, la función

❛❣❛rr❛❞♦❈ ✿✿ ❬❋❧♦❛t❪ ✲❃ ❋❧♦❛t

tal que ✭❛❣❛rr❛❞♦❈ ♣s✮ es el precio que tiene que pagar por una compra cuya lista de precios es

♣s. Por ejemplo,

❛❣❛rr❛❞♦❈ ❬✹✺✳✵✵✱ ✶✾✾✳✵✵✱ ✷✷✵✳✵✵✱ ✸✾✾✳✵✵❪ ❂❂ ✹✶✼✳✺✾✾✾✽

Solución:

❛❣❛rr❛❞♦❈ ✿✿ ❬❋❧♦❛t❪ ✲❃ ❋❧♦❛t

❛❣❛rr❛❞♦❈ ♣s ❂ s✉♠ ❬♣ ✯ ✵✳✾ ⑤ ♣ ❁✲ ♣s✱ ♣ ✯ ✵✳✾ ❁❂ ✶✾✾❪

Ejercicio 4.15.2. Definir, por recursión, la función

❛❣❛rr❛❞♦❘ ✿✿ ❬❋❧♦❛t❪ ✲❃ ❋❧♦❛t

tal que ✭❛❣❛rr❛❞♦❘ ♣s✮ es el precio que tiene que pagar por una compra cuya lista de precios es

♣s. Por ejemplo,

92 Capítulo 4. Definiciones por recursión y por comprensión

❛❣❛rr❛❞♦❘ ❬✹✺✳✵✵✱ ✶✾✾✳✵✵✱ ✷✷✵✳✵✵✱ ✸✾✾✳✵✵❪ ❂❂ ✹✶✼✳✺✾✾✾✽

Solución:

❛❣❛rr❛❞♦❘ ✿✿ ❬❋❧♦❛t❪ ✲❃ ❋❧♦❛t

❛❣❛rr❛❞♦❘ ❬❪ ❂ ✵

❛❣❛rr❛❞♦❘ ✭♣✿♣s✮

⑤ ♣r❡❝✐♦❈♦♥❉❡s❝✉❡♥t♦ ❁❂ ✶✾✾ ❂ ♣r❡❝✐♦❈♦♥❉❡s❝✉❡♥t♦ ✰ ❛❣❛rr❛❞♦❘ ♣s

⑤ ♦t❤❡r✇✐s❡ ❂ ❛❣❛rr❛❞♦❘ ♣s

✇❤❡r❡ ♣r❡❝✐♦❈♦♥❉❡s❝✉❡♥t♦ ❂ ♣ ✯ ✵✳✾

Ejercicio 4.15.3. Comprobar con QuickCheck que ambas definiciones son similares; es decir, el

valor absoluto de su diferencia es menor que una décima.

Solución: La propiedad es

♣r♦♣❴❛❣❛rr❛❞♦ ✿✿ ❬❋❧♦❛t❪ ✲❃ ❇♦♦❧

♣r♦♣❴❛❣❛rr❛❞♦ ①s ❂ ❛❜s ✭❛❣❛rr❛❞♦❘ ①s ✲ ❛❣❛rr❛❞♦❈ ①s✮ ❁❂ ✵✳✶

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴❛❣❛rr❛❞♦

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

4.16. Descomposición en productos de factores primos

4.16.1. Lista de los factores primos de un número

Ejercicio 4.16.1. Definir la función

❢❛❝t♦r❡s ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

tal que ✭❢❛❝t♦r❡s ♥✮ es la lista de los factores de ♥. Por ejemplo,

❢❛❝t♦r❡s ✻✵ ❂❂ ❬✶✱✷✱✸✱✹✱✺✱✻✱✶✵✱✶✷✱✶✺✱✷✵✱✸✵✱✻✵❪

Solución:

❢❛❝t♦r❡s ✿✿ ■♥t❡❣❡r ✲❃ ❬■♥t❡❣❡r❪

❢❛❝t♦r❡s ♥ ❂ ❬① ⑤ ① ❁✲ ❬✶✳✳♥❪✱ ♠♦❞ ♥ ① ❂❂ ✵❪

4.16. Descomposición en productos de factores primos 93

4.16.2. Decidir si un número es primo

Ejercicio 4.16.2. Definir la función

♣r✐♠♦ ✿✿ ■♥t❡❣❡r ✲❃ ❇♦♦❧

tal que ✭♣r✐♠♦ ♥✮ se verifica si ♥ es primo. Por ejemplo,

♣r✐♠♦ ✼ ❂❂ ❚r✉❡

♣r✐♠♦ ✾ ❂❂ ❋❛❧s❡

Solución:

♣r✐♠♦ ✿✿ ■♥t❡❣❡r ✲❃ ❇♦♦❧

♣r✐♠♦ ① ❂ ❢❛❝t♦r❡s ① ❂❂ ❬✶✱①❪

4.16.3. Factorización de un número

Ejercicio 4.16.3. Definir la función

❢❛❝t♦r❡sPr✐♠♦s ✿✿ ■♥t❡❣❡r ✲❃ ❬■♥t❡❣❡r❪

tal que ✭❢❛❝t♦r❡sPr✐♠♦s ♥✮ es la lista de los factores primos de ♥. Por ejemplo,

❢❛❝t♦r❡sPr✐♠♦s ✻✵ ❂❂ ❬✷✱✸✱✺❪

Solución:

❢❛❝t♦r❡sPr✐♠♦s ✿✿ ■♥t❡❣❡r ✲❃ ❬■♥t❡❣❡r❪

❢❛❝t♦r❡sPr✐♠♦s ♥ ❂ ❬① ⑤ ① ❁✲ ❢❛❝t♦r❡s ♥✱ ♣r✐♠♦ ①❪

4.16.4. Exponente de la mayor potencia de un número que divide aotro

Ejercicio 4.16.4. Definir, por recursión, la función

♠❛②♦r❊①♣♦♥❡♥t❡❘ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

tal que ✭♠❛②♦r❊①♣♦♥❡♥t❡❘ ❛ ❜✮ es el exponente de la mayor potencia de ❛ que divide a ❜. Por

ejemplo,

♠❛②♦r❊①♣♦♥❡♥t❡❘ ✷ ✽ ❂❂ ✸

♠❛②♦r❊①♣♦♥❡♥t❡❘ ✷ ✾ ❂❂ ✵

♠❛②♦r❊①♣♦♥❡♥t❡❘ ✺ ✶✵✵ ❂❂ ✷

♠❛②♦r❊①♣♦♥❡♥t❡❘ ✷ ✻✵ ❂❂ ✷

94 Capítulo 4. Definiciones por recursión y por comprensión

Solución:

♠❛②♦r❊①♣♦♥❡♥t❡❘ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

♠❛②♦r❊①♣♦♥❡♥t❡❘ ❛ ❜

⑤ ♠♦❞ ❜ ❛ ✴❂ ✵ ❂ ✵

⑤ ♦t❤❡r✇✐s❡ ❂ ✶ ✰ ♠❛②♦r❊①♣♦♥❡♥t❡❘ ❛ ✭❜ ❵❞✐✈❵ ❛✮

Ejercicio 4.16.5. Definir, por comprensión, la función

♠❛②♦r❊①♣♦♥❡♥t❡❈ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

tal que ✭♠❛②♦r❊①♣♦♥❡♥t❡❈ ❛ ❜✮ es el exponente de la mayor potencia de ❛ que divide a ❜. Por

ejemplo,

♠❛②♦r❊①♣♦♥❡♥t❡❈ ✷ ✽ ❂❂ ✸

♠❛②♦r❊①♣♦♥❡♥t❡❈ ✺ ✶✵✵ ❂❂ ✷

♠❛②♦r❊①♣♦♥❡♥t❡❈ ✺ ✶✵✶ ❂❂ ✵

Solución:

♠❛②♦r❊①♣♦♥❡♥t❡❈ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

♠❛②♦r❊①♣♦♥❡♥t❡❈ ❛ ❜ ❂ ❤❡❛❞ ❬①✲✶ ⑤ ① ❁✲ ❬✵✳✳❪✱ ♠♦❞ ❜ ✭❛❫①✮ ✴❂ ✵❪

Ejercicio 4.16.6. Definir la función

❢❛❝t♦r✐③❛❝✐♦♥ ✿✿ ■♥t❡❣❡r ✲❃ ❬✭■♥t❡❣❡r✱■♥t❡❣❡r✮❪

tal que ✭❢❛❝t♦r✐③❛❝✐♦♥ ♥✮ es la factorización de ♥. Por ejemplo,

❢❛❝t♦r✐③❛❝✐♦♥ ✻✵ ❂❂ ❬✭✷✱✷✮✱✭✸✱✶✮✱✭✺✱✶✮❪

Solución:

❢❛❝t♦r✐③❛❝✐♦♥ ✿✿ ■♥t❡❣❡r ✲❃ ❬✭■♥t❡❣❡r✱■♥t❡❣❡r✮❪

❢❛❝t♦r✐③❛❝✐♦♥ ♥ ❂ ❬✭①✱♠❛②♦r❊①♣♦♥❡♥t❡❘ ① ♥✮ ⑤ ① ❁✲ ❢❛❝t♦r❡sPr✐♠♦s ♥❪

4.16.5. Expansion de la factorización de un número

Ejercicio 4.16.7. Definir, por recursión, la función

❡①♣❛♥s✐♦♥❘ ✿✿ ❬✭■♥t❡❣❡r✱■♥t❡❣❡r✮❪ ✲❃ ■♥t❡❣❡r

tal que ✭❡①♣❛♥s✐♦♥❘ ①s✮ es la expansión de la factorización de ①s. Por ejemplo,

❡①♣❛♥s✐♦♥❘ ❬✭✷✱✷✮✱✭✸✱✶✮✱✭✺✱✶✮❪ ❂❂ ✻✵

4.17. Menor número con todos los dígitos en la factorización de su factorial 95

Solución:

❡①♣❛♥s✐♦♥❘ ✿✿ ❬✭■♥t❡❣❡r✱■♥t❡❣❡r✮❪ ✲❃ ■♥t❡❣❡r

❡①♣❛♥s✐♦♥❘ ❬❪ ❂ ✶

❡①♣❛♥s✐♦♥❘ ✭✭①✱②✮✿③s✮ ❂ ①❫② ✯ ❡①♣❛♥s✐♦♥❘ ③s

Ejercicio 4.16.8. Definir, por comprensión, la función

❡①♣❛♥s✐♦♥❈ ✿✿ ❬✭■♥t❡❣❡r✱■♥t❡❣❡r✮❪ ✲❃ ■♥t❡❣❡r

tal que ✭❡①♣❛♥s✐♦♥❈ ①s✮ es la expansión de la factorización de ①s. Por ejemplo,

❡①♣❛♥s✐♦♥❈ ❬✭✷✱✷✮✱✭✸✱✶✮✱✭✺✱✶✮❪ ❂❂ ✻✵

Solución:

❡①♣❛♥s✐♦♥❈ ✿✿ ❬✭■♥t❡❣❡r✱■♥t❡❣❡r✮❪ ✲❃ ■♥t❡❣❡r

❡①♣❛♥s✐♦♥❈ ①s ❂ ♣r♦❞✉❝t ❬①❫② ⑤ ✭①✱②✮ ❁✲ ①s❪

Ejercicio 4.16.9. Definir la función

♣r♦♣❴❢❛❝t♦r✐③❛❝✐♦♥ ✿✿ ■♥t❡❣❡r ✲❃ ❇♦♦❧

tal que ✭♣r♦♣❴❢❛❝t♦r✐③❛❝✐♦♥ ♥✮ se verifica si para todo número natural ①, menor o igual que

♥, se tiene que ✭❡①♣❛♥s✐♦♥❈ ✭❢❛❝t♦r✐③❛❝✐♦♥ ①✮✮ es igual a ①. Por ejemplo,

♣r♦♣❴❢❛❝t♦r✐③❛❝✐♦♥ ✶✵✵ ❂❂ ❚r✉❡

Solución:

♣r♦♣❴❢❛❝t♦r✐③❛❝✐♦♥ ♥ ❂

❛♥❞ ❬❡①♣❛♥s✐♦♥❈ ✭❢❛❝t♦r✐③❛❝✐♦♥ ①✮ ❂❂ ① ⑤ ① ❁✲ ❬✶✳✳♥❪❪

4.17. Menor número con todos los dígitos en la factoriza-ción de su factorial

Ejercicio 4.17.1. El enunciado del problema 652 de “Números y algo más”2 es el siguiente:

Si factorizamos los factoriales de un número en función de sus divisores primos y

sus potencias, ¿cuál es el menor número n tal que entre los factores primos y los

exponentes de la factorización de n! están todos los dígitos del cero al nueve? Por

ejemplo

2❤tt♣✿✴✴s✐♠♣❧❡♠❡♥t❡♥✉♠❡r♦s✳❜❧♦❣s♣♦t✳❝♦♠✳❡s✴✷✵✶✶✴✵✹✴✻✺✷✲❞❡s❛❢✐♦s✲❞❡❧✲❝♦♥t❡st✲❝❡♥t❡r✲✐✳

❤t♠❧

96 Capítulo 4. Definiciones por recursión y por comprensión

6! = 243251, le faltan los dígitos 0, 6, 7, 8 y 9

12! = 210355271111, le faltan los dígitos 4, 6, 8 y 9

Definir la función

digitosDeFactorizacion :: Integer ->[Integer]

tal que ✭❞✐❣✐t♦s❉❡❋❛❝t♦r✐③❛❝✐♦♥ ♥✮ es el conjunto de los dígitos que aparecen en la factori-

zación de ♥. Por ejemplo,

❞✐❣✐t♦s❉❡❋❛❝t♦r✐③❛❝✐♦♥ ✭❢❛❝t♦r✐❛❧ ✻✮ ❂❂ ❬✶✱✷✱✸✱✹✱✺❪

❞✐❣✐t♦s❉❡❋❛❝t♦r✐③❛❝✐♦♥ ✭❢❛❝t♦r✐❛❧ ✶✷✮ ❂❂ ❬✵✱✶✱✷✱✸✱✺✱✼❪

Usando la función anterior, calcular la solución del problema.

Solución:

❞✐❣✐t♦s❉❡❋❛❝t♦r✐③❛❝✐♦♥ ✿✿ ■♥t❡❣❡r ✲❃ ❬■♥t❡❣❡r❪

❞✐❣✐t♦s❉❡❋❛❝t♦r✐③❛❝✐♦♥ ♥ ❂

s♦rt ✭♥✉❜ ✭❝♦♥❝❛t ❬❞✐❣✐t♦s ① ⑤ ① ❁✲ ♥✉♠❡r♦s❉❡❋❛❝t♦r✐③❛❝✐♦♥ ♥❪✮✮

donde se usan las siguientes funciones auxiliares

✭❞✐❣✐t♦s ♥✮ es la lista de los digitos del número ♥. Por ejemplo,

❞✐❣✐t♦s ✸✷✵✷✼✹ ❂❂ ❬✸✱✷✱✵✱✷✱✼✱✹❪

❞✐❣✐t♦s ✿✿ ■♥t❡❣❡r ✲❃ ❬■♥t❡❣❡r❪

❞✐❣✐t♦s ♥ ❂ ❬r❡❛❞ ❬①❪ ⑤ ① ❁✲ s❤♦✇ ♥❪

✭♥✉♠❡r♦s❉❡❋❛❝t♦r✐③❛❝✐♦♥ ♥✮ es el conjunto de los números en la factorización de♥. Por ejemplo,

♥✉♠❡r♦s❉❡❋❛❝t♦r✐③❛❝✐♦♥ ✻✵ ❂❂ ❬✶✱✷✱✸✱✺❪

♥✉♠❡r♦s❉❡❋❛❝t♦r✐③❛❝✐♦♥ ✿✿ ■♥t❡❣❡r ✲❃ ❬■♥t❡❣❡r❪

♥✉♠❡r♦s❉❡❋❛❝t♦r✐③❛❝✐♦♥ ♥ ❂

s♦rt ✭♥✉❜ ✭❛✉① ✭❢❛❝t♦r✐③❛❝✐♦♥ ♥✮✮✮

✇❤❡r❡ ❛✉① ❬❪ ❂ ❬❪

❛✉① ✭✭①✱②✮✿③s✮ ❂ ① ✿ ② ✿ ❛✉① ③s

✭❢❛❝t♦r✐③❛❝✐ó♥ ♥✮ es la factorización de ♥. Por ejemplo,

❢❛❝t♦r✐③❛❝✐♦♥ ✸✵✵ ❂❂ ❬✭✷✱✷✮✱✭✸✱✶✮✱✭✺✱✷✮❪

4.17. Menor número con todos los dígitos en la factorización de su factorial 97

❢❛❝t♦r✐③❛❝✐♦♥ ✿✿ ■♥t❡❣❡r ✲❃ ❬✭■♥t❡❣❡r✱■♥t❡❣❡r✮❪

❢❛❝t♦r✐③❛❝✐♦♥ ♥ ❂

❬✭❤❡❛❞ ①s✱ ❢r♦♠■♥t❡❣r❛❧ ✭❧❡♥❣t❤ ①s✮✮ ⑤ ①s ❁✲ ❣r♦✉♣ ✭❢❛❝t♦r✐③❛❝✐♦♥✬ ♥✮❪

✭❢❛❝t♦r✐③❛❝✐♦♥✬ ♥✮ es la lista de todos los factores primos de ♥; es decir, es unalista de números primos cuyo producto es ♥. Por ejemplo,

❢❛❝t♦r✐③❛❝✐♦♥ ✸✵✵ ❂❂ ❬✷✱✷✱✸✱✺✱✺❪

❢❛❝t♦r✐③❛❝✐♦♥✬ ✿✿ ■♥t❡❣❡r ✲❃ ❬■♥t❡❣❡r❪

❢❛❝t♦r✐③❛❝✐♦♥✬ ♥ ⑤ ♥ ❂❂ ✶ ❂ ❬❪

⑤ ♦t❤❡r✇✐s❡ ❂ ① ✿ ❢❛❝t♦r✐③❛❝✐♦♥✬ ✭❞✐✈ ♥ ①✮

✇❤❡r❡ ① ❂ ♠❡♥♦r❋❛❝t♦r ♥

✭♠❡♥♦r❋❛❝t♦r ♥✮ es el menor factor primo de ♥. Por ejemplo,

♠❡♥♦r❋❛❝t♦r ✶✺ ❂❂ ✸

♠❡♥♦r❋❛❝t♦r ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

♠❡♥♦r❋❛❝t♦r ♥ ❂ ❤❡❛❞ ❬① ⑤ ① ❁✲ ❬✷✳✳❪✱ r❡♠ ♥ ① ❂❂ ✵❪

✭❢❛❝t♦r✐❛❧ ♥✮ es el factorial de ♥. Por ejemplo,

❢❛❝t♦r✐❛❧ ✺ ❂❂ ✶✷✵

❢❛❝t♦r✐❛❧ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

❢❛❝t♦r✐❛❧ ♥ ❂ ♣r♦❞✉❝t ❬✶✳✳♥❪

Para calcular la solución, se define la constante

s♦❧✉❝✐♦♥ ❂

❤❡❛❞ ❬♥ ⑤ ♥ ❁✲ ❬✶✳✳❪✱ ❞✐❣✐t♦s❉❡❋❛❝t♦r✐③❛❝✐♦♥ ✭❢❛❝t♦r✐❛❧ ♥✮ ❂❂ ❬✵✳✳✾❪❪

El cálculo de la solución es

❣❤❝✐❃ s♦❧✉❝✐♦♥

✹✾

98 Capítulo 4. Definiciones por recursión y por comprensión

4.18. Suma de números especiales

Los siguientes ejercicios están basados en el problema 357 del proyecto Euler3.

Ejercicio 4.18.1. Un número natural n es especial si para todo divisor d de n, d + nd es primo.

Definir la función

❡s♣❡❝✐❛❧ ✿✿ ■♥t❡❣❡r ✲❃ ❇♦♦❧

tal que ✭❡s♣❡❝✐❛❧ ①✮ se verifica si ① es especial. Por ejemplo,

❡s♣❡❝✐❛❧ ✸✵ ❂❂ ❚r✉❡

❡s♣❡❝✐❛❧ ✷✵ ❂❂ ❋❛❧s❡

Solución:

❡s♣❡❝✐❛❧ ✿✿ ■♥t❡❣❡r ✲❃ ❇♦♦❧

❡s♣❡❝✐❛❧ ① ❂ ❛♥❞ ❬❡sPr✐♠♦ ✭❞ ✰ ① ❵❞✐✈❵ ❞✮ ⑤ ❞ ❁✲ ❞✐✈✐s♦r❡s ①❪

donde se usan las siguientes funciones auxiliares

✭❞✐✈✐s♦r❡s ①✮ es la lista de los divisores de ①. Por ejemplo,

❞✐✈✐s♦r❡s ✸✵ ❂❂ ❬✶✱✷✱✸✱✺✱✻✱✶✵✱✶✺✱✸✵❪

❞✐✈✐s♦r❡s ✿✿ ■♥t❡❣❡r ✲❃ ❬■♥t❡❣❡r❪

❞✐✈✐s♦r❡s ① ❂ ❬❞ ⑤ ❞ ❁✲ ❬✶✳✳①❪✱ ① ❵r❡♠❵ ❞ ❂❂ ✵❪

✭❡sPr✐♠♦ ①✮ se verifica si ① es primo. Por ejemplo,

❡sPr✐♠♦ ✼ ❂❂ ❚r✉❡

❡sPr✐♠♦ ✽ ❂❂ ❋❛❧s❡

❡sPr✐♠♦ ✿✿ ■♥t❡❣❡r ✲❃ ❇♦♦❧

❡sPr✐♠♦ ① ❂ ❞✐✈✐s♦r❡s ① ❂❂ ❬✶✱①❪

Ejercicio 4.18.2. Definir, por comprensión, la función

s✉♠❛❊s♣❡❝✐❛❧❡s ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

tal que ✭s✉♠❛❊s♣❡❝✐❛❧❡s ♥✮ es la suma de los números especiales menores o iguales que ♥. Por

ejemplo,

s✉♠❛❊s♣❡❝✐❛❧❡s ✶✵✵ ❂❂ ✹✵✶

3❤tt♣✿✴✴♣r♦❥❡❝t❡✉❧❡r✳♥❡t✴♣r♦❜❧❡♠❂✸✺✼

4.19. Distancia de Hamming 99

Solución:

s✉♠❛❊s♣❡❝✐❛❧❡s ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

s✉♠❛❊s♣❡❝✐❛❧❡s ♥ ❂ s✉♠ ❬① ⑤ ① ❁✲ ❬✶✳✳♥❪✱ ❡s♣❡❝✐❛❧ ①❪

Ejercicio 4.18.3. Definir, por recursion, la función

s✉♠❛❊s♣❡❝✐❛❧❡s❘ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

tal que ✭s✉♠❛❊s♣❡❝✐❛❧❡s❘ ♥✮ es la suma de los números especiales menores o iguales que ♥.

Por ejemplo,

s✉♠❛❊s♣❡❝✐❛❧❡s❘ ✶✵✵ ❂❂ ✹✵✶

Solución:

s✉♠❛❊s♣❡❝✐❛❧❡s❘ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

s✉♠❛❊s♣❡❝✐❛❧❡s❘ ✵ ❂ ✵

s✉♠❛❊s♣❡❝✐❛❧❡s❘ ♥ ⑤ ❡s♣❡❝✐❛❧ ♥ ❂ ♥ ✰ s✉♠❛❊s♣❡❝✐❛❧❡s❘ ✭♥✲✶✮

⑤ ♦t❤❡r✇✐s❡ ❂ s✉♠❛❊s♣❡❝✐❛❧❡s❘ ✭♥✲✶✮

4.19. Distancia de Hamming

La distancia de Hamming entre dos listas es el número de posiciones en que loscorrespondientes elementos son distintos. Por ejemplo, la distancia de Hamming entre“roma” y “loba” es 2 (porque hay 2 posiciones en las que los elementos correspondientesson distintos: la 1a y la 3a).

Ejercicio 4.19.1. Definir, por comprensión, la función

❞✐st❛♥❝✐❛❈ ✿✿ ❊q ❛ ❂❃ ❬❛❪ ✲❃ ❬❛❪ ✲❃ ■♥t

tal que ✭❞✐st❛♥❝✐❛❈ ①s ②s✮ es la distanciaC de Hamming entre ①s e ②s. Por ejemplo,

❞✐st❛♥❝✐❛❈ ✧r♦♠❛♥♦✧ ✧❝♦♠✐♥♦✧ ❂❂ ✷

❞✐st❛♥❝✐❛❈ ✧r♦♠❛♥♦✧ ✧❝❛♠✐♥♦✧ ❂❂ ✸

❞✐st❛♥❝✐❛❈ ✧r♦♠❛✧ ✧❝♦♠✐♥♦✧ ❂❂ ✷

❞✐st❛♥❝✐❛❈ ✧r♦♠❛✧ ✧❝❛♠✐♥♦✧ ❂❂ ✸

❞✐st❛♥❝✐❛❈ ✧r♦♠❛♥♦✧ ✧r♦♥✧ ❂❂ ✶

❞✐st❛♥❝✐❛❈ ✧r♦♠❛♥♦✧ ✧❝❛♠❛✧ ❂❂ ✷

❞✐st❛♥❝✐❛❈ ✧r♦♠❛♥♦✧ ✧r❛♠❛✧ ❂❂ ✶

Solución:

100 Capítulo 4. Definiciones por recursión y por comprensión

❞✐st❛♥❝✐❛❈ ✿✿ ❊q ❛ ❂❃ ❬❛❪ ✲❃ ❬❛❪ ✲❃ ■♥t

❞✐st❛♥❝✐❛❈ ①s ②s ❂ ❧❡♥❣t❤ ❬✭①✱②✮ ⑤ ✭①✱②✮ ❁✲ ③✐♣ ①s ②s✱ ① ✴❂ ②❪

Ejercicio 4.19.2. Definir, por recursión, la función

❞✐st❛♥❝✐❛❘ ✿✿ ❊q ❛ ❂❃ ❬❛❪ ✲❃ ❬❛❪ ✲❃ ■♥t

tal que ✭❞✐st❛♥❝✐❛❘ ①s ②s✮ es la distanciaR de Hamming entre ①s e ②s. Por ejemplo,

❞✐st❛♥❝✐❛❘ ✧r♦♠❛♥♦✧ ✧❝♦♠✐♥♦✧ ❂❂ ✷

❞✐st❛♥❝✐❛❘ ✧r♦♠❛♥♦✧ ✧❝❛♠✐♥♦✧ ❂❂ ✸

❞✐st❛♥❝✐❛❘ ✧r♦♠❛✧ ✧❝♦♠✐♥♦✧ ❂❂ ✷

❞✐st❛♥❝✐❛❘ ✧r♦♠❛✧ ✧❝❛♠✐♥♦✧ ❂❂ ✸

❞✐st❛♥❝✐❛❘ ✧r♦♠❛♥♦✧ ✧r♦♥✧ ❂❂ ✶

❞✐st❛♥❝✐❛❘ ✧r♦♠❛♥♦✧ ✧❝❛♠❛✧ ❂❂ ✷

❞✐st❛♥❝✐❛❘ ✧r♦♠❛♥♦✧ ✧r❛♠❛✧ ❂❂ ✶

Solución:

❞✐st❛♥❝✐❛❘ ✿✿ ❊q ❛ ❂❃ ❬❛❪ ✲❃ ❬❛❪ ✲❃ ■♥t

❞✐st❛♥❝✐❛❘ ❬❪ ②s ❂ ✵

❞✐st❛♥❝✐❛❘ ①s ❬❪ ❂ ✵

❞✐st❛♥❝✐❛❘ ✭①✿①s✮ ✭②✿②s✮ ⑤ ① ✴❂ ② ❂ ✶ ✰ ❞✐st❛♥❝✐❛❘ ①s ②s

⑤ ♦t❤❡r✇✐s❡ ❂ ❞✐st❛♥❝✐❛❘ ①s ②s

Ejercicio 4.19.3. Comprobar con QuickCheck que ambas definiciones son equivalentes.

Solución: La propiedad es

♣r♦♣❴❞✐st❛♥❝✐❛ ✿✿ ❬■♥t❪ ✲❃ ❬■♥t❪ ✲❃ ❇♦♦❧

♣r♦♣❴❞✐st❛♥❝✐❛ ①s ②s ❂

❞✐st❛♥❝✐❛❈ ①s ②s ❂❂ ❞✐st❛♥❝✐❛❘ ①s ②s

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴❞✐st❛♥❝✐❛

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

4.20. Traspuesta de una matriz

Ejercicio 4.20.1. Definir la función

4.21. Números expresables como sumas acotadas de elementos de una lista 101

tr❛s♣✉❡st❛ ✿✿ ❬❬❛❪❪ ✲❃ ❬❬❛❪❪

tal que ✭tr❛s♣✉❡st❛ ♠✮ es la traspuesta de la matriz ♠. Por ejemplo,

tr❛s♣✉❡st❛ ❬❬✶✱✷✱✸❪✱❬✹✱✺✱✻❪❪ ❂❂ ❬❬✶✱✹❪✱❬✷✱✺❪✱❬✸✱✻❪❪

tr❛s♣✉❡st❛ ❬❬✶✱✹❪✱❬✷✱✺❪✱❬✸✱✻❪❪ ❂❂ ❬❬✶✱✷✱✸❪✱❬✹✱✺✱✻❪❪

Solución:

tr❛s♣✉❡st❛ ✿✿ ❬❬❛❪❪ ✲❃ ❬❬❛❪❪

tr❛s♣✉❡st❛ ❬❪ ❂ ❬❪

tr❛s♣✉❡st❛ ✭❬❪✿①ss✮ ❂ tr❛s♣✉❡st❛ ①ss

tr❛s♣✉❡st❛ ✭✭①✿①s✮✿①ss✮ ❂

✭①✿❬❤ ⑤ ✭❤✿❴✮ ❁✲ ①ss❪✮ ✿ tr❛s♣✉❡st❛ ✭①s ✿ ❬t ⑤ ✭❴✿t✮ ❁✲ ①ss❪✮

4.21. Números expresables como sumas acotadas de ele-mentos de una lista

Ejercicio 4.21.1. Definir la función

s✉♠❛s ✿✿ ■♥t ✲❃ ❬■♥t❪ ✲❃ ❬■♥t❪

tal que ✭s✉♠❛s ♥ ①s✮ es la lista de los números que se pueden obtener como suma de ♥, o menos,

elementos de ①s. Por ejemplo,

s✉♠❛s ✵ ❬✷✱✺❪ ❂❂ ❬✵❪

s✉♠❛s ✶ ❬✷✱✺❪ ❂❂ ❬✷✱✺✱✵❪

s✉♠❛s ✷ ❬✷✱✺❪ ❂❂ ❬✹✱✼✱✷✱✶✵✱✺✱✵❪

s✉♠❛s ✸ ❬✷✱✺❪ ❂❂ ❬✻✱✾✱✹✱✶✷✱✼✱✷✱✶✺✱✶✵✱✺✱✵❪

s✉♠❛s ✷ ❬✷✱✸✱✺❪ ❂❂ ❬✹✱✺✱✼✱✷✱✻✱✽✱✸✱✶✵✱✺✱✵❪

Solución:

s✉♠❛s ✿✿ ■♥t ✲❃ ❬■♥t❪ ✲❃ ❬■♥t❪

s✉♠❛s ✵ ❴ ❂ ❬✵❪

s✉♠❛s ❴ ❬❪ ❂ ❬✵❪

s✉♠❛s ♥ ✭①✿①s✮ ❂ ❬①✰② ⑤ ② ❁✲ s✉♠❛s ✭♥✲✶✮ ✭①✿①s✮❪ ✰✰ s✉♠❛s ♥ ①s

102 Capítulo 4. Definiciones por recursión y por comprensión

Capítulo 5

Funciones sobre cadenas

En este capítulo se presentan ejercicios sobre cadenas. Se corresponden con el tema5 de [1].

Contenido5.1 Suma de los dígitos de una cadena . . . . . . . . . . . . . . . . . . . . . 103

5.2 Capitalización de una cadena . . . . . . . . . . . . . . . . . . . . . . . . 105

5.3 Título con las reglas de mayúsculas iniciales . . . . . . . . . . . . . . . 106

5.4 Búsqueda en crucigramas . . . . . . . . . . . . . . . . . . . . . . . . . . 107

5.5 Posiciones de un carácter en una cadena . . . . . . . . . . . . . . . . . . 108

5.6 Decidir si una cadena es subcadena de otra . . . . . . . . . . . . . . . . 109

5.7 Codificación de mensajes . . . . . . . . . . . . . . . . . . . . . . . . . . 111

5.8 Números de ceros finales . . . . . . . . . . . . . . . . . . . . . . . . . . 115

Nota. En esta relación se usan las librerias ❈❤❛r y ◗✉✐❝❦❈❤❡❝❦.

✐♠♣♦rt ❉❛t❛✳❈❤❛r

✐♠♣♦rt ❚❡st✳◗✉✐❝❦❈❤❡❝❦

5.1. Suma de los dígitos de una cadena

Ejercicio 5.1.1. Definir, por comprensión, la función

s✉♠❛❉✐❣✐t♦s❈ ✿✿ ❙tr✐♥❣ ✲❃ ■♥t

tal que ✭s✉♠❛❉✐❣✐t♦s❈ ①s✮ es la suma de los dígitos de la cadena ①s. Por ejemplo,

103

104 Capítulo 5. Funciones sobre cadenas

s✉♠❛❉✐❣✐t♦s❈ ✧❙❊ ✷✹✸✶ ❳✧ ❂❂ ✶✵

Nota: Usar las funciones ✐s❉✐❣✐t y ❞✐❣✐t❚♦■♥t.

Solución:

s✉♠❛❉✐❣✐t♦s❈ ✿✿ ❙tr✐♥❣ ✲❃ ■♥t

s✉♠❛❉✐❣✐t♦s❈ ①s ❂ s✉♠ ❬❞✐❣✐t❚♦■♥t ① ⑤ ① ❁✲ ①s✱ ✐s❉✐❣✐t ①❪

Ejercicio 5.1.2. Definir, por recursión, la función

s✉♠❛❉✐❣✐t♦s❘ ✿✿ ❙tr✐♥❣ ✲❃ ■♥t

tal que ✭s✉♠❛❉✐❣✐t♦s❘ ①s✮ es la suma de los dígitos de la cadena ①s. Por ejemplo,

s✉♠❛❉✐❣✐t♦s❘ ✧❙❊ ✷✹✸✶ ❳✧ ❂❂ ✶✵

Nota: Usar las funciones ✐s❉✐❣✐t y ❞✐❣✐t❚♦■♥t.

Solución:

s✉♠❛❉✐❣✐t♦s❘ ✿✿ ❙tr✐♥❣ ✲❃ ■♥t

s✉♠❛❉✐❣✐t♦s❘ ❬❪ ❂ ✵

s✉♠❛❉✐❣✐t♦s❘ ✭①✿①s✮

⑤ ✐s❉✐❣✐t ① ❂ ❞✐❣✐t❚♦■♥t ① ✰ s✉♠❛❉✐❣✐t♦s❘ ①s

⑤ ♦t❤❡r✇✐s❡ ❂ s✉♠❛❉✐❣✐t♦s❘ ①s

Ejercicio 5.1.3. Comprobar con QuickCheck que ambas definiciones son equivalentes.

Solución: La propiedad es

♣r♦♣❴s✉♠❛❉✐❣✐t♦s ✿✿ ❙tr✐♥❣ ✲❃ ❇♦♦❧

♣r♦♣❴s✉♠❛❉✐❣✐t♦s ①s ❂

s✉♠❛❉✐❣✐t♦s❈ ①s ❂❂ s✉♠❛❉✐❣✐t♦s❘ ①s

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴s✉♠❛❉✐❣✐t♦s

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

5.2. Capitalización de una cadena 105

5.2. Capitalización de una cadena

Ejercicio 5.2.1. Definir, por comprensión, la función

♠❛②✉s❝✉❧❛■♥✐❝✐❛❧ ✿✿ ❙tr✐♥❣ ✲❃ ❙tr✐♥❣

tal que ✭♠❛②✉s❝✉❧❛■♥✐❝✐❛❧ ①s✮ es la palabra ①s con la letra inicial en mayúscula y las restan-

tes en minúsculas. Por ejemplo,

♠❛②✉s❝✉❧❛■♥✐❝✐❛❧ ✧s❊✈✐▲▲❛✧ ❂❂ ✧❙❡✈✐❧❧❛✧

Nota: Usar las funciones t♦▲♦✇❡ry t♦❯♣♣❡r.

Solución:

♠❛②✉s❝✉❧❛■♥✐❝✐❛❧ ✿✿ ❙tr✐♥❣ ✲❃ ❙tr✐♥❣

♠❛②✉s❝✉❧❛■♥✐❝✐❛❧ ❬❪ ❂ ❬❪

♠❛②✉s❝✉❧❛■♥✐❝✐❛❧ ✭①✿①s✮ ❂ t♦❯♣♣❡r ① ✿ ❬t♦▲♦✇❡r ① ⑤ ① ❁✲ ①s❪

Ejercicio 5.2.2. Definir, por recursión, la función

♠❛②✉s❝✉❧❛■♥✐❝✐❛❧❘ ✿✿ ❙tr✐♥❣ ✲❃ ❙tr✐♥❣

tal que ✭♠❛②✉s❝✉❧❛■♥✐❝✐❛❧❘ ①s✮ es la palabra ①s con la letra inicial en mayúscula y las res-

tantes en minúsculas. Por ejemplo,

♠❛②✉s❝✉❧❛■♥✐❝✐❛❧❘ ✧s❊✈✐▲▲❛✧ ❂❂ ✧❙❡✈✐❧❧❛✧

Solución:

♠❛②✉s❝✉❧❛■♥✐❝✐❛❧❘ ✿✿ ❙tr✐♥❣ ✲❃ ❙tr✐♥❣

♠❛②✉s❝✉❧❛■♥✐❝✐❛❧❘ ❬❪ ❂ ❬❪

♠❛②✉s❝✉❧❛■♥✐❝✐❛❧❘ ✭①✿①s✮ ❂ t♦❯♣♣❡r ① ✿ ❛✉① ①s

✇❤❡r❡ ❛✉① ✭①✿①s✮ ❂ t♦▲♦✇❡r ① ✿ ❛✉① ①s

❛✉① ❬❪ ❂ ❬❪

Ejercicio 5.2.3. Comprobar con QuickCheck que ambas definiciones son equivalentes.

Solución: La propiedad es

♣r♦♣❴♠❛②✉s❝✉❧❛■♥✐❝✐❛❧ ✿✿ ❙tr✐♥❣ ✲❃ ❇♦♦❧

♣r♦♣❴♠❛②✉s❝✉❧❛■♥✐❝✐❛❧ ①s ❂

♠❛②✉s❝✉❧❛■♥✐❝✐❛❧ ①s ❂❂ ♠❛②✉s❝✉❧❛■♥✐❝✐❛❧❘ ①s

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴♠❛②✉s❝✉❧❛■♥✐❝✐❛❧

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

106 Capítulo 5. Funciones sobre cadenas

5.3. Título con las reglas de mayúsculas iniciales

Ejercicio 5.3.1. Se consideran las siguientes reglas de mayúsculas iniciales para los títulos:

la primera palabra comienza en mayúscula y

todas las palabras que tienen 4 letras como mínimo empiezan con mayúsculas.

Definir, por comprensión, la función

t✐t✉❧♦ ✿✿ ❬❙tr✐♥❣❪ ✲❃ ❬❙tr✐♥❣❪

tal que ✭t✐t✉❧♦ ♣s✮ es la lista de las palabras de ♣s con las reglas de mayúsculas iniciales de

los títulos. Por ejemplo,

❣❤❝✐❃ t✐t✉❧♦ ❬✧❡▲✧✱✧❛r❚❊✧✱✧❉❊✧✱✧▲❛✧✱✧♣r♦●r❛▼❛❝✐♦♥✧❪

❬✧❊❧✧✱✧❆rt❡✧✱✧❞❡✧✱✧❧❛✧✱✧Pr♦❣r❛♠❛❝✐♦♥✧❪

Solución:

t✐t✉❧♦ ✿✿ ❬❙tr✐♥❣❪ ✲❃ ❬❙tr✐♥❣❪

t✐t✉❧♦ ❬❪ ❂ ❬❪

t✐t✉❧♦ ✭♣✿♣s✮ ❂ ♠❛②✉s❝✉❧❛■♥✐❝✐❛❧ ♣ ✿ ❬tr❛♥s❢♦r♠❛ ♣ ⑤ ♣ ❁✲ ♣s❪

donde ✭tr❛♥s❢♦r♠❛ ♣✮ es la palabra ♣ con mayúscula inicial si su longitud es mayor oigual que 4 y es ♣ en minúscula en caso contrario.

tr❛♥s❢♦r♠❛ ✿✿ ❙tr✐♥❣ ✲❃ ❙tr✐♥❣

tr❛♥s❢♦r♠❛ ♣ ⑤ ❧❡♥❣t❤ ♣ ❃❂ ✹ ❂ ♠❛②✉s❝✉❧❛■♥✐❝✐❛❧ ♣

⑤ ♦t❤❡r✇✐s❡ ❂ ♠✐♥✉s❝✉❧❛ ♣

y ✭♠✐♥✉s❝✉❧❛ ①s✮ es la palabra ①s en minúscula.

♠✐♥✉s❝✉❧❛ ✿✿ ❙tr✐♥❣ ✲❃ ❙tr✐♥❣

♠✐♥✉s❝✉❧❛ ①s ❂ ❬t♦▲♦✇❡r ① ⑤ ① ❁✲ ①s❪

Ejercicio 5.3.2. Definir, por recursión, la función

t✐t✉❧♦❘ ✿✿ ❬❙tr✐♥❣❪ ✲❃ ❬❙tr✐♥❣❪

tal que ✭t✐t✉❧♦❘ ♣s✮ es la lista de las palabras de ♣s con las reglas de mayúsculas iniciales de

los títulos. Por ejemplo,

❣❤❝✐❃ t✐t✉❧♦❘ ❬✧❡▲✧✱✧❛r❚❊✧✱✧❉❊✧✱✧▲❛✧✱✧♣r♦●r❛▼❛❝✐♦♥✧❪

❬✧❊❧✧✱✧❆rt❡✧✱✧❞❡✧✱✧❧❛✧✱✧Pr♦❣r❛♠❛❝✐♦♥✧❪

5.4. Búsqueda en crucigramas 107

Solución:

t✐t✉❧♦❘ ✿✿ ❬❙tr✐♥❣❪ ✲❃ ❬❙tr✐♥❣❪

t✐t✉❧♦❘ ❬❪ ❂ ❬❪

t✐t✉❧♦❘ ✭♣✿♣s✮ ❂ ♠❛②✉s❝✉❧❛■♥✐❝✐❛❧ ♣ ✿ t✐t✉❧♦❘❆✉① ♣s

✇❤❡r❡ t✐t✉❧♦❘❆✉① ❬❪ ❂ ❬❪

t✐t✉❧♦❘❆✉① ✭♣✿♣s✮ ❂ tr❛♥s❢♦r♠❛ ♣ ✿ t✐t✉❧♦❘❆✉① ♣s

Ejercicio 5.3.3. Comprobar con QuickCheck que ambas definiciones son equivalentes.

Solución: La propiedad es

♣r♦♣❴t✐t✉❧♦ ✿✿ ❬❙tr✐♥❣❪ ✲❃ ❇♦♦❧

♣r♦♣❴t✐t✉❧♦ ①s ❂ t✐t✉❧♦ ①s ❂❂ t✐t✉❧♦❘ ①s

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴t✐t✉❧♦

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

5.4. Búsqueda en crucigramas

Ejercicio 5.4.1. Definir, por comprensión, la función

❜✉s❝❛❈r✉❝✐❣r❛♠❛ ✿✿ ❈❤❛r ✲❃ ■♥t ✲❃ ■♥t ✲❃ ❬❙tr✐♥❣❪ ✲❃ ❬❙tr✐♥❣❪

tal que ✭❜✉s❝❛❈r✉❝✐❣r❛♠❛ ❧ ♣♦s ❧♦♥ ♣s✮ es la lista de las palabras de la lista de palabras ♣s

que tienen longitud ❧♦♥ y poseen la letra ❧ en la posición ♣♦s (comenzando en 0). Por ejemplo,

❣❤❝✐❃ ❜✉s❝❛❈r✉❝✐❣r❛♠❛ ✬❝✬ ✶ ✼ ❬✧♦❝❛s♦✧✱ ✧❛❝❛❜❛❞♦✧✱ ✧♦❝✉♣❛❞♦✧❪

❬✧❛❝❛❜❛❞♦✧✱✧♦❝✉♣❛❞♦✧❪

Solución:

❜✉s❝❛❈r✉❝✐❣r❛♠❛ ✿✿ ❈❤❛r ✲❃ ■♥t ✲❃ ■♥t ✲❃ ❬❙tr✐♥❣❪ ✲❃ ❬❙tr✐♥❣❪

❜✉s❝❛❈r✉❝✐❣r❛♠❛ ❧ ♣♦s ❧♦♥ ♣s ❂

❬♣ ⑤ ♣ ❁✲ ♣s✱

❧❡♥❣t❤ ♣ ❂❂ ❧♦♥✱

✵ ❁❂ ♣♦s✱ ♣♦s ❁ ❧❡♥❣t❤ ♣✱

♣ ✦✦ ♣♦s ❂❂ ❧❪

Ejercicio 5.4.2. Definir, por recursión, la función

❜✉s❝❛❈r✉❝✐❣r❛♠❛❘ ✿✿ ❈❤❛r ✲❃ ■♥t ✲❃ ■♥t ✲❃ ❬❙tr✐♥❣❪ ✲❃ ❬❙tr✐♥❣❪

108 Capítulo 5. Funciones sobre cadenas

tal que ✭❜✉s❝❛❈r✉❝✐❣r❛♠❛❘ ❧ ♣♦s ❧♦♥ ♣s✮ es la lista de las palabras de la lista de palabras

♣s que tienen longitud ❧♦♥ y posen la letra ❧ en la posición ♣♦s (comenzando en 0). Por ejemplo,

❣❤❝✐❃ ❜✉s❝❛❈r✉❝✐❣r❛♠❛❘ ✬❝✬ ✶ ✼ ❬✧♦❝❛s♦✧✱ ✧❛❝❛❜❛❞♦✧✱ ✧♦❝✉♣❛❞♦✧❪

❬✧❛❝❛❜❛❞♦✧✱✧♦❝✉♣❛❞♦✧❪

Solución:

❜✉s❝❛❈r✉❝✐❣r❛♠❛❘ ✿✿ ❈❤❛r ✲❃ ■♥t ✲❃ ■♥t ✲❃ ❬❙tr✐♥❣❪ ✲❃ ❬❙tr✐♥❣❪

❜✉s❝❛❈r✉❝✐❣r❛♠❛❘ ❧❡tr❛ ♣♦s ❧♦♥ ❬❪ ❂ ❬❪

❜✉s❝❛❈r✉❝✐❣r❛♠❛❘ ❧❡tr❛ ♣♦s ❧♦♥ ✭♣✿♣s✮

⑤ ❧❡♥❣t❤ ♣ ❂❂ ❧♦♥ ✫✫ ✵ ❁❂ ♣♦s ✫✫ ♣♦s ❁ ❧❡♥❣t❤ ♣ ✫✫ ♣ ✦✦ ♣♦s ❂❂ ❧❡tr❛

❂ ♣ ✿ ❜✉s❝❛❈r✉❝✐❣r❛♠❛❘ ❧❡tr❛ ♣♦s ❧♦♥ ♣s

⑤ ♦t❤❡r✇✐s❡

❂ ❜✉s❝❛❈r✉❝✐❣r❛♠❛❘ ❧❡tr❛ ♣♦s ❧♦♥ ♣s

Ejercicio 5.4.3. Comprobar con QuickCheck que ambas definiciones son equivalentes.

Solución: La propiedad es

♣r♦♣❴❜✉s❝❛❈r✉❝✐❣r❛♠❛ ✿✿ ❈❤❛r ✲❃ ■♥t ✲❃ ■♥t ✲❃ ❬❙tr✐♥❣❪ ✲❃ ❇♦♦❧

♣r♦♣❴❜✉s❝❛❈r✉❝✐❣r❛♠❛ ❧❡tr❛ ♣♦s ❧♦♥ ♣s ❂

❜✉s❝❛❈r✉❝✐❣r❛♠❛ ❧❡tr❛ ♣♦s ❧♦♥ ♣s ❂❂ ❜✉s❝❛❈r✉❝✐❣r❛♠❛❘ ❧❡tr❛ ♣♦s ❧♦♥ ♣s

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴❜✉s❝❛❈r✉❝✐❣r❛♠❛

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

5.5. Posiciones de un carácter en una cadena

Ejercicio 5.5.1. Definir, por comprensión, la función

♣♦s✐❝✐♦♥❡s ✿✿ ❙tr✐♥❣ ✲❃ ❈❤❛r ✲❃ ❬■♥t❪

tal que ✭♣♦s✐❝✐♦♥❡s ①s ②✮ es la lista de la posiciones del carácter ② en la cadena ①s. Por

ejemplo,

♣♦s✐❝✐♦♥❡s ✧❙❛❧❛♠❛♠❝❛✧ ✬❛✬ ❂❂ ❬✶✱✸✱✺✱✽❪

Solución:

♣♦s✐❝✐♦♥❡s ✿✿ ❙tr✐♥❣ ✲❃ ❈❤❛r ✲❃ ❬■♥t❪

♣♦s✐❝✐♦♥❡s ①s ② ❂ ❬♥ ⑤ ✭①✱♥✮ ❁✲ ③✐♣ ①s ❬✵✳✳❪✱ ① ❂❂ ②❪

5.6. Decidir si una cadena es subcadena de otra 109

Ejercicio 5.5.2. Definir, por recursión, la función

♣♦s✐❝✐♦♥❡s❘ ✿✿ ❙tr✐♥❣ ✲❃ ❈❤❛r ✲❃ ❬■♥t❪

tal que ✭♣♦s✐❝✐♦♥❡s❘ ①s ②✮ es la lista de la posiciones del carácter ② en la cadena ①s. Por

ejemplo,

♣♦s✐❝✐♦♥❡s❘ ✧❙❛❧❛♠❛♠❝❛✧ ✬❛✬ ❂❂ ❬✶✱✸✱✺✱✽❪

Solución:

♣♦s✐❝✐♦♥❡s❘ ✿✿ ❙tr✐♥❣ ✲❃ ❈❤❛r ✲❃ ❬■♥t❪

♣♦s✐❝✐♦♥❡s❘ ①s ② ❂ ♣♦s✐❝✐♦♥❡s❆✉① ①s ② ✵

✇❤❡r❡

♣♦s✐❝✐♦♥❡s❆✉① ❬❪ ② ♥ ❂ ❬❪

♣♦s✐❝✐♦♥❡s❆✉① ✭①✿①s✮ ② ♥ ⑤ ① ❂❂ ② ❂ ♥ ✿ ♣♦s✐❝✐♦♥❡s❆✉① ①s ② ✭♥✰✶✮

⑤ ♦t❤❡r✇✐s❡ ❂ ♣♦s✐❝✐♦♥❡s❆✉① ①s ② ✭♥✰✶✮

Ejercicio 5.5.3. Comprobar con QuickCheck que ambas definiciones son equivalentes.

Solución: La propiedad es

♣r♦♣❴♣♦s✐❝✐♦♥❡s ✿✿ ❙tr✐♥❣ ✲❃ ❈❤❛r ✲❃ ❇♦♦❧

♣r♦♣❴♣♦s✐❝✐♦♥❡s ①s ② ❂

♣♦s✐❝✐♦♥❡s ①s ② ❂❂ ♣♦s✐❝✐♦♥❡s❘ ①s ②

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴♣♦s✐❝✐♦♥❡s

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

5.6. Decidir si una cadena es subcadena de otra

Ejercicio 5.6.1. Definir, por recursión, la función

❝♦♥t✐❡♥❡❘ ✿✿ ❙tr✐♥❣ ✲❃ ❙tr✐♥❣ ✲❃ ❇♦♦❧

tal que ✭❝♦♥t✐❡♥❡❘ ①s ②s✮ se verifica si ②s es una subcadena de ①s. Por ejemplo,

❝♦♥t✐❡♥❡❘ ✧❡s❝❛s❛♠❡♥t❡✧ ✧❝❛s❛✧ ❂❂ ❚r✉❡

❝♦♥t✐❡♥❡❘ ✧❡s❝❛s❛♠❡♥t❡✧ ✧❝❛♥t❡✧ ❂❂ ❋❛❧s❡

❝♦♥t✐❡♥❡❘ ✧✧ ✧✧ ❂❂ ❚r✉❡

Nota: Se puede usar la predefinida ✭✐sPr❡❢✐①❖❢ ②s ①s✮ que se verifica si ②s es un prefijo de

①s.

110 Capítulo 5. Funciones sobre cadenas

Solución:

❝♦♥t✐❡♥❡❘ ✿✿ ❙tr✐♥❣ ✲❃ ❙tr✐♥❣ ✲❃ ❇♦♦❧

❝♦♥t✐❡♥❡❘ ❴ ❬❪ ❂ ❚r✉❡

❝♦♥t✐❡♥❡❘ ❬❪ ②s ❂ ❋❛❧s❡

❝♦♥t✐❡♥❡❘ ①s ②s ❂ ✐sPr❡❢✐①❖❢ ②s ①s ⑤⑤ ❝♦♥t✐❡♥❡❘ ✭t❛✐❧ ①s✮ ②s

Ejercicio 5.6.2. Definir, por comprensión, la función

❝♦♥t✐❡♥❡ ✿✿ ❙tr✐♥❣ ✲❃ ❙tr✐♥❣ ✲❃ ❇♦♦❧

tal que ✭❝♦♥t✐❡♥❡ ①s ②s✮ se verifica si ②s es una subcadena de ①s. Por ejemplo,

❝♦♥t✐❡♥❡ ✧❡s❝❛s❛♠❡♥t❡✧ ✧❝❛s❛✧ ❂❂ ❚r✉❡

❝♦♥t✐❡♥❡ ✧❡s❝❛s❛♠❡♥t❡✧ ✧❝❛♥t❡✧ ❂❂ ❋❛❧s❡

❝♦♥t✐❡♥❡ ✧❝❛s❛❞♦ ② ❝❛s❛❞❛✧ ✧❝❛s❛✧ ❂❂ ❚r✉❡

❝♦♥t✐❡♥❡ ✧✧ ✧✧ ❂❂ ❚r✉❡

Nota: Se puede usar la predefinida ✭✐sPr❡❢✐①❖❢ ②s ①s✮ que se verifica si ②s es un prefijo de

①s.

Solución:

❝♦♥t✐❡♥❡ ✿✿ ❙tr✐♥❣ ✲❃ ❙tr✐♥❣ ✲❃ ❇♦♦❧

❝♦♥t✐❡♥❡ ①s ②s ❂ s✉❢✐❥♦s❈♦♠❡♥③❛♥❞♦❈♦♥ ①s ②s ✴❂ ❬❪

donde ✭s✉❢✐❥♦s❈♦♠❡♥③❛♥❞♦❈♦♥ ①s ②s✮ es la lista de los sufijos de ①s que comienzancon ②s. Por ejemplo,

s✉❢✐❥♦s❈♦♠❡♥③❛♥❞♦❈♦♥ ✧❛❜❛❝❜❛❞✧ ✧❜❛✧ ❂❂ ❬✧❜❛❝❜❛❞✧✱✧❜❛❞✧❪

s✉❢✐❥♦s❈♦♠❡♥③❛♥❞♦❈♦♥ ✿✿ ❙tr✐♥❣ ✲❃ ❙tr✐♥❣ ✲❃ ❬❙tr✐♥❣❪

s✉❢✐❥♦s❈♦♠❡♥③❛♥❞♦❈♦♥ ①s ②s ❂ ❬① ⑤ ① ❁✲ s✉❢✐❥♦s ①s✱ ✐sPr❡❢✐①❖❢ ②s ①❪

y ✭s✉❢✐❥♦s ①s✮ es la lista de sufijos de ①s. Por ejemplo,

s✉❢✐❥♦s ✧❛❜❝✧ ❂❂ ❬✧❛❜❝✧✱✧❜❝✧✱✧❝✧✱✧✧❪

s✉❢✐❥♦s ✿✿ ❙tr✐♥❣ ✲❃ ❬❙tr✐♥❣❪

s✉❢✐❥♦s ①s ❂ ❬❞r♦♣ ✐ ①s ⑤ ✐ ❁✲ ❬✵✳✳❧❡♥❣t❤ ①s❪❪

Ejercicio 5.6.3. Comprobar con QuickCheck que ambas definiciones son equivalentes.

Solución: La propiedad es

5.7. Codificación de mensajes 111

♣r♦♣❴❝♦♥t✐❡♥❡ ✿✿ ❙tr✐♥❣ ✲❃ ❙tr✐♥❣ ✲❃ ❇♦♦❧

♣r♦♣❴❝♦♥t✐❡♥❡ ①s ②s ❂

❝♦♥t✐❡♥❡❘ ①s ②s ❂❂ ❝♦♥t✐❡♥❡ ①s ②s

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴❝♦♥t✐❡♥❡

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

5.7. Codificación de mensajes

Se desea definir una función que codifique mensajes tales como

❡r❡s ❧♦ q✉❡ ♣✐❡♥s❛s

del siguiente modo:

(a) se separa la cadena en la lista de sus palabras:

❬✧❡r❡s✧✱✧❧♦✧✱✧q✉❡✧✱✧♣✐❡♥s❛s✧❪

(b) se cuenta las letras de cada palabra:

❬✹✱✷✱✸✱✼❪

(c) se une todas las palabras:

✧❡r❡s❧♦q✉❡♣✐❡♥s❛s✧

(d) se reagrupa las letras de 4 en 4, dejando el último grupo con el resto:

❬✧❡r❡s✧✱✧❧♦q✉✧✱✧❡♣✐❡✧✱✧♥s❛s✧❪

(e) se inverte cada palabra:

❬✧s❡r❡✧✱✧✉q♦❧✧✱✧❡✐♣❡✧✱✧s❛s♥✧❪

(f) se une todas las palabras:

✧s❡r❡✉q♦❧❡✐♣❡s❛s♥✧

(g) se reagrupan tal como indica la inversa de la lista del apartado (b):

❬✧s❡r❡✉q♦✧✱✧❧❡✐✧✱✧♣❡✧✱✧s❛s♥✧❪

(h) se crea una frase con las palabras anteriores separadas por un espacio en blanco

112 Capítulo 5. Funciones sobre cadenas

✧s❡r❡✉q♦ ❧❡✐ ♣❡ s❛s♥✧

obteniendo así el mensaje codificado.

En los distintos apartados de esta sección se definirá el anterior proceso de codifica-ción.

Ejercicio 5.7.1. Definir la función

❞✐✈✐❞❡ ✿✿ ✭❛ ✲❃ ❇♦♦❧✮ ✲❃ ❬❛❪ ✲❃ ✭❬❛❪✱ ❬❛❪✮

tal que ✭❞✐✈✐❞❡ ♣ ①s✮ es el par ✭②s✱③s✮ donde ②s es el mayor prefijo de ①s cuyos elementos

cumplen ♣ y ③s es la lista de los restantes elementos de ①s. Por ejemplo,

❞✐✈✐❞❡ ✭❁ ✸✮ ❬✶✱✷✱✸✱✹✱✶✱✷✱✸✱✹❪ ❂❂ ✭❬✶✱✷❪✱❬✸✱✹✱✶✱✷✱✸✱✹❪✮

❞✐✈✐❞❡ ✭❁ ✾✮ ❬✶✱✷✱✸❪ ❂❂ ✭❬✶✱✷✱✸❪✱❬❪✮

❞✐✈✐❞❡ ✭❁ ✵✮ ❬✶✱✷✱✸❪ ❂❂ ✭❬❪✱❬✶✱✷✱✸❪✮

Solución:

❞✐✈✐❞❡ ✿✿ ✭❛ ✲❃ ❇♦♦❧✮ ✲❃ ❬❛❪ ✲❃ ✭❬❛❪✱ ❬❛❪✮

❞✐✈✐❞❡ ♣ ①s ❂ ✭t❛❦❡❲❤✐❧❡ ♣ ①s✱ ❞r♦♣❲❤✐❧❡ ♣ ①s✮

Es equivalente a la predefinida s♣❛♥

❞✐✈✐❞❡✬ ✿✿ ✭❛ ✲❃ ❇♦♦❧✮ ✲❃ ❬❛❪ ✲❃ ✭❬❛❪✱ ❬❛❪✮

❞✐✈✐❞❡✬ ❂ s♣❛♥

Ejercicio 5.7.2. Definir la función

♣❛❧❛❜r❛s ✿✿ ❙tr✐♥❣ ✲❃ ❬❙tr✐♥❣❪

tal que ✭♣❛❧❛❜r❛s ❝s✮ es la lista de las palabras de la cadena ❝s. Por ejemplo,

♣❛❧❛❜r❛s ✧❡r❡s ❧♦ q✉❡ ♣✐❡♥s❛s✧ ❂❂ ❬✧❡r❡s✧✱✧❧♦✧✱✧q✉❡✧✱✧♣✐❡♥s❛s✧❪

Solución:

♣❛❧❛❜r❛s ✿✿ ❙tr✐♥❣ ✲❃ ❬❙tr✐♥❣❪

♣❛❧❛❜r❛s ❬❪ ❂ ❬❪

♣❛❧❛❜r❛s ❝s ❂ ❝s✶ ✿ ♣❛❧❛❜r❛s ❝s✷

✇❤❡r❡ ❝s✬ ❂ ❞r♦♣❲❤✐❧❡ ✭❂❂✬ ✬✮ ❝s

✭❝s✶✱❝s✷✮ ❂ ❞✐✈✐❞❡ ✭✴❂✬ ✬✮ ❝s✬

Es equivalente a la predefinida ✇♦r❞s

5.7. Codificación de mensajes 113

♣❛❧❛❜r❛s✬ ✿✿ ❙tr✐♥❣ ✲❃ ❬❙tr✐♥❣❪

♣❛❧❛❜r❛s✬ ❂ ✇♦r❞s

Ejercicio 5.7.3. Definir la función

❧♦♥❣✐t✉❞❡s ✿✿ ❬❬❛❪❪ ✲❃ ❬■♥t❪

tal que ✭❧♦♥❣✐t✉❞❡s ①ss✮ es la lista de las longitudes de los elementos ①ss. Por ejemplo,

❧♦♥❣✐t✉❞❡s ❬✧❡r❡s✧✱✧❧♦✧✱✧q✉❡✧✱✧♣✐❡♥s❛s✧❪ ❂❂ ❬✹✱✷✱✸✱✼❪

Solución:

❧♦♥❣✐t✉❞❡s ✿✿ ❬❬❛❪❪ ✲❃ ❬■♥t❪

❧♦♥❣✐t✉❞❡s ❂ ♠❛♣ ❧❡♥❣t❤

Ejercicio 5.7.4. Definir la función

✉♥❡ ✿✿ ❬❬❛❪❪ ✲❃ ❬❛❪

tal que ✭✉♥❡ ①ss✮ es la lista obtenida uniendo los elementos de ①ss. Por ejemplo,

✉♥❡ ❬✧❡r❡s✧✱✧❧♦✧✱✧q✉❡✧✱✧♣✐❡♥s❛s✧❪ ❂❂ ✧❡r❡s❧♦q✉❡♣✐❡♥s❛s✧

Solución:

✉♥❡ ✿✿ ❬❬❛❪❪ ✲❃ ❬❛❪

✉♥❡ ❂ ❝♦♥❝❛t

Ejercicio 5.7.5. Definir la función

r❡❛❣r✉♣❛ ✿✿ ❬❛❪ ✲❃ ❬❬❛❪❪

tal que ✭r❡❛❣r✉♣❛ ①s✮ es la lista obtenida agrupando los elementos de ①s de 4 en 4. Por ejemplo,

r❡❛❣r✉♣❛ ✧❡r❡s❧♦q✉❡♣✐❡♥s❛s✧ ❂❂ ❬✧❡r❡s✧✱✧❧♦q✉✧✱✧❡♣✐❡✧✱✧♥s❛s✧❪

r❡❛❣r✉♣❛ ✧❡r❡st✉✧ ❂❂ ❬✧❡r❡s✧✱✧t✉✧❪

Solución:

r❡❛❣r✉♣❛ ✿✿ ❬❛❪ ✲❃ ❬❬❛❪❪

r❡❛❣r✉♣❛ ❬❪ ❂ ❬❪

r❡❛❣r✉♣❛ ①s ❂ t❛❦❡ ✹ ①s ✿ r❡❛❣r✉♣❛ ✭❞r♦♣ ✹ ①s✮

Ejercicio 5.7.6. Definir la función

114 Capítulo 5. Funciones sobre cadenas

✐♥✈❡rs❛s ✿✿ ❬❬❛❪❪ ✲❃ ❬❬❛❪❪

tal que ✭✐♥✈❡rs❛s ①ss✮ es la lista obtenida invirtiendo los elementos de ①ss. Por ejemplo,

❣❤❝✐❃ ✐♥✈❡rs❛s ❬✧❡r❡s✧✱✧❧♦q✉✧✱✧❡♣✐❡✧✱✧♥s❛s✧❪

❬✧s❡r❡✧✱✧✉q♦❧✧✱✧❡✐♣❡✧✱✧s❛s♥✧❪

❣❤❝✐❃ ✉♥❡ ✭✐♥✈❡rs❛s ❬✧❡r❡s✧✱✧❧♦q✉✧✱✧❡♣✐❡✧✱✧♥s❛s✧❪✮

✧s❡r❡✉q♦❧❡✐♣❡s❛s♥✧

Solución:

✐♥✈❡rs❛s ✿✿ ❬❬❛❪❪ ✲❃ ❬❬❛❪❪

✐♥✈❡rs❛s ❂ ♠❛♣ r❡✈❡rs❡

Ejercicio 5.7.7. Definir la función

❛❣r✉♣❛ ✿✿ ❬❛❪ ✲❃ ❬■♥t❪ ✲❃ ❬❬❛❪❪

tal que ✭❛❣r✉♣❛ ①s ♥s✮ es la lista obtenida agrupando los elementos de ①s según las longitudes

indicadas en ♥s. Por ejemplo,

❣❤❝✐❃ ❛❣r✉♣❛ ✧s❡r❡✉q♦❧❡✐♣❡s❛s♥✧ ❬✼✱✸✱✷✱✹❪

❬✧s❡r❡✉q♦✧✱✧❧❡✐✧✱✧♣❡✧✱✧s❛s♥✧❪

Solución:

❛❣r✉♣❛ ✿✿ ❬❛❪ ✲❃ ❬■♥t❪ ✲❃ ❬❬❛❪❪

❛❣r✉♣❛ ❬❪ ❴ ❂ ❬❪

❛❣r✉♣❛ ①s ✭♥✿♥s✮ ❂ ✭t❛❦❡ ♥ ①s✮ ✿ ✭❛❣r✉♣❛ ✭❞r♦♣ ♥ ①s✮ ♥s✮

Ejercicio 5.7.8. Definir la función

❢r❛s❡ ✿✿ ❬❙tr✐♥❣❪ ✲❃ ❙tr✐♥❣

tal que ✭❢r❛s❡ ①s✮ es la frase obtenida las palabras de ①s dejando un espacio en blanco entre

ellas. Por ejemplo,

❢r❛s❡ ❬✧s❡r❡✉q♦✧✱✧❧❡✐✧✱✧♣❡✧✱✧s❛s♥✧❪ ❂❂ ✧s❡r❡✉q♦ ❧❡✐ ♣❡ s❛s♥✧

Solución:

❢r❛s❡ ✿✿ ❬❙tr✐♥❣❪ ✲❃ ❙tr✐♥❣

❢r❛s❡ ❬①❪ ❂ ①

❢r❛s❡ ✭①✿①s✮ ❂ ① ✰✰ ✧ ✧ ✰✰ ❢r❛s❡ ①s

❢r❛s❡ ❬❪ ❂ ❬❪

5.8. Números de ceros finales 115

La función frase es equivalente a ✉♥✇♦r❞s.

❢r❛s❡✬ ✿✿ ❬❙tr✐♥❣❪ ✲❃ ❙tr✐♥❣

❢r❛s❡✬ ❂ ✉♥✇♦r❞s

Ejercicio 5.7.9. Definir la función

❝❧❛✈❡ ✿✿ ❙tr✐♥❣ ✲❃ ❙tr✐♥❣

que realice el proceso completo. Por ejemplo,

❝❧❛✈❡ ✧❡r❡s ❧♦ q✉❡ ♣✐❡♥s❛s✧ ❂❂ ✧s❡r❡✉q♦ ❧❡✐ ♣❡ s❛s♥✧

Solución:

❝❧❛✈❡ ✿✿ ❙tr✐♥❣ ✲❃ ❙tr✐♥❣

❝❧❛✈❡ ①ss ❂ ❢r❛s❡ ✭❛❣r✉♣❛ ✭✉♥❡ ✭✐♥✈❡rs❛s ✭r❡❛❣r✉♣❛ ✭✉♥❡ ♣s✮✮✮✮

✭r❡✈❡rs❡ ✭❧♦♥❣✐t✉❞❡s ♣s✮✮✮

✇❤❡r❡ ♣s ❂ ♣❛❧❛❜r❛s ①ss

5.8. Números de ceros finales

Ejercicio 5.8.1. Definir, por recursión, la función

❝❡r♦s ✿✿ ■♥t ✲❃ ■♥t

tal que ✭❝❡r♦s ♥✮ es el número de ceros en los que termina el número ♥. Por ejemplo,

❝❡r♦s ✸✵✺✵✵ ❂❂ ✷

❝❡r♦s ✸✵✺✵✶ ❂❂ ✵

Solución:

❝❡r♦s ✿✿ ■♥t ✲❃ ■♥t

❝❡r♦s ♥ ⑤ ♥ ❵r❡♠❵ ✶✵ ❂❂ ✵ ❂ ✶ ✰ ❝❡r♦s ✭♥ ❵❞✐✈❵✶✵✮

⑤ ♦t❤❡r✇✐s❡ ❂ ✵

Ejercicio 5.8.2. Definir, sin recursión, la función

❝❡r♦s✬ ✿✿ ■♥t ✲❃ ■♥t

tal que ✭❝❡r♦s✬ ♥✮ es el número de ceros en los que termina el número ♥. Por ejemplo,

❝❡r♦s✬ ✸✵✺✵✵ ❂❂ ✷

❝❡r♦s✬ ✸✵✺✵✶ ❂❂ ✵

Solución:

❝❡r♦s✬ ✿✿ ■♥t ✲❃ ■♥t

❝❡r♦s✬ ♥ ❂ ❧❡♥❣t❤ ✭t❛❦❡❲❤✐❧❡ ✭❂❂✬✵✬✮ ✭r❡✈❡rs❡ ✭s❤♦✇ ♥✮✮✮

116 Capítulo 5. Funciones sobre cadenas

Capítulo 6

Funciones de orden superior

En este capítulo se presentan ejercicios para definir funciones de orden superior. Secorresponde con el tema 7 de [1].

Contenido6.1 Segmento inicial verificando una propiedad . . . . . . . . . . . . . . . 118

6.2 Complementario del segmento inicial verificando una propiedad . . . 118

6.3 Concatenación de una lista de listas . . . . . . . . . . . . . . . . . . . . 119

6.4 División de una lista numérica según su media . . . . . . . . . . . . . . 119

6.5 Segmentos cuyos elementos verifican una propiedad . . . . . . . . . . 122

6.6 Listas con elementos consecutivos relacionados . . . . . . . . . . . . . 122

6.7 Agrupamiento de elementos de una lista de listas . . . . . . . . . . . . 123

6.8 Números con dígitos pares . . . . . . . . . . . . . . . . . . . . . . . . . 123

6.9 Lista de los valores de los elementos que cumplen una propiedad . . . 125

6.10 Máximo elemento de una lista . . . . . . . . . . . . . . . . . . . . . . . 126

6.11 Mínimo elemento de una lista . . . . . . . . . . . . . . . . . . . . . . . . 127

6.12 Inversa de una lista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127

6.13 Número correspondiente a la lista de sus cifras . . . . . . . . . . . . . . 130

6.14 Suma de valores de una aplicación a una lista . . . . . . . . . . . . . . 131

6.15 Redefinición de la función ♠❛♣ usando ❢♦❧❞r . . . . . . . . . . . . . . . 132

6.16 Redefinición de la función ❢✐❧t❡r usando ❢♦❧❞r . . . . . . . . . . . . . 132

6.17 Suma de las sumas de las listas de una lista de listas . . . . . . . . . . . 133

6.18 Lista obtenida borrando las ocurrencias de un elemento . . . . . . . . 134

117

118 Capítulo 6. Funciones de orden superior

6.19 Diferencia de dos listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135

6.20 Producto de los números que verifican una propiedad . . . . . . . . . 136

6.21 Las cabezas y las colas de una lista . . . . . . . . . . . . . . . . . . . . . 137

6.1. Segmento inicial verificando una propiedad

Ejercicio 6.1.1. Redefinir por recursión la función

t❛❦❡❲❤✐❧❡ ✿✿ ✭❛ ✲❃ ❇♦♦❧✮ ✲❃ ❬❛❪ ✲❃ ❬❛❪

tal que ✭t❛❦❡❲❤✐❧❡ ♣ ①s✮ es la lista de los elemento de ①s hasta el primero que no cumple la

propiedad ♣. Por ejemplo,

t❛❦❡❲❤✐❧❡ ✭❁✼✮ ❬✷✱✸✱✾✱✹✱✺❪ ❂❂ ❬✷✱✸❪

Solución:

t❛❦❡❲❤✐❧❡✬ ✿✿ ✭❛ ✲❃ ❇♦♦❧✮ ✲❃ ❬❛❪ ✲❃ ❬❛❪

t❛❦❡❲❤✐❧❡✬ ❴ ❬❪ ❂ ❬❪

t❛❦❡❲❤✐❧❡✬ ♣ ✭①✿①s✮

⑤ ♣ ① ❂ ① ✿ t❛❦❡❲❤✐❧❡✬ ♣ ①s

⑤ ♦t❤❡r✇✐s❡ ❂ ❬❪

6.2. Complementario del segmento inicial verificando unapropiedad

Ejercicio 6.2.1. Redefinir por recursión la función

❞r♦♣❲❤✐❧❡ ✿✿ ✭❛ ✲❃ ❇♦♦❧✮ ✲❃ ❬❛❪ ✲❃ ❬❛❪

tal que ✭❞r♦♣❲❤✐❧❡ ♣ ①s✮ es la lista obtenida eliminando los elemento de ①s hasta el primero

que cumple la propiedad ♣. Por ejemplo,

❞r♦♣❲❤✐❧❡ ✭❁✼✮ ❬✷✱✸✱✾✱✹✱✺❪ ❂❃ ❬✾✱✹✱✺❪

Solución:

❞r♦♣❲❤✐❧❡✬ ✿✿ ✭❛ ✲❃ ❇♦♦❧✮ ✲❃ ❬❛❪ ✲❃ ❬❛❪

❞r♦♣❲❤✐❧❡✬ ❴ ❬❪ ❂ ❬❪

❞r♦♣❲❤✐❧❡✬ ♣ ✭①✿①s✮

⑤ ♣ ① ❂ ❞r♦♣❲❤✐❧❡✬ ♣ ①s

⑤ ♦t❤❡r✇✐s❡ ❂ ①✿①s

6.3. Concatenación de una lista de listas 119

6.3. Concatenación de una lista de listas

Ejercicio 6.3.1. Redefinir, por recursión, la función ❝♦♥❝❛t. Por ejemplo,

❝♦♥❝❛t❘ ❬❬✶✱✸❪✱❬✷✱✹✱✻❪✱❬✶✱✾❪❪ ❂❂ ❬✶✱✸✱✷✱✹✱✻✱✶✱✾❪

Solución:

❝♦♥❝❛t❘ ✿✿ ❬❬❛❪❪ ✲❃ ❬❛❪

❝♦♥❝❛t❘ ❬❪ ❂ ❬❪

❝♦♥❝❛t❘ ✭①s✿①ss✮ ❂ ①s ✰✰ ❝♦♥❝❛t❘ ①ss

Ejercicio 6.3.2. Redefinir, usando ❢♦❧❞r, la función ❝♦♥❝❛t. Por ejemplo,

❝♦♥❝❛tP ❬❬✶✱✸❪✱❬✷✱✹✱✻❪✱❬✶✱✾❪❪ ❂❂ ❬✶✱✸✱✷✱✹✱✻✱✶✱✾❪

Solución:

❝♦♥❝❛tP ✿✿ ❬❬❛❪❪ ✲❃ ❬❛❪

❝♦♥❝❛tP ❂ ❢♦❧❞r ✭✰✰✮ ❬❪

6.4. División de una lista numérica según su media

Ejercicio 6.4.1. La función

❞✐✈✐❞❡▼❡❞✐❛ ✿✿ ❬❉♦✉❜❧❡❪ ✲❃ ✭❬❉♦✉❜❧❡❪✱❬❉♦✉❜❧❡❪✮

dada una lista numérica, ①s, calcula el par ✭②s✱③s✮, donde ②s contiene los elementos de ①s

estrictamente menores que la media, mientras que ③s contiene los elementos de ①s estrictamente

mayores que la media. Por ejemplo,

❞✐✈✐❞❡▼❡❞✐❛ ❬✻✱✼✱✷✱✽✱✻✱✸✱✹❪ ❂❂ ✭❬✷✳✵✱✸✳✵✱✹✳✵❪✱❬✻✳✵✱✼✳✵✱✽✳✵✱✻✳✵❪✮

❞✐✈✐❞❡▼❡❞✐❛ ❬✶✱✷✱✸❪ ❂❂ ✭❬✶✳✵❪✱❬✸✳✵❪✮

Definir la función ❞✐✈✐❞❡▼❡❞✐❛ por filtrado, comprensión y recursión.

Solución: La definición por filtrado es

❞✐✈✐❞❡▼❡❞✐❛❋ ✿✿ ❬❉♦✉❜❧❡❪ ✲❃ ✭❬❉♦✉❜❧❡❪✱❬❉♦✉❜❧❡❪✮

❞✐✈✐❞❡▼❡❞✐❛❋ ①s ❂ ✭❢✐❧t❡r ✭❁♠✮ ①s✱ ❢✐❧t❡r ✭❃♠✮ ①s✮

✇❤❡r❡ ♠ ❂ ♠❡❞✐❛ ①s

donde ✭♠❡❞✐❛ ①s✮ es la media de ①s. Por ejemplo,

120 Capítulo 6. Funciones de orden superior

♠❡❞✐❛ ❬✶✱✷✱✸❪ ❂❂ ✷✳✵

♠❡❞✐❛ ❬✶✱✲✷✱✸✳✺✱✹❪ ❂❂ ✶✳✻✷✺

♠❡❞✐❛ ✿✿ ❬❉♦✉❜❧❡❪ ✲❃ ❉♦✉❜❧❡

♠❡❞✐❛ ①s ❂ ✭s✉♠ ①s✮ ✴ ❢r♦♠■♥t❡❣r❛❧ ✭❧❡♥❣t❤ ①s✮

En la definición de ♠❡❞✐❛ se usa la función ❢r♦♠■♥t❡❣r❛❧ tal que ✭❢r♦♠■♥t❡❣r❛❧ ①✮ esel número real correspondiente al número entero ①.

La definición por comprensión es

❞✐✈✐❞❡▼❡❞✐❛❈ ✿✿ ❬❉♦✉❜❧❡❪ ✲❃ ✭❬❉♦✉❜❧❡❪✱❬❉♦✉❜❧❡❪✮

❞✐✈✐❞❡▼❡❞✐❛❈ ①s ❂ ✭❬① ⑤ ① ❁✲ ①s✱ ① ❁ ♠❪✱ ❬① ⑤ ① ❁✲ ①s✱ ① ❃ ♠❪✮

✇❤❡r❡ ♠ ❂ ♠❡❞✐❛ ①s

La definición por recursión es

❞✐✈✐❞❡▼❡❞✐❛❘ ✿✿ ❬❉♦✉❜❧❡❪ ✲❃ ✭❬❉♦✉❜❧❡❪✱❬❉♦✉❜❧❡❪✮

❞✐✈✐❞❡▼❡❞✐❛❘ ①s ❂ ❞✐✈✐❞❡▼❡❞✐❛❘✬ ①s

✇❤❡r❡ ♠ ❂ ♠❡❞✐❛ ①s

❞✐✈✐❞❡▼❡❞✐❛❘✬ ❬❪ ❂ ✭❬❪✱❬❪✮

❞✐✈✐❞❡▼❡❞✐❛❘✬ ✭①✿①s✮ ⑤ ① ❁ ♠ ❂ ✭①✿②s✱ ③s✮

⑤ ① ❂❂ ♠ ❂ ✭②s✱ ③s✮

⑤ ① ❃ ♠ ❂ ✭②s✱ ①✿③s✮

✇❤❡r❡ ✭②s✱ ③s✮ ❂ ❞✐✈✐❞❡▼❡❞✐❛❘✬ ①s

Ejercicio 6.4.2. Comprobar con QuickCheck que las tres definiciones anteriores ❞✐✈✐❞❡▼❡❞✐❛❋,

❞✐✈✐❞❡▼❡❞✐❛❈ y ❞✐✈✐❞❡▼❡❞✐❛❘ son equivalentes.

Solución: La propiedad es

♣r♦♣❴❞✐✈✐❞❡▼❡❞✐❛ ✿✿ ❬❉♦✉❜❧❡❪ ✲❃ ❇♦♦❧

♣r♦♣❴❞✐✈✐❞❡▼❡❞✐❛ ①s ❂

❞✐✈✐❞❡▼❡❞✐❛❈ ①s ❂❂ ❞ ✫✫

❞✐✈✐❞❡▼❡❞✐❛❘ ①s ❂❂ ❞

✇❤❡r❡ ❞ ❂ ❞✐✈✐❞❡▼❡❞✐❛❋ ①s

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴❞✐✈✐❞❡▼❡❞✐❛

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

6.4. División de una lista numérica según su media 121

Ejercicio 6.4.3. Comprobar con QuickCheck que si ✭②s✱③s✮ es el par obtenido aplicándole la

función ❞✐✈✐❞❡▼❡❞✐❛❋ a ①s, entonces la suma de las longitudes de ②s y ③s es menor o igual que

la longitud de ①s.

Solución: La propiedad es

♣r♦♣❴❧♦♥❣✐t✉❞❉✐✈✐❞❡▼❡❞✐❛ ✿✿ ❬❉♦✉❜❧❡❪ ✲❃ ❇♦♦❧

♣r♦♣❴❧♦♥❣✐t✉❞❉✐✈✐❞❡▼❡❞✐❛ ①s ❂

❧❡♥❣t❤ ②s ✰ ❧❡♥❣t❤ ③s ❁❂ ❧❡♥❣t❤ ①s

✇❤❡r❡ ✭②s✱③s✮ ❂ ❞✐✈✐❞❡▼❡❞✐❛❋ ①s

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴❧♦♥❣✐t✉❞❉✐✈✐❞❡▼❡❞✐❛

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

Ejercicio 6.4.4. Comprobar con QuickCheck que si ✭②s✱③s✮ es el par obtenido aplicándole la

función ❞✐✈✐❞❡▼❡❞✐❛❋ a ①s, entonces todos los elementos de ②s son menores que todos los

elementos de ③s.

Solución: La propiedad es

♣r♦♣❴❞✐✈✐❞❡▼❡❞✐❛▼❡♥♦r❡s ✿✿ ❬❉♦✉❜❧❡❪ ✲❃ ❇♦♦❧

♣r♦♣❴❞✐✈✐❞❡▼❡❞✐❛▼❡♥♦r❡s ①s ❂

❛♥❞ ❬② ❁ ③ ⑤ ② ❁✲ ②s✱ ③ ❁✲ ③s❪

✇❤❡r❡ ✭②s✱③s✮ ❂ ❞✐✈✐❞❡▼❡❞✐❛❋ ①s

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴❞✐✈✐❞❡▼❡❞✐❛▼❡♥♦r❡s

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

Ejercicio 6.4.5. Comprobar con QuickCheck que si ✭②s✱③s✮ es el par obtenido aplicándole la

función ❞✐✈✐❞❡▼❡❞✐❛❋ a ①s, entonces la media de ①s no pertenece a ②s ni a ③s.

Nota: Usar la función ♥♦t❊❧❡♠ tal que ✭♥♦t❊❧❡♠ ① ②s✮ se verifica si ② no pertenece a ②s.

Solución: La propiedad es

♣r♦♣❴❞✐✈✐❞❡▼❡❞✐❛❙✐♥▼❡❞✐❛ ✿✿ ❬❉♦✉❜❧❡❪ ✲❃ ❇♦♦❧

♣r♦♣❴❞✐✈✐❞❡▼❡❞✐❛❙✐♥▼❡❞✐❛ ①s ❂

♥♦t❊❧❡♠ ♠ ✭②s ✰✰ ③s✮

✇❤❡r❡ ♠ ❂ ♠❡❞✐❛ ①s

✭②s✱③s✮ ❂ ❞✐✈✐❞❡▼❡❞✐❛❋ ①s

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴❞✐✈✐❞❡▼❡❞✐❛❙✐♥▼❡❞✐❛

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

122 Capítulo 6. Funciones de orden superior

6.5. Segmentos cuyos elementos verifican una propiedad

Ejercicio 6.5.1. Definir la función

s❡❣♠❡♥t♦s ✿✿ ✭❛ ✲❃ ❇♦♦❧✮ ✲❃ ❬❛❪ ✲❃ ❬❛❪

tal que ✭s❡❣♠❡♥t♦s ♣ ①s✮ es la lista de los segmentos de ①s cuyos elementos verifican la pro-

piedad ♣. Por ejemplo,

s❡❣♠❡♥t♦s ❡✈❡♥ ❬✶✱✷✱✵✱✹✱✺✱✻✱✹✽✱✼✱✷❪ ❂❂ ❬❬❪✱❬✷✱✵✱✹❪✱❬✻✱✹✽❪✱❬✷❪❪

Solución:

s❡❣♠❡♥t♦s ✿✿ ✭❛ ✲❃ ❇♦♦❧✮ ✲❃ ❬❛❪ ✲❃ ❬❬❛❪❪

s❡❣♠❡♥t♦s ❴ ❬❪ ❂ ❬❪

s❡❣♠❡♥t♦s ♣ ①s ❂

t❛❦❡❲❤✐❧❡ ♣ ①s ✿ ✭s❡❣♠❡♥t♦s ♣ ✭❞r♦♣❲❤✐❧❡ ✭♥♦t✳♣✮ ✭❞r♦♣❲❤✐❧❡ ♣ ①s✮✮✮

6.6. Listas con elementos consecutivos relacionados

Ejercicio 6.6.1. Definir la función

r❡❧❛❝✐♦♥❛❞♦s ✿✿ ✭❛ ✲❃ ❛ ✲❃ ❇♦♦❧✮ ✲❃ ❬❛❪ ✲❃ ❇♦♦❧

tal que ✭r❡❧❛❝✐♦♥❛❞♦s r ①s✮ se verifica si para todo par ✭①✱②✮ de elementos consecutivos de

①s se cumple la relación r. Por ejemplo,

r❡❧❛❝✐♦♥❛❞♦s ✭❁✮ ❬✷✱✸✱✼✱✾❪ ❂❂ ❚r✉❡

r❡❧❛❝✐♦♥❛❞♦s ✭❁✮ ❬✷✱✸✱✶✱✾❪ ❂❂ ❋❛❧s❡

r❡❧❛❝✐♦♥❛❞♦s ❡q✉✐✈❛❧❡♥t❡s ❬✸✷✵✺✱✺✵✱✺✵✶✹❪ ❂❂ ❚r✉❡

Solución:

r❡❧❛❝✐♦♥❛❞♦s ✿✿ ✭❛ ✲❃ ❛ ✲❃ ❇♦♦❧✮ ✲❃ ❬❛❪ ✲❃ ❇♦♦❧

r❡❧❛❝✐♦♥❛❞♦s r ✭①✿②✿③s✮ ❂ ✭r ① ②✮ ✫✫ r❡❧❛❝✐♦♥❛❞♦s r ✭②✿③s✮

r❡❧❛❝✐♦♥❛❞♦s ❴ ❴ ❂ ❚r✉❡

Una definición alternativa es

r❡❧❛❝✐♦♥❛❞♦s✬ ✿✿ ✭❛ ✲❃ ❛ ✲❃ ❇♦♦❧✮ ✲❃ ❬❛❪ ✲❃ ❇♦♦❧

r❡❧❛❝✐♦♥❛❞♦s✬ r ①s ❂ ❛♥❞ ❬r ① ② ⑤ ✭①✱②✮ ❁✲ ③✐♣ ①s ✭t❛✐❧ ①s✮❪

6.7. Agrupamiento de elementos de una lista de listas 123

6.7. Agrupamiento de elementos de una lista de listas

Ejercicio 6.7.1. Definir la función

❛❣r✉♣❛ ✿✿ ❊q ❛ ❂❃ ❬❬❛❪❪ ✲❃ ❬❬❛❪❪

tal que ✭❛❣r✉♣❛ ①ss✮ es la lista de las listas obtenidas agrupando los primeros elementos, los

segundos, . . . de forma que las longitudes de las lista del resultado sean iguales a la más corta de

①ss. Por ejemplo,

❛❣r✉♣❛ ❬❬✶✳✳✻❪✱❬✼✳✳✾❪✱❬✶✵✳✳✷✵❪❪ ❂❂ ❬❬✶✱✼✱✶✵❪✱❬✷✱✽✱✶✶❪✱❬✸✱✾✱✶✷❪❪

❛❣r✉♣❛ ❬❪ ❂❂ ❬❪

Solución:

❛❣r✉♣❛ ✿✿ ❊q ❛ ❂❃ ❬❬❛❪❪ ✲❃ ❬❬❛❪❪

❛❣r✉♣❛ ❬❪ ❂ ❬❪

❛❣r✉♣❛ ①ss

⑤ ❬❪ ❵❡❧❡♠❵ ①ss ❂ ❬❪

⑤ ♦t❤❡r✇✐s❡ ❂ ♣r✐♠❡r♦s ①ss ✿ ❛❣r✉♣❛ ✭r❡st♦s ①ss✮

✇❤❡r❡ ♣r✐♠❡r♦s ❂ ♠❛♣ ❤❡❛❞

r❡st♦s ❂ ♠❛♣ t❛✐❧

6.8. Números con dígitos pares

Ejercicio 6.8.1. Definir, por recursión, la función

s✉♣❡r♣❛r ✿✿ ■♥t ✲❃ ❇♦♦❧

tal que ✭s✉♣❡r♣❛r ♥✮ se verifica si ♥ es un número par tal que todos sus dígitos son pares. Por

ejemplo,

s✉♣❡r♣❛r ✹✷✻ ❂❂ ❚r✉❡

s✉♣❡r♣❛r ✹✺✻ ❂❂ ❋❛❧s❡

Solución:

s✉♣❡r♣❛r ✿✿ ■♥t ✲❃ ❇♦♦❧

s✉♣❡r♣❛r ♥ ⑤ ♥ ❁ ✶✵ ❂ ❡✈❡♥ ♥

⑤ ♦t❤❡r✇✐s❡ ❂ ❡✈❡♥ ♥ ✫✫ s✉♣❡r♣❛r ✭♥ ❵❞✐✈❵ ✶✵✮

Ejercicio 6.8.2. Definir, por comprensión, la función

s✉♣❡r♣❛r✷ ✿✿ ■♥t ✲❃ ❇♦♦❧

124 Capítulo 6. Funciones de orden superior

tal que ✭s✉♣❡r♣❛r✷ ♥✮ se verifica si ♥ es un número par tal que todos sus dígitos son pares. Por

ejemplo,

s✉♣❡r♣❛r✷ ✹✷✻ ❂❂ ❚r✉❡

s✉♣❡r♣❛r✷ ✹✺✻ ❂❂ ❋❛❧s❡

Solución:

s✉♣❡r♣❛r✷ ✿✿ ■♥t ✲❃ ❇♦♦❧

s✉♣❡r♣❛r✷ ♥ ❂ ❛♥❞ ❬❡✈❡♥ ❞ ⑤ ❞ ❁✲ ❞✐❣✐t♦s ♥❪

Donde ✭❞✐❣✐t♦s ♥✮ es la lista de los dígitos de ♥.

❞✐❣✐t♦s ✿✿ ■♥t ✲❃ ❬■♥t❪

❞✐❣✐t♦s ♥ ❂ ❬r❡❛❞ ❬❞❪ ⑤ ❞ ❁✲ s❤♦✇ ♥❪

Ejercicio 6.8.3. Definir, por recursión sobre los dígitos, la función

s✉♣❡r♣❛r✸ ✿✿ ■♥t ✲❃ ❇♦♦❧

tal que ✭s✉♣❡r♣❛r✸ ♥✮ se verifica si ♥ es un número par tal que todos sus dígitos son pares. Por

ejemplo,

s✉♣❡r♣❛r✸ ✹✷✻ ❂❂ ❚r✉❡

s✉♣❡r♣❛r✸ ✹✺✻ ❂❂ ❋❛❧s❡

Solución:

s✉♣❡r♣❛r✸ ✿✿ ■♥t ✲❃ ❇♦♦❧

s✉♣❡r♣❛r✸ ♥ ❂ s♦♥P❛r❡s ✭❞✐❣✐t♦s ♥✮

✇❤❡r❡ s♦♥P❛r❡s ❬❪ ❂ ❚r✉❡

s♦♥P❛r❡s ✭❞✿❞s✮ ❂ ❡✈❡♥ ❞ ✫✫ s♦♥P❛r❡s ❞s

Ejercicio 6.8.4. Definir, usando ❛❧❧, la función

s✉♣❡r♣❛r✹ ✿✿ ■♥t ✲❃ ❇♦♦❧

tal que ✭s✉♣❡r♣❛r✹ ♥✮ se verifica si ♥ es un número par tal que todos sus dígitos son pares. Por

ejemplo,

s✉♣❡r♣❛r✹ ✹✷✻ ❂❂ ❚r✉❡

s✉♣❡r♣❛r✹ ✹✺✻ ❂❂ ❋❛❧s❡

Solución:

6.9. Lista de los valores de los elementos que cumplen una propiedad 125

s✉♣❡r♣❛r✹ ✿✿ ■♥t ✲❃ ❇♦♦❧

s✉♣❡r♣❛r✹ ♥ ❂ ❛❧❧ ❡✈❡♥ ✭❞✐❣✐t♦s ♥✮

Ejercicio 6.8.5. Definir, usando ❢✐❧t❡r, la función

s✉♣❡r♣❛r✺ ✿✿ ■♥t ✲❃ ❇♦♦❧

tal que ✭s✉♣❡r♣❛r✺ ♥✮ se verifica si ♥ es un número par tal que todos sus dígitos son pares. Por

ejemplo,

s✉♣❡r♣❛r✺ ✹✷✻ ❂❂ ❚r✉❡

s✉♣❡r♣❛r✺ ✹✺✻ ❂❂ ❋❛❧s❡

Solución:

s✉♣❡r♣❛r✺ ✿✿ ■♥t ✲❃ ❇♦♦❧

s✉♣❡r♣❛r✺ ♥ ❂ ❢✐❧t❡r ❡✈❡♥ ✭❞✐❣✐t♦s ♥✮ ❂❂ ❞✐❣✐t♦s ♥

6.9. Lista de los valores de los elementos que cumplenuna propiedad

Ejercicio 6.9.1. Se considera la función

❢✐❧tr❛❆♣❧✐❝❛ ✿✿ ✭❛ ✲❃ ❜✮ ✲❃ ✭❛ ✲❃ ❇♦♦❧✮ ✲❃ ❬❛❪ ✲❃ ❬❜❪

tal que ✭❢✐❧tr❛❆♣❧✐❝❛ ❢ ♣ ①s✮ es la lista obtenida aplicándole a los elementos de ①s que

cumplen el predicado ♣ la función ❢. Por ejemplo,

❢✐❧tr❛❆♣❧✐❝❛ ✭✹✰✮ ✭❁✸✮ ❬✶✳✳✼❪ ❂❃ ❬✺✱✻❪

Se pide, definir la función

1. por comprensión,

2. usando ♠❛♣ y ❢✐❧t❡r,

3. por recursión y

4. por plegado (con ❢♦❧❞r).

Solución: La definición con lista de comprensión es

❢✐❧tr❛❆♣❧✐❝❛❴✶ ✿✿ ✭❛ ✲❃ ❜✮ ✲❃ ✭❛ ✲❃ ❇♦♦❧✮ ✲❃ ❬❛❪ ✲❃ ❬❜❪

❢✐❧tr❛❆♣❧✐❝❛❴✶ ❢ ♣ ①s ❂ ❬❢ ① ⑤ ① ❁✲ ①s✱ ♣ ①❪

126 Capítulo 6. Funciones de orden superior

La definición con ♠❛♣ y ❢✐❧t❡r es

❢✐❧tr❛❆♣❧✐❝❛❴✷ ✿✿ ✭❛ ✲❃ ❜✮ ✲❃ ✭❛ ✲❃ ❇♦♦❧✮ ✲❃ ❬❛❪ ✲❃ ❬❜❪

❢✐❧tr❛❆♣❧✐❝❛❴✷ ❢ ♣ ①s ❂ ♠❛♣ ❢ ✭❢✐❧t❡r ♣ ①s✮

La definición por recursión es

❢✐❧tr❛❆♣❧✐❝❛❴✸ ✿✿ ✭❛ ✲❃ ❜✮ ✲❃ ✭❛ ✲❃ ❇♦♦❧✮ ✲❃ ❬❛❪ ✲❃ ❬❜❪

❢✐❧tr❛❆♣❧✐❝❛❴✸ ❢ ♣ ❬❪ ❂ ❬❪

❢✐❧tr❛❆♣❧✐❝❛❴✸ ❢ ♣ ✭①✿①s✮ ⑤ ♣ ① ❂ ❢ ① ✿ ❢✐❧tr❛❆♣❧✐❝❛❴✸ ❢ ♣ ①s

⑤ ♦t❤❡r✇✐s❡ ❂ ❢✐❧tr❛❆♣❧✐❝❛❴✸ ❢ ♣ ①s

La definición por plegado es

❢✐❧tr❛❆♣❧✐❝❛❴✹ ✿✿ ✭❛ ✲❃ ❜✮ ✲❃ ✭❛ ✲❃ ❇♦♦❧✮ ✲❃ ❬❛❪ ✲❃ ❬❜❪

❢✐❧tr❛❆♣❧✐❝❛❴✹ ❢ ♣ ❂ ❢♦❧❞r ❣ ❬❪

✇❤❡r❡ ❣ ① ② ⑤ ♣ ① ❂ ❢ ① ✿ ②

⑤ ♦t❤❡r✇✐s❡ ❂ ②

La definición por plegado usando ❧❛♠❜❞❛ es

❢✐❧tr❛❆♣❧✐❝❛❴✹✬ ✿✿ ✭❛ ✲❃ ❜✮ ✲❃ ✭❛ ✲❃ ❇♦♦❧✮ ✲❃ ❬❛❪ ✲❃ ❬❜❪

❢✐❧tr❛❆♣❧✐❝❛❴✹✬ ❢ ♣ ❂

❢♦❧❞r ✭❭① ② ✲❃ ✐❢ ♣ ① t❤❡♥ ✭❢ ① ✿ ②✮ ❡❧s❡ ②✮ ❬❪

6.10. Máximo elemento de una lista

Ejercicio 6.10.1. Definir, mediante recursión, la función

♠❛①✐♠✉♠❘ ✿✿ ❖r❞ ❛ ❂❃ ❬❛❪ ✲❃ ❛

tal que ✭♠❛①✐♠✉♠❘ ①s✮ es el máximo de la lista ①s. Por ejemplo,

♠❛①✐♠✉♠❘ ❬✸✱✼✱✷✱✺❪ ❂❂ ✼

Nota: La función ♠❛①✐♠✉♠❘ es equivalente a la predefinida ♠❛①✐♠✉♠.

Solución:

♠❛①✐♠✉♠❘ ✿✿ ❖r❞ ❛ ❂❃ ❬❛❪ ✲❃ ❛

♠❛①✐♠✉♠❘ ❬①❪ ❂ ①

♠❛①✐♠✉♠❘ ✭①✿②✿②s✮ ❂ ♠❛① ① ✭♠❛①✐♠✉♠❘ ✭②✿②s✮✮

6.11. Mínimo elemento de una lista 127

Ejercicio 6.10.2. La función de plegado ❢♦❧❞r✶ está definida por

❢♦❧❞r✶ ✿✿ ✭❛ ✲❃ ❛ ✲❃ ❛✮ ✲❃ ❬❛❪ ✲❃ ❛

❢♦❧❞r✶ ❴ ❬①❪ ❂ ①

❢♦❧❞r✶ ❢ ✭①✿①s✮ ❂ ❢ ① ✭❢♦❧❞r✶ ❢ ①s✮

Definir, mediante plegado con ❢♦❧❞r✶, la función

♠❛①✐♠✉♠P ✿✿ ❖r❞ ❛ ❂❃ ❬❛❪ ✲❃ ❛

tal que ✭♠❛①✐♠✉♠❘ ①s✮ es el máximo de la lista ①s. Por ejemplo,

♠❛①✐♠✉♠P ❬✸✱✼✱✷✱✺❪ ❂❂ ✼

Nota: La función ♠❛①✐♠✉♠P es equivalente a la predefinida ♠❛①✐♠✉♠.

Solución:

♠❛①✐♠✉♠P ✿✿ ❖r❞ ❛ ❂❃ ❬❛❪ ✲❃ ❛

♠❛①✐♠✉♠P ❂ ❢♦❧❞r✶ ♠❛①

6.11. Mínimo elemento de una lista

Ejercicio 6.11.1. Definir, mediante plegado con foldr1, la función

♠✐♥✐♠✉♥P ✿✿ ❖r❞ ❛ ❂❃ ❬❛❪ ✲❃ ❛

tal que ✭♠✐♥✐♠✉♥❘ ①s✮ es el máximo de la lista ①s. Por ejemplo,

♠✐♥✐♠✉♥P ❬✸✱✼✱✷✱✺❪ ❂❂ ✷

Nota: La función ♠✐♥✐♠✉♥P es equivalente a la predefinida ♠✐♥✐♠✉♥.

Solución:

♠✐♥✐♠✉♠P ✿✿ ❖r❞ ❛ ❂❃ ❬❛❪ ✲❃ ❛

♠✐♥✐♠✉♠P ❂ ❢♦❧❞r✶ ♠✐♥

6.12. Inversa de una lista

Ejercicio 6.12.1. Definir, mediante recursión, la función

✐♥✈❡rs❛❘ ✿✿ ❬❛❪ ✲❃ ❬❛❪

tal que ✭✐♥✈❡rs❛❘ ①s✮ es la inversa de la lista ①s. Por ejemplo,

128 Capítulo 6. Funciones de orden superior

✐♥✈❡rs❛❘ ❬✸✱✺✱✷✱✹✱✼❪ ❂❂ ❬✼✱✹✱✷✱✺✱✸❪

Solución:

✐♥✈❡rs❛❘ ✿✿ ❬❛❪ ✲❃ ❬❛❪

✐♥✈❡rs❛❘ ❬❪ ❂ ❬❪

✐♥✈❡rs❛❘ ✭①✿①s✮ ❂ ✭✐♥✈❡rs❛❘ ①s✮ ✰✰ ❬①❪

Ejercicio 6.12.2. Definir, mediante plegado, la función

✐♥✈❡rs❛P ✿✿ ❬❛❪ ✲❃ ❬❛❪

tal que ✭✐♥✈❡rs❛P ①s✮ es la inversa de la lista ①s. Por ejemplo,

✐♥✈❡rs❛P ❬✸✱✺✱✷✱✹✱✼❪ ❂❂ ❬✼✱✹✱✷✱✺✱✸❪

Solución:

✐♥✈❡rs❛P ✿✿ ❬❛❪ ✲❃ ❬❛❪

✐♥✈❡rs❛P ❂ ❢♦❧❞r ❢ ❬❪

✇❤❡r❡ ❢ ① ② ❂ ② ✰✰ ❬①❪

La definición anterior puede simplificarse a

✐♥✈❡rs❛P❴✷ ✿✿ ❬❛❪ ✲❃ ❬❛❪

✐♥✈❡rs❛P❴✷ ❂ ❢♦❧❞r ❢ ❬❪

✇❤❡r❡ ❢ ① ❂ ✭✰✰ ❬①❪✮

Ejercicio 6.12.3. Definir, por recursión con acumulador, la función

✐♥✈❡rs❛❘✬ ✿✿ ❬❛❪ ✲❃ ❬❛❪

tal que ✭✐♥✈❡rs❛❘✬ ①s✮ es la inversa de la lista ①s. Por ejemplo,

✐♥✈❡rs❛❘✬ ❬✸✱✺✱✷✱✹✱✼❪ ❂❂ ❬✼✱✹✱✷✱✺✱✸❪

Solución:

✐♥✈❡rs❛❘✬ ✿✿ ❬❛❪ ✲❃ ❬❛❪

✐♥✈❡rs❛❘✬ ①s ❂ ✐♥✈❡rs❛❆✉① ❬❪ ①s

✇❤❡r❡ ✐♥✈❡rs❛❆✉① ②s ❬❪ ❂ ②s

✐♥✈❡rs❛❆✉① ②s ✭①✿①s✮ ❂ ✐♥✈❡rs❛❆✉① ✭①✿②s✮ ①s

Ejercicio 6.12.4. La función de plegado foldl está definida por

6.12. Inversa de una lista 129

❢♦❧❞❧ ✿✿ ✭❛ ✲❃ ❜ ✲❃ ❛✮ ✲❃ ❛ ✲❃ ❬❜❪ ✲❃ ❛

❢♦❧❞❧ ❢ ②s ①s ❂ ❛✉① ②s ①s

✇❤❡r❡ ❛✉① ②s ❬❪ ❂ ②s

❛✉① ②s ✭①✿①s✮ ❂ ❛✉① ✭❢ ②s ①✮ ①s

Definir, mediante plegado con foldl, la función

✐♥✈❡rs❛P✬ ✿✿ ❬❛❪ ✲❃ ❬❛❪

tal que ✭✐♥✈❡rs❛P✬ ①s✮ es la inversa de la lista ①s. Por ejemplo,

✐♥✈❡rs❛P✬ ❬✸✱✺✱✷✱✹✱✼❪ ❂❂ ❬✼✱✹✱✷✱✺✱✸❪

Solución:

✐♥✈❡rs❛P✬ ✿✿ ❬❛❪ ✲❃ ❬❛❪

✐♥✈❡rs❛P✬ ❂ ❢♦❧❞❧ ❢ ❬❪

✇❤❡r❡ ❢ ②s ① ❂ ①✿②s

La definición anterior puede simplificarse lambda:

✐♥✈❡rs❛P✬❴✷ ✿✿ ❬❛❪ ✲❃ ❬❛❪

✐♥✈❡rs❛P✬❴✷❂ ❢♦❧❞❧ ✭❭②s ① ✲❃ ①✿②s✮ ❬❪

La definición puede simplificarse usando ❢❧✐♣:

✐♥✈❡rs❛P✬❴✸ ✿✿ ❬❛❪ ✲❃ ❬❛❪

✐♥✈❡rs❛P✬❴✸ ❂ ❢♦❧❞❧ ✭❢❧✐♣✭✿✮✮ ❬❪

Ejercicio 6.12.5. Comprobar con QuickCheck que las funciones r❡✈❡rs❡, ✐♥✈❡rs❛P e ✐♥✈❡rs❛P✬

son equivalentes.

Solución: La propiedad es

♣r♦♣❴✐♥✈❡rs❛ ✿✿ ❊q ❛ ❂❃ ❬❛❪ ✲❃ ❇♦♦❧

♣r♦♣❴✐♥✈❡rs❛ ①s ❂

✐♥✈❡rs❛P ①s ❂❂ ②s ✫✫

✐♥✈❡rs❛P✬ ①s ❂❂ ②s

✇❤❡r❡ ②s ❂ r❡✈❡rs❡ ①s

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴✐♥✈❡rs❛

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

130 Capítulo 6. Funciones de orden superior

Ejercicio 6.12.6. Comparar la eficiencia de ✐♥✈❡rs❛P e ✐♥✈❡rs❛P✬ calculando el tiempo y el

espacio que usado en evaluar las siguientes expresiones:

❤❡❛❞ ✭✐♥✈❡rs❛P ❬✶✳✳✶✵✵✵✵✵❪✮

❤❡❛❞ ✭✐♥✈❡rs❛P✬ ❬✶✳✳✶✵✵✵✵✵❪✮

Solución: La sesión es

❣❤❝✐❃ ✿s❡t ✰s

❣❤❝✐❃ ❤❡❛❞ ✭✐♥✈❡rs❛P ❬✶✳✳✶✵✵✵✵✵❪✮

✶✵✵✵✵✵

✭✵✳✹✶ s❡❝s✱ ✷✵✽✽✷✹✻✵ ❜②t❡s✮

❣❤❝✐❃ ❤❡❛❞ ✭✐♥✈❡rs❛P✬ ❬✶✳✳✶✵✵✵✵✵❪✮

✭✵✳✵✵ s❡❝s✱ ✺✷✺✶✹✽ ❜②t❡s✮

❣❤❝✐❃ ✿✉♥s❡t ✰s

6.13. Número correspondiente a la lista de sus cifras

Ejercicio 6.13.1. Definir, por recursión con acumulador, la función

❞❡❝✷❡♥t❘ ✿✿ ❬■♥t❪ ✲❃ ■♥t

tal que ✭❞❡❝✷❡♥t❘ ①s✮ es el entero correspondiente a la expresión decimal ①s. Por ejemplo,

❞❡❝✷❡♥t❘ ❬✷✱✸✱✹✱✺❪ ❂❂ ✷✸✹✺

Solución:

❞❡❝✷❡♥t❘ ✿✿ ❬■♥t❪ ✲❃ ■♥t

❞❡❝✷❡♥t❘ ①s ❂ ❞❡❝✷❡♥t❘✬ ✵ ①s

✇❤❡r❡ ❞❡❝✷❡♥t❘✬ ❛ ❬❪ ❂ ❛

❞❡❝✷❡♥t❘✬ ❛ ✭①✿①s✮ ❂ ❞❡❝✷❡♥t❘✬ ✭✶✵✯❛✰①✮ ①s

Ejercicio 6.13.2. Definir, por plegado con ❢♦❧❞❧, la función

❞❡❝✷❡♥tP ✿✿ ❬■♥t❪ ✲❃ ■♥t

tal que ✭❞❡❝✷❡♥tP ①s✮ es el entero correspondiente a la expresión decimal ①s. Por ejemplo,

❞❡❝✷❡♥tP ❬✷✱✸✱✹✱✺❪ ❂❂ ✷✸✹✺

Solución:

6.14. Suma de valores de una aplicación a una lista 131

❞❡❝✷❡♥tP ✿✿ ❬■♥t❪ ✲❃ ■♥t

❞❡❝✷❡♥tP ❂ ❢♦❧❞❧ ❢ ✵

✇❤❡r❡ ❢ ❛ ① ❂ ✶✵✯❛✰①

La definición puede simplificarse usando ❧❛♠❜❞❛:

❞❡❝✷❡♥tP✬ ✿✿ ❬■♥t❪ ✲❃ ■♥t

❞❡❝✷❡♥tP✬ ❂ ❢♦❧❞❧ ✭❭❛ ① ✲❃ ✶✵✯❛✰①✮ ✵

6.14. Suma de valores de una aplicación a una lista

Ejercicio 6.14.1. Definir, por recursión, la función

s✉♠❛❘ ✿✿ ◆✉♠ ❜ ❂❃ ✭❛ ✲❃ ❜✮ ✲❃ ❬❛❪ ✲❃ ❜

tal que ✭s✉♠❛ ❢ ①s✮ es la suma de los valores obtenido aplicando la función ❢ a lo elementos de

la lista ①s. Por ejemplo,

s✉♠❛❘ ✭✯✷✮ ❬✸✱✺✱✶✵❪ ❂❂ ✸✻

s✉♠❛❘ ✭✴✶✵✮ ❬✸✱✺✱✶✵❪ ❂❂ ✶✳✽

Solución:

s✉♠❛❘ ✿✿ ◆✉♠ ❜ ❂❃ ✭❛ ✲❃ ❜✮ ✲❃ ❬❛❪ ✲❃ ❜

s✉♠❛❘ ❢ ❬❪ ❂ ✵

s✉♠❛❘ ❢ ✭①✿①s✮ ❂ ❢ ① ✰ s✉♠❛❘ ❢ ①s

Ejercicio 6.14.2. Definir, por plegado, la función

s✉♠❛P ✿✿ ◆✉♠ ❜ ❂❃ ✭❛ ✲❃ ❜✮ ✲❃ ❬❛❪ ✲❃ ❜

tal que ✭s✉♠❛ ❢ ①s✮ es la suma de los valores obtenido aplicando la función ❢ a lo elementos de

la lista ①s. Por ejemplo,

s✉♠❛P ✭✯✷✮ ❬✸✱✺✱✶✵❪ ❂❂ ✸✻

s✉♠❛P ✭✴✶✵✮ ❬✸✱✺✱✶✵❪ ❂❂ ✶✳✽

Solución:

s✉♠❛P ✿✿ ◆✉♠ ❜ ❂❃ ✭❛ ✲❃ ❜✮ ✲❃ ❬❛❪ ✲❃ ❜

s✉♠❛P ❢ ❂ ❢♦❧❞r ✭❭① ② ✲❃ ✭❢ ①✮ ✰ ②✮ ✵

132 Capítulo 6. Funciones de orden superior

6.15. Redefinición de la función ♠❛♣ usando ❢♦❧❞r

Ejercicio 6.15.1. Redefinir, por recursión, la función ♠❛♣. Por ejemplo,

♠❛♣❘ ✭✰✷✮ ❬✶✱✼✱✸❪ ❂❂ ❬✸✱✾✱✺❪

Solución:

♠❛♣❘ ✿✿ ✭❛ ✲❃ ❜✮ ✲❃ ❬❛❪ ✲❃ ❬❜❪

♠❛♣❘ ❢ ❬❪ ❂ ❬❪

♠❛♣❘ ❢ ✭①✿①s✮ ❂ ❢ ① ✿ ♠❛♣❘ ❢ ①s

Ejercicio 6.15.2. Redefinir, usando ❢♦❧❞r, la función ♠❛♣. Por ejemplo,

♠❛♣P ✭✰✷✮ ❬✶✱✼✱✸❪ ❂❂ ❬✸✱✾✱✺❪

Solución:

♠❛♣P ✿✿ ✭❛ ✲❃ ❜✮ ✲❃ ❬❛❪ ✲❃ ❬❜❪

♠❛♣P ❢ ❂ ❢♦❧❞r ❣ ❬❪

✇❤❡r❡ ❣ ① ①s ❂ ❢ ① ✿ ①s

La definición por plegado usando lambda es

♠❛♣P✬ ✿✿ ✭❛ ✲❃ ❜✮ ✲❃ ❬❛❪ ✲❃ ❬❜❪

♠❛♣P✬ ❢ ❂ ❢♦❧❞r ✭❭① ② ✲❃ ❢ ①✿②✮ ❬❪

Otra definición es

♠❛♣P✬✬ ✿✿ ✭❛ ✲❃ ❜✮ ✲❃ ❬❛❪ ✲❃ ❬❜❪

♠❛♣P✬✬ ❢ ❂ ❢♦❧❞r ✭✭✿✮ ✳ ❢✮ ❬❪

6.16. Redefinición de la función ❢✐❧t❡r usando ❢♦❧❞r

Ejercicio 6.16.1. Redefinir, por recursión, la función ❢✐❧t❡r. Por ejemplo,

❢✐❧t❡r❘ ✭❁✹✮ ❬✶✱✼✱✸✱✷❪ ❂❃ ❬✶✱✸✱✷❪

Solución:

❢✐❧t❡r❘ ✿✿ ✭❛ ✲❃ ❇♦♦❧✮ ✲❃ ❬❛❪ ✲❃ ❬❛❪

❢✐❧t❡r❘ ♣ ❬❪ ❂ ❬❪

❢✐❧t❡r❘ ♣ ✭①✿①s✮ ⑤ ♣ ① ❂ ① ✿ ❢✐❧t❡r❘ ♣ ①s

⑤ ♦t❤❡r✇✐s❡ ❂ ❢✐❧t❡r❘ ♣ ①s

6.17. Suma de las sumas de las listas de una lista de listas 133

Ejercicio 6.16.2. Redefinir, usando ❢♦❧❞r, la función ❢✐❧t❡r. Por ejemplo,

❢✐❧t❡rP ✭❁✹✮ ❬✶✱✼✱✸✱✷❪ ❂❃ ❬✶✱✸✱✷❪

Solución:

❢✐❧t❡rP ✿✿ ✭❛ ✲❃ ❇♦♦❧✮ ✲❃ ❬❛❪ ✲❃ ❬❛❪

❢✐❧t❡rP ♣ ❂ ❢♦❧❞r ❣ ❬❪

✇❤❡r❡ ❣ ① ② ⑤ ♣ ① ❂ ①✿②

⑤ ♦t❤❡r✇✐s❡ ❂ ②

La definición por plegado y ❧❛♠❜❞❛ es

❢✐❧t❡rP✬ ✿✿ ✭❛ ✲❃ ❇♦♦❧✮ ✲❃ ❬❛❪ ✲❃ ❬❛❪

❢✐❧t❡rP✬ ♣ ❂ ❢♦❧❞r ✭❭① ② ✲❃ ✐❢ ✭♣ ①✮ t❤❡♥ ✭①✿②✮ ❡❧s❡ ②✮ ❬❪

6.17. Suma de las sumas de las listas de una lista de listas

Ejercicio 6.17.1. Definir, mediante recursión, la función

s✉♠❧❧❘ ✿✿ ◆✉♠ ❛ ❂❃ ❬❬❛❪❪ ✲❃ ❛

tal que ✭s✉♠❧❧❘ ①ss✮ es la suma de las sumas de las listas de ①ss. Por ejemplo,

s✉♠❧❧❘ ❬❬✶✱✸❪✱❬✷✱✺❪❪ ❂❂ ✶✶

Solución:

s✉♠❧❧❘ ✿✿ ◆✉♠ ❛ ❂❃ ❬❬❛❪❪ ✲❃ ❛

s✉♠❧❧❘ ❬❪ ❂ ✵

s✉♠❧❧❘ ✭①s✿①ss✮ ❂ s✉♠ ①s ✰ s✉♠❧❧❘ ①ss

Ejercicio 6.17.2. Definir, mediante plegado, la función

s✉♠❧❧P ✿✿ ◆✉♠ ❛ ❂❃ ❬❬❛❪❪ ✲❃ ❛

tal que ✭s✉♠❧❧P ①ss✮ es la suma de las sumas de las listas de ①ss. Por ejemplo,

s✉♠❧❧P ❬❬✶✱✸❪✱❬✷✱✺❪❪ ❂❂ ✶✶

Solución:

s✉♠❧❧P ✿✿ ◆✉♠ ❛ ❂❃ ❬❬❛❪❪ ✲❃ ❛

s✉♠❧❧P ❂ ❢♦❧❞r ❢ ✵

✇❤❡r❡ ❢ ①s ♥ ❂ s✉♠ ①s ✰ ♥

134 Capítulo 6. Funciones de orden superior

La definición anterior puede simplificarse usando ❧❛♠❜❞❛

s✉♠❧❧P✬ ✿✿ ◆✉♠ ❛ ❂❃ ❬❬❛❪❪ ✲❃ ❛

s✉♠❧❧P✬ ❂ ❢♦❧❞r ✭❭①s ♥ ✲❃ s✉♠ ①s ✰ ♥✮ ✵

Ejercicio 6.17.3. Definir, mediante recursión con acumulador, la función

s✉♠❧❧❆ ✿✿ ◆✉♠ ❛ ❂❃ ❬❬❛❪❪ ✲❃ ❛

tal que ✭s✉♠❧❧❆ ①ss✮ es la suma de las sumas de las listas de ①ss. Por ejemplo,

s✉♠❧❧❆ ❬❬✶✱✸❪✱❬✷✱✺❪❪ ❂❂ ✶✶

Solución:

s✉♠❧❧❆ ✿✿ ◆✉♠ ❛ ❂❃ ❬❬❛❪❪ ✲❃ ❛

s✉♠❧❧❆ ①s ❂ ❛✉① ✵ ①s

✇❤❡r❡ ❛✉① ❛ ❬❪ ❂ ❛

❛✉① ❛ ✭①s✿①ss✮ ❂ ❛✉① ✭❛ ✰ s✉♠ ①s✮ ①ss

Ejercicio 6.17.4. Definir, mediante plegado con ❢♦❧❞❧, la función

s✉♠❧❧❆P ✿✿ ◆✉♠ ❛ ❂❃ ❬❬❛❪❪ ✲❃ ❛

tal que ✭s✉♠❧❧❆P ①ss✮ es la suma de las sumas de las listas de ①ss. Por ejemplo,

s✉♠❧❧❆P ❬❬✶✱✸❪✱❬✷✱✺❪❪ ❂❂ ✶✶

Solución:

s✉♠❧❧❆P ✿✿ ◆✉♠ ❛ ❂❃ ❬❬❛❪❪ ✲❃ ❛

s✉♠❧❧❆P ❂ ❢♦❧❞❧ ✭❭❛ ①s ✲❃ ❛ ✰ s✉♠ ①s✮ ✵

6.18. Lista obtenida borrando las ocurrencias de un ele-mento

Ejercicio 6.18.1. Definir, mediante recursión, la función

❜♦rr❛❘ ✿✿ ❊q ❛ ❂❃ ❛ ✲❃ ❛ ✲❃ ❬❛❪

tal que ✭❜♦rr❛❘ ② ①s✮ es la lista obtenida borrando las ocurrencias de ② en ①s. Por ejemplo,

❜♦rr❛❘ ✺ ❬✷✱✸✱✺✱✻❪ ❂❂ ❬✷✱✸✱✻❪

❜♦rr❛❘ ✺ ❬✷✱✸✱✺✱✻✱✺❪ ❂❂ ❬✷✱✸✱✻❪

❜♦rr❛❘ ✼ ❬✷✱✸✱✺✱✻✱✺❪ ❂❂ ❬✷✱✸✱✺✱✻✱✺❪

6.19. Diferencia de dos listas 135

Solución:

❜♦rr❛❘ ✿✿ ❊q ❛ ❂❃ ❛ ✲❃ ❬❛❪ ✲❃ ❬❛❪

❜♦rr❛❘ ③ ❬❪ ❂ ❬❪

❜♦rr❛❘ ③ ✭①✿①s✮ ⑤ ③ ❂❂ ① ❂ ❜♦rr❛❘ ③ ①s

⑤ ♦t❤❡r✇✐s❡ ❂ ① ✿ ❜♦rr❛❘ ③ ①s

Ejercicio 6.18.2. Definir, mediante plegado, la función

❜♦rr❛P ✿✿ ❊q ❛ ❂❃ ❛ ✲❃ ❛ ✲❃ ❬❛❪

tal que ✭❜♦rr❛P ② ①s✮ es la lista obtenida borrando las ocurrencias de ② en ①s. Por ejemplo,

❜♦rr❛P ✺ ❬✷✱✸✱✺✱✻❪ ❂❂ ❬✷✱✸✱✻❪

❜♦rr❛P ✺ ❬✷✱✸✱✺✱✻✱✺❪ ❂❂ ❬✷✱✸✱✻❪

❜♦rr❛P ✼ ❬✷✱✸✱✺✱✻✱✺❪ ❂❂ ❬✷✱✸✱✺✱✻✱✺❪

Solución:

❜♦rr❛P ✿✿ ❊q ❛ ❂❃ ❛ ✲❃ ❬❛❪ ✲❃ ❬❛❪

❜♦rr❛P ③ ❂ ❢♦❧❞r ❢ ❬❪

✇❤❡r❡ ❢ ① ② ⑤ ③ ❂❂ ① ❂ ②

⑤ ♦t❤❡r✇✐s❡ ❂ ①✿②

La definición por plegado con ❧❛♠❜❞❛ es es

❜♦rr❛P✬ ✿✿ ❊q ❛ ❂❃ ❛ ✲❃ ❬❛❪ ✲❃ ❬❛❪

❜♦rr❛P✬ ③ ❂ ❢♦❧❞r ✭❭① ② ✲❃ ✐❢ ③❂❂① t❤❡♥ ② ❡❧s❡ ①✿②✮ ❬❪

6.19. Diferencia de dos listas

Ejercicio 6.19.1. Definir, mediante recursión, la función

❞✐❢❡r❡♥❝✐❛❘ ✿✿ ❊q ❛ ❂❃ ❬❛❪ ✲❃ ❬❛❪ ✲❃ ❬❛❪

tal que ✭❞✐❢❡r❡♥❝✐❛❘ ①s ②s✮ es la diferencia del conjunto ①s e ②s; es decir el conjunto de los

elementos de ①s que no pertenecen a ②s. Por ejemplo,

❞✐❢❡r❡♥❝✐❛❘ ❬✷✱✸✱✺✱✻❪ ❬✺✱✷✱✼❪ ❂❂ ❬✸✱✻❪

Solución:

136 Capítulo 6. Funciones de orden superior

❞✐❢❡r❡♥❝✐❛❘ ✿✿ ❊q ❛ ❂❃ ❬❛❪ ✲❃ ❬❛❪ ✲❃ ❬❛❪

❞✐❢❡r❡♥❝✐❛❘ ①s ②s ❂ ❛✉① ①s ①s ②s

✇❤❡r❡ ❛✉① ❛ ①s ❬❪ ❂ ❛

❛✉① ❛ ①s ✭②✿②s✮ ❂ ❛✉① ✭❜♦rr❛❘ ② ❛✮ ①s ②s

La definición, para aproximarse al patrón de plegado, se puede escribir como

❞✐❢❡r❡♥❝✐❛❘✬ ✿✿ ❊q ❛ ❂❃ ❬❛❪ ✲❃ ❬❛❪ ✲❃ ❬❛❪

❞✐❢❡r❡♥❝✐❛❘✬ ①s ②s ❂ ❛✉① ①s ①s ②s

✇❤❡r❡ ❛✉① ❛ ①s ❬❪ ❂ ❛

❛✉① ❛ ①s ✭②✿②s✮ ❂ ❛✉① ✭❢❧✐♣ ❜♦rr❛❘ ❛ ②✮ ①s ②s

Ejercicio 6.19.2. Definir, mediante plegado con ❢♦❧❞❧, la función

❞✐❢❡r❡♥❝✐❛P ✿✿ ❊q ❛ ❂❃ ❬❛❪ ✲❃ ❬❛❪ ✲❃ ❬❛❪

tal que ✭❞✐❢❡r❡♥❝✐❛P ①s ②s✮ es la diferencia del conjunto ①s e ②s; es decir el conjunto de los

elementos de ①s que no pertenecen a ②s. Por ejemplo,

❞✐❢❡r❡♥❝✐❛P ❬✷✱✸✱✺✱✻❪ ❬✺✱✷✱✼❪ ❂❂ ❬✸✱✻❪

Solución:

❞✐❢❡r❡♥❝✐❛P ✿✿ ❊q ❛ ❂❃ ❬❛❪ ✲❃ ❬❛❪ ✲❃ ❬❛❪

❞✐❢❡r❡♥❝✐❛P ①s ②s ❂ ❢♦❧❞❧ ✭❢❧✐♣ ❜♦rr❛❘✮ ①s ②s

La definición anterior puede simplificarse a

❞✐❢❡r❡♥❝✐❛P✬ ✿✿ ❊q ❛ ❂❃ ❬❛❪ ✲❃ ❬❛❪ ✲❃ ❬❛❪

❞✐❢❡r❡♥❝✐❛P✬ ❂ ❢♦❧❞❧ ✭❢❧✐♣ ❜♦rr❛❘✮

6.20. Producto de los números que verifican una propie-dad

Ejercicio 6.20.1. Definir mediante plegado la función

♣r♦❞✉❝t♦ ✿✿ ◆✉♠ ❛ ❂❃ ❬❛❪ ✲❃ ❛

tal que ✭♣r♦❞✉❝t♦ ①s✮ es el producto de los elementos de la lista ①s. Por ejemplo,

♣r♦❞✉❝t♦ ❬✷✱✶✱✲✸✱✹✱✺✱✲✻❪ ❂❂ ✼✷✵

6.21. Las cabezas y las colas de una lista 137

Solución:

♣r♦❞✉❝t♦ ✿✿ ◆✉♠ ❛ ❂❃ ❬❛❪ ✲❃ ❛

♣r♦❞✉❝t♦ ❂ ❢♦❧❞r ✭✯✮ ✶

Ejercicio 6.20.2. Definir mediante plegado la función

♣r♦❞✉❝t♦Pr❡❞ ✿✿ ◆✉♠ ❛ ❂❃ ✭❛ ✲❃ ❇♦♦❧✮ ✲❃ ❬❛❪ ✲❃ ❛

tal que ✭♣r♦❞✉❝t♦Pr❡❞ ♣ ①s✮ es el producto de los elementos de la lista ①s que verifican el

predicado ♣. Por ejemplo,

♣r♦❞✉❝t♦Pr❡❞ ❡✈❡♥ ❬✷✱✶✱✲✸✱✹✱✲✺✱✻❪ ❂❂ ✹✽

Solución:

♣r♦❞✉❝t♦Pr❡❞ ✿✿ ◆✉♠ ❛ ❂❃ ✭❛ ✲❃ ❇♦♦❧✮ ✲❃ ❬❛❪ ✲❃ ❛

♣r♦❞✉❝t♦Pr❡❞ ♣ ❂ ❢♦❧❞r ✭❭① ② ✲❃ ✐❢ ♣ ① t❤❡♥ ①✯② ❡❧s❡ ②✮ ✶

Ejercicio 6.20.3. Definir la función

♣r♦❞✉❝t♦P♦s ✿✿ ✭◆✉♠ ❛✱ ❖r❞ ❛✮ ❂❃ ❬❛❪ ✲❃ ❛

tal que ✭♣r♦❞✉❝t♦P♦s ①s✮ esel producto de los elementos estríctamente positivos de la lista ①s.

Por ejemplo,

♣r♦❞✉❝t♦P♦s ❬✷✱✶✱✲✸✱✹✱✲✺✱✻❪ ❂❂ ✹✽

Solución:

♣r♦❞✉❝t♦P♦s ✿✿ ✭◆✉♠ ❛✱ ❖r❞ ❛✮ ❂❃ ❬❛❪ ✲❃ ❛

♣r♦❞✉❝t♦P♦s ❂ ♣r♦❞✉❝t♦Pr❡❞ ✭❃✵✮

6.21. Las cabezas y las colas de una lista

Ejercicio 6.21.1. Se denomina cola de una lista ①s a una sublista no vacía de ①s formada

por un elemento y los siguientes hasta el final. Por ejemplo, ❬✸✱✹✱✺❪ es una cola de la lista

❬✶✱✷✱✸✱✹✱✺❪.

Definir la función

❝♦❧❛s ✿✿ ❬❛❪ ✲❃ ❬❬❛❪❪

tal que ✭❝♦❧❛s ①s✮ es la lista de las colas de la lista xs. Por ejemplo,

138 Capítulo 6. Funciones de orden superior

❝♦❧❛s ❬❪ ❂❂ ❬❬❪❪

❝♦❧❛s ❬✶✱✷❪ ❂❂ ❬❬✶✱✷❪✱❬✷❪✱❬❪❪

❝♦❧❛s ❬✹✱✶✱✷✱✺❪ ❂❂ ❬❬✹✱✶✱✷✱✺❪✱❬✶✱✷✱✺❪✱❬✷✱✺❪✱❬✺❪✱❬❪❪

Solución:

❝♦❧❛s ✿✿ ❬❛❪ ✲❃ ❬❬❛❪❪

❝♦❧❛s ❬❪ ❂ ❬❬❪❪

❝♦❧❛s ✭①✿①s✮ ❂ ✭①✿①s✮ ✿ ❝♦❧❛s ①s

Ejercicio 6.21.2. Comprobar con QuickCheck que las funciones ❝♦❧❛s y t❛✐❧s son equivalen-

tes.

Solución: La propiedad es

♣r♦♣❴❝♦❧❛s ✿✿ ❬■♥t❪ ✲❃ ❇♦♦❧

♣r♦♣❴❝♦❧❛s ①s ❂ ❝♦❧❛s ①s ❂❂ t❛✐❧s ①s

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴❝♦❧❛s

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

Ejercicio 6.21.3. Se denomina cabeza de una lista ①s a una sublista no vacía de ①s formada

por el primer elemento y los siguientes hasta uno dado. Por ejemplo, ❬✶✱✷✱✸❪ es una cabeza de

❬✶✱✷✱✸✱✹✱✺❪.

Definir, por recursión, la función

❝❛❜❡③❛s ✿✿ ❬❛❪ ✲❃ ❬❬❛❪❪

tal que ✭❝❛❜❡③❛s ①s✮ es la lista de las cabezas de la lista ①s. Por ejemplo,

❝❛❜❡③❛s ❬❪ ❂❂ ❬❬❪❪

❝❛❜❡③❛s ❬✶✱✹❪ ❂❂ ❬❬❪✱❬✶❪✱❬✶✱✹❪❪

❝❛❜❡③❛s ❬✶✱✹✱✺✱✷✱✸❪ ❂❂ ❬❬❪✱❬✶❪✱❬✶✱✹❪✱❬✶✱✹✱✺❪✱❬✶✱✹✱✺✱✷❪✱❬✶✱✹✱✺✱✷✱✸❪❪

Solución:

❝❛❜❡③❛s ✿✿ ❬❛❪ ✲❃ ❬❬❛❪❪

❝❛❜❡③❛s ❬❪ ❂ ❬❬❪❪

❝❛❜❡③❛s ✭①✿①s✮ ❂ ❬❪ ✿ ❬①✿②s ⑤ ②s ❁✲ ❝❛❜❡③❛s ①s❪

Ejercicio 6.21.4. Definir, por plegado, la función

❝❛❜❡③❛sP ✿✿ ❬❛❪ ✲❃ ❬❬❛❪❪

6.21. Las cabezas y las colas de una lista 139

tal que ✭❝❛❜❡③❛sP ①s✮ es la lista de las cabezasP de la lista ①s. Por ejemplo,

❝❛❜❡③❛sP ❬❪ ❂❂ ❬❬❪❪

❝❛❜❡③❛sP ❬✶✱✹❪ ❂❂ ❬❬❪✱❬✶❪✱❬✶✱✹❪❪

❝❛❜❡③❛sP ❬✶✱✹✱✺✱✷✱✸❪ ❂❂ ❬❬❪✱❬✶❪✱❬✶✱✹❪✱❬✶✱✹✱✺❪✱❬✶✱✹✱✺✱✷❪✱❬✶✱✹✱✺✱✷✱✸❪❪

Solución:

❝❛❜❡③❛sP ✿✿ ❬❛❪ ✲❃ ❬❬❛❪❪

❝❛❜❡③❛sP ❂ ❢♦❧❞r ✭❭① ② ✲❃ ❬①❪✿❬①✿②s ⑤ ②s ❁✲ ②❪✮ ❬❪

Ejercicio 6.21.5. Definir, mediante funciones de orden superior, la función

❝❛❜❡③❛s❙ ✿✿ ❬❛❪ ✲❃ ❬❬❛❪❪

tal que ✭❝❛❜❡③❛s❙ ①s✮ es la lista de las cabezasS de la lista ①s. Por ejemplo,

❝❛❜❡③❛s❙ ❬❪ ❂❂ ❬❬❪❪

❝❛❜❡③❛s❙ ❬✶✱✹❪ ❂❂ ❬❬❪✱❬✶❪✱❬✶✱✹❪❪

❝❛❜❡③❛s❙ ❬✶✱✹✱✺✱✷✱✸❪ ❂❂ ❬❬❪✱❬✶❪✱❬✶✱✹❪✱❬✶✱✹✱✺❪✱❬✶✱✹✱✺✱✷❪✱❬✶✱✹✱✺✱✷✱✸❪❪

Solución:

❝❛❜❡③❛s❙ ✿✿ ❬❛❪ ✲❃ ❬❬❛❪❪

❝❛❜❡③❛s❙ ①s ❂ r❡✈❡rs❡ ✭♠❛♣ r❡✈❡rs❡ ✭❝♦❧❛s ✭r❡✈❡rs❡ ①s✮✮✮

La anterior definición puede escribirse sin argumentos como

❝❛❜❡③❛s❙✬ ✿✿ ❬❛❪ ✲❃ ❬❬❛❪❪

❝❛❜❡③❛s❙✬ ❂ r❡✈❡rs❡ ✳ ♠❛♣ r❡✈❡rs❡ ✳ ✭❝♦❧❛s ✳ r❡✈❡rs❡✮

Ejercicio 6.21.6. Comprobar con QuickCheck que las funciones ❝❛❜❡③❛s y ✐♥✐ts son equiva-

lentes.

Solución: La propiedad es

♣r♦♣❴❝❛❜❡③❛s ✿✿ ❬■♥t❪ ✲❃ ❇♦♦❧

♣r♦♣❴❝❛❜❡③❛s ①s ❂ ❝❛❜❡③❛s ①s ❂❂ ✐♥✐ts ①s

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴❝❛❜❡③❛s

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

Nota. Un caso de estudio para las funciones de orden superior es el capítulo 16 “Codifi-

cación y transmisión de mensajes” (página 331).

140 Capítulo 6. Funciones de orden superior

Capítulo 7

Listas infinitas

En este capítulo se presentan ejercicios para definir funciones que usan listas infinitasy evaluación perezosa. Se corresponde con el tema 10 de [1].

Contenido7.1 Lista obtenida repitiendo un elemento . . . . . . . . . . . . . . . . . . . 142

7.2 Lista obtenida repitiendo cada elemento según su posición . . . . . . . 144

7.3 Potencias de un número menores que otro dado . . . . . . . . . . . . . 144

7.4 Múltiplos cuyos dígitos verifican una propiedad . . . . . . . . . . . . . 145

7.5 Aplicación iterada de una función a un elemento . . . . . . . . . . . . 145

7.6 Agrupamiento de elementos consecutivos . . . . . . . . . . . . . . . . 146

7.7 La sucesión de Collatz . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148

7.8 Números primos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150

7.9 Descomposiciones como suma de dos primos . . . . . . . . . . . . . . 151

7.10 Números expresables como producto de dos primos . . . . . . . . . . 152

7.11 Números muy compuestos . . . . . . . . . . . . . . . . . . . . . . . . . 152

7.12 Suma de números primos truncables . . . . . . . . . . . . . . . . . . . . 154

7.13 Primos permutables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155

7.14 Ordenación de los números enteros . . . . . . . . . . . . . . . . . . . . 155

7.15 La sucesión de Hamming . . . . . . . . . . . . . . . . . . . . . . . . . . 157

7.16 Suma de los primos menores que n . . . . . . . . . . . . . . . . . . . . . 160

7.17 Menor número triangular con más de n divisores . . . . . . . . . . . . 161

7.18 Números primos consecutivos con dígitos con igual media . . . . . . . 162

141

142 Capítulo 7. Listas infinitas

7.19 Decisión de pertenencia al rango de una función creciente . . . . . . . 163

7.20 Pares ordenados por posición . . . . . . . . . . . . . . . . . . . . . . . . 163

7.21 Aplicación iterada de una función . . . . . . . . . . . . . . . . . . . . . 165

7.22 Expresión de un número como suma de dos de una lista . . . . . . . . 165

7.23 La bicicleta de Turing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166

7.24 Sucesión de Golomb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167

7.1. Lista obtenida repitiendo un elemento

Ejercicio 7.1.1. Definir, por recursión, la función

r❡♣✐t❡ ✿✿ ❛ ✲❃ ❬❛❪

tal que ✭r❡♣✐t❡ ①✮ es la lista infinita cuyos elementos son ①. Por ejemplo,

r❡♣✐t❡ ✺ ❂❂ ❬✺✱✺✱✺✱✺✱✺✱✺✱✺✱✺✱✺✱✺✱✺✱✺✱✺✱✺✱✺✱✺✱✺✱✺✱✳✳✳

t❛❦❡ ✸ ✭r❡♣✐t❡ ✺✮ ❂❂ ❬✺✱✺✱✺❪

Nota: La función r❡♣✐t❡ es equivalente a la función r❡♣❡❛t definida en el preludio de Haskell.

Solución:

r❡♣✐t❡ ✿✿ ❛ ✲❃ ❬❛❪

r❡♣✐t❡ ① ❂ ① ✿ r❡♣✐t❡ ①

Ejercicio 7.1.2. Definir, por comprensión, la función

r❡♣✐t❡❈ ✿✿ ❛ ✲❃ ❬❛❪

tal que ✭r❡♣✐t❡❈ ①✮ es la lista infinita cuyos elementos son ①. Por ejemplo,

r❡♣✐t❡❈ ✺ ❂❂ ❬✺✱✺✱✺✱✺✱✺✱✺✱✺✱✺✱✺✱✺✱✺✱✺✱✺✱✺✱✺✱✺✱✺✱✺✱✳✳✳

t❛❦❡ ✸ ✭r❡♣✐t❡❈ ✺✮ ❂❂ ❬✺✱✺✱✺❪

Solución:

r❡♣✐t❡❈ ✿✿ ❛ ✲❃ ❬❛❪

r❡♣✐t❡❈ ① ❂ ❬① ⑤ ❴ ❁✲ ❬✶✳✳❪❪

Ejercicio 7.1.3. Definir, por recursión, la función

r❡♣✐t❡❋✐♥✐t❛ ✿✿ ■♥t✲❃ ❛ ✲❃ ❬❛❪

7.1. Lista obtenida repitiendo un elemento 143

tal que ✭r❡♣✐t❡❋✐♥✐t❛ ♥ ①✮ es la lista con ♥ elementos iguales a ①. Por ejemplo,

r❡♣✐t❡❋✐♥✐t❛ ✸ ✺ ❂❂ ❬✺✱✺✱✺❪

Nota: La función r❡♣✐t❡❋✐♥✐t❛ es equivalente a la función r❡♣❧✐❝❛t❡ definida en el preludio

de Haskell.

Solución:

r❡♣✐t❡❋✐♥✐t❛ ✿✿ ■♥t ✲❃ ❛ ✲❃ ❬❛❪

r❡♣✐t❡❋✐♥✐t❛ ✵ ① ❂ ❬❪

r❡♣✐t❡❋✐♥✐t❛ ♥ ① ❂ ① ✿ r❡♣✐t❡❋✐♥✐t❛ ✭♥✲✶✮ ①

Ejercicio 7.1.4. Definir, por comprensión, la función

r❡♣✐t❡❋✐♥✐t❛❈ ✿✿ ■♥t✲❃ ❛ ✲❃ ❬❛❪

tal que ✭r❡♣✐t❡❋✐♥✐t❛❈ ♥ ①✮ es la lista con ♥ elementos iguales a ①. Por ejemplo,

r❡♣✐t❡❋✐♥✐t❛❈ ✸ ✺ ❂❂ ❬✺✱✺✱✺❪

Solución:

r❡♣✐t❡❋✐♥✐t❛❈ ✿✿ ■♥t ✲❃ ❛ ✲❃ ❬❛❪

r❡♣✐t❡❋✐♥✐t❛❈ ♥ ① ❂ ❬① ⑤ ❴ ❁✲ ❬✶✳✳♥❪❪

Ejercicio 7.1.5. Definir, por usando r❡♣✐t❡, la función

r❡♣✐t❡❋✐♥✐t❛✬ ✿✿ ■♥t✲❃ ❛ ✲❃ ❬❛❪

tal que ✭r❡♣✐t❡❋✐♥✐t❛✬ ♥ ①✮ es la lista con ♥ elementos iguales a ①. Por ejemplo,

r❡♣✐t❡❋✐♥✐t❛✬ ✸ ✺ ❂❂ ❬✺✱✺✱✺❪

Solución:

r❡♣✐t❡❋✐♥✐t❛✬ ✿✿ ■♥t ✲❃ ❛ ✲❃ ❬❛❪

r❡♣✐t❡❋✐♥✐t❛✬ ♥ ① ❂ t❛❦❡ ♥ ✭r❡♣✐t❡ ①✮

144 Capítulo 7. Listas infinitas

7.2. Lista obtenida repitiendo cada elemento según su po-sición

Ejercicio 7.2.1. Definir, por comprensión, la función

❡❝♦❈ ✿✿ ❬❛❪ ✲❃ ❬❛❪

tal que ✭❡❝♦❈ ①s✮ es la lista obtenida a partir de la lista ①s repitiendo cada elemento tantas

veces como indica su posición: el primer elemento se repite 1 vez, el segundo 2 veces y así sucesi-

vamente. Por ejemplo,

❡❝♦❈ ✧❛❜❝❞✧ ❂❂ ✧❛❜❜❝❝❝❞❞❞❞✧

t❛❦❡ ✶✵ ✭❡❝♦❈ ❬✶✳✳❪✮ ❂❂ ❬✶✱✷✱✷✱✸✱✸✱✸✱✹✱✹✱✹✱✹❪

Solución:

❡❝♦❈ ✿✿ ❬❛❪ ✲❃ ❬❛❪

❡❝♦❈ ①s ❂ ❝♦♥❝❛t ❬r❡♣❧✐❝❛t❡ ✐ ① ⑤ ✭✐✱①✮ ❁✲ ③✐♣ ❬✶✳✳❪ ①s❪

Ejercicio 7.2.2. Definir, por recursión, la función

❡❝♦❘ ✿✿ ❬❛❪ ✲❃ ❬❛❪

tal que ✭❡❝♦❘ ①s✮ es la cadena obtenida a partir de la cadena ①s repitiendo cada elemento tan-

tas veces como indica su posición: el primer elemento se repite 1 vez, el segundo 2 veces y así

sucesivamente. Por ejemplo,

❡❝♦❘ ✧❛❜❝❞✧ ❂❂ ✧❛❜❜❝❝❝❞❞❞❞✧

t❛❦❡ ✶✵ ✭❡❝♦❘ ❬✶✳✳❪✮ ❂❂ ❬✶✱✷✱✷✱✸✱✸✱✸✱✹✱✹✱✹✱✹❪

Solución:

❡❝♦❘ ✿✿ ❬❛❪ ✲❃ ❬❛❪

❡❝♦❘ ①s ❂ ❛✉① ✶ ①s

✇❤❡r❡ ❛✉① ♥ ❬❪ ❂ ❬❪

❛✉① ♥ ✭①✿①s✮ ❂ r❡♣❧✐❝❛t❡ ♥ ① ✰✰ ❛✉① ✭♥✰✶✮ ①s

7.3. Potencias de un número menores que otro dado

Ejercicio 7.3.1. Definir, usando t❛❦❡❲❤✐❧❡ y ♠❛♣, la función

♣♦t❡♥❝✐❛s▼❡♥♦r❡s ✿✿ ■♥t ✲❃ ■♥t ✲❃ ❬■♥t❪

tal que ✭♣♦t❡♥❝✐❛s▼❡♥♦r❡s ① ②✮ es la lista de las potencias de ① menores que ②. Por ejemplo,

7.4. Múltiplos cuyos dígitos verifican una propiedad 145

♣♦t❡♥❝✐❛s▼❡♥♦r❡s ✷ ✶✵✵✵ ❂❂ ❬✷✱✹✱✽✱✶✻✱✸✷✱✻✹✱✶✷✽✱✷✺✻✱✺✶✷❪

Solución:

♣♦t❡♥❝✐❛s▼❡♥♦r❡s ✿✿ ■♥t ✲❃ ■♥t ✲❃ ❬■♥t❪

♣♦t❡♥❝✐❛s▼❡♥♦r❡s ① ② ❂ t❛❦❡❲❤✐❧❡ ✭❁②✮ ✭♠❛♣ ✭①❫✮ ❬✶✳✳❪✮

7.4. Múltiplos cuyos dígitos verifican una propiedad

Ejercicio 7.4.1 (Problema 303 del proyecto Euler). Definir la función

♠✉❧t✐♣❧♦s❘❡str✐♥❣✐❞♦s ✿✿ ■♥t ✲❃ ✭■♥t ✲❃ ❇♦♦❧✮ ✲❃ ❬■♥t❪

tal que ✭♠✉❧t✐♣❧♦s❘❡str✐♥❣✐❞♦s ♥ ①✮ es la lista de los múltiplos de ♥ tales que todos sus

dígitos verifican la propiedad ♣. Por ejemplo,

t❛❦❡ ✹ ✭♠✉❧t✐♣❧♦s❘❡str✐♥❣✐❞♦s ✺ ✭❁❂✸✮✮ ❂❂ ❬✶✵✱✷✵✱✸✵✱✶✵✵❪

t❛❦❡ ✺ ✭♠✉❧t✐♣❧♦s❘❡str✐♥❣✐❞♦s ✸ ✭❁❂✹✮✮ ❂❂ ❬✸✱✶✷✱✷✶✱✷✹✱✸✵❪

t❛❦❡ ✺ ✭♠✉❧t✐♣❧♦s❘❡str✐♥❣✐❞♦s ✸ ❡✈❡♥✮ ❂❂ ❬✻✱✷✹✱✹✷✱✹✽✱✻✵❪

Solución:

♠✉❧t✐♣❧♦s❘❡str✐♥❣✐❞♦s ✿✿ ■♥t ✲❃ ✭■♥t ✲❃ ❇♦♦❧✮ ✲❃ ❬■♥t❪

♠✉❧t✐♣❧♦s❘❡str✐♥❣✐❞♦s ♥ ♣ ❂

❬② ⑤ ② ❁✲ ❬♥✱✷✯♥✳✳❪✱ ❛❧❧ ♣ ✭❞✐❣✐t♦s ②✮❪

donde ✭❞✐❣✐t♦s ♥✮ es la lista de los dígitos de ♥, Por ejemplo,

❞✐❣✐t♦s ✸✷✼ ❂❂ ❬✸✱✷✱✼❪

❞✐❣✐t♦s ✿✿ ■♥t ✲❃ ❬■♥t❪

❞✐❣✐t♦s ♥ ❂ ❬r❡❛❞ ❬①❪ ⑤ ① ❁✲ s❤♦✇ ♥❪

7.5. Aplicación iterada de una función a un elemento

Ejercicio 7.5.1. Definir, por recursión, la función

✐t❡r❛ ✿✿ ✭❛ ✲❃ ❛✮ ✲❃ ❛ ✲❃ ❬❛❪

tal que ✭✐t❡r❛ ❢ ①✮ es la lista cuyo primer elemento es ① y los siguientes elementos se calculan

aplicando la función ❢ al elemento anterior. Por ejemplo,

146 Capítulo 7. Listas infinitas

❣❤❝✐❃ ✐t❡r❛ ✭✰✶✮ ✸

❬✸✱✹✱✺✱✻✱✼✱✽✱✾✱✶✵✱✶✶✱✶✷✱■♥t❡rr✉♣t❡❞✦

❣❤❝✐❃ ✐t❡r❛ ✭✯✷✮ ✶

❬✶✱✷✱✹✱✽✱✶✻✱✸✷✱✻✹✱■♥t❡rr✉♣t❡❞✦

❣❤❝✐❃ ✐t❡r❛ ✭❵❞✐✈❵ ✶✵✮ ✶✾✼✷

❬✶✾✼✷✱✶✾✼✱✶✾✱✶✱✵✱✵✱✵✱✵✱✵✱✵✱■♥t❡rr✉♣t❡❞✦

Nota: La función ✐t❡r❛ es equivalente a la función ✐t❡r❛t❡ definida en el preludio de Haskell.

Solución:

✐t❡r❛ ✿✿ ✭❛ ✲❃ ❛✮ ✲❃ ❛ ✲❃ ❬❛❪

✐t❡r❛ ❢ ① ❂ ① ✿ ✐t❡r❛ ❢ ✭❢ ①✮

7.6. Agrupamiento de elementos consecutivos

Ejercicio 7.6.1. Definir, por recursión, la función

❛❣r✉♣❛ ✿✿ ■♥t ✲❃ ❬❛❪ ✲❃ ❬❬❛❪❪

tal que ✭❛❣r✉♣❛ ♥ ①s✮ es la lista formada por listas de ♥ elementos consecutivos de la lista ①s

(salvo posiblemente la última que puede tener menos de n elementos). Por ejemplo,

❣❤❝✐❃ ❛❣r✉♣❛ ✷ ❬✸✱✶✱✺✱✽✱✷✱✼❪

❬❬✸✱✶❪✱❬✺✱✽❪✱❬✷✱✼❪❪

❣❤❝✐❃ ❛❣r✉♣❛ ✷ ❬✸✱✶✱✺✱✽✱✷✱✼✱✾❪

❬❬✸✱✶❪✱❬✺✱✽❪✱❬✷✱✼❪✱❬✾❪❪

❣❤❝✐❃ ❛❣r✉♣❛ ✺ ✧t♦❞♦ ♥❡❝✐♦ ❝♦♥❢✉♥❞❡ ✈❛❧♦r ② ♣r❡❝✐♦✧

❬✧t♦❞♦ ✧✱✧♥❡❝✐♦✧✱✧ ❝♦♥❢✧✱✧✉♥❞❡ ✧✱✧✈❛❧♦r✧✱✧ ② ♣r✧✱✧❡❝✐♦✧❪

Solución:

❛❣r✉♣❛ ✿✿ ■♥t ✲❃ ❬❛❪ ✲❃ ❬❬❛❪❪

❛❣r✉♣❛ ♥ ❬❪ ❂ ❬❪

❛❣r✉♣❛ ♥ ①s ❂ t❛❦❡ ♥ ①s ✿ ❛❣r✉♣❛ ♥ ✭❞r♦♣ ♥ ①s✮

Ejercicio 7.6.2. Definir, de manera no recursiva, la función

❛❣r✉♣❛✬ ✿✿ ■♥t ✲❃ ❬❛❪ ✲❃ ❬❬❛❪❪

tal que ✭❛❣r✉♣❛✬ ♥ ①s✮ es la lista formada por listas de ♥ elementos consecutivos de la lista ①s

(salvo posiblemente la última que puede tener menos de n elementos). Por ejemplo,

7.6. Agrupamiento de elementos consecutivos 147

❣❤❝✐❃ ❛❣r✉♣❛✬ ✷ ❬✸✱✶✱✺✱✽✱✷✱✼❪

❬❬✸✱✶❪✱❬✺✱✽❪✱❬✷✱✼❪❪

❣❤❝✐❃ ❛❣r✉♣❛✬ ✷ ❬✸✱✶✱✺✱✽✱✷✱✼✱✾❪

❬❬✸✱✶❪✱❬✺✱✽❪✱❬✷✱✼❪✱❬✾❪❪

❣❤❝✐❃ ❛❣r✉♣❛✬ ✺ ✧t♦❞♦ ♥❡❝✐♦ ❝♦♥❢✉♥❞❡ ✈❛❧♦r ② ♣r❡❝✐♦✧

❬✧t♦❞♦ ✧✱✧♥❡❝✐♦✧✱✧ ❝♦♥❢✧✱✧✉♥❞❡ ✧✱✧✈❛❧♦r✧✱✧ ② ♣r✧✱✧❡❝✐♦✧❪

Solución:

❛❣r✉♣❛✬ ✿✿ ■♥t ✲❃ ❬❛❪ ✲❃ ❬❬❛❪❪

❛❣r✉♣❛✬ ♥ ❂ t❛❦❡❲❤✐❧❡ ✭♥♦t ✳ ♥✉❧❧✮

✳ ♠❛♣ ✭t❛❦❡ ♥✮

✳ ✐t❡r❛t❡ ✭❞r♦♣ ♥✮

Puede verse su funcionamiento en el siguiente ejemplo,

✐t❡r❛t❡ ✭❞r♦♣ ✷✮ ❬✺✳✳✶✵❪

❂❂❃ ❬❬✺✱✻✱✼✱✽✱✾✱✶✵❪✱❬✼✱✽✱✾✱✶✵❪✱❬✾✱✶✵❪✱❬❪✱❬❪✱✳✳✳

♠❛♣ ✭t❛❦❡ ✷✮ ✭✐t❡r❛t❡ ✭❞r♦♣ ✷✮ ❬✺✳✳✶✵❪✮

❂❂❃ ❬❬✺✱✻❪✱❬✼✱✽❪✱❬✾✱✶✵❪✱❬❪✱❬❪✱❬❪✱❬❪✱✳✳✳

t❛❦❡❲❤✐❧❡ ✭♥♦t ✳ ♥✉❧❧✮ ✭♠❛♣ ✭t❛❦❡ ✷✮ ✭✐t❡r❛t❡ ✭❞r♦♣ ✷✮ ❬✺✳✳✶✵❪✮✮

❂❂❃ ❬❬✺✱✻❪✱❬✼✱✽❪✱❬✾✱✶✵❪❪

Ejercicio 7.6.3. Definir, y comprobar, con QuickCheck las dos propiedades que caracterizan a la

función ❛❣r✉♣❛:

todos los grupos tienen que tener la longitud determinada (salvo el último que puede tener

una longitud menor) y

combinando todos los grupos se obtiene la lista inicial.

Solución: La primera propiedad es

♣r♦♣❴❆❣r✉♣❛▲♦♥❣✐t✉❞ ✿✿ ■♥t ✲❃ ❬■♥t❪ ✲❃ Pr♦♣❡rt②

♣r♦♣❴❆❣r✉♣❛▲♦♥❣✐t✉❞ ♥ ①s ❂

♥ ❃ ✵ ✫✫ ♥♦t ✭♥✉❧❧ ❣s✮ ❂❂❃

❛♥❞ ❬❧❡♥❣t❤ ❣ ❂❂ ♥ ⑤ ❣ ❁✲ ✐♥✐t ❣s❪ ✫✫

✵ ❁ ❧❡♥❣t❤ ✭❧❛st ❣s✮ ✫✫ ❧❡♥❣t❤ ✭❧❛st ❣s✮ ❁❂ ♥

✇❤❡r❡ ❣s ❂ ❛❣r✉♣❛ ♥ ①s

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴❆❣r✉♣❛▲♦♥❣✐t✉❞

❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

148 Capítulo 7. Listas infinitas

La segunda propiedad es

♣r♦♣❴❆❣r✉♣❛❈♦♠❜✐♥❛ ✿✿ ■♥t ✲❃ ❬■♥t❪ ✲❃ Pr♦♣❡rt②

♣r♦♣❴❆❣r✉♣❛❈♦♠❜✐♥❛ ♥ ①s ❂

♥ ❃ ✵ ❂❂❃ ❝♦♥❝❛t ✭❛❣r✉♣❛ ♥ ①s✮ ❂❂ ①s

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴❆❣r✉♣❛❈♦♠❜✐♥❛

❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

7.7. La sucesión de Collatz

Se considera la siguiente operación, aplicable a cualquier número entero positivo:

Si el número es par, se divide entre 2.

Si el número es impar, se multiplica por 3 y se suma 1.

Dado un número cualquiera, podemos considerar su órbita; es decir, las imágenes su-cesivas al iterar la función. Por ejemplo, la órbita de 13 es 13, 40, 20, 10, 5, 16, 8, 4, 2, 1,4, 2, 1, . . . Si observamos este ejemplo, la órbita de 13 es periódica; es decir, se repite in-definidamente a partir de un momento dado. La conjetura de Collatz dice que siemprealcanzaremos el 1 para cualquier número con el que comencemos. Ejemplos:

Empezando en n = 6 se obtiene 6, 3, 10, 5, 16, 8, 4, 2, 1.

Empezando en n = 11 se obtiene: 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1.

Empezando en n = 27, la sucesión tiene 112 pasos, llegando hasta 9232 antes dedescender a 1: 27, 82, 41, 124, 62, 31, 94, 47, 142, 71, 214, 107, 322, 161, 484, 242, 121,364, 182, 91, 274, 137, 412, 206, 103, 310, 155, 466, 233, 700, 350, 175, 526, 263, 790,395, 1186, 593, 1780, 890, 445, 1336, 668, 334, 167, 502, 251, 754, 377, 1132, 566, 283,850, 425, 1276, 638, 319, 958, 479, 1438, 719, 2158, 1079, 3238, 1619, 4858, 2429, 7288,3644, 1822, 911, 2734, 1367, 4102, 2051, 6154, 3077, 9232, 4616, 2308, 1154, 577, 1732,866, 433, 1300, 650, 325, 976, 488, 244, 122, 61, 184, 92, 46, 23, 70, 35, 106, 53, 160, 80,40, 20, 10, 5, 16, 8, 4, 2, 1.

Ejercicio 7.7.1. Definir la función

s✐❣✉✐❡♥t❡ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

tal que ✭s✐❣✉✐❡♥t❡ ♥✮ es el siguiente de ♥ en la sucesión de Collatz. Por ejemplo,

7.7. La sucesión de Collatz 149

s✐❣✉✐❡♥t❡ ✶✸ ❂❂ ✹✵

s✐❣✉✐❡♥t❡ ✹✵ ❂❂ ✷✵

Solución:

s✐❣✉✐❡♥t❡ ♥ ⑤ ❡✈❡♥ ♥ ❂ ♥ ❵❞✐✈❵ ✷

⑤ ♦t❤❡r✇✐s❡ ❂ ✸✯♥✰✶

Ejercicio 7.7.2. Definir, por recursión, la función

❝♦❧❧❛t③ ✿✿ ■♥t❡❣❡r ✲❃ ❬■♥t❡❣❡r❪

tal que ✭❝♦❧❧❛t③ ♥✮ es la órbita de Collatz de ♥ hasta alcanzar el 1. Por ejemplo,

❝♦❧❧❛t③ ✶✸ ❂❂ ❬✶✸✱✹✵✱✷✵✱✶✵✱✺✱✶✻✱✽✱✹✱✷✱✶❪

Solución:

❝♦❧❧❛t③ ✿✿ ■♥t❡❣❡r ✲❃ ❬■♥t❡❣❡r❪

❝♦❧❧❛t③ ✶ ❂ ❬✶❪

❝♦❧❧❛t③ ♥ ❂ ♥ ✿ ❝♦❧❧❛t③ ✭s✐❣✉✐❡♥t❡ ♥✮

Ejercicio 7.7.3. Definir, sin recursión, la función

❝♦❧❧❛t③✬ ✿✿ ■♥t❡❣❡r ✲❃ ❬■♥t❡❣❡r❪

tal que ✭❝♦❧❧❛t③✬ ♥✮ es la órbita de Collatz de ♥ hasta alcanzar el 1. Por ejemplo,

❝♦❧❧❛t③✬ ✶✸ ❂❂ ❬✶✸✱✹✵✱✷✵✱✶✵✱✺✱✶✻✱✽✱✹✱✷✱✶❪

Indicación: Usar t❛❦❡❲❤✐❧❡ e ✐t❡r❛t❡.

Solución:

❝♦❧❧❛t③✬ ✿✿ ■♥t❡❣❡r ✲❃ ❬■♥t❡❣❡r❪

❝♦❧❧❛t③✬ ♥ ❂ ✭t❛❦❡❲❤✐❧❡ ✭✴❂✶✮ ✭✐t❡r❛t❡ s✐❣✉✐❡♥t❡ ♥✮✮ ✰✰ ❬✶❪

Ejercicio 7.7.4. Definir la función

♠❡♥♦r❈♦❧❧❛t③▼❛②♦r ✿✿ ■♥t ✲❃ ■♥t❡❣❡r

tal que ✭♠❡♥♦r❈♦❧❧❛t③▼❛②♦r ①✮ es el menor número cuya órbita de Collatz tiene más de ①

elementos. Por ejemplo,

♠❡♥♦r❈♦❧❧❛t③▼❛②♦r ✶✵✵ ❂❂ ✷✼

Solución:

150 Capítulo 7. Listas infinitas

♠❡♥♦r❈♦❧❧❛t③▼❛②♦r ✿✿ ■♥t ✲❃ ■♥t❡❣❡r

♠❡♥♦r❈♦❧❧❛t③▼❛②♦r ① ❂ ❤❡❛❞ ❬② ⑤ ② ❁✲ ❬✶✳✳❪✱ ❧❡♥❣t❤ ✭❝♦❧❧❛t③ ②✮ ❃ ①❪

Ejercicio 7.7.5. Definir la función

♠❡♥♦r❈♦❧❧❛t③❙✉♣❡r❛ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

tal que ✭♠❡♥♦r❈♦❧❧❛t③❙✉♣❡r❛ ①✮ es el menor número cuya órbita de Collatz tiene algún ele-

mento mayor que ①. Por ejemplo,

♠❡♥♦r❈♦❧❧❛t③❙✉♣❡r❛ ✶✵✵ ❂❂ ✶✺

Solución:

♠❡♥♦r❈♦❧❧❛t③❙✉♣❡r❛ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

♠❡♥♦r❈♦❧❧❛t③❙✉♣❡r❛ ① ❂

❤❡❛❞ ❬② ⑤ ② ❁✲ ❬✶✳✳❪✱ ♠❛①✐♠✉♠ ✭❝♦❧❧❛t③ ②✮ ❃ ①❪

Otra definición alternativa es

♠❡♥♦r❈♦❧❧❛t③❙✉♣❡r❛✬ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

♠❡♥♦r❈♦❧❧❛t③❙✉♣❡r❛✬ ① ❂ ❤❡❛❞ ❬♥ ⑤ ♥ ❁✲ ❬✶✳✳❪✱ t ❁✲ ❝♦❧❧❛t③✬ ♥✱ t ❃ ①❪

7.8. Números primos

Ejercicio 7.8.1. Definir la constante

♣r✐♠♦s ✿✿ ■♥t❡❣r❛❧ ❛ ❂❃ ❬❛❪

tal que ♣r✐♠♦s es la lista de los primos mediante la criba de Eratóstenes. Ejemplo,

t❛❦❡ ✶✵ ♣r✐♠♦s ❂❂ ❬✷✱✸✱✺✱✼✱✶✶✱✶✸✱✶✼✱✶✾✱✷✸✱✷✾❪

Solución:

♣r✐♠♦s ✿✿ ■♥t❡❣r❛❧ ❛ ❂❃ ❬❛❪

♣r✐♠♦s ❂ ❝r✐❜❛ ❬✷✳✳❪

✇❤❡r❡ ❝r✐❜❛ ❬❪ ❂ ❬❪

❝r✐❜❛ ✭♥✿♥s✮ ❂ ♥ ✿ ❝r✐❜❛ ✭❡❧✐♠✐♥❛ ♥ ♥s✮

❡❧✐♠✐♥❛ ♥ ①s ❂ ❬① ⑤ ① ❁✲ ①s✱ ① ❵♠♦❞❵ ♥ ✴❂ ✵❪

Ejercicio 7.8.2. Definir la función

7.9. Descomposiciones como suma de dos primos 151

♣r✐♠♦ ✿✿ ■♥t❡❣r❛❧ ❛ ❂❃ ❛ ✲❃ ❇♦♦❧

tal que ✭♣r✐♠♦ ①✮ se verifica si ① es primo. Por ejemplo,

♣r✐♠♦ ✼ ❂❂ ❚r✉❡

♣r✐♠♦ ✽ ❂❂ ❋❛❧s❡

Solución:

♣r✐♠♦ ✿✿ ■♥t❡❣r❛❧ ❛ ❂❃ ❛ ✲❃ ❇♦♦❧

♣r✐♠♦ ① ❂ ① ❂❂ ❤❡❛❞ ✭❞r♦♣❲❤✐❧❡ ✭❁①✮ ♣r✐♠♦s✮

7.9. Descomposiciones como suma de dos primos

Ejercicio 7.9.1. Definir la función

s✉♠❛❉❡❉♦sPr✐♠♦s ✿✿ ■♥t ✲❃ ❬✭■♥t✱■♥t✮❪

tal que ✭s✉♠❛❉❡❉♦sPr✐♠♦s ♥✮ es la lista de las distintas descomposiciones de ♥ como suma de

dos números primos. Por ejemplo,

s✉♠❛❉❡❉♦sPr✐♠♦s ✸✵ ❂❂ ❬✭✼✱✷✸✮✱✭✶✶✱✶✾✮✱✭✶✸✱✶✼✮❪

Calcular, usando la función s✉♠❛❉❡❉♦sPr✐♠♦s, el menor número que puede escribirse de 10

formas distintas como suma de dos primos.

Solución:

s✉♠❛❉❡❉♦sPr✐♠♦s ✿✿ ■♥t ✲❃ ❬✭■♥t✱■♥t✮❪

s✉♠❛❉❡❉♦sPr✐♠♦s ♥ ❂

❬✭①✱♥✲①✮ ⑤ ① ❁✲ ♣r✐♠♦s◆✱ ① ❁ ♥✲①✱ ❡❧❡♠ ✭♥✲①✮ ♣r✐♠♦s◆❪

✇❤❡r❡ ♣r✐♠♦s◆ ❂ t❛❦❡❲❤✐❧❡ ✭❁❂♥✮ ♣r✐♠♦s

donde ♣r✐♠♦s está definida en la página 150.El cálculo es

❣❤❝✐❃ ❤❡❛❞ ❬① ⑤ ① ❁✲ ❬✶✳✳❪✱ ❧❡♥❣t❤ ✭s✉♠❛❉❡❉♦sPr✐♠♦s ①✮ ❂❂ ✶✵❪

✶✶✹

152 Capítulo 7. Listas infinitas

7.10. Números expresables como producto de dos primos

Ejercicio 7.10.1. Definir la función

❡sPr♦❞✉❝t♦❉❡❉♦sPr✐♠♦s ✿✿ ■♥t ✲❃ ❇♦♦❧

tal que ✭❡sPr♦❞✉❝t♦❉❡❉♦sPr✐♠♦s ♥✮ se verifica si ♥ es el producto de dos primos distintos.

Por ejemplo,

❡sPr♦❞✉❝t♦❉❡❉♦sPr✐♠♦s ✻ ❂❂ ❚r✉❡

❡sPr♦❞✉❝t♦❉❡❉♦sPr✐♠♦s ✾ ❂❂ ❋❛❧s❡

Solución:

❡sPr♦❞✉❝t♦❉❡❉♦sPr✐♠♦s ✿✿ ■♥t ✲❃ ❇♦♦❧

❡sPr♦❞✉❝t♦❉❡❉♦sPr✐♠♦s ♥ ❂

❬① ⑤ ① ❁✲ ♣r✐♠♦s◆✱

♠♦❞ ♥ ① ❂❂ ✵✱

❞✐✈ ♥ ① ✴❂ ①✱

❡❧❡♠ ✭❞✐✈ ♥ ①✮ ♣r✐♠♦s◆❪ ✴❂ ❬❪

✇❤❡r❡ ♣r✐♠♦s◆ ❂ t❛❦❡❲❤✐❧❡ ✭❁❂♥✮ ♣r✐♠♦s

donde ♣r✐♠♦s está definida en la página 150.

7.11. Números muy compuestos

Ejercicio 7.11.1. Un número es muy compuesto si tiene más divisores que sus anteriores. Por

ejemplo, 12 es muy compuesto porque tiene 6 divisores (1, 2, 3, 4, 6, 12) y todos los números del

1 al 11 tienen menos de 6 divisores.

Definir la función

❡s▼✉②❈♦♠♣✉❡st♦ ✿✿ ■♥t ✲❃ ❇♦♦❧

tal que ✭❡s▼✉②❈♦♠♣✉❡st♦ ①✮ se verifica si ① es un número muy compuesto. Por ejemplo,

❡s▼✉②❈♦♠♣✉❡st♦ ✷✹ ❂❂ ❚r✉❡

❡s▼✉②❈♦♠♣✉❡st♦ ✷✺ ❂❂ ❋❛❧s❡

Solución:

❡s▼✉②❈♦♠♣✉❡st♦ ✿✿ ■♥t ✲❃ ❇♦♦❧

❡s▼✉②❈♦♠♣✉❡st♦ ① ❂

❛♥❞ ❬♥✉♠❡r♦❉✐✈✐s♦r❡s ② ❁ ♥ ⑤ ② ❁✲ ❬✶✳✳①✲✶❪❪

✇❤❡r❡ ♥ ❂ ♥✉♠❡r♦❉✐✈✐s♦r❡s ①

7.11. Números muy compuestos 153

donde se usan las siguiente funciones auxiliares:

✭♥✉♠❡r♦❉✐✈✐s♦r❡s ①✮ es el número de divisores de ①. Por ejemplo,

♥✉♠❡r♦❉✐✈✐s♦r❡s ✷✹ ❂❂ ✽

♥✉♠❡r♦❉✐✈✐s♦r❡s ✿✿ ■♥t ✲❃ ■♥t

♥✉♠❡r♦❉✐✈✐s♦r❡s ❂ ❧❡♥❣t❤ ✳ ❞✐✈✐s♦r❡s

✭❞✐✈✐s♦r❡s ①✮ es la lista de los divisores de ①. Por ejemplo,

❞✐✈✐s♦r❡s ✷✹ ❂❂ ❬✶✱✷✱✸✱✹✱✻✱✽✱✶✷✱✷✹❪

❞✐✈✐s♦r❡s ✿✿ ■♥t ✲❃ ❬■♥t❪

❞✐✈✐s♦r❡s ① ❂ ❬② ⑤ ② ❁✲ ❬✶✳✳①❪✱ ♠♦❞ ① ② ❂❂ ✵❪

Los primeros números muy compuestos son

❣❤❝✐❃ t❛❦❡ ✶✹ ❬① ⑤ ① ❁✲ ❬✶✳✳❪✱ ❡s▼✉②❈♦♠♣✉❡st♦ ①❪

❬✶✱✷✱✹✱✻✱✶✷✱✷✹✱✸✻✱✹✽✱✻✵✱✶✷✵✱✶✽✵✱✷✹✵✱✸✻✵✱✼✷✵❪

Ejercicio 7.11.2. Calcular el menor número muy compuesto de 4 cifras.

Solución: El cálculo del menor número muy compuesto de 4 cifras es

❣❤❝✐❃ ❤❡❛❞ ❬① ⑤ ① ❁✲ ❬✶✵✵✵✳✳❪✱ ❡s▼✉②❈♦♠♣✉❡st♦ ①❪

✶✷✻✵

Ejercicio 7.11.3. Definir la función

♠✉②❈♦♠♣✉❡st♦ ✿✿ ■♥t ✲❃ ■♥t

tal que ✭♠✉②❈♦♠♣✉❡st♦ ♥✮ es el ♥–ésimo número muy compuesto. Por ejemplo,

♠✉②❈♦♠♣✉❡st♦ ✶✵ ❂❂ ✶✽✵

Solución:

♠✉②❈♦♠♣✉❡st♦ ✿✿ ■♥t ✲❃ ■♥t

♠✉②❈♦♠♣✉❡st♦ ♥ ❂

❬① ⑤ ① ❁✲ ❬✶✳✳❪✱ ❡s▼✉②❈♦♠♣✉❡st♦ ①❪ ✦✦ ♥

154 Capítulo 7. Listas infinitas

7.12. Suma de números primos truncables

Los siguientes ejercicios están basados en el problema 37 del proyecto Euler1.Un número primo es truncable si los números que se obtienen eliminado cifras, de

derecha a izquierda, son primos. Por ejemplo, 599 es un primo truncable porque 599, 59y 5 son primos; en cambio, 577 es un primo no truncable porque 57 no es primo.

Ejercicio 7.12.1. Definir la función

♣r✐♠♦❚r✉♥❝❛❜❧❡ ✿✿ ■♥t ✲❃ ❇♦♦❧

tal que ✭♣r✐♠♦❚r✉♥❝❛❜❧❡ ①✮ se verifica si ① es un primo truncable. Por ejemplo,

♣r✐♠♦❚r✉♥❝❛❜❧❡ ✺✾✾ ❂❂ ❚r✉❡

♣r✐♠♦❚r✉♥❝❛❜❧❡ ✺✼✼ ❂❂ ❋❛❧s❡

Solución:

♣r✐♠♦❚r✉♥❝❛❜❧❡ ✿✿ ■♥t ✲❃ ❇♦♦❧

♣r✐♠♦❚r✉♥❝❛❜❧❡ ①

⑤ ① ❁ ✶✵ ❂ ♣r✐♠♦ ①

⑤ ♦t❤❡r✇✐s❡ ❂ ♣r✐♠♦ ① ✫✫ ♣r✐♠♦❚r✉♥❝❛❜❧❡ ✭① ❵❞✐✈❵ ✶✵✮

donde se usan la función ♣r✐♠♦ definida en la página 151.

Ejercicio 7.12.2. Definir la función

s✉♠❛Pr✐♠♦s❚r✉♥❝❛❜❧❡s ✿✿ ■♥t ✲❃ ■♥t

tal que ✭s✉♠❛Pr✐♠♦s❚r✉♥❝❛❜❧❡s ♥✮ es la suma de los ♥ primeros primos truncables. Por ejem-

plo,

s✉♠❛Pr✐♠♦s❚r✉♥❝❛❜❧❡s ✶✵ ❂❂ ✷✹✾

Solución:

s✉♠❛Pr✐♠♦s❚r✉♥❝❛❜❧❡s ✿✿ ■♥t ✲❃ ■♥t

s✉♠❛Pr✐♠♦s❚r✉♥❝❛❜❧❡s ♥ ❂

s✉♠ ✭t❛❦❡ ♥ ❬① ⑤ ① ❁✲ ♣r✐♠♦s✱ ♣r✐♠♦❚r✉♥❝❛❜❧❡ ①❪✮

Ejercicio 7.12.3. Calcular la suma de los 20 primos truncables.

Solución: El cálculo es

❣❤❝✐❃ s✉♠❛Pr✐♠♦s❚r✉♥❝❛❜❧❡s ✷✵

✷✺✺✶

1❤tt♣✿✴✴♣r♦❥❡❝t❡✉❧❡r✳♥❡t✴♣r♦❜❧❡♠❂✸✼

7.13. Primos permutables 155

7.13. Primos permutables

Ejercicio 7.13.1. Un primo permutable es un número primo tal que todos los números obtenidos

permutando sus cifras son primos. Por ejemplo, 337 es un primo permutable ya que 337, 373 y

733 son primos.

Definir la función

♣r✐♠♦P❡r♠✉t❛❜❧❡ ✿✿ ■♥t ✲❃ ❇♦♦❧

tal que ✭♣r✐♠♦P❡r♠✉t❛❜❧❡ ①✮ se verifica si ① es un primo permutable. Por ejemplo,

♣r✐♠♦P❡r♠✉t❛❜❧❡ ✶✼ ❂❂ ❚r✉❡

♣r✐♠♦P❡r♠✉t❛❜❧❡ ✶✾ ❂❂ ❋❛❧s❡

Solución:

♣r✐♠♦P❡r♠✉t❛❜❧❡ ✿✿ ■♥t ✲❃ ❇♦♦❧

♣r✐♠♦P❡r♠✉t❛❜❧❡ ① ❂ ❛♥❞ ❬♣r✐♠♦ ② ⑤ ② ❁✲ ♣❡r♠✉t❛❝✐♦♥❡s◆ ①❪

donde ✭♣❡r♠✉t❛❝✐♦♥❡s◆ ①✮ es la lista de los números obtenidos permutando los dígitosde ①. Por ejemplo,

♣❡r♠✉t❛❝✐♦♥❡s◆ ✸✷✺ ❂❂ ❬✸✷✺✱✷✸✺✱✷✺✸✱✸✺✷✱✺✸✷✱✺✷✸❪

♣❡r♠✉t❛❝✐♦♥❡s◆ ✿✿ ■♥t ✲❃ ❬■♥t❪

♣❡r♠✉t❛❝✐♦♥❡s◆ ① ❂ ❬r❡❛❞ ②s ⑤ ②s ❁✲ ♣❡r♠✉t❛❝✐♦♥❡s ✭s❤♦✇ ①✮❪

Se han usado como auxiliares las funciones ♣❡r♠✉t❛❝✐♦♥❡s (definida en la página 362)y ♣r✐♠♦ (definida en la página 151).

7.14. Ordenación de los números enteros

Los números enteros se pueden ordenar como sigue: 0, -1, 1, -2, 2, -3, 3, -4, 4, -5, 5, -6,6, -7, 7, . . . .

Ejercicio 7.14.1. Definir, por comprensión, la constante

❡♥t❡r♦s ✿✿ ❬■♥t❪

tal que ❡♥t❡r♦s es la lista de los enteros con la ordenación anterior. Por ejemplo,

t❛❦❡ ✶✵ ❡♥t❡r♦s ❂❂ ❬✵✱✲✶✱✶✱✲✷✱✷✱✲✸✱✸✱✲✹✱✹✱✲✺❪

Solución:

156 Capítulo 7. Listas infinitas

❡♥t❡r♦s ✿✿ ❬■♥t❪

❡♥t❡r♦s ❂ ✵ ✿ ❝♦♥❝❛t ❬❬✲①✱①❪ ⑤ ① ❁✲ ❬✶✳✳❪❪

Ejercicio 7.14.2. Definir, por iteración, la constante

❡♥t❡r♦s✬ ✿✿ ❬■♥t❪

tal que ❡♥t❡r♦s✬ es la lista de los enteros con la ordenación anterior. Por ejemplo,

t❛❦❡ ✶✵ ❡♥t❡r♦s✬ ❂❂ ❬✵✱✲✶✱✶✱✲✷✱✷✱✲✸✱✸✱✲✹✱✹✱✲✺❪

Solución:

❡♥t❡r♦s✬ ✿✿ ❬■♥t❪

❡♥t❡r♦s✬ ❂ ✐t❡r❛t❡ s✐❣✉✐❡♥t❡ ✵

✇❤❡r❡ s✐❣✉✐❡♥t❡ ① ⑤ ① ❃❂ ✵ ❂ ✲①✲✶

⑤ ♦t❤❡r✇✐s❡ ❂ ✲①

Ejercicio 7.14.3. Definir, por selección con t❛❦❡❲❤✐❧❡, la función

♣♦s✐❝✐♦♥ ✿✿ ■♥t ✲❃ ■♥t

tal que ✭♣♦s✐❝✐♦♥ ①✮ es la posición del entero ① en la ordenación anterior. Por ejemplo,

♣♦s✐❝✐♦♥ ✷ ❂❂ ✹

Solución:

♣♦s✐❝✐♦♥ ✿✿ ■♥t ✲❃ ■♥t

♣♦s✐❝✐♦♥ ① ❂ ❧❡♥❣t❤ ✭t❛❦❡❲❤✐❧❡ ✭✴❂①✮ ❡♥t❡r♦s✮

Ejercicio 7.14.4. Definir, por recursión, la función

♣♦s✐❝✐♦♥✶ ✿✿ ■♥t ✲❃ ■♥t

tal que ✭♣♦s✐❝✐♦♥✶ ①✮ es la posición del entero ① en la ordenación anterior. Por ejemplo,

♣♦s✐❝✐♦♥✶ ✷ ❂❂ ✹

Solución:

♣♦s✐❝✐♦♥✶ ✿✿ ■♥t ✲❃ ■♥t

♣♦s✐❝✐♦♥✶ ① ❂ ❛✉① ❡♥t❡r♦s ✵

✇❤❡r❡ ❛✉① ✭②✿②s✮ ♥ ⑤ ① ❂❂ ② ❂ ♥

⑤ ♦t❤❡r✇✐s❡ ❂ ❛✉① ②s ✭♥✰✶✮

7.15. La sucesión de Hamming 157

Ejercicio 7.14.5. Definir, por comprension, la función

♣♦s✐❝✐♦♥✷ ✿✿ ■♥t ✲❃ ■♥t

tal que ✭♣♦s✐❝✐♦♥✷ ①✮ es la posición del entero ① en la ordenación anterior. Por ejemplo,

♣♦s✐❝✐♦♥✷ ✷ ❂❂ ✹

Solución:

♣♦s✐❝✐♦♥✷ ✿✿ ■♥t ✲❃ ■♥t

♣♦s✐❝✐♦♥✷ ① ❂ ❤❡❛❞ ❬♥ ⑤ ✭♥✱②✮ ❁✲ ③✐♣ ❬✵✳✳❪ ❡♥t❡r♦s✱ ② ❂❂ ①❪

Ejercicio 7.14.6. Definir, sin búsqueda, la función

♣♦s✐❝✐♦♥✸ ✿✿ ■♥t ✲❃ ■♥t

tal que ✭♣♦s✐❝✐♦♥✸ ①✮ es la posición del entero ① en la ordenación anterior. Por ejemplo,

♣♦s✐❝✐♦♥✸ ✷ ❂❂ ✹

Solución:

♣♦s✐❝✐♦♥✸ ✿✿ ■♥t ✲❃ ■♥t

♣♦s✐❝✐♦♥✸ ① ⑤ ① ❃❂ ✵ ❂ ✷✯①

⑤ ♦t❤❡r✇✐s❡ ❂ ✷✯✭✲①✮✲✶

7.15. La sucesión de Hamming

Los números de Hamming forman una sucesión estrictamente creciente de númerosque cumplen las siguientes condiciones:

1. El número 1 está en la sucesión.

2. Si x está en la sucesión, entonces 2x, 3x y 5x también están.

3. Ningún otro número está en la sucesión.

Ejercicio 7.15.1. Definir la constante

❤❛♠♠✐♥❣ ✿✿ ❬■♥t❪

tal que ❤❛♠♠✐♥❣ es la sucesión de Hamming. Por ejemplo,

t❛❦❡ ✶✷ ❤❛♠♠✐♥❣ ❂❂ ❬✶✱✷✱✸✱✹✱✺✱✻✱✽✱✾✱✶✵✱✶✷✱✶✺✱✶✻❪

Solución:

158 Capítulo 7. Listas infinitas

❤❛♠♠✐♥❣ ✿✿ ❬■♥t❪

❤❛♠♠✐♥❣ ❂ ✶ ✿ ♠❡③❝❧❛✸ ❬✷✯✐ ⑤ ✐ ❁✲ ❤❛♠♠✐♥❣❪

❬✸✯✐ ⑤ ✐ ❁✲ ❤❛♠♠✐♥❣❪

❬✺✯✐ ⑤ ✐ ❁✲ ❤❛♠♠✐♥❣❪

donde se usan las siguientes funciones auxiliares

✭♠❡③❝❧❛✸ ①s ②s ③s✮ es la lista obtenida mezclando las listas ordenadas ①s, ②s y③s y eliminando los elementos duplicados. Por ejemplo,

❣❤❝✐❃ ♠❡③❝❧❛✸ ❬✷✱✹✱✻✱✽✱✶✵❪ ❬✸✱✻✱✾✱✶✷❪ ❬✺✱✶✵❪

❬✷✱✸✱✹✱✺✱✻✱✽✱✾✱✶✵✱✶✷❪

♠❡③❝❧❛✸ ✿✿ ❬■♥t❪ ✲❃ ❬■♥t❪ ✲❃ ❬■♥t❪ ✲❃ ❬■♥t❪

♠❡③❝❧❛✸ ①s ②s ③s ❂ ♠❡③❝❧❛✷ ①s ✭♠❡③❝❧❛✷ ②s ③s✮

✭♠❡③❝❧❛✷ ①s ②s ③s✮ es la lista obtenida mezclando las listas ordenadas ①s e ②s yeliminando los elementos duplicados. Por ejemplo,

❣❤❝✐❃ ♠❡③❝❧❛✷ ❬✷✱✹✱✻✱✽✱✶✵✱✶✷❪ ❬✸✱✻✱✾✱✶✷❪

❬✷✱✸✱✹✱✻✱✽✱✾✱✶✵✱✶✷❪

♠❡③❝❧❛✷ ✿✿ ❬■♥t❪ ✲❃ ❬■♥t❪ ✲❃ ❬■♥t❪

♠❡③❝❧❛✷ ♣❅✭①✿①s✮ q❅✭②✿②s✮ ⑤ ① ❁ ② ❂ ①✿♠❡③❝❧❛✷ ①s q

⑤ ① ❃ ② ❂ ②✿♠❡③❝❧❛✷ ♣ ②s

⑤ ♦t❤❡r✇✐s❡ ❂ ①✿♠❡③❝❧❛✷ ①s ②s

♠❡③❝❧❛✷ ❬❪ ②s ❂ ②s

♠❡③❝❧❛✷ ①s ❬❪ ❂ ①s

Ejercicio 7.15.2. Definir la función

❞✐✈✐s♦r❡s❊♥ ✿✿ ■♥t ✲❃ ❬■♥t❪ ✲❃ ❇♦♦❧

tal que ✭❞✐✈✐s♦r❡s❊♥ ① ②s✮ se verifica si ① puede expresarse como un producto de potencias

de elementos de ②s. Por ejemplo,

❞✐✈✐s♦r❡s❊♥ ✶✷ ❬✷✱✸✱✺❪ ❂❂ ❚r✉❡

❞✐✈✐s♦r❡s❊♥ ✶✹ ❬✷✱✸✱✺❪ ❂❂ ❋❛❧s❡

Solución:

7.15. La sucesión de Hamming 159

❞✐✈✐s♦r❡s❊♥ ✿✿ ■♥t ✲❃ ❬■♥t❪ ✲❃ ❇♦♦❧

❞✐✈✐s♦r❡s❊♥ ✶ ❴ ❂ ❚r✉❡

❞✐✈✐s♦r❡s❊♥ ① ❬❪ ❂ ❋❛❧s❡

❞✐✈✐s♦r❡s❊♥ ① ✭②✿②s✮ ⑤ ♠♦❞ ① ② ❂❂ ✵ ❂ ❞✐✈✐s♦r❡s❊♥ ✭❞✐✈ ① ②✮ ✭②✿②s✮

⑤ ♦t❤❡r✇✐s❡ ❂ ❞✐✈✐s♦r❡s❊♥ ① ②s

Ejercicio 7.15.3. Definir, usando ❞✐✈✐s♦r❡s❊♥, la constante

❤❛♠♠✐♥❣✬ ✿✿ ❬■♥t❪

tal que hamming’ es la sucesión de Hamming. Por ejemplo,

t❛❦❡ ✶✷ ❤❛♠♠✐♥❣✬ ❂❂ ❬✶✱✷✱✸✱✹✱✺✱✻✱✽✱✾✱✶✵✱✶✷✱✶✺✱✶✻❪

Solución:

❤❛♠♠✐♥❣✬ ✿✿ ❬■♥t❪

❤❛♠♠✐♥❣✬ ❂ ❬① ⑤ ① ❁✲ ❬✶✳✳❪✱ ❞✐✈✐s♦r❡s❊♥ ① ❬✷✱✸✱✺❪❪

Ejercicio 7.15.4. Definir la función

❝❛♥t✐❞❛❞❍❛♠♠✐♥❣▼❡♥♦r❡s ✿✿ ■♥t ✲❃ ■♥t

tal que ✭❝❛♥t✐❞❛❞❍❛♠♠✐♥❣▼❡♥♦r❡s ①✮ es la cantidad de números de Hamming menores que ①.

Por ejemplo,

❝❛♥t✐❞❛❞❍❛♠♠✐♥❣▼❡♥♦r❡s ✻ ❂❂ ✺

❝❛♥t✐❞❛❞❍❛♠♠✐♥❣▼❡♥♦r❡s ✼ ❂❂ ✻

❝❛♥t✐❞❛❞❍❛♠♠✐♥❣▼❡♥♦r❡s ✽ ❂❂ ✻

Solución:

❝❛♥t✐❞❛❞❍❛♠♠✐♥❣▼❡♥♦r❡s ✿✿ ■♥t ✲❃ ■♥t

❝❛♥t✐❞❛❞❍❛♠♠✐♥❣▼❡♥♦r❡s ① ❂ ❧❡♥❣t❤ ✭t❛❦❡❲❤✐❧❡ ✭❁①✮ ❤❛♠♠✐♥❣✬✮

Ejercicio 7.15.5. Definir la función

s✐❣✉✐❡♥t❡❍❛♠♠✐♥❣ ✿✿ ■♥t ✲❃ ■♥t

tal que ✭s✐❣✉✐❡♥t❡❍❛♠♠✐♥❣ ①✮ es el menor número de la sucesión de Hamming mayor que ①.

Por ejemplo,

s✐❣✉✐❡♥t❡❍❛♠♠✐♥❣ ✻ ❂❂ ✽

s✐❣✉✐❡♥t❡❍❛♠♠✐♥❣ ✷✶ ❂❂ ✷✹

160 Capítulo 7. Listas infinitas

Solución:

s✐❣✉✐❡♥t❡❍❛♠♠✐♥❣ ✿✿ ■♥t ✲❃ ■♥t

s✐❣✉✐❡♥t❡❍❛♠♠✐♥❣ ① ❂ ❤❡❛❞ ✭❞r♦♣❲❤✐❧❡ ✭❁❂①✮ ❤❛♠♠✐♥❣✬✮

Ejercicio 7.15.6. Definir la función

❤✉❡❝♦❍❛♠♠✐♥❣ ✿✿ ■♥t ✲❃ ❬✭■♥t✱■♥t✮❪

tal que ✭❤✉❡❝♦❍❛♠♠✐♥❣ ♥✮ es la lista de pares de números consecutivos en la sucesión de Ham-

ming cuya distancia es mayor que ♥. Por ejemplo,

t❛❦❡ ✹ ✭❤✉❡❝♦❍❛♠♠✐♥❣ ✷✮ ❂❂ ❬✭✶✷✱✶✺✮✱✭✷✵✱✷✹✮✱✭✷✼✱✸✵✮✱✭✸✷✱✸✻✮❪

t❛❦❡ ✸ ✭❤✉❡❝♦❍❛♠♠✐♥❣ ✷✮ ❂❂ ❬✭✶✷✱✶✺✮✱✭✷✵✱✷✹✮✱✭✷✼✱✸✵✮❪

t❛❦❡ ✷ ✭❤✉❡❝♦❍❛♠♠✐♥❣ ✸✮ ❂❂ ❬✭✷✵✱✷✹✮✱✭✸✷✱✸✻✮❪

❤❡❛❞ ✭❤✉❡❝♦❍❛♠♠✐♥❣ ✶✵✮ ❂❂ ✭✶✵✽✱✶✷✵✮

❤❡❛❞ ✭❤✉❡❝♦❍❛♠♠✐♥❣ ✶✵✵✵✮ ❂❂ ✭✸✹✾✾✷✱✸✻✵✵✵✮

Solución:

❤✉❡❝♦❍❛♠♠✐♥❣ ✿✿ ■♥t ✲❃ ❬✭■♥t✱■♥t✮❪

❤✉❡❝♦❍❛♠♠✐♥❣ ♥ ❂ ❬✭①✱②✮ ⑤ ① ❁✲ ❤❛♠♠✐♥❣✬✱

❧❡t ② ❂ s✐❣✉✐❡♥t❡❍❛♠♠✐♥❣ ①✱

②✲① ❃ ♥❪

Ejercicio 7.15.7. Comprobar con QuickCheck que para todo ♥, existen pares de números conse-

cutivos en la sucesión de Hamming cuya distancia es mayor o igual que ♥.

Solución: La propiedad es

♣r♦♣❴❍❛♠♠✐♥❣ ✿✿ ■♥t ✲❃ ❇♦♦❧

♣r♦♣❴❍❛♠♠✐♥❣ ♥ ❂ ❤✉❡❝♦❍❛♠♠✐♥❣ ♥✬ ✴❂ ❬❪

✇❤❡r❡ ♥✬ ❂ ❛❜s ♥

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴❍❛♠♠✐♥❣

❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

7.16. Suma de los primos menores que n

Ejercicio 7.16.1 (Problema 10 del Proyecto Euler). Definir la función

s✉♠❛Pr✐♠♦▼❡♥♦r❡s ✿✿ ■♥t ✲❃ ■♥t

7.17. Menor número triangular con más de n divisores 161

tal que ✭s✉♠❛Pr✐♠♦▼❡♥♦r❡s ♥✮ es la suma de los primos menores que ♥. Por ejemplo,

s✉♠❛Pr✐♠♦▼❡♥♦r❡s ✶✵ ❂❂ ✶✼

Solución:

s✉♠❛Pr✐♠♦▼❡♥♦r❡s ✿✿ ■♥t ✲❃ ■♥t

s✉♠❛Pr✐♠♦▼❡♥♦r❡s ♥ ❂ s✉♠❛▼❡♥♦r❡s ♥ ♣r✐♠♦s ✵

✇❤❡r❡ s✉♠❛▼❡♥♦r❡s ♥ ✭①✿①s✮ ❛ ⑤ ♥ ❁❂ ① ❂ ❛

⑤ ♦t❤❡r✇✐s❡ ❂ s✉♠❛▼❡♥♦r❡s ♥ ①s ✭❛✰①✮

donde ♣r✐♠♦s es la lista de los número primos (definida en la página 150).

7.17. Menor número triangular con más de n divisores

Ejercicio 7.17.1 (Problema 12 del Proyecto Euler). La sucesión de los números triangulares

se obtiene sumando los números naturales. Así, el 7o número triangular es

1 + 2 + 3 + 4 + 5 + 6 + 7 = 28.

Los primeros 10 números triangulares son

1, 3, 6, 10, 15, 21, 28, 36, 45, 55, . . .

Los divisores de los primeros 7 números triangulares son:

1 : 13 : 1, 36 : 1, 2, 3, 610 : 1, 2, 5, 1015 : 1, 3, 5, 1521 : 1, 3, 7, 2128 : 1, 2, 4, 7, 14, 28

Como se puede observar, 28 es el menor número triangular con más de 5 divisores.

Definir la función

❡✉❧❡r✶✷ ✿✿ ■♥t ✲❃ ■♥t❡❣❡r

tal que ✭❡✉❧❡r✶✷ ♥✮ es el menor número triangular con más de ♥ divisores. Por ejemplo,

❡✉❧❡r✶✷ ✺ ❂❂ ✷✽

Solución:

162 Capítulo 7. Listas infinitas

❡✉❧❡r✶✷ ✿✿ ■♥t ✲❃ ■♥t❡❣❡r

❡✉❧❡r✶✷ ♥ ❂ ❤❡❛❞ ❬① ⑤ ① ❁✲ tr✐❛♥❣✉❧❛r❡s✱ ♥❉✐✈✐s♦r❡s ① ❃ ♥❪

dode se usan las siguientes funciones auxiliares

tr✐❛♥❣✉❧❛r❡s es la lista de los números triangulares

t❛❦❡ ✶✵ tr✐❛♥❣✉❧❛r❡s ❂❃ ❬✶✱✸✱✻✱✶✵✱✶✺✱✷✶✱✷✽✱✸✻✱✹✺✱✺✺❪

tr✐❛♥❣✉❧❛r❡s ✿✿ ❬■♥t❡❣❡r❪

tr✐❛♥❣✉❧❛r❡s ❂ ✶✿❬①✰② ⑤ ✭①✱②✮ ❁✲ ③✐♣ ❬✷✳✳❪ tr✐❛♥❣✉❧❛r❡s❪

Otra definición de triangulares es

tr✐❛♥❣✉❧❛r❡s✬ ✿✿ ❬■♥t❡❣❡r❪

tr✐❛♥❣✉❧❛r❡s✬ ❂ s❝❛♥❧ ✭✰✮ ✶ ❬✷✳✳❪

✭❞✐✈✐s♦r❡s ♥✮ es la lista de los divisores de ♥. Por ejemplo,

❞✐✈✐s♦r❡s ✷✽ ❂❂ ❬✶✱✷✱✹✱✼✱✶✹✱✷✽❪

❞✐✈✐s♦r❡s ✿✿ ■♥t❡❣❡r ✲❃ ❬■♥t❡❣❡r❪

❞✐✈✐s♦r❡s ① ❂ ❬② ⑤ ② ❁✲ ❬✶✳✳①❪✱ ♠♦❞ ① ② ❂❂ ✵❪

✭♥❉✐✈✐s♦r❡s ♥✮ es el número de los divisores de ♥. Por ejemplo,

♥❉✐✈✐s♦r❡s ✷✽ ❂❂ ✻

♥❉✐✈✐s♦r❡s ✿✿ ■♥t❡❣❡r ✲❃ ■♥t

♥❉✐✈✐s♦r❡s ① ❂ ❧❡♥❣t❤ ✭❞✐✈✐s♦r❡s ①✮

7.18. Números primos consecutivos con dígitos con igualmedia

Ejercicio 7.18.1. Definir la función

♣r✐♠♦s❊q✉✐✈❛❧❡♥t❡s ✿✿ ■♥t ✲❃ ❬❬■♥t❡❣❡r❪❪

tal que ✭♣r✐♠♦s❊q✉✐✈❛❧❡♥t❡s ♥✮ es la lista de las sucesiones de ♥ números primos consecuti-

vos con la media de sus dígitos iguales. Por ejemplo,

7.19. Decisión de pertenencia al rango de una función creciente 163

t❛❦❡ ✷ ✭♣r✐♠♦s❊q✉✐✈❛❧❡♥t❡s ✷✮ ❂❂ ❬❬✺✷✸✱✺✹✶❪✱❬✶✵✻✾✱✶✵✽✼❪❪

❤❡❛❞ ✭♣r✐♠♦s❊q✉✐✈❛❧❡♥t❡s ✸✮ ❂❂ ❬✷✷✶✾✸✱✷✷✷✷✾✱✷✷✷✹✼❪

Solución:

♣r✐♠♦s❊q✉✐✈❛❧❡♥t❡s ✿✿ ■♥t ✲❃ ❬❬■♥t❡❣❡r❪❪

♣r✐♠♦s❊q✉✐✈❛❧❡♥t❡s ♥ ❂ ❛✉① ♣r✐♠♦s

✇❤❡r❡ ❛✉① ✭①✿①s✮ ⑤ r❡❧❛❝✐♦♥❛❞♦s ❡q✉✐✈❛❧❡♥t❡s ②s ❂ ②s ✿ ❛✉① ①s

⑤ ♦t❤❡r✇✐s❡ ❂ ❛✉① ①s

✇❤❡r❡ ②s ❂ t❛❦❡ ♥ ✭①✿①s✮

donde ♣r✐♠♦s está definido en la página 150, relacionados en la 122 y ❡q✉✐✈❛❧❡♥t❡s enla 81.

7.19. Decisión de pertenencia al rango de una función cre-ciente

Ejercicio 7.19.1. Definir la función

♣❡rt❡♥❡❝❡❘❛♥❣♦ ✿✿ ■♥t ✲❃ ✭■♥t ✲❃ ■♥t✮ ✲❃ ❇♦♦❧

tal que ✭♣❡rt❡♥❡❝❡❘❛♥❣♦ ① ❢✮ se verifica si ① pertenece al rango de la función ❢, suponiendo

que ❢ es una función creciente cuyo dominio es el conjunto de los números naturales. Por ejemplo,

♣❡rt❡♥❡❝❡❘❛♥❣♦ ✺ ✭❭① ✲❃ ✷✯①✰✶✮ ❂❂ ❚r✉❡

♣❡rt❡♥❡❝❡❘❛♥❣♦ ✶✷✸✹ ✭❭① ✲❃ ✷✯①✰✶✮ ❂❂ ❋❛❧s❡

Solución:

♣❡rt❡♥❡❝❡❘❛♥❣♦ ✿✿ ■♥t ✲❃ ✭■♥t ✲❃ ■♥t✮ ✲❃ ❇♦♦❧

♣❡rt❡♥❡❝❡❘❛♥❣♦ ② ❢ ❂ ② ❵❡❧❡♠❵ t❛❦❡❲❤✐❧❡ ✭❁❂②✮ ✭✐♠❛❣❡♥❡s ❢✮

✇❤❡r❡ ✐♠❛❣❡♥❡s ❢ ❂ ❬❢ ① ⑤ ① ❁✲ ❬✵✳✳❪❪

7.20. Pares ordenados por posición

Ejercicio 7.20.1. Definir, por recursión, la función

♣❛r❡s❖r❞❡♥❛❞♦s ✿✿ ❬❛❪ ✲❃ ❬✭❛✱❛✮❪

tal que ✭♣❛r❡s❖r❞❡♥❛❞♦s ①s✮ es la lista de todos los pares de elementos ✭①✱②✮ de ①s, tales que

① ocurren en ①s antes que ②. Por ejemplo,

164 Capítulo 7. Listas infinitas

♣❛r❡s❖r❞❡♥❛❞♦s ❬✸✱✷✱✺✱✹❪ ❂❂ ❬✭✸✱✷✮✱✭✸✱✺✮✱✭✸✱✹✮✱✭✷✱✺✮✱✭✷✱✹✮✱✭✺✱✹✮❪

♣❛r❡s❖r❞❡♥❛❞♦s ❬✸✱✷✱✺✱✸❪ ❂❂ ❬✭✸✱✷✮✱✭✸✱✺✮✱✭✸✱✸✮✱✭✷✱✺✮✱✭✷✱✸✮✱✭✺✱✸✮❪

Solución:

♣❛r❡s❖r❞❡♥❛❞♦s ✿✿ ❬❛❪ ✲❃ ❬✭❛✱❛✮❪

♣❛r❡s❖r❞❡♥❛❞♦s ❬❪ ❂ ❬❪

♣❛r❡s❖r❞❡♥❛❞♦s ✭①✿①s✮ ❂ ❬✭①✱②✮ ⑤ ② ❁✲ ①s❪ ✰✰ ♣❛r❡s❖r❞❡♥❛❞♦s ①s

Ejercicio 7.20.2. Definir, por plegado, la función

♣❛r❡s❖r❞❡♥❛❞♦s✷ ✿✿ ❬❛❪ ✲❃ ❬✭❛✱❛✮❪

tal que ✭♣❛r❡s❖r❞❡♥❛❞♦s✷ ①s✮ es la lista de todos los pares de elementos ✭①✱②✮ de ①s, tales

que ① ocurren en ①s antes que ②. Por ejemplo,

♣❛r❡s❖r❞❡♥❛❞♦s✷ ❬✸✱✷✱✺✱✹❪ ❂❂ ❬✭✸✱✷✮✱✭✸✱✺✮✱✭✸✱✹✮✱✭✷✱✺✮✱✭✷✱✹✮✱✭✺✱✹✮❪

♣❛r❡s❖r❞❡♥❛❞♦s✷ ❬✸✱✷✱✺✱✸❪ ❂❂ ❬✭✸✱✷✮✱✭✸✱✺✮✱✭✸✱✸✮✱✭✷✱✺✮✱✭✷✱✸✮✱✭✺✱✸✮❪

Solución:

♣❛r❡s❖r❞❡♥❛❞♦s✷ ✿✿ ❬❛❪ ✲❃ ❬✭❛✱❛✮❪

♣❛r❡s❖r❞❡♥❛❞♦s✷ ❬❪ ❂ ❬❪

♣❛r❡s❖r❞❡♥❛❞♦s✷ ✭①✿①s✮ ❂

❢♦❧❞r ✭❭② ❛❝ ✲❃ ✭①✱②✮✿❛❝✮ ✭♣❛r❡s❖r❞❡♥❛❞♦s✷ ①s✮ ①s

Ejercicio 7.20.3. Definir, usando r❡♣❡❛t, la función

♣❛r❡s❖r❞❡♥❛❞♦s✸ ✿✿ ❬❛❪ ✲❃ ❬✭❛✱❛✮❪

tal que ✭♣❛r❡s❖r❞❡♥❛❞♦s✸ ①s✮ es la lista de todos los pares de elementos ✭①✱②✮ de ①s, tales

que ① ocurren en ①s antes que ②. Por ejemplo,

♣❛r❡s❖r❞❡♥❛❞♦s✸ ❬✸✱✷✱✺✱✹❪ ❂❂ ❬✭✸✱✷✮✱✭✸✱✺✮✱✭✸✱✹✮✱✭✷✱✺✮✱✭✷✱✹✮✱✭✺✱✹✮❪

♣❛r❡s❖r❞❡♥❛❞♦s✸ ❬✸✱✷✱✺✱✸❪ ❂❂ ❬✭✸✱✷✮✱✭✸✱✺✮✱✭✸✱✸✮✱✭✷✱✺✮✱✭✷✱✸✮✱✭✺✱✸✮❪

Solución:

♣❛r❡s❖r❞❡♥❛❞♦s✸ ✿✿ ❬❛❪ ✲❃ ❬✭❛✱❛✮❪

♣❛r❡s❖r❞❡♥❛❞♦s✸ ❬❪ ❂ ❬❪

♣❛r❡s❖r❞❡♥❛❞♦s✸ ✭①✿①s✮ ❂ ③✐♣ ✭r❡♣❡❛t ①✮ ①s ✰✰ ♣❛r❡s❖r❞❡♥❛❞♦s✸ ①s

7.21. Aplicación iterada de una función 165

7.21. Aplicación iterada de una función

Ejercicio 7.21.1. Definir, por recursión, la función

♣♦t❡♥❝✐❛❋✉♥❝ ✿✿ ■♥t ✲❃ ✭❛ ✲❃ ❛✮ ✲❃ ❛ ✲❃ ❛

tal que ✭♣♦t❡♥❝✐❛❋✉♥❝ ♥ ❢ ①✮ es el resultado de aplicar ♥ veces la función ❢ a ①. Por ejemplo,

♣♦t❡♥❝✐❛❋✉♥❝ ✸ ✭✯✶✵✮ ✺ ❂❂ ✺✵✵✵

♣♦t❡♥❝✐❛❋✉♥❝ ✹ ✭✰✶✵✮ ✺ ❂❂ ✹✺

Solución:

♣♦t❡♥❝✐❛❋✉♥❝ ✿✿ ■♥t ✲❃ ✭❛ ✲❃ ❛✮ ✲❃ ❛ ✲❃ ❛

♣♦t❡♥❝✐❛❋✉♥❝ ✵ ❴ ① ❂ ①

♣♦t❡♥❝✐❛❋✉♥❝ ♥ ❢ ① ❂ ♣♦t❡♥❝✐❛❋✉♥❝ ✭♥✲✶✮ ❢ ✭❢ ①✮

Ejercicio 7.21.2. Definir, sin recursión, la función

♣♦t❡♥❝✐❛❋✉♥❝✷ ✿✿ ■♥t ✲❃ ✭❛ ✲❃ ❛✮ ✲❃ ❛ ✲❃ ❛

tal que ✭♣♦t❡♥❝✐❛❋✉♥❝✷ ♥ ❢ ①✮ es el resultado de aplicar ♥ veces la función ❢ a ①. Por ejemplo,

♣♦t❡♥❝✐❛❋✉♥❝✷ ✸ ✭✯✶✵✮ ✺ ❂❂ ✺✵✵✵

♣♦t❡♥❝✐❛❋✉♥❝✷ ✹ ✭✰✶✵✮ ✺ ❂❂ ✹✺

Solución:

♣♦t❡♥❝✐❛❋✉♥❝✷ ✿✿ ■♥t ✲❃ ✭❛ ✲❃ ❛✮ ✲❃ ❛ ✲❃ ❛

♣♦t❡♥❝✐❛❋✉♥❝✷ ♥ ❢ ① ❂ ❧❛st ✭t❛❦❡ ✭♥✰✶✮ ✭✐t❡r❛t❡ ❢ ①✮✮

7.22. Expresión de un número como suma de dos de unalista

Ejercicio 7.22.1. Definir, por recursión, la función

s✉♠❛❉❡❉♦s ✿✿ ■♥t ✲❃ ❬■♥t❪ ✲❃ ▼❛②❜❡ ✭■♥t✱■♥t✮

tal que ✭s✉♠❛❉❡❉♦s ① ②s✮ decide si ① puede expresarse como suma de dos elementos de ②s y,

en su caso, devuelve un par de elementos de ②s cuya suma es ①. Por ejemplo,

s✉♠❛❉❡❉♦s ✾ ❬✼✱✹✱✻✱✷✱✺❪ ❂❂ ❏✉st ✭✼✱✷✮

s✉♠❛❉❡❉♦s ✺ ❬✼✱✹✱✻✱✷✱✺❪ ❂❂ ◆♦t❤✐♥❣

Solución:

166 Capítulo 7. Listas infinitas

s✉♠❛❉❡❉♦s ✿✿ ■♥t ✲❃ ❬■♥t❪ ✲❃ ▼❛②❜❡ ✭■♥t✱■♥t✮

s✉♠❛❉❡❉♦s ❴ ❬❪ ❂ ◆♦t❤✐♥❣

s✉♠❛❉❡❉♦s ❴ ❬❴❪ ❂ ◆♦t❤✐♥❣

s✉♠❛❉❡❉♦s ② ✭①✿①s✮ ⑤ ②✲① ❵❡❧❡♠❵ ①s ❂ ❏✉st ✭①✱②✲①✮

⑤ ♦t❤❡r✇✐s❡ ❂ s✉♠❛❉❡❉♦s ② ①s

Ejercicio 7.22.2. Definir, usando la función ♣❛r❡s❖r❞❡♥❛❞♦s (definida en la página 164), la

función

s✉♠❛❉❡❉♦s✬ ✿✿ ■♥t ✲❃ ❬■♥t❪ ✲❃ ▼❛②❜❡ ✭■♥t✱■♥t✮

tal que ✭s✉♠❛❉❡❉♦s✬ ① ②s✮ decide si ① puede expresarse como suma de dos elementos de ②s y,

en su caso, devuelve un par de elementos de ②s cuya suma es ①. Por ejemplo,

s✉♠❛❉❡❉♦s✬ ✾ ❬✼✱✹✱✻✱✷✱✺❪ ❂❂ ❏✉st ✭✼✱✷✮

s✉♠❛❉❡❉♦s✬ ✺ ❬✼✱✹✱✻✱✷✱✺❪ ❂❂ ◆♦t❤✐♥❣

Solución:

s✉♠❛❉❡❉♦s✬ ✿✿ ■♥t ✲❃ ❬■♥t❪ ✲❃ ▼❛②❜❡ ✭■♥t✱■♥t✮

s✉♠❛❉❡❉♦s✬ ① ①s

⑤ ♥✉❧❧ ②s ❂ ◆♦t❤✐♥❣

⑤ ♦t❤❡r✇✐s❡ ❂ ❏✉st ✭❤❡❛❞ ②s✮

✇❤❡r❡ ②s ❂ ❬✭❛✱❜✮ ⑤ ✭❛✱❜✮ ❁✲ ♣❛r❡s❖r❞❡♥❛❞♦s ①s ✱ ❛✰❜ ❂❂ ①❪

7.23. La bicicleta de Turing

Cuentan que Alan Turing tenía una bicicleta vieja, que tenía una cadena con un es-labón débil y además uno de los radios de la rueda estaba doblado. Cuando el radiodoblado coincidía con el eslabón débil, entonces la cadena se rompía.

La bicicleta se identifica por los parámetros (i, d, n) donde

i es el número del eslabón que coincide con el radio doblado al empezar a andar,

d es el número de eslabones que se desplaza la cadena en cada vuelta de la rueday

n es el número de eslabones de la cadena (el número n es el débil).

Si i = 2, d = 7 y n = 25, entonces la lista con el número de eslabón que toca el radiodoblado en cada vuelta es

[2, 9, 16, 23, 5, 12, 19, 1, 8, 15, 22, 4, 11, 18, 0, 7, 14, 21, 3, 10, 17, 24, 6, . . .

Con lo que la cadena se rompe en la vuelta número 14.

7.24. Sucesión de Golomb 167

Ejercicio 7.23.1. Definir la función

❡s❧❛❜♦♥❡s ✿✿ ■♥t ✲❃ ■♥t ✲❃ ■♥t ✲❃ ❬■♥t❪

tal que ✭❡s❧❛❜♦♥❡s ✐ ❞ ♥✮ es la lista con los números de eslabones que tocan el radio doblado

en cada vuelta en una bicicleta de tipo ✭✐✱❞✱♥✮. Por ejemplo,

t❛❦❡ ✶✵ ✭❡s❧❛❜♦♥❡s ✷ ✼ ✷✺✮ ❂❂ ❬✷✱✾✱✶✻✱✷✸✱✺✱✶✷✱✶✾✱✶✱✽✱✶✺❪

Solución:

❡s❧❛❜♦♥❡s ✿✿ ■♥t ✲❃ ■♥t ✲❃ ■♥t ✲❃ ❬■♥t❪

❡s❧❛❜♦♥❡s ✐ ❞ ♥ ❂ ❬✭✐✰❞✯❥✮ ❵♠♦❞❵ ♥ ⑤ ❥ ❁✲ ❬✵✳✳❪❪

Se puede definir usando ✐t❡r❛t❡:

❡s❧❛❜♦♥❡s✷ ✿✿ ■♥t ✲❃ ■♥t ✲❃ ■♥t ✲❃ ❬■♥t❪

❡s❧❛❜♦♥❡s✷ ✐ ❞ ♥ ❂ ♠❛♣ ✭❭①✲❃ ♠♦❞ ① ♥✮ ✭✐t❡r❛t❡ ✭✰❞✮ ✐✮

Ejercicio 7.23.2. Definir la función

♥✉♠❡r♦❱✉❡❧t❛s ✿✿ ■♥t ✲❃ ■♥t ✲❃ ■♥t ✲❃ ■♥t

tal que ✭♥✉♠❡r♦❱✉❡❧t❛s ✐ ❞ ♥✮ es el número de vueltas que pasarán hasta que la cadena se

rompa en una bicicleta de tipo ✭✐✱❞✱♥✮. Por ejemplo,

♥✉♠❡r♦❱✉❡❧t❛s ✷ ✼ ✷✺ ❂❂ ✶✹

Solución:

♥✉♠❡r♦❱✉❡❧t❛s ✿✿ ■♥t ✲❃ ■♥t ✲❃ ■♥t ✲❃ ■♥t

♥✉♠❡r♦❱✉❡❧t❛s ✐ ❞ ♥ ❂ ❧❡♥❣t❤ ✭t❛❦❡❲❤✐❧❡ ✭✴❂✵✮ ✭❡s❧❛❜♦♥❡s ✐ ❞ ♥✮✮

7.24. Sucesión de Golomb

Esta seción está basada en el problema 341 del proyecto Euler. La sucesión de Go-lomb {G(n)} es una sucesión auto descriptiva: es la única sucesión no decreciente denúmeros naturales tal que el número n aparece G(n) veces en la sucesión. Los valoresde G(n) para los primeros números son los siguientes:

n 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 . . .G(n) 1 2 2 3 3 4 4 4 5 5 5 6 6 6 6 . . .

En los apartados de esta sección se definirá una función para calcular los términos de lasucesión de Golomb.

168 Capítulo 7. Listas infinitas

Ejercicio 7.24.1. Definir la función

❣♦❧♦♠❜ ✿✿ ■♥t ✲❃ ■♥t

tal que ✭❣♦❧♦♠❜ ♥✮ es el ♥–ésimo término de la sucesión de Golomb. Por ejemplo,

❣♦❧♦♠❜ ✺ ❂❂ ✸

❣♦❧♦♠❜ ✾ ❂❂ ✺

Indicación: Se puede usar la función s✉❝●♦❧♦♠❜ del siguiente ejercicio.

Solución:

❣♦❧♦♠❜ ✿✿ ■♥t ✲❃ ■♥t

❣♦❧♦♠❜ ♥ ❂ s✉❝●♦❧♦♠❜ ✦✦ ✭♥✲✶✮

Ejercicio 7.24.2. Definir la función

s✉❝●♦❧♦♠❜ ✿✿ ❬■♥t❪

tal que s✉❝●♦❧♦♠❜ es la lista de los términos de la sucesión de Golomb. Por ejemplo,

t❛❦❡ ✶✺ s✉❝●♦❧♦♠❜ ❂❂ ❬✶✱✷✱✷✱✸✱✸✱✹✱✹✱✹✱✺✱✺✱✺✱✻✱✻✱✻✱✻❪

Indicación: Se puede usar la función s✉❜❙✉❝●♦❧♦♠❜ del siguiente ejercicio.

Solución:

s✉❝●♦❧♦♠❜ ✿✿ ❬■♥t❪

s✉❝●♦❧♦♠❜ ❂ s✉❜❙✉❝●♦❧♦♠❜ ✶

Ejercicio 7.24.3. Definir la función

s✉❜❙✉❝●♦❧♦♠❜ ✿✿ ■♥t ✲❃ ❬■♥t❪

tal que ✭s✉❜❙✉❝●♦❧♦♠❜ ①✮ es la lista de los términos de la sucesión de Golomb a partir de la

primera ocurrencia de ①. Por ejemplo,

t❛❦❡ ✶✵ ✭s✉❜❙✉❝●♦❧♦♠❜ ✹✮ ❂❂ ❬✹✱✹✱✹✱✺✱✺✱✺✱✻✱✻✱✻✱✻❪

Indicación: Se puede usar la función ❣♦❧♦♠❜ del ejercicio anterior.

Solución:

s✉❜❙✉❝●♦❧♦♠❜ ✿✿ ■♥t ✲❃ ❬■♥t❪

s✉❜❙✉❝●♦❧♦♠❜ ✶ ❂ ❬✶❪ ✰✰ s✉❜❙✉❝●♦❧♦♠❜ ✷

s✉❜❙✉❝●♦❧♦♠❜ ✷ ❂ ❬✷✱✷❪ ✰✰ s✉❜❙✉❝●♦❧♦♠❜ ✸

s✉❜❙✉❝●♦❧♦♠❜ ① ❂ ✭r❡♣❧✐❝❛t❡ ✭❣♦❧♦♠❜ ①✮ ①✮ ✰✰ s✉❜❙✉❝●♦❧♦♠❜ ✭①✰✶✮

7.24. Sucesión de Golomb 169

Nota. La sucesión de Golomb puede definirse de forma más compacta como se muestraa continuación.

s✉❝●♦❧♦♠❜✬ ✿✿ ❬■♥t❪

s✉❝●♦❧♦♠❜✬ ❂ ✶ ✿ ✷ ✿ ✷ ✿ ❣ ✸

✇❤❡r❡ ❣ ① ❂ r❡♣❧✐❝❛t❡ ✭❣♦❧♦♠❜ ①✮ ① ✰✰ ❣ ✭①✰✶✮

❣♦❧♦♠❜ ♥ ❂ s✉❝●♦❧♦♠❜ ✦✦ ✭♥✲✶✮

170 Capítulo 7. Listas infinitas

Capítulo 8

Tipos definidos y de datos algebraicos

En este capítulo se presenta ejercicios sobre tipos definidos y tipos de datos algebrai-cos (TDA). Los ejercicios corresponden al tema 9 de [1].

Contenido8.1 Puntos cercanos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172

8.2 TDA de los números naturales . . . . . . . . . . . . . . . . . . . . . . . 173

8.2.1 Suma de números naturales . . . . . . . . . . . . . . . . . . . . 173

8.2.2 Producto de números naturales . . . . . . . . . . . . . . . . . . 173

8.3 TDA de árboles binarios con valores en los nodos y en las hojas . . . . 174

8.3.1 Ocurrencia de un elemento en el árbol . . . . . . . . . . . . . . 174

8.4 TDA de árboles binarios con valores en las hojas . . . . . . . . . . . . . 175

8.4.1 Número de hojas . . . . . . . . . . . . . . . . . . . . . . . . . . . 176

8.4.2 Carácter balanceado de un árbol . . . . . . . . . . . . . . . . . . 176

8.4.3 Árbol balanceado correspondiente a una lista . . . . . . . . . . 177

8.5 TDA de árboles binarios con valores en los nodos . . . . . . . . . . . . 177

8.5.1 Número de hojas de un árbol . . . . . . . . . . . . . . . . . . . 178

8.5.2 Número de nodos de un árbol . . . . . . . . . . . . . . . . . . . 178

8.5.3 Profundidad de un árbol . . . . . . . . . . . . . . . . . . . . . . 179

8.5.4 Recorrido preorden de un árbol . . . . . . . . . . . . . . . . . . 179

8.5.5 Recorrido postorden de un árbol . . . . . . . . . . . . . . . . . 180

8.5.6 Recorrido preorden de forma iterativa . . . . . . . . . . . . . . 180

8.5.7 Imagen especular de un árbol . . . . . . . . . . . . . . . . . . . 181

8.5.8 Subárbol de profundidad dada . . . . . . . . . . . . . . . . . . 181

171

172 Capítulo 8. Tipos definidos y de datos algebraicos

8.5.9 Árbol infinito generado con un elemento . . . . . . . . . . . . . 182

8.5.10 Árbol de profundidad dada cuyos nodos son iguales a un ele-mento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183

8.5.11 Rama izquierda de un árbol . . . . . . . . . . . . . . . . . . . . 183

8.6 TAD de fórmulas proposicionales . . . . . . . . . . . . . . . . . . . . . 184

8.7 Modelización de un juego de cartas . . . . . . . . . . . . . . . . . . . . 189

8.8 Evaluación de expresiones aritméticas . . . . . . . . . . . . . . . . . . . 196

8.9 Número de variables de una expresión aritmética . . . . . . . . . . . . 197

8.10 Sustituciones en expresiones aritméticas . . . . . . . . . . . . . . . . . . 198

8.1. Puntos cercanos

Ejercicio 8.1.1. Los puntos del plano se pueden representar por pares de números como se indica

a continuación

t②♣❡ P✉♥t♦ ❂ ✭❉♦✉❜❧❡✱❉♦✉❜❧❡✮

Definir la función

❝❡r❝❛♥♦s ✿✿ ❬P✉♥t♦❪ ✲❃ ❬P✉♥t♦❪ ✲❃ ✭P✉♥t♦✱P✉♥t♦✮

tal que ✭❝❡r❝❛♥♦s ♣s qs✮ es un par de puntos, el primero de ❭❜❡❣✐♥④s❡s✐♦♥⑥ y el segundo

de qs, que son los más cercanos (es decir, no hay otro par ✭♣✬✱q✬✮ con ♣✬ en ❭❜❡❣✐♥④s❡s✐♦♥⑥ y

q✬ en qs tales que la distancia entre ♣✬ y q✬ sea menor que la que hay entre ♣ y q). Por ejemplo,

❝❡r❝❛♥♦s ❬✭✷✱✺✮✱✭✸✱✻✮❪ ❬✭✹✱✸✮✱✭✶✱✵✮✱✭✼✱✾✮❪ ❂❂ ✭✭✷✳✵✱✺✳✵✮✱✭✹✳✵✱✸✳✵✮✮

Solución:

t②♣❡ P✉♥t♦ ❂ ✭❉♦✉❜❧❡✱❉♦✉❜❧❡✮

❝❡r❝❛♥♦s ✿✿ ❬P✉♥t♦❪ ✲❃ ❬P✉♥t♦❪ ✲❃ ✭P✉♥t♦✱P✉♥t♦✮

❝❡r❝❛♥♦s ♣s qs ❂ ✭♣✱q✮

✇❤❡r❡ ✭❞✱♣✱q✮ ❂ ♠✐♥✐♠✉♠ ❬✭❞✐st❛♥❝✐❛ ♣ q✱ ♣✱ q✮ ⑤ ♣ ❁✲ ♣s✱ q ❁✲ qs❪

❞✐st❛♥❝✐❛ ✭①✱②✮ ✭✉✱✈✮ ❂ sqrt ✭✭①✲✉✮❫✷✰✭②✲✈✮❫✷✮

8.2. TDA de los números naturales 173

8.2. TDA de los números naturales

En los diguientes ejercicios se usará el tipo algebraico de datos de los números natu-rales definido por

❞❛t❛ ◆❛t ❂ ❈❡r♦ ⑤ ❙✉❝ ◆❛t

❞❡r✐✈✐♥❣ ✭❊q✱ ❙❤♦✇✮

8.2.1. Suma de números naturales

Ejercicio 8.2.1. Definir la función

s✉♠❛ ✿✿ ◆❛t ✲❃ ◆❛t ✲❃ ◆❛t

tal que ✭s✉♠❛ ♠ ♥✮ es la suma de los números naturales ♠ y ♥. Por ejemplo,

❣❤❝✐❃ s✉♠❛ ✭❙✉❝ ✭❙✉❝ ❈❡r♦✮✮ ✭❙✉❝ ✭❙✉❝ ✭❙✉❝ ❈❡r♦✮✮✮

❙✉❝ ✭❙✉❝ ✭❙✉❝ ✭❙✉❝ ✭❙✉❝ ❈❡r♦✮✮✮✮

Solución:

s✉♠❛ ✿✿ ◆❛t ✲❃ ◆❛t ✲❃ ◆❛t

s✉♠❛ ❈❡r♦ ♥ ❂ ♥

s✉♠❛ ✭❙✉❝ ♠✮ ♥ ❂ ❙✉❝ ✭s✉♠❛ ♠ ♥✮

8.2.2. Producto de números naturales

Ejercicio 8.2.2. Definir la función

♣r♦❞✉❝t♦ ✿✿ ◆❛t ✲❃ ◆❛t ✲❃ ◆❛t

tal que ✭♣r♦❞✉❝t♦ ♠ ♥✮ es el producto de los números naturales ♠ y ♥. Por ejemplo,

❣❤❝✐❃ ♣r♦❞✉❝t♦ ✭❙✉❝ ✭❙✉❝ ❈❡r♦✮✮ ✭❙✉❝ ✭❙✉❝ ✭❙✉❝ ❈❡r♦✮✮✮

❙✉❝ ✭❙✉❝ ✭❙✉❝ ✭❙✉❝ ✭❙✉❝ ✭❙✉❝ ❈❡r♦✮✮✮✮✮

Solución:

♣r♦❞✉❝t♦ ✿✿ ◆❛t ✲❃ ◆❛t ✲❃ ◆❛t

♣r♦❞✉❝t♦ ❈❡r♦ ❴ ❂ ❈❡r♦

♣r♦❞✉❝t♦ ✭❙✉❝ ♠✮ ♥ ❂ s✉♠❛ ♥ ✭♣r♦❞✉❝t♦ ♠ ♥✮

174 Capítulo 8. Tipos definidos y de datos algebraicos

8.3. TDA de árboles binarios con valores en los nodos yen las hojas

En los siguientes ejercicios se trabajará con el tipo de datos algebraico de los árbolesbinarios definidos como sigue

❞❛t❛ ❆r❜♦❧ ❂ ❍♦❥❛ ■♥t

⑤ ◆♦❞♦ ❆r❜♦❧ ■♥t ❆r❜♦❧

❞❡r✐✈✐♥❣ ✭❙❤♦✇✱ ❊q✮

Por ejemplo, el árbol

✴ ❭

✴ ❭

✸ ✼

✴ ❭ ✴ ❭

✶ ✹ ✻ ✾

se representa por

❡❥❆r❜♦❧ ✿✿ ❆r❜♦❧

❡❥❆r❜♦❧ ❂ ◆♦❞♦ ✭◆♦❞♦ ✭❍♦❥❛ ✶✮ ✸ ✭❍♦❥❛ ✹✮✮

✭◆♦❞♦ ✭❍♦❥❛ ✻✮ ✼ ✭❍♦❥❛ ✾✮✮

8.3.1. Ocurrencia de un elemento en el árbol

Ejercicio 8.3.1. Definir la función

♦❝✉rr❡ ✿✿ ■♥t ✲❃ ❆r❜♦❧ ✲❃ ❇♦♦❧

tal que ✭♦❝✉rr❡ ① ❛✮ se verifica si ① ocurre en el árbol ❛ como valor de un nodo o de una hoja.

Por ejemplo,

♦❝✉rr❡ ✹ ❡❥❆r❜♦❧ ❂❂ ❚r✉❡

♦❝✉rr❡ ✶✵ ❡❥❆r❜♦❧ ❂❂ ❋❛❧s❡

Solución:

♦❝✉rr❡ ✿✿ ■♥t ✲❃ ❆r❜♦❧ ✲❃ ❇♦♦❧

♦❝✉rr❡ ♠ ✭❍♦❥❛ ♥✮ ❂ ♠ ❂❂ ♥

♦❝✉rr❡ ♠ ✭◆♦❞♦ ✐ ♥ ❞✮ ❂ ♠ ❂❂ ♥ ⑤⑤ ♦❝✉rr❡ ♠ ✐ ⑤⑤ ♦❝✉rr❡ ♠ ❞

8.4. TDA de árboles binarios con valores en las hojas 175

Ejercicio 8.3.2. En el preludio está definido el tipo de datos

❞❛t❛ ❖r❞❡r✐♥❣ ❂ ▲❚ ⑤ ❊◗ ⑤ ●❚

junto con la función

❝♦♠♣❛r❡ ✿✿ ❖r❞ ❛ ❂❃ ❛ ✲❃ ❛ ✲❃ ❖r❞❡r✐♥❣

que decide si un valor en un tipo ordenado es menor (▲❚), igual (❊◗) o mayor (●❚) que otro.

Usando esta función, redefinir la función

♦❝✉rr❡ ✿✿ ■♥t ✲❃ ❆r❜♦❧ ✲❃ ❇♦♦❧

del ejercicio anterior.

Solución:

♦❝✉rr❡✬ ✿✿ ■♥t ✲❃ ❆r❜♦❧ ✲❃ ❇♦♦❧

♦❝✉rr❡✬ ♠ ✭❍♦❥❛ ♥✮ ❂ ♠ ❂❂ ♥

♦❝✉rr❡✬ ♠ ✭◆♦❞♦ ✐ ♥ ❞✮ ❂ ❝❛s❡ ❝♦♠♣❛r❡ ♠ ♥ ♦❢

▲❚ ✲❃ ♦❝✉rr❡✬ ♠ ✐

❊◗ ✲❃ ❚r✉❡

●❚ ✲❃ ♦❝✉rr❡✬ ♠ ❞

8.4. TDA de árboles binarios con valores en las hojas

En los siguientes ejercicios se trabajará con el tipo algebraico de dato de los árbolesbinarios con valores en las hojas definido por

❞❛t❛ ❆r❜♦❧❇ ❂ ❍♦❥❛❇ ■♥t

⑤ ◆♦❞♦❇ ❆r❜♦❧❇ ❆r❜♦❧❇

❞❡r✐✈✐♥❣ ❙❤♦✇

Por ejemplo, el árbol

✴ ❭

✴ ❭

✳ ✳

✴ ❭ ✴ ❭

✶ ✹ ✻ ✾

se representa por

❡❥❆r❜♦❧❇ ✿✿ ❆r❜♦❧❇

❡❥❆r❜♦❧❇ ❂ ◆♦❞♦❇ ✭◆♦❞♦❇ ✭❍♦❥❛❇ ✶✮ ✭❍♦❥❛❇ ✹✮✮

✭◆♦❞♦❇ ✭❍♦❥❛❇ ✻✮ ✭❍♦❥❛❇ ✾✮✮

176 Capítulo 8. Tipos definidos y de datos algebraicos

8.4.1. Número de hojas

Ejercicio 8.4.1. Definir la función

♥❍♦❥❛s ✿✿ ❆r❜♦❧❇ ✲❃ ■♥t

tal que ✭♥❍♦❥❛s ❛✮ es el número de hojas del árbol ❛. Por ejemplo,

♥❍♦❥❛s ✭◆♦❞♦❇ ✭❍♦❥❛❇ ✺✮ ✭◆♦❞♦❇ ✭❍♦❥❛❇ ✸✮ ✭❍♦❥❛❇ ✼✮✮✮ ❂❂ ✸

♥❍♦❥❛s ❡❥❆r❜♦❧❇ ❂❂ ✹

Solución:

♥❍♦❥❛s ✿✿ ❆r❜♦❧❇ ✲❃ ■♥t

♥❍♦❥❛s ✭❍♦❥❛❇ ❴✮ ❂ ✶

♥❍♦❥❛s ✭◆♦❞♦❇ ❛✶ ❛✷✮ ❂ ♥❍♦❥❛s ❛✶ ✰ ♥❍♦❥❛s ❛✷

8.4.2. Carácter balanceado de un árbol

Ejercicio 8.4.2. Se dice que un árbol de este tipo es balanceado si es una hoja o bien si para cada

nodo se tiene que el número de hojas en cada uno de sus subárboles difiere como máximo en uno

y sus subárboles son balanceados. Definir la función

❜❛❧❛♥❝❡❛❞♦ ✿✿ ❆r❜♦❧❇ ✲❃ ❇♦♦❧❇

tal que ✭❜❛❧❛♥❝❡❛❞♦ ❛✮ se verifica si ❛ es un árbol balanceado. Por ejemplo,

❜❛❧❛♥❝❡❛❞♦ ❡❥❆r❜♦❧❇

❂❂❃ ❚r✉❡

❜❛❧❛♥❝❡❛❞♦ ✭◆♦❞♦❇ ✭❍♦❥❛❇ ✺✮ ✭◆♦❞♦❇ ✭❍♦❥❛❇ ✸✮ ✭❍♦❥❛❇ ✼✮✮✮

❂❂❃ ❚r✉❡

❜❛❧❛♥❝❡❛❞♦ ✭◆♦❞♦❇ ✭❍♦❥❛❇ ✺✮ ✭◆♦❞♦❇ ✭❍♦❥❛❇ ✸✮ ✭◆♦❞♦❇ ✭❍♦❥❛❇ ✺✮ ✭❍♦❥❛❇ ✼✮✮✮✮

❂❂❃ ❋❛❧s❡

Solución:

❜❛❧❛♥❝❡❛❞♦ ✿✿ ❆r❜♦❧❇ ✲❃ ❇♦♦❧

❜❛❧❛♥❝❡❛❞♦ ✭❍♦❥❛❇ ❴✮ ❂ ❚r✉❡

❜❛❧❛♥❝❡❛❞♦ ✭◆♦❞♦❇ ❛✶ ❛✷✮ ❂ ❛❜s ✭♥❍♦❥❛s ❛✶ ✲ ♥❍♦❥❛s ❛✷✮ ❁❂ ✶

✫✫ ❜❛❧❛♥❝❡❛❞♦ ❛✶

✫✫ ❜❛❧❛♥❝❡❛❞♦ ❛✷

8.5. TDA de árboles binarios con valores en los nodos 177

8.4.3. Árbol balanceado correspondiente a una lista

Ejercicio 8.4.3. Definir la función

♠✐t❛❞❡s ✿✿ ❬❛❪ ✲❃ ✭❬❛❪✱❬❛❪✮

tal que ✭♠✐t❛❞❡s ①s✮ es un par de listas que se obtiene al dividir ①s en dos mitades cuya

longitud difiere como máximo en uno. Por ejemplo,

♠✐t❛❞❡s ❬✷✱✸✱✺✱✶✱✹✱✼❪ ❂❂ ✭❬✷✱✸✱✺❪✱❬✶✱✹✱✼❪✮

♠✐t❛❞❡s ❬✷✱✸✱✺✱✶✱✹✱✼✱✾❪ ❂❂ ✭❬✷✱✸✱✺❪✱❬✶✱✹✱✼✱✾❪✮

Solución:

♠✐t❛❞❡s ✿✿ ❬❛❪ ✲❃ ✭❬❛❪✱❬❛❪✮

♠✐t❛❞❡s ①s ❂ s♣❧✐t❆t ✭❧❡♥❣t❤ ①s ❵❞✐✈❵ ✷✮ ①s

Ejercicio 8.4.4. Definir la función

❛r❜♦❧❇❛❧❛♥❝❡❛❞♦ ✿✿ ❬■♥t❪ ✲❃ ❆r❜♦❧❇

tal que ✭❛r❜♦❧❇❛❧❛♥❝❡❛❞♦ ①s✮ es el árbol balanceado correspondiente a la lista ①s. Por ejemplo,

❣❤❝✐❃ ❛r❜♦❧❇❛❧❛♥❝❡❛❞♦ ❬✷✱✺✱✸❪

◆♦❞♦❇ ✭❍♦❥❛❇ ✷✮ ✭◆♦❞♦❇ ✭❍♦❥❛❇ ✺✮ ✭❍♦❥❛❇ ✸✮✮

❣❤❝✐❃ ❛r❜♦❧❇❛❧❛♥❝❡❛❞♦ ❬✷✱✺✱✸✱✼❪

◆♦❞♦❇ ✭◆♦❞♦❇ ✭❍♦❥❛❇ ✷✮ ✭❍♦❥❛❇ ✺✮✮ ✭◆♦❞♦❇ ✭❍♦❥❛❇ ✸✮ ✭❍♦❥❛❇ ✼✮✮

Solución:

❛r❜♦❧❇❛❧❛♥❝❡❛❞♦ ✿✿ ❬■♥t❪ ✲❃ ❆r❜♦❧❇

❛r❜♦❧❇❛❧❛♥❝❡❛❞♦ ❬①❪ ❂ ❍♦❥❛❇ ①

❛r❜♦❧❇❛❧❛♥❝❡❛❞♦ ①s ❂ ◆♦❞♦❇ ✭❛r❜♦❧❇❛❧❛♥❝❡❛❞♦ ②s✮ ✭❛r❜♦❧❇❛❧❛♥❝❡❛❞♦ ③s✮

✇❤❡r❡ ✭②s✱③s✮ ❂ ♠✐t❛❞❡s ①s

8.5. TDA de árboles binarios con valores en los nodos

En los siguientes ejercicios se trabajará con el tipo algebraico de datos de los árbolesbinarios definidos como sigue

❞❛t❛ ❆r❜♦❧ ❛ ❂ ❍♦❥❛

⑤ ◆♦❞♦ ❛ ✭❆r❜♦❧ ❛✮ ✭❆r❜♦❧ ❛✮

❞❡r✐✈✐♥❣ ✭❙❤♦✇✱ ❊q✮

En los ejemplos se usará el siguiente árbol

178 Capítulo 8. Tipos definidos y de datos algebraicos

❛r❜♦❧ ❂ ◆♦❞♦ ✾

✭◆♦❞♦ ✸

✭◆♦❞♦ ✷ ❍♦❥❛ ❍♦❥❛✮

✭◆♦❞♦ ✹ ❍♦❥❛ ❍♦❥❛✮✮

✭◆♦❞♦ ✼ ❍♦❥❛ ❍♦❥❛✮

8.5.1. Número de hojas de un árbol

Ejercicio 8.5.1. Definir la función

♥❍♦❥❛s ✿✿ ❆r❜♦❧ ❛ ✲❃ ■♥t

tal que ✭♥❍♦❥❛s ①✮ es el número de hojas del árbol ①. Por ejemplo,

❣❤❝✐❃ ❛r❜♦❧

◆♦❞♦ ✾ ✭◆♦❞♦ ✸ ✭◆♦❞♦ ✷ ❍♦❥❛ ❍♦❥❛✮ ✭◆♦❞♦ ✹ ❍♦❥❛ ❍♦❥❛✮✮ ✭◆♦❞♦ ✼ ❍♦❥❛ ❍♦❥❛✮

❣❤❝✐❃ ♥❍♦❥❛s ❛r❜♦❧

5Solución:

♥❍♦❥❛s ✿✿ ❆r❜♦❧ ❛ ✲❃ ■♥t

♥❍♦❥❛s ❍♦❥❛ ❂ ✶

♥❍♦❥❛s ✭◆♦❞♦ ① ✐ ❞✮ ❂ ♥❍♦❥❛s ✐ ✰ ♥❍♦❥❛s ❞

8.5.2. Número de nodos de un árbol

Ejercicio 8.5.2. Definir la función

♥◆♦❞♦s ✿✿ ❆r❜♦❧ ❛ ✲❃ ■♥t

tal que ✭♥◆♦❞♦s ①✮ es el número de nodos del árbol ①. Por ejemplo,

❣❤❝✐❃ ❛r❜♦❧

◆♦❞♦ ✾ ✭◆♦❞♦ ✸ ✭◆♦❞♦ ✷ ❍♦❥❛ ❍♦❥❛✮ ✭◆♦❞♦ ✹ ❍♦❥❛ ❍♦❥❛✮✮ ✭◆♦❞♦ ✼ ❍♦❥❛ ❍♦❥❛✮

❣❤❝✐❃ ♥◆♦❞♦s ❛r❜♦❧

Solución:

♥◆♦❞♦s ✿✿ ❆r❜♦❧ ❛ ✲❃ ■♥t

♥◆♦❞♦s ❍♦❥❛ ❂ ✵

♥◆♦❞♦s ✭◆♦❞♦ ① ✐ ❞✮ ❂ ✶ ✰ ♥◆♦❞♦s ✐ ✰ ♥◆♦❞♦s ❞

8.5. TDA de árboles binarios con valores en los nodos 179

8.5.3. Profundidad de un árbol

Ejercicio 8.5.3. Definir la función

♣r♦❢✉♥❞✐❞❛❞ ✿✿ ❆r❜♦❧ ❛ ✲❃ ■♥t

tal que ✭♣r♦❢✉♥❞✐❞❛❞ ①✮ es la profundidad del árbol ①. Por ejemplo,

❣❤❝✐❃ ❛r❜♦❧

◆♦❞♦ ✾ ✭◆♦❞♦ ✸ ✭◆♦❞♦ ✷ ❍♦❥❛ ❍♦❥❛✮ ✭◆♦❞♦ ✹ ❍♦❥❛ ❍♦❥❛✮✮ ✭◆♦❞♦ ✼ ❍♦❥❛ ❍♦❥❛✮

❣❤❝✐❃ ♣r♦❢✉♥❞✐❞❛❞ ❛r❜♦❧

Solución:

♣r♦❢✉♥❞✐❞❛❞ ✿✿ ❆r❜♦❧ ❛ ✲❃ ■♥t

♣r♦❢✉♥❞✐❞❛❞ ❍♦❥❛ ❂ ✵

♣r♦❢✉♥❞✐❞❛❞ ✭◆♦❞♦ ① ✐ ❞✮ ❂ ✶ ✰ ♠❛① ✭♣r♦❢✉♥❞✐❞❛❞ ✐✮ ✭♣r♦❢✉♥❞✐❞❛❞ ❞✮

8.5.4. Recorrido preorden de un árbol

Ejercicio 8.5.4. Definir la función

♣r❡♦r❞❡♥ ✿✿ ❆r❜♦❧ ❛ ✲❃ ❬❛❪

tal que ✭♣r❡♦r❞❡♥ ①✮ es la lista correspondiente al recorrido preorden del árbol ①; es decir,

primero visita la raíz del árbol, a continuación recorre el subárbol izquierdo y, finalmente, recorre

el subárbol derecho. Por ejemplo,

❣❤❝✐❃ ❛r❜♦❧

◆♦❞♦ ✾ ✭◆♦❞♦ ✸ ✭◆♦❞♦ ✷ ❍♦❥❛ ❍♦❥❛✮ ✭◆♦❞♦ ✹ ❍♦❥❛ ❍♦❥❛✮✮ ✭◆♦❞♦ ✼ ❍♦❥❛ ❍♦❥❛✮

❣❤❝✐❃ ♣r❡♦r❞❡♥ ❛r❜♦❧

❬✾✱✸✱✷✱✹✱✼❪

Solución:

♣r❡♦r❞❡♥ ✿✿ ❆r❜♦❧ ❛ ✲❃ ❬❛❪

♣r❡♦r❞❡♥ ❍♦❥❛ ❂ ❬❪

♣r❡♦r❞❡♥ ✭◆♦❞♦ ① ✐ ❞✮ ❂ ① ✿ ✭♣r❡♦r❞❡♥ ✐ ✰✰ ♣r❡♦r❞❡♥ ❞✮

180 Capítulo 8. Tipos definidos y de datos algebraicos

8.5.5. Recorrido postorden de un árbol

Ejercicio 8.5.5. Definir la función

♣♦st♦r❞❡♥ ✿✿ ❆r❜♦❧ ❛ ✲❃ ❬❛❪

tal que ✭♣♦st♦r❞❡♥ ①✮ es la lista correspondiente al recorrido postorden del árbol ①; es decir,

primero recorre el subárbol izquierdo, a continuación el subárbol derecho y, finalmente, la raíz

del árbol. Por ejemplo,

❣❤❝✐❃ ❛r❜♦❧

◆♦❞♦ ✾ ✭◆♦❞♦ ✸ ✭◆♦❞♦ ✷ ❍♦❥❛ ❍♦❥❛✮ ✭◆♦❞♦ ✹ ❍♦❥❛ ❍♦❥❛✮✮ ✭◆♦❞♦ ✼ ❍♦❥❛ ❍♦❥❛✮

❣❤❝✐❃ ♣♦st♦r❞❡♥ ❛r❜♦❧

❬✷✱✹✱✸✱✼✱✾❪

Solución:

♣♦st♦r❞❡♥ ✿✿ ❆r❜♦❧ ❛ ✲❃ ❬❛❪

♣♦st♦r❞❡♥ ❍♦❥❛ ❂ ❬❪

♣♦st♦r❞❡♥ ✭◆♦❞♦ ① ✐ ❞✮ ❂ ♣♦st♦r❞❡♥ ✐ ✰✰ ♣♦st♦r❞❡♥ ❞ ✰✰ ❬①❪

8.5.6. Recorrido preorden de forma iterativa

Ejercicio 8.5.6. Definir, usando un acumulador, la función

♣r❡♦r❞❡♥■t ✿✿ ❆r❜♦❧ ❛ ✲❃ ❬❛❪

tal que ✭♣r❡♦r❞❡♥■t ①✮ es la lista correspondiente al recorrido preorden del árbol ①; es decir,

primero visita la raíz del árbol, a continuación recorre el subárbol izquierdo y, finalmente, recorre

el subárbol derecho. Por ejemplo,

❣❤❝✐❃ ❛r❜♦❧

◆♦❞♦ ✾ ✭◆♦❞♦ ✸ ✭◆♦❞♦ ✷ ❍♦❥❛ ❍♦❥❛✮ ✭◆♦❞♦ ✹ ❍♦❥❛ ❍♦❥❛✮✮ ✭◆♦❞♦ ✼ ❍♦❥❛ ❍♦❥❛✮

❣❤❝✐❃ ♣r❡♦r❞❡♥■t ❛r❜♦❧

❬✾✱✸✱✷✱✹✱✼❪

Nota: No usar ✭✰✰✮ en la definición.

Solución:

♣r❡♦r❞❡♥■t ✿✿ ❆r❜♦❧ ❛ ✲❃ ❬❛❪

♣r❡♦r❞❡♥■t ① ❂ ♣r❡♦r❞❡♥■t❆✉① ① ❬❪

✇❤❡r❡ ♣r❡♦r❞❡♥■t❆✉① ❍♦❥❛ ①s ❂ ①s

♣r❡♦r❞❡♥■t❆✉① ✭◆♦❞♦ ① ✐ ❞✮ ①s ❂

① ✿ ♣r❡♦r❞❡♥■t❆✉① ✐ ✭♣r❡♦r❞❡♥■t❆✉① ❞ ①s✮

8.5. TDA de árboles binarios con valores en los nodos 181

8.5.7. Imagen especular de un árbol

Ejercicio 8.5.7. Definir la función

❡s♣❡❥♦ ✿✿ ❆r❜♦❧ ❛ ✲❃ ❆r❜♦❧ ❛

tal que ✭❡s♣❡❥♦ ①✮ es la imagen especular del árbol ①. Por ejemplo,

❣❤❝✐❃ ❡s♣❡❥♦ ❛r❜♦❧

◆♦❞♦ ✾

✭◆♦❞♦ ✼ ❍♦❥❛ ❍♦❥❛✮

✭◆♦❞♦ ✸

✭◆♦❞♦ ✹ ❍♦❥❛ ❍♦❥❛✮

✭◆♦❞♦ ✷ ❍♦❥❛ ❍♦❥❛✮✮

Solución:

❡s♣❡❥♦ ✿✿ ❆r❜♦❧ ❛ ✲❃ ❆r❜♦❧ ❛

❡s♣❡❥♦ ❍♦❥❛ ❂ ❍♦❥❛

❡s♣❡❥♦ ✭◆♦❞♦ ① ✐ ❞✮ ❂ ◆♦❞♦ ① ✭❡s♣❡❥♦ ❞✮ ✭❡s♣❡❥♦ ✐✮

8.5.8. Subárbol de profundidad dada

Ejercicio 8.5.8. La función take está definida por

t❛❦❡ ✿✿ ■♥t ✲❃ ❬❛❪ ✲❃ ❬❛❪

t❛❦❡ ✵ ❂ ❬❪

t❛❦❡ ✭♥✰✶✮ ❬❪ ❂ ❬❪

t❛❦❡ ✭♥✰✶✮ ✭①✿①s✮ ❂ ① ✿ t❛❦❡ ♥ ①s

Definir la función

t❛❦❡❆r❜♦❧ ✿✿ ■♥t ✲❃ ❆r❜♦❧ ❛ ✲❃ ❆r❜♦❧ ❛

tal que ✭t❛❦❡❆r❜♦❧ ♥ t✮ es el subárbol de t de profundidad ♥. Por ejemplo,

❣❤❝✐❃ t❛❦❡❆r❜♦❧ ✵ ✭◆♦❞♦ ✻ ❍♦❥❛ ✭◆♦❞♦ ✼ ✭◆♦❞♦ ✺ ❍♦❥❛ ❍♦❥❛✮ ❍♦❥❛✮✮

❍♦❥❛

❣❤❝✐❃ t❛❦❡❆r❜♦❧ ✶ ✭◆♦❞♦ ✻ ❍♦❥❛ ✭◆♦❞♦ ✼ ✭◆♦❞♦ ✺ ❍♦❥❛ ❍♦❥❛✮ ❍♦❥❛✮✮

◆♦❞♦ ✻ ❍♦❥❛ ❍♦❥❛

❣❤❝✐❃ t❛❦❡❆r❜♦❧ ✷ ✭◆♦❞♦ ✻ ❍♦❥❛ ✭◆♦❞♦ ✼ ✭◆♦❞♦ ✺ ❍♦❥❛ ❍♦❥❛✮ ❍♦❥❛✮✮

◆♦❞♦ ✻ ❍♦❥❛ ✭◆♦❞♦ ✼ ❍♦❥❛ ❍♦❥❛✮

❣❤❝✐❃ t❛❦❡❆r❜♦❧ ✸ ✭◆♦❞♦ ✻ ❍♦❥❛ ✭◆♦❞♦ ✼ ✭◆♦❞♦ ✺ ❍♦❥❛ ❍♦❥❛✮ ❍♦❥❛✮✮

◆♦❞♦ ✻ ❍♦❥❛ ✭◆♦❞♦ ✼ ✭◆♦❞♦ ✺ ❍♦❥❛ ❍♦❥❛✮ ❍♦❥❛✮

❣❤❝✐❃ t❛❦❡❆r❜♦❧ ✹ ✭◆♦❞♦ ✻ ❍♦❥❛ ✭◆♦❞♦ ✼ ✭◆♦❞♦ ✺ ❍♦❥❛ ❍♦❥❛✮ ❍♦❥❛✮✮

◆♦❞♦ ✻ ❍♦❥❛ ✭◆♦❞♦ ✼ ✭◆♦❞♦ ✺ ❍♦❥❛ ❍♦❥❛✮ ❍♦❥❛✮

182 Capítulo 8. Tipos definidos y de datos algebraicos

Solución:

t❛❦❡❆r❜♦❧ ✿✿ ■♥t ✲❃ ❆r❜♦❧ ❛ ✲❃ ❆r❜♦❧ ❛

t❛❦❡❆r❜♦❧ ✵ ❴ ❂ ❍♦❥❛

t❛❦❡❆r❜♦❧ ❴ ❍♦❥❛ ❂ ❍♦❥❛

t❛❦❡❆r❜♦❧ ♥ ✭◆♦❞♦ ① ✐ ❞✮ ❂

◆♦❞♦ ① ✭t❛❦❡❆r❜♦❧ ✭♥✲✶✮ ✐✮ ✭t❛❦❡❆r❜♦❧ ✭♥✲✶✮ ❞✮

8.5.9. Árbol infinito generado con un elemento

Ejercicio 8.5.9. La función

r❡♣❡❛t ✿✿ ❛ ✲❃ ❬❛❪

está definida de forma que ✭r❡♣❡❛t ①✮ es la lista formada por infinitos elementos ①. Por ejemplo,

r❡♣❡❛t ✸ ❂❂ ❬✸✱✸✱✸✱✸✱✸✱✸✱✸✱✸✱✸✱✸✱✸✱✸✱✸✱✳✳✳

La definición de repeat es

r❡♣❡❛t ① ❂ ①s ✇❤❡r❡ ①s ❂ ①✿①s

Definir la función

r❡♣❡❛t❆r❜♦❧ ✿✿ ❛ ✲❃ ❆r❜♦❧ ❛

tal que ✭r❡♣❡❛t❆r❜♦❧ ①✮ es es árbol con infinitos nodos ①. Por ejemplo,

❣❤❝✐❃ t❛❦❡❆r❜♦❧ ✵ ✭r❡♣❡❛t❆r❜♦❧ ✸✮

❍♦❥❛

❣❤❝✐❃ t❛❦❡❆r❜♦❧ ✶ ✭r❡♣❡❛t❆r❜♦❧ ✸✮

◆♦❞♦ ✸ ❍♦❥❛ ❍♦❥❛

❣❤❝✐❃ t❛❦❡❆r❜♦❧ ✷ ✭r❡♣❡❛t❆r❜♦❧ ✸✮

◆♦❞♦ ✸ ✭◆♦❞♦ ✸ ❍♦❥❛ ❍♦❥❛✮ ✭◆♦❞♦ ✸ ❍♦❥❛ ❍♦❥❛✮

Solución:

r❡♣❡❛t❆r❜♦❧ ✿✿ ❛ ✲❃ ❆r❜♦❧ ❛

r❡♣❡❛t❆r❜♦❧ ① ❂ ◆♦❞♦ ① t t

✇❤❡r❡ t ❂ r❡♣❡❛t❆r❜♦❧ ①

8.5. TDA de árboles binarios con valores en los nodos 183

8.5.10. Árbol de profundidad dada cuyos nodos son iguales a un ele-mento

Ejercicio 8.5.10. La función

r❡♣❧✐❝❛t❡ ✿✿ ■♥t ✲❃ ❛ ✲❃ ❬❛❪

está definida por

r❡♣❧✐❝❛t❡ ♥ ❂ t❛❦❡ ♥ ✳ r❡♣❡❛t

es tal que ✭r❡♣❧✐❝❛t❡ ♥ ①✮ es la lista de longitud ♥ cuyos elementos son ①. Por ejemplo,

r❡♣❧✐❝❛t❡ ✸ ✺ ❂❂ ❬✺✱✺✱✺❪

Definir la función

r❡♣❧✐❝❛t❡❆r❜♦❧ ✿✿ ■♥t ✲❃ ❛ ✲❃ ❆r❜♦❧ ❛

tal que ✭r❡♣❧✐❝❛t❡ ♥ ①✮ es el árbol de profundidad ♥ cuyos nodos son ①. Por ejemplo,

❣❤❝✐❃ r❡♣❧✐❝❛t❡❆r❜♦❧ ✵ ✺

❍♦❥❛

❣❤❝✐❃ r❡♣❧✐❝❛t❡❆r❜♦❧ ✶ ✺

◆♦❞♦ ✺ ❍♦❥❛ ❍♦❥❛

❣❤❝✐❃ r❡♣❧✐❝❛t❡❆r❜♦❧ ✷ ✺

◆♦❞♦ ✺ ✭◆♦❞♦ ✺ ❍♦❥❛ ❍♦❥❛✮ ✭◆♦❞♦ ✺ ❍♦❥❛ ❍♦❥❛✮

Solución:

r❡♣❧✐❝❛t❡❆r❜♦❧ ✿✿ ■♥t ✲❃ ❛ ✲❃ ❆r❜♦❧ ❛

r❡♣❧✐❝❛t❡❆r❜♦❧ ♥ ❂ t❛❦❡❆r❜♦❧ ♥ ✳ r❡♣❡❛t❆r❜♦❧

8.5.11. Rama izquierda de un árbol

Ejercicio 8.5.11. Definir la función

r❛♠❛■③q✉✐❡r❞❛ ✿✿ ❆r❜♦❧ ✲❃ ❬■♥t❪

tal que ✭r❛♠❛■③q✉✐❡r❞❛ ❛✮ es la lista de los valores de los nodos de la rama izquierda del árbol

❛. Por ejemplo,

r❛♠❛■③q✉✐❡r❞❛ ❛r❜♦❧ ❂❂ ❬✾✱✸✱✷❪

Solución:

r❛♠❛■③q✉✐❡r❞❛ ✿✿ ❆r❜♦❧ ❛ ✲❃ ❬❛❪

r❛♠❛■③q✉✐❡r❞❛ ❍♦❥❛ ❂ ❬❪

r❛♠❛■③q✉✐❡r❞❛ ✭◆♦❞♦ ① ✐ ❞✮ ❂ ① ✿ r❛♠❛■③q✉✐❡r❞❛ ✐

184 Capítulo 8. Tipos definidos y de datos algebraicos

8.6. TAD de fórmulas proposicionales

En el tema 9 de [1] se presenta un programa para decidir si una fórmula proposicio-nal es tautología, que reproducimos a continuación.

Las fórmulas proposicionales se definen por:

Las constantes booleanas son fórmulas proposicionales.

Las fórmulas atómicas son fórmulas proposicionales.

Si F es una fómula proposicional, entonces ¬F también los es.

Si F y G son fórmulas proposicionales, entonces (F ∧ G) y (F → G) también loson.

Las fórmulas se representan por el siguiente tipo de datos algebraico:

❞❛t❛ Pr♦♣ ❂ ❈♦♥st ❇♦♦❧

⑤ ❱❛r ❈❤❛r

⑤ ◆❡❣ Pr♦♣

⑤ ❈♦♥❥ Pr♦♣ Pr♦♣

⑤ ■♠♣❧ Pr♦♣ Pr♦♣

❞❡r✐✈✐♥❣ ❙❤♦✇

Por ejemplo, las fórmulas

p1 := A ∧ ¬A

p2 := (A ∧ B) → A

p3 := A → (A ∧ B)

p4 := (A → (A → B)) → B

se representan por

♣✶✱ ♣✷✱ ♣✸✱ ♣✹ ✿✿ Pr♦♣

♣✶ ❂ ❈♦♥❥ ✭❱❛r ✬❆✬✮ ✭◆❡❣ ✭❱❛r ✬❆✬✮✮

♣✷ ❂ ■♠♣❧ ✭❈♦♥❥ ✭❱❛r ✬❆✬✮ ✭❱❛r ✬❇✬✮✮ ✭❱❛r ✬❆✬✮

♣✸ ❂ ■♠♣❧ ✭❱❛r ✬❆✬✮ ✭❈♦♥❥ ✭❱❛r ✬❆✬✮ ✭❱❛r ✬❇✬✮✮

♣✹ ❂ ■♠♣❧ ✭❈♦♥❥ ✭❱❛r ✬❆✬✮ ✭■♠♣❧ ✭❱❛r ✬❆✬✮ ✭❱❛r ✬❇✬✮✮✮ ✭❱❛r ✬❇✬✮

Las interpretaciones son listas formadas por el nombre de una variable proposicionaly un valor de verdad. El tipo de las interpretaciones es ■♥t❡r♣r❡t❛❝✐♦♥

8.6. TAD de fórmulas proposicionales 185

t②♣❡ ■♥t❡r♣r❡t❛❝✐♦♥ ❂ ❆s♦❝ ❈❤❛r ❇♦♦❧

Las funciones del programa son

✭✈❛❧♦r ✐ ♣✮ es el valor de la proposición ♣ en la interpretación ✐. Por ejemplo,

✈❛❧♦r ❬✭✬❆✬✱❋❛❧s❡✮✱✭✬❇✬✱❚r✉❡✮❪ ♣✸ ❂❃ ❚r✉❡

✈❛❧♦r ❬✭✬❆✬✱❚r✉❡✮✱✭✬❇✬✱❋❛❧s❡✮❪ ♣✸ ❂❃ ❋❛❧s❡

✈❛❧♦r ✿✿ ■♥t❡r♣r❡t❛❝✐♦♥ ✲❃ Pr♦♣ ✲❃ ❇♦♦❧

✈❛❧♦r ❴ ✭❈♦♥st ❜✮ ❂ ❜

✈❛❧♦r ✐ ✭❱❛r ①✮ ❂ ❜✉s❝❛ ① ✐

✈❛❧♦r ✐ ✭◆❡❣ ♣✮ ❂ ♥♦t ✭✈❛❧♦r ✐ ♣✮

✈❛❧♦r ✐ ✭❈♦♥❥ ♣ q✮ ❂ ✈❛❧♦r ✐ ♣ ✫✫ ✈❛❧♦r ✐ q

✈❛❧♦r ✐ ✭■♠♣❧ ♣ q✮ ❂ ✈❛❧♦r ✐ ♣ ❁❂ ✈❛❧♦r ✐ q

✭❜✉s❝❛ ① ②s✮ es la segunda componente del primer par de ys cuya primera com-ponente es igual a ①.

❜✉s❝❛ ✿✿ ❊q ❝ ❂❃ ❝ ✲❃ ❬✭❝✱✈✮❪ ✲❃ ✈

❜✉s❝❛ ❝ t ❂ ❤❡❛❞ ❬✈ ⑤ ✭❝✬✱✈✮ ❁✲ t✱ ❝ ❂❂ ❝✬❪

✭✈❛r✐❛❜❧❡s ♣✮ es la lista de los nombres de las variables de la fórmula ♣. Porejemplo,

✈❛r✐❛❜❧❡s ♣✸ ❂❂ ✧❆❆❇✧

✈❛r✐❛❜❧❡s ✿✿ Pr♦♣ ✲❃ ❬❈❤❛r❪

✈❛r✐❛❜❧❡s ✭❈♦♥st ❴✮ ❂ ❬❪

✈❛r✐❛❜❧❡s ✭❱❛r ①✮ ❂ ❬①❪

✈❛r✐❛❜❧❡s ✭◆❡❣ ♣✮ ❂ ✈❛r✐❛❜❧❡s ♣

✈❛r✐❛❜❧❡s ✭❈♦♥❥ ♣ q✮ ❂ ✈❛r✐❛❜❧❡s ♣ ✰✰ ✈❛r✐❛❜❧❡s q

✈❛r✐❛❜❧❡s ✭■♠♣❧ ♣ q✮ ❂ ✈❛r✐❛❜❧❡s ♣ ✰✰ ✈❛r✐❛❜❧❡s q

✭✐♥t❡r♣r❡t❛❝✐♦♥❡s❱❛r ♥✮ es la lista de las interpretaciones con ♥ variables. Porejemplo,

❣❤❝✐❃ ✐♥t❡r♣r❡t❛❝✐♦♥❡s❱❛r ✷

❬❬❋❛❧s❡✱❋❛❧s❡❪✱

❬❋❛❧s❡✱❚r✉❡❪✱

❬❚r✉❡✱❋❛❧s❡❪✱

❬❚r✉❡✱❚r✉❡❪❪

186 Capítulo 8. Tipos definidos y de datos algebraicos

✐♥t❡r♣r❡t❛❝✐♦♥❡s❱❛r ✿✿ ■♥t ✲❃ ❬❬❇♦♦❧❪❪

✐♥t❡r♣r❡t❛❝✐♦♥❡s❱❛r ✵ ❂ ❬❬❪❪

✐♥t❡r♣r❡t❛❝✐♦♥❡s❱❛r ✭♥✰✶✮ ❂ ♠❛♣ ✭❋❛❧s❡✿✮ ❜ss ✰✰ ♠❛♣ ✭❚r✉❡✿✮ ❜ss

✇❤❡r❡ ❜ss ❂ ✐♥t❡r♣r❡t❛❝✐♦♥❡s❱❛r ♥

✭✐♥t❡r♣r❡t❛❝✐♦♥❡s ♣✮ es la lista de las interpretaciones de la fórmula ♣. Por ejem-plo,

❣❤❝✐❃ ✐♥t❡r♣r❡t❛❝✐♦♥❡s ♣✸

❬❬✭✬❆✬✱❋❛❧s❡✮✱✭✬❇✬✱❋❛❧s❡✮❪✱

❬✭✬❆✬✱❋❛❧s❡✮✱✭✬❇✬✱❚r✉❡✮❪✱

❬✭✬❆✬✱❚r✉❡✮✱✭✬❇✬✱❋❛❧s❡✮❪✱

❬✭✬❆✬✱❚r✉❡✮✱✭✬❇✬✱❚r✉❡✮❪❪

✐♥t❡r♣r❡t❛❝✐♦♥❡s ✿✿ Pr♦♣ ✲❃ ❬■♥t❡r♣r❡t❛❝✐♦♥❪

✐♥t❡r♣r❡t❛❝✐♦♥❡s ♣ ❂

♠❛♣ ✭③✐♣ ✈s✮ ✭✐♥t❡r♣r❡t❛❝✐♦♥❡s❱❛r ✭❧❡♥❣t❤ ✈s✮✮

✇❤❡r❡ ✈s ❂ ♥✉❜ ✭✈❛r✐❛❜❧❡s ♣✮

Una definición alternativa es

✐♥t❡r♣r❡t❛❝✐♦♥❡s✬ ✿✿ Pr♦♣ ✲❃ ❬■♥t❡r♣r❡t❛❝✐♦♥❪

✐♥t❡r♣r❡t❛❝✐♦♥❡s✬ ♣ ❂

❬③✐♣ ✈s ✐ ⑤ ✐ ❁✲ ✐s❪

✇❤❡r❡ ✈s ❂ ♥✉❜ ✭✈❛r✐❛❜❧❡s ♣✮

✐s ❂ ✭✐♥t❡r♣r❡t❛❝✐♦♥❡s❱❛r ✭❧❡♥❣t❤ ✈s✮✮

✭❡s❚❛✉t♦❧♦❣✐❛ ♣✮ se verifica si la fórmula ♣ es una tautología. Por ejemplo,

❡s❚❛✉t♦❧♦❣✐❛ ♣✶ ❂❂ ❋❛❧s❡

❡s❚❛✉t♦❧♦❣✐❛ ♣✷ ❂❂ ❚r✉❡

❡s❚❛✉t♦❧♦❣✐❛ ♣✸ ❂❂ ❋❛❧s❡

❡s❚❛✉t♦❧♦❣✐❛ ♣✹ ❂❂ ❚r✉❡

❡s❚❛✉t♦❧♦❣✐❛ ✿✿ Pr♦♣ ✲❃ ❇♦♦❧

❡s❚❛✉t♦❧♦❣✐❛ ♣ ❂ ❛♥❞ ❬✈❛❧♦r ✐ ♣ ⑤ ✐ ❁✲ ✐♥t❡r♣r❡t❛❝✐♦♥❡s ♣❪

En esta sección se extiende el demostrador proposicional estudiado para incluir dis-yunciones y equivalencias.

8.6. TAD de fórmulas proposicionales 187

Ejercicio 8.6.1. Extender el procedimiento de decisión de tautologías para incluir las disyuncio-

nes (❉✐s❥) y las equivalencias (❊q✉✐). Por ejemplo,

❣❤❝✐❃ ❡s❚❛✉t♦❧♦❣✐❛ ✭❊q✉✐ ✭❱❛r ✬❆✬✮ ✭❉✐s❥ ✭❱❛r ✬❆✬✮ ✭❱❛r ✬❆✬✮✮✮

❚r✉❡

❣❤❝✐❃ ❡s❚❛✉t♦❧♦❣✐❛ ✭❊q✉✐ ✭❱❛r ✬❆✬✮ ✭❉✐s❥ ✭❱❛r ✬❆✬✮ ✭❱❛r ✬❇✬✮✮✮

❋❛❧s❡

Solución:

❞❛t❛ ❋Pr♦♣ ❂ ❈♦♥st ❇♦♦❧

⑤ ❱❛r ❈❤❛r

⑤ ◆❡❣ ❋Pr♦♣

⑤ ❈♦♥❥ ❋Pr♦♣ ❋Pr♦♣

⑤ ❉✐s❥ ❋Pr♦♣ ❋Pr♦♣ ✲✲ ❆ñ❛❞✐❞♦

⑤ ■♠♣❧ ❋Pr♦♣ ❋Pr♦♣

⑤ ❊q✉✐ ❋Pr♦♣ ❋Pr♦♣ ✲✲ ❆ñ❛❞✐❞♦

❞❡r✐✈✐♥❣ ❙❤♦✇

t②♣❡ ■♥t❡r♣r❡t❛❝✐♦♥ ❂ ❬✭❈❤❛r✱ ❇♦♦❧✮❪

✈❛❧♦r ✿✿ ■♥t❡r♣r❡t❛❝✐♦♥ ✲❃ ❋Pr♦♣ ✲❃ ❇♦♦❧

✈❛❧♦r ❴ ✭❈♦♥st ❜✮ ❂ ❜

✈❛❧♦r ✐ ✭❱❛r ①✮ ❂ ❜✉s❝❛ ① ✐

✈❛❧♦r ✐ ✭◆❡❣ ♣✮ ❂ ♥♦t ✭✈❛❧♦r ✐ ♣✮

✈❛❧♦r ✐ ✭❈♦♥❥ ♣ q✮ ❂ ✈❛❧♦r ✐ ♣ ✫✫ ✈❛❧♦r ✐ q

✈❛❧♦r ✐ ✭❉✐s❥ ♣ q✮ ❂ ✈❛❧♦r ✐ ♣ ⑤⑤ ✈❛❧♦r ✐ q ✲✲ ❆ñ❛❞✐❞♦

✈❛❧♦r ✐ ✭■♠♣❧ ♣ q✮ ❂ ✈❛❧♦r ✐ ♣ ❁❂ ✈❛❧♦r ✐ q

✈❛❧♦r ✐ ✭❊q✉✐ ♣ q✮ ❂ ✈❛❧♦r ✐ ♣ ❂❂ ✈❛❧♦r ✐ q ✲✲ ❆ñ❛❞✐❞♦

❜✉s❝❛ ✿✿ ❊q ❝ ❂❃ ❝ ✲❃ ❬✭❝✱✈✮❪ ✲❃ ✈

❜✉s❝❛ ❝ t ❂ ❤❡❛❞ ❬✈ ⑤ ✭❝✬✱✈✮ ❁✲ t✱ ❝ ❂❂ ❝✬❪

✈❛r✐❛❜❧❡s ✿✿ ❋Pr♦♣ ✲❃ ❬❈❤❛r❪

✈❛r✐❛❜❧❡s ✭❈♦♥st ❴✮ ❂ ❬❪

✈❛r✐❛❜❧❡s ✭❱❛r ①✮ ❂ ❬①❪

✈❛r✐❛❜❧❡s ✭◆❡❣ ♣✮ ❂ ✈❛r✐❛❜❧❡s ♣

✈❛r✐❛❜❧❡s ✭❈♦♥❥ ♣ q✮ ❂ ✈❛r✐❛❜❧❡s ♣ ✰✰ ✈❛r✐❛❜❧❡s q

✈❛r✐❛❜❧❡s ✭❉✐s❥ ♣ q✮ ❂ ✈❛r✐❛❜❧❡s ♣ ✰✰ ✈❛r✐❛❜❧❡s q ✲✲ ❆ñ❛❞✐❞♦

✈❛r✐❛❜❧❡s ✭■♠♣❧ ♣ q✮ ❂ ✈❛r✐❛❜❧❡s ♣ ✰✰ ✈❛r✐❛❜❧❡s q

✈❛r✐❛❜❧❡s ✭❊q✉✐ ♣ q✮ ❂ ✈❛r✐❛❜❧❡s ♣ ✰✰ ✈❛r✐❛❜❧❡s q ✲✲ ❆ñ❛❞✐❞♦

188 Capítulo 8. Tipos definidos y de datos algebraicos

✐♥t❡r♣r❡t❛❝✐♦♥❡s❱❛r ✿✿ ■♥t ✲❃ ❬❬❇♦♦❧❪❪

✐♥t❡r♣r❡t❛❝✐♦♥❡s❱❛r ✵ ❂ ❬❬❪❪

✐♥t❡r♣r❡t❛❝✐♦♥❡s❱❛r ✭♥✰✶✮ ❂

♠❛♣ ✭❋❛❧s❡✿✮ ❜ss ✰✰ ♠❛♣ ✭❚r✉❡✿✮ ❜ss

✇❤❡r❡ ❜ss ❂ ✐♥t❡r♣r❡t❛❝✐♦♥❡s❱❛r ♥

✐♥t❡r♣r❡t❛❝✐♦♥❡s ✿✿ ❋Pr♦♣ ✲❃ ❬■♥t❡r♣r❡t❛❝✐♦♥❪

✐♥t❡r♣r❡t❛❝✐♦♥❡s ♣ ❂

♠❛♣ ✭③✐♣ ✈s✮ ✭✐♥t❡r♣r❡t❛❝✐♦♥❡s❱❛r ✭❧❡♥❣t❤ ✈s✮✮

✇❤❡r❡ ✈s ❂ ♥✉❜ ✭✈❛r✐❛❜❧❡s ♣✮

❡s❚❛✉t♦❧♦❣✐❛ ✿✿ ❋Pr♦♣ ✲❃ ❇♦♦❧

❡s❚❛✉t♦❧♦❣✐❛ ♣ ❂

❛♥❞ ❬✈❛❧♦r ✐ ♣ ⑤ ✐ ❁✲ ✐♥t❡r♣r❡t❛❝✐♦♥❡s ♣❪

Ejercicio 8.6.2. Definir la función

✐♥t❡r♣r❡t❛❝✐♦♥❡s❱❛r✬ ✿✿ ■♥t ✲❃ ❬❬❇♦♦❧❪❪

que sea equivalente a ✐♥t❡r♣r❡t❛❝✐♦♥❡s❱❛r pero que en su definición use listas de comprensión

en lugar de ♠❛♣. Por ejemplo,

❣❤❝✐❃ ✐♥t❡r♣r❡t❛❝✐♦♥❡s❱❛r✬ ✷

❬❬❋❛❧s❡✱❋❛❧s❡❪✱❬❋❛❧s❡✱❚r✉❡❪✱❬❚r✉❡✱❋❛❧s❡❪✱❬❚r✉❡✱❚r✉❡❪❪

Solución:

✐♥t❡r♣r❡t❛❝✐♦♥❡s❱❛r✬ ✿✿ ■♥t ✲❃ ❬❬❇♦♦❧❪❪

✐♥t❡r♣r❡t❛❝✐♦♥❡s❱❛r✬ ✵ ❂ ❬❬❪❪

✐♥t❡r♣r❡t❛❝✐♦♥❡s❱❛r✬ ✭♥✰✶✮ ❂

❬❋❛❧s❡✿❜s ⑤ ❜s ❁✲ ❜ss❪ ✰✰ ❬❚r✉❡✿❜s ⑤ ❜s ❁✲ ❜ss❪

✇❤❡r❡ ❜ss ❂ ✐♥t❡r♣r❡t❛❝✐♦♥❡s❱❛r✬ ♥

Ejercicio 8.6.3. Definir la función

✐♥t❡r♣r❡t❛❝✐♦♥❡s✬ ✿✿ ❋Pr♦♣ ✲❃ ❬■♥t❡r♣r❡t❛❝✐♦♥❪

que sea equivalente a ✐♥t❡r♣r❡t❛❝✐♦♥❡s pero que en su definición use listas de comprensión en

lugar de ♠❛♣. Por ejemplo,

❣❤❝✐❃ ✐♥t❡r♣r❡t❛❝✐♦♥❡s✬ ✭■♠♣❧ ✭❱❛r ✬❆✬✮ ✭❈♦♥❥ ✭❱❛r ✬❆✬✮ ✭❱❛r ✬❇✬✮✮✮

❬❬✭✬❆✬✱❋❛❧s❡✮✱✭✬❇✬✱❋❛❧s❡✮❪✱

❬✭✬❆✬✱❋❛❧s❡✮✱✭✬❇✬✱❚r✉❡✮❪✱

❬✭✬❆✬✱❚r✉❡✮✱✭✬❇✬✱❋❛❧s❡✮❪✱

❬✭✬❆✬✱❚r✉❡✮✱✭✬❇✬✱❚r✉❡✮❪❪

8.7. Modelización de un juego de cartas 189

Solución:

✐♥t❡r♣r❡t❛❝✐♦♥❡s✬ ✿✿ ❋Pr♦♣ ✲❃ ❬■♥t❡r♣r❡t❛❝✐♦♥❪

✐♥t❡r♣r❡t❛❝✐♦♥❡s✬ ♣ ❂

❬③✐♣ ✈s ✐ ⑤ ✐ ❁✲ ✐s❪

✇❤❡r❡ ✈s ❂ ♥✉❜ ✭✈❛r✐❛❜❧❡s ♣✮

✐s ❂ ✐♥t❡r♣r❡t❛❝✐♦♥❡s❱❛r ✭❧❡♥❣t❤ ✈s✮

8.7. Modelización de un juego de cartas

En esta sección se estudia la modelización de un juego de cartas como aplicaciónde los tipos de datos algebraicos. Además, se definen los generadores correspondientespara comprobar las propiedades con QuickCheck.

Nota. Se usan las siguientes librerías auxiliares

✐♠♣♦rt ❚❡st✳◗✉✐❝❦❈❤❡❝❦

✐♠♣♦rt ❉❛t❛✳❈❤❛r

✐♠♣♦rt ❉❛t❛✳▲✐st

Ejercicio 8.7.1. Definir el tipo de datos P❛❧♦ para representar los cuatro palos de la baraja: picas,

corazones, diamantes y tréboles. Hacer que P❛❧♦ sea instancia de ❊q y ❙❤♦✇.

Solución:

❞❛t❛ P❛❧♦ ❂ P✐❝❛s ⑤ ❈♦r❛③♦♥❡s ⑤ ❉✐❛♠❛♥t❡s ⑤ ❚r❡❜♦❧❡s

❞❡r✐✈✐♥❣ ✭❊q✱ ❙❤♦✇✮

Nota. Para que QuickCheck pueda generar elementos del tipo P❛❧♦ se usa la siguientefunción.

✐♥st❛♥❝❡ ❆r❜✐tr❛r② P❛❧♦ ✇❤❡r❡

❛r❜✐tr❛r② ❂ ❡❧❡♠❡♥ts ❬P✐❝❛s✱ ❈♦r❛③♦♥❡s✱ ❉✐❛♠❛♥t❡s✱ ❚r❡❜♦❧❡s❪

Ejercicio 8.7.2. Definir el tipo de dato ❈♦❧♦r para representar los colores de las cartas: rojo y

negro. Hacer que ❈♦❧♦r sea instancia de ❙❤♦✇.

Solución:

❞❛t❛ ❈♦❧♦r ❂ ❘♦❥♦ ⑤ ◆❡❣r♦

❞❡r✐✈✐♥❣ ❙❤♦✇

Ejercicio 8.7.3. Definir la función

190 Capítulo 8. Tipos definidos y de datos algebraicos

❝♦❧♦r ✿✿ P❛❧♦ ✲❃ ❈♦❧♦r

tal que ✭❝♦❧♦r ♣✮ es el color del palo ♣. Por ejemplo,

❝♦❧♦r ❈♦r❛③♦♥❡s ❂❂❃ ❘♦❥♦

Nota: Los corazones y los diamantes son rojos. Las picas y los tréboles son negros.

Solución:

❝♦❧♦r ✿✿ P❛❧♦ ✲❃ ❈♦❧♦r

❝♦❧♦r P✐❝❛s ❂ ◆❡❣r♦

❝♦❧♦r ❈♦r❛③♦♥❡s ❂ ❘♦❥♦

❝♦❧♦r ❉✐❛♠❛♥t❡s ❂ ❘♦❥♦

❝♦❧♦r ❚r❡❜♦❧❡s ❂ ◆❡❣r♦

Ejercicio 8.7.4. Los valores de las cartas se dividen en los numéricos (del 2 al 10) y las figuras

(sota, reina, rey y as). Definir el tipo de datos ❱❛❧♦r para representar los valores de las cartas.

Hacer que ❱❛❧♦r sea instancia de ❊q y ❙❤♦✇. Por ejemplo,

❣❤❝✐ ✿t②♣❡ ❙♦t❛

❙♦t❛ ✿✿ ❱❛❧♦r

❣❤❝✐ ✿t②♣❡ ❘❡✐♥❛

❘❡✐♥❛ ✿✿ ❱❛❧♦r

❣❤❝✐ ✿t②♣❡ ❘❡②

❘❡② ✿✿ ❱❛❧♦r

❣❤❝✐ ✿t②♣❡ ❆s

❆s ✿✿ ❱❛❧♦r

❣❤❝✐ ✿t②♣❡ ◆✉♠❡r✐❝♦ ✸

◆✉♠❡r✐❝♦ ✸ ✿✿ ❱❛❧♦r

Solución:

❞❛t❛ ❱❛❧♦r ❂ ◆✉♠❡r✐❝♦ ■♥t ⑤ ❙♦t❛ ⑤ ❘❡✐♥❛ ⑤ ❘❡② ⑤ ❆s

❞❡r✐✈✐♥❣ ✭❊q✱ ❙❤♦✇✮

Nota. Para que QuickCheck pueda generar elementos del tipo Valor se usa la siguientefunción.

✐♥st❛♥❝❡ ❆r❜✐tr❛r② ❱❛❧♦r ✇❤❡r❡

❛r❜✐tr❛r② ❂

♦♥❡♦❢ ✩

❬ ❞♦ r❡t✉r♥ ❝

⑤ ❝ ❁✲ ❬❙♦t❛✱❘❡✐♥❛✱❘❡②✱❆s❪

8.7. Modelización de un juego de cartas 191

❪ ✰✰

❬ ❞♦ ♥ ❁✲ ❝❤♦♦s❡ ✭✷✱✶✵✮

r❡t✉r♥ ✭◆✉♠❡r✐❝♦ ♥✮

Ejercicio 8.7.5. El orden de valor de las cartas (de mayor a menor) es as, rey, reina, sota y las

numéricas según su valor. Definir la función

♠❛②♦r ✿✿ ❱❛❧♦r ✲❃ ❱❛❧♦r ✲❃ ❇♦♦❧

tal que ✭♠❛②♦r ① ②✮ se verifica si la carta ① es de mayor valor que la carta ②✳ Por ejemplo,

♠❛②♦r ❙♦t❛ ✭◆✉♠❡r✐❝♦ ✼✮ ❂❂❃ ❚r✉❡

♠❛②♦r ✭◆✉♠❡r✐❝♦ ✶✵✮ ❘❡✐♥❛ ❂❂❃ ❋❛❧s❡

Solución:

♠❛②♦r ✿✿ ❱❛❧♦r ✲❃ ❱❛❧♦r ✲❃ ❇♦♦❧

♠❛②♦r ❴ ❆s ❂ ❋❛❧s❡

♠❛②♦r ❆s ❴ ❂ ❚r✉❡

♠❛②♦r ❴ ❘❡② ❂ ❋❛❧s❡

♠❛②♦r ❘❡② ❴ ❂ ❚r✉❡

♠❛②♦r ❴ ❘❡✐♥❛ ❂ ❋❛❧s❡

♠❛②♦r ❘❡✐♥❛ ❴ ❂ ❚r✉❡

♠❛②♦r ❴ ❙♦t❛ ❂ ❋❛❧s❡

♠❛②♦r ❙♦t❛ ❴ ❂ ❚r✉❡

♠❛②♦r ✭◆✉♠❡r✐❝♦ ♠✮ ✭◆✉♠❡r✐❝♦ ♥✮ ❂ ♠ ❃ ♥

Ejercicio 8.7.6. Comprobar con QuickCheck si dadas dos cartas, una siempre tiene mayor valor

que la otra. En caso de que no se verifique, añadir la menor precondición para que lo haga.

Solución: La propiedad es

♣r♦♣❴▼❛②♦r❱❛❧♦r✶ ❛ ❜ ❂

♠❛②♦r ❛ ❜ ⑤⑤ ♠❛②♦r ❜ ❛

La comprobación es

❣❤❝✐ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴▼❛②♦r❱❛❧♦r✶

❋❛❧s✐❢✐❛❜❧❡✱ ❛❢t❡r ✷ t❡sts✿

❙♦t❛

❙♦t❛

que indica que la propiedad es falsa porque la sota no tiene mayor valor que la sota.La precondición es que las cartas sean distintas:

192 Capítulo 8. Tipos definidos y de datos algebraicos

♣r♦♣❴▼❛②♦r❱❛❧♦r ❛ ❜ ❂

❛ ✴❂ ❜ ❂❂❃ ♠❛②♦r ❛ ❜ ⑤⑤ ♠❛②♦r ❜ ❛

La comprobación es

❣❤❝✐ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴▼❛②♦r❱❛❧♦r

❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

Ejercicio 8.7.7. Definir el tipo de datos ❈❛rt❛ para representar las cartas mediante un valor y

un palo. Hacer que ❈❛rt❛ sea instancia de ❊q y ❙❤♦✇✳ Por ejemplo,

❣❤❝✐ ✿t②♣❡ ❈❛rt❛ ❘❡② ❈♦r❛③♦♥❡s

❈❛rt❛ ❘❡② ❈♦r❛③♦♥❡s ✿✿ ❈❛rt❛

❣❤❝✐ ✿t②♣❡ ❈❛rt❛ ✭◆✉♠❡r✐❝♦ ✹✮ ❈♦r❛③♦♥❡s

❈❛rt❛ ✭◆✉♠❡r✐❝♦ ✹✮ ❈♦r❛③♦♥❡s ✿✿ ❈❛rt❛

Solución:

❞❛t❛ ❈❛rt❛ ❂ ❈❛rt❛ ❱❛❧♦r P❛❧♦

❞❡r✐✈✐♥❣ ✭❊q✱ ❙❤♦✇✮

Ejercicio 8.7.8. Definir la función

✈❛❧♦r ✿✿ ❈❛rt❛ ✲❃ ❱❛❧♦r

tal que ✭✈❛❧♦r ❝✮ es el valor de la carta ❝. Por ejemplo,

✈❛❧♦r ✭❈❛rt❛ ❘❡② ❈♦r❛③♦♥❡s✮ ❂❂ ❘❡②

Solución:

✈❛❧♦r ✿✿ ❈❛rt❛ ✲❃ ❱❛❧♦r

✈❛❧♦r ✭❈❛rt❛ ✈ ♣✮ ❂ ✈

Ejercicio 8.7.9. Definir la función

♣❛❧♦ ✿✿ ❈❛rt❛ ✲❃ ❱❛❧♦r

tal que ✭♣❛❧♦ ❝✮ es el palo de la carta ❝. Por ejemplo,

♣❛❧♦ ✭❈❛rt❛ ❘❡② ❈♦r❛③♦♥❡s✮ ❂❂ ❈♦r❛③♦♥❡s

Solución:

♣❛❧♦ ✿✿ ❈❛rt❛ ✲❃ P❛❧♦

♣❛❧♦ ✭❈❛rt❛ ✈ ♣✮ ❂ ♣

8.7. Modelización de un juego de cartas 193

Nota. Para que QuickCheck pueda generar elementos del tipo Carta se usa la siguientefunción.

✐♥st❛♥❝❡ ❆r❜✐tr❛r② ❈❛rt❛ ✇❤❡r❡

❛r❜✐tr❛r② ❂

❞♦ ✈ ❁✲ ❛r❜✐tr❛r②

♣ ❁✲ ❛r❜✐tr❛r②

r❡t✉r♥ ✭❈❛rt❛ ✈ ♣✮

Ejercicio 8.7.10. Definir la función

❣❛♥❛❈❛rt❛ ✿✿ P❛❧♦ ✲❃ ❈❛rt❛ ✲❃ ❈❛rt❛ ✲❃ ❇♦♦❧

tal que ✭❣❛♥❛❈❛rt❛ ♣ ❝✶ ❝✷✮ se verifica si la carta ❝✶ le gana a la carta ❝✷ cuando el palo de

triunfo es ♣ (es decir, las cartas son del mismo palo y el valor de ❝✶ es mayor que el de ❝✷ o ❝✶ es

del palo de triunfo). Por ejemplo,

❣❛♥❛❈❛rt❛ ❈♦r❛③♦♥❡s ✭❈❛rt❛ ❙♦t❛ P✐❝❛s✮ ✭❈❛rt❛ ✭◆✉♠❡r✐❝♦ ✺✮ P✐❝❛s✮

❂❂❃ ❚r✉❡

❣❛♥❛❈❛rt❛ ❈♦r❛③♦♥❡s ✭❈❛rt❛ ✭◆✉♠❡r✐❝♦ ✸✮ P✐❝❛s✮ ✭❈❛rt❛ ❙♦t❛ P✐❝❛s✮

❂❂❃ ❋❛❧s❡

❣❛♥❛❈❛rt❛ ❈♦r❛③♦♥❡s ✭❈❛rt❛ ✭◆✉♠❡r✐❝♦ ✸✮ ❈♦r❛③♦♥❡s✮ ✭❈❛rt❛ ❙♦t❛ P✐❝❛s✮

❂❂❃ ❚r✉❡

❣❛♥❛❈❛rt❛ ❚r❡❜♦❧❡s ✭❈❛rt❛ ✭◆✉♠❡r✐❝♦ ✸✮ ❈♦r❛③♦♥❡s✮ ✭❈❛rt❛ ❙♦t❛ P✐❝❛s✮

❂❂❃ ❋❛❧s❡

Solución:

❣❛♥❛❈❛rt❛ ✿✿ P❛❧♦ ✲❃ ❈❛rt❛ ✲❃ ❈❛rt❛ ✲❃ ❇♦♦❧

❣❛♥❛❈❛rt❛ tr✐✉♥❢♦ ❝ ❝✬

⑤ ♣❛❧♦ ❝ ❂❂ ♣❛❧♦ ❝✬ ❂ ♠❛②♦r ✭✈❛❧♦r ❝✮ ✭✈❛❧♦r ❝✬✮

⑤ ♣❛❧♦ ❝ ❂❂ tr✐✉♥❢♦ ❂ ❚r✉❡

⑤ ♦t❤❡r✇✐s❡ ❂ ❋❛❧s❡

Ejercicio 8.7.11. Comprobar con QuickCheck si dadas dos cartas, una siempre gana a la otra.

Solución: La propiedad es

♣r♦♣❴●❛♥❛❈❛rt❛ t ❝✶ ❝✷ ❂

❣❛♥❛❈❛rt❛ t ❝✶ ❝✷ ⑤⑤ ❣❛♥❛❈❛rt❛ t ❝✷ ❝✶

La comprobación es

194 Capítulo 8. Tipos definidos y de datos algebraicos

❣❤❝✐ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴●❛♥❛❈❛rt❛

❋❛❧s✐❢✐❛❜❧❡✱ ❛❢t❡r ✵ t❡sts✿

❉✐❛♠❛♥t❡s

❈❛rt❛ ❘❡② ❈♦r❛③♦♥❡s

❈❛rt❛ ❆s ❚r❡❜♦❧❡s

que indica que la propiedad no se verifica ya que cuando el triunfo es diamantes, ni elrey de corazones le gana al as de tréboles ni el as de tréboles le gana al rey de corazones.

Ejercicio 8.7.12. Definir el tipo de datos ▼❛♥♦ para representar una mano en el juego de cartas.

Una mano es vacía o se obtiene agregando una carta a una mano. Hacer ▼❛♥♦ instancia de ❊q y

❙❤♦✇. Por ejemplo,

❣❤❝✐ ✿t②♣❡ ❆❣r❡❣❛ ✭❈❛rt❛ ❘❡② ❈♦r❛③♦♥❡s✮ ❱❛❝✐❛

❆❣r❡❣❛ ✭❈❛rt❛ ❘❡② ❈♦r❛③♦♥❡s✮ ❱❛❝✐❛ ✿✿ ▼❛♥♦

Solución:

❞❛t❛ ▼❛♥♦ ❂ ❱❛❝✐❛ ⑤ ❆❣r❡❣❛ ❈❛rt❛ ▼❛♥♦

❞❡r✐✈✐♥❣ ✭❊q✱ ❙❤♦✇✮

Nota. Para que QuickCheck pueda generar elementos del tipo ▼❛♥♦ se usa la siguientefunción.

✐♥st❛♥❝❡ ❆r❜✐tr❛r② ▼❛♥♦ ✇❤❡r❡

❛r❜✐tr❛r② ❂

❞♦ ❝s ❁✲ ❛r❜✐tr❛r②

❧❡t ♠❛♥♦ ❬❪ ❂ ❱❛❝✐❛

♠❛♥♦ ✭❝✿❝s✮ ❂ ❆❣r❡❣❛ ❝ ✭♠❛♥♦ ❝s✮

r❡t✉r♥ ✭♠❛♥♦ ❝s✮

Ejercicio 8.7.13. Una mano gana a una carta ❝ si alguna carta de la mano le gana a ❝. Definir

la función

❣❛♥❛▼❛♥♦ ✿✿ P❛❧♦ ✲❃ ▼❛♥♦ ✲❃ ❈❛rt❛ ✲❃ ❇♦♦❧

tal que ✭❣❛♥❛ t ♠ ❝✮ se verifica si la mano ♠ le gana a la carta ❝ cuando el triunfo es t. Por

ejemplo,

❣❛♥❛▼❛♥♦ P✐❝❛s ✭❆❣r❡❣❛ ✭❈❛rt❛ ❙♦t❛ P✐❝❛s✮ ❱❛❝✐❛✮ ✭❈❛rt❛ ❘❡② ❈♦r❛③♦♥❡s✮

❂❂❃ ❚r✉❡

❣❛♥❛▼❛♥♦ P✐❝❛s ✭❆❣r❡❣❛ ✭❈❛rt❛ ❙♦t❛ P✐❝❛s✮ ❱❛❝✐❛✮ ✭❈❛rt❛ ❘❡② P✐❝❛s✮

❂❂❃ ❋❛❧s❡

Solución:

8.7. Modelización de un juego de cartas 195

❣❛♥❛▼❛♥♦ ✿✿ P❛❧♦ ✲❃ ▼❛♥♦ ✲❃ ❈❛rt❛ ✲❃ ❇♦♦❧

❣❛♥❛▼❛♥♦ tr✐✉♥❢♦ ❱❛❝✐❛ ❝✬ ❂ ❋❛❧s❡

❣❛♥❛▼❛♥♦ tr✐✉♥❢♦ ✭❆❣r❡❣❛ ❝ ♠✮ ❝✬ ❂ ❣❛♥❛❈❛rt❛ tr✐✉♥❢♦ ❝ ❝✬ ⑤⑤

❣❛♥❛▼❛♥♦ tr✐✉♥❢♦ ♠ ❝✬

Ejercicio 8.7.14. Definir la función

❡❧✐❣❡❈❛rt❛ ✿✿ P❛❧♦ ✲❃ ❈❛rt❛ ✲❃ ▼❛♥♦ ✲❃ ❈❛rt❛

tal que ✭❡❧✐❣❡❈❛rt❛ t ❝✶ ♠✮ es la mejor carta de la mano ♠ frente a la carta ❝ cuando el triunfo

es t. La estrategia para elegir la mejor carta es la siguiente:

Si la mano sólo tiene una carta, se elige dicha carta.

Si la primera carta de la mano es del palo de ❝✶ y la mejor del resto no es del palo de ❝✶, se

elige la primera de la mano,

Si la primera carta de la mano no es del palo de ❝✶ y la mejor del resto es del palo de ❝✶, se

elige la mejor del resto.

Si la primera carta de la mano le gana a ❝✶ y la mejor del resto no le gana a ❝✶, se elige la

primera de la mano,

Si la mejor del resto le gana a ❝✶ y la primera carta de la mano no le gana a ❝✶, se elige la

mejor del resto.

Si el valor de la primera carta es mayor que el de la mejor del resto, se elige la mejor del

resto.

Si el valor de la primera carta no es mayor que el de la mejor del resto, se elige la primera

carta.

Solución:

❡❧✐❣❡❈❛rt❛ ✿✿ P❛❧♦ ✲❃ ❈❛rt❛ ✲❃ ▼❛♥♦ ✲❃ ❈❛rt❛

❡❧✐❣❡❈❛rt❛ tr✐✉♥❢♦ ❝✶ ✭❆❣r❡❣❛ ❝ ❱❛❝✐❛✮ ❂ ❝ ✲✲ ✶

❡❧✐❣❡❈❛rt❛ tr✐✉♥❢♦ ❝✶ ✭❆❣r❡❣❛ ❝ r❡st♦✮

⑤ ♣❛❧♦ ❝ ❂❂ ♣❛❧♦ ❝✶ ✫✫ ♣❛❧♦ ❝✬ ✴❂ ♣❛❧♦ ❝✶ ❂ ❝ ✲✲ ✷

⑤ ♣❛❧♦ ❝ ✴❂ ♣❛❧♦ ❝✶ ✫✫ ♣❛❧♦ ❝✬ ❂❂ ♣❛❧♦ ❝✶ ❂ ❝✬ ✲✲ ✸

⑤ ❣❛♥❛❈❛rt❛ tr✐✉♥❢♦ ❝ ❝✶ ✫✫ ♥♦t ✭❣❛♥❛❈❛rt❛ tr✐✉♥❢♦ ❝✬ ❝✶✮ ❂ ❝ ✲✲ ✹

⑤ ❣❛♥❛❈❛rt❛ tr✐✉♥❢♦ ❝✬ ❝✶ ✫✫ ♥♦t ✭❣❛♥❛❈❛rt❛ tr✐✉♥❢♦ ❝ ❝✶✮ ❂ ❝✬ ✲✲ ✺

⑤ ♠❛②♦r ✭✈❛❧♦r ❝✮ ✭✈❛❧♦r ❝✬✮ ❂ ❝✬ ✲✲ ✻

⑤ ♦t❤❡r✇✐s❡ ❂ ❝ ✲✲ ✼

✇❤❡r❡

❝✬ ❂ ❡❧✐❣❡❈❛rt❛ tr✐✉♥❢♦ ❝✶ r❡st♦

196 Capítulo 8. Tipos definidos y de datos algebraicos

Ejercicio 8.7.15. Comprobar con QuickCheck que si una mano es ganadora, entonces la carta

elegida es ganadora.

Solución: La propiedad es

♣r♦♣❴❡❧✐❣❡❈❛rt❛●❛♥❛❙✐❊sP♦s✐❜❧❡ tr✐✉♥❢♦ ❝ ♠ ❂

♠ ✴❂ ❱❛❝✐❛ ❂❂❃

❣❛♥❛▼❛♥♦ tr✐✉♥❢♦ ♠ ❝ ❂❂ ❣❛♥❛❈❛rt❛ tr✐✉♥❢♦ ✭❡❧✐❣❡❈❛rt❛ tr✐✉♥❢♦ ❝ ♠✮ ❝

La comprobación es

❣❤❝✐ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴❡❧✐❣❡❈❛rt❛●❛♥❛❙✐❊sP♦s✐❜❧❡

❋❛❧s✐❢✐❛❜❧❡✱ ❛❢t❡r ✶✷ t❡sts✿

❈♦r❛③♦♥❡s

❈❛rt❛ ❘❡② ❚r❡❜♦❧❡s

❆❣r❡❣❛ ✭❈❛rt❛ ✭◆✉♠❡r✐❝♦ ✻✮ ❉✐❛♠❛♥t❡s✮

✭❆❣r❡❣❛ ✭❈❛rt❛ ❙♦t❛ P✐❝❛s✮

✭❆❣r❡❣❛ ✭❈❛rt❛ ❘❡② ❈♦r❛③♦♥❡s✮

✭❆❣r❡❣❛ ✭❈❛rt❛ ✭◆✉♠❡r✐❝♦ ✶✵✮ ❚r❡❜♦❧❡s✮

❱❛❝✐❛✮✮✮

La carta elegida es el 10 de tréboles (porque tiene que ser del mismo palo), aunque elmano hay una carta (el rey de corazones) que gana.

8.8. Evaluación de expresiones aritméticas

Ejercicio 8.8.1. Las expresiones aritméticas pueden representarse usando el siguiente tipo de

datos

❞❛t❛ ❊①♣r ❂ ◆ ■♥t ⑤ ❱ ❈❤❛r ⑤ ❙ ❊①♣r ❊①♣r ⑤ P ❊①♣r ❊①♣r

❞❡r✐✈✐♥❣ ❙❤♦✇

Por ejemplo, la expresión 2(a + 5) se representa por

P ✭◆ ✷✮ ✭❙ ✭❱ ✬❛✬✮ ✭◆ ✺✮✮

Definir la función

✈❛❧♦r ✿✿ ❊①♣r ✲❃ ❬✭❈❤❛r✱■♥t✮❪ ✲❃ ■♥t

tal que ✭✈❛❧♦r ① ❡✮ es el valor de la expresión ① en el entorno ❡ (es decir, el valor de la expresión

donde las variables de ① se sustituyen por los valores según se indican en el entorno ❡). Por

ejemplo,

8.9. Número de variables de una expresión aritmética 197

❣❤❝✐❃ ✈❛❧♦r ✭P ✭◆ ✷✮ ✭❙ ✭❱ ✬❛✬✮ ✭❱ ✬❜✬✮✮✮ ❬✭✬❛✬✱✷✮✱✭✬❜✬✱✺✮❪

✶✹

Solución:

❞❛t❛ ❊①♣r ❂ ◆ ■♥t ⑤ ❱ ❈❤❛r ⑤ ❙ ❊①♣r ❊①♣r ⑤ P ❊①♣r ❊①♣r

❞❡r✐✈✐♥❣ ❙❤♦✇

✈❛❧♦r ✿✿ ❊①♣r ✲❃ ❬✭❈❤❛r✱■♥t✮❪ ✲❃ ■♥t

✈❛❧♦r ✭◆ ①✮ ❡ ❂ ①

✈❛❧♦r ✭❱ ①✮ ❡ ❂ ❤❡❛❞ ❬② ⑤ ✭③✱②✮ ❁✲ ❡✱ ③ ❂❂ ①❪

✈❛❧♦r ✭❙ ① ②✮ ❡ ❂ ✭✈❛❧♦r ① ❡✮ ✰ ✭✈❛❧♦r ② ❡✮

✈❛❧♦r ✭P ① ②✮ ❡ ❂ ✭✈❛❧♦r ① ❡✮ ✯ ✭✈❛❧♦r ② ❡✮

8.9. Número de variables de una expresión aritmética

Ejercicio 8.9.1. La expresiones aritméticas con una variable (denotada por ❳) se pueden repre-

sentar mediante el siguiente tipo

❞❛t❛ ❊①♣r ❂ ◆✉♠ ■♥t

⑤ ❙✉♠❛ ❊①♣r ❊①♣r

⑤ ❳

Por ejemplo, la expresión X + (13 + X) se representa por ❙✉♠❛ ❳ ✭❙✉♠❛ ✭◆✉♠ ✶✸✮ ❳✮.

Definir la función

♥✉♠❱❛rs ✿✿ ❊①♣r ✲❃ ■♥t

tal que ✭♥✉♠❱❛rs ❡✮ es el número de variables en la expresión ❡. Por ejemplo,

♥✉♠❱❛rs ✭◆✉♠ ✸✮ ❂❂ ✵

♥✉♠❱❛rs ❳ ❂❂ ✶

♥✉♠❱❛rs ✭❙✉♠❛ ❳ ✭❙✉♠❛ ✭◆✉♠ ✶✸✮ ❳✮✮ ❂❂ ✷

Solución:

❞❛t❛ ❊①♣r ❂ ◆✉♠ ■♥t

⑤ ❙✉♠❛ ❊①♣r ❊①♣r

⑤ ❳

♥✉♠❱❛rs ✿✿ ❊①♣r ✲❃ ■♥t

♥✉♠❱❛rs ✭◆✉♠ ♥✮ ❂ ✵

♥✉♠❱❛rs ✭❙✉♠❛ ❛ ❜✮ ❂ ♥✉♠❱❛rs ❛ ✰ ♥✉♠❱❛rs ❜

♥✉♠❱❛rs ❳ ❂ ✶

198 Capítulo 8. Tipos definidos y de datos algebraicos

8.10. Sustituciones en expresiones aritméticas

Ejercicio 8.10.1. La expresiones aritméticas se pueden representar mediante el siguiente tipo

❞❛t❛ ❊①♣r ❂ ❱ ❈❤❛r

⑤ ◆ ■♥t

⑤ ❙ ❊①♣r ❊①♣r

⑤ P ❊①♣r ❊①♣r

❞❡r✐✈✐♥❣ ❙❤♦✇

por ejemplo, la expresión z(3 + x) se representa por ✭P ✭❱ ✬③✬✮ ✭❙ ✭◆ ✸✮ ✭❱ ✬①✬✮✮✮.

Definir la función

s✉st✐t✉❝✐♦♥ ✿✿ ❊①♣r ✲❃ ❬✭❈❤❛r✱ ■♥t✮❪ ✲❃ ❊①♣r

tal que ✭s✉st✐t✉❝✐♦♥ ❡ s✮ es la expresión obtenida sustituyendo las variables de la expresión

❡ según se indica en la sustitución s. Por ejemplo,

❣❤❝✐❃ s✉st✐t✉❝✐♦♥ ✭P ✭❱ ✬③✬✮ ✭❙ ✭◆ ✸✮ ✭❱ ✬①✬✮✮✮ ❬✭✬①✬✱✼✮✱✭✬③✬✱✾✮❪

P ✭◆ ✾✮ ✭❙ ✭◆ ✸✮ ✭◆ ✼✮✮

❣❤❝✐❃ s✉st✐t✉❝✐♦♥ ✭P ✭❱ ✬③✬✮ ✭❙ ✭◆ ✸✮ ✭❱ ✬②✬✮✮✮ ❬✭✬①✬✱✼✮✱✭✬③✬✱✾✮❪

P ✭◆ ✾✮ ✭❙ ✭◆ ✸✮ ✭❱ ✬②✬✮✮

Solución:

❞❛t❛ ❊①♣r ❂ ❱ ❈❤❛r

⑤ ◆ ■♥t

⑤ ❙ ❊①♣r ❊①♣r

⑤ P ❊①♣r ❊①♣r

❞❡r✐✈✐♥❣ ❙❤♦✇

s✉st✐t✉❝✐♦♥ ✿✿ ❊①♣r ✲❃ ❬✭❈❤❛r✱ ■♥t✮❪ ✲❃ ❊①♣r

s✉st✐t✉❝✐♦♥ ❡ ❬❪ ❂ ❡

s✉st✐t✉❝✐♦♥ ✭❱ ❝✮ ✭✭❞✱♥✮✿♣s✮ ⑤ ❝ ❂❂ ❞ ❂ ◆ ♥

⑤ ♦t❤❡r✇✐s❡ ❂ s✉st✐t✉❝✐♦♥ ✭❱ ❝✮ ♣s

s✉st✐t✉❝✐♦♥ ✭◆ ♥✮ ❴ ❂ ◆ ♥

s✉st✐t✉❝✐♦♥ ✭❙ ❡✶ ❡✷✮ ♣s ❂ ❙ ✭s✉st✐t✉❝✐♦♥ ❡✶ ♣s✮ ✭s✉st✐t✉❝✐♦♥ ❡✷ ♣s✮

s✉st✐t✉❝✐♦♥ ✭P ❡✶ ❡✷✮ ♣s ❂ P ✭s✉st✐t✉❝✐♦♥ ❡✶ ♣s✮ ✭s✉st✐t✉❝✐♦♥ ❡✷ ♣s✮

Capítulo 9

Demostración de propiedades porinducción

Contenido9.1 Suma de los primeros números impares . . . . . . . . . . . . . . . . . . 199

9.2 Uno más la suma de potencias de dos . . . . . . . . . . . . . . . . . . . 201

9.3 Copias de un elemento . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203

En este capítulo se presenta ejercicios para demostrar propiedades de programas porinducción en los números naturales. Los ejercicios de este capítulo se corresponden conel tema 8 de [1].

Nota. Se usará librería ◗✉✐❝❦❈❤❡❝❦

✐♠♣♦rt ❚❡st✳◗✉✐❝❦❈❤❡❝❦

9.1. Suma de los primeros números impares

Ejercicio 9.1.1. Definir, por recursión, la función

s✉♠❛■♠♣❛r❡s ✿✿ ■♥t ✲❃ ■♥t

tal que ✭s✉♠❛■♠♣❛r❡s ♥✮ es la suma de los ♥ primeros números impares. Por ejemplo,

s✉♠❛■♠♣❛r❡s ✺ ❂❂ ✷✺

Solución:

s✉♠❛■♠♣❛r❡s ✿✿ ■♥t ✲❃ ■♥t

s✉♠❛■♠♣❛r❡s ✵ ❂ ✵

s✉♠❛■♠♣❛r❡s ♥ ❂ ✷✯♥✰✶ ✰ s✉♠❛■♠♣❛r❡s ✭♥✲✶✮

199

200 Capítulo 9. Demostración de propiedades por inducción

Ejercicio 9.1.2. Definir, sin usar recursión, la función

s✉♠❛■♠♣❛r❡s✬ ✿✿ ■♥t ✲❃ ■♥t

tal que ✭s✉♠❛■♠♣❛r❡s✬ ♥✮ es la suma de los ♥ primeros números impares. Por ejemplo,

s✉♠❛■♠♣❛r❡s✬ ✺ ❂❂ ✷✺

Solución:

s✉♠❛■♠♣❛r❡s✬ ✿✿ ■♥t ✲❃ ■♥t

s✉♠❛■♠♣❛r❡s✬ ♥ ❂ s✉♠ ❬✶✱✸✳✳✭✷✯♥✲✶✮❪

Ejercicio 9.1.3. Definir la función

s✉♠❛■♠♣❛r❡s■❣✉❛❧❡s ✿✿ ■♥t ✲❃ ■♥t ✲❃ ❇♦♦❧

tal que ✭s✉♠❛■♠♣❛r❡s■❣✉❛❧❡s ♠ ♥✮ se verifica si para todo ① entre ♠ y ♥ se tiene que ✭s✉♠❛■♠♣❛r❡s ①✮

y ✭s✉♠❛■♠♣❛r❡s✬ ①✮ son iguales.

Comprobar que ✭s✉♠❛■♠♣❛r❡s ①✮ y ✭s✉♠❛■♠♣❛r❡s✬ ①✮ son iguales para todos los núme-

ros ① entre 1 y 100.

Solución: La definición es

s✉♠❛■♠♣❛r❡s■❣✉❛❧❡s ✿✿ ■♥t ✲❃ ■♥t ✲❃ ❇♦♦❧

s✉♠❛■♠♣❛r❡s■❣✉❛❧❡s ♠ ♥ ❂

❛♥❞ ❬s✉♠❛■♠♣❛r❡s ① ❂❂ s✉♠❛■♠♣❛r❡s✬ ① ⑤ ① ❁✲ ❬♠✳✳♥❪❪

La comprobación es

❣❤❝✐❃ s✉♠❛■♠♣❛r❡s■❣✉❛❧❡s ✶ ✶✵✵

❚r✉❡

Ejercicio 9.1.4. Definir la función

❣r❛❢♦❙✉♠❛■♠♣❛r❡s ✿✿ ■♥t ✲❃ ■♥t ✲❃ ❬✭■♥t✱■♥t✮❪

tal que ✭❣r❛❢♦❙✉♠❛■♠♣❛r❡s ♠ ♥✮ es la lista formadas por los números ① entre ♠ y ♥ y los

valores de ✭s✉♠❛■♠♣❛r❡s ①✮.

Calcular ✭❣r❛❢♦❙✉♠❛■♠♣❛r❡s ✶ ✾✮.

Solución: La definición es

❣r❛❢♦❙✉♠❛■♠♣❛r❡s ✿✿ ■♥t ✲❃ ■♥t ✲❃ ❬✭■♥t✱■♥t✮❪

❣r❛❢♦❙✉♠❛■♠♣❛r❡s ♠ ♥ ❂

❬✭①✱s✉♠❛■♠♣❛r❡s ①✮ ⑤ ① ❁✲ ❬♠✳✳♥❪❪

9.2. Uno más la suma de potencias de dos 201

El cálculo es

❣❤❝✐❃ ❣r❛❢♦❙✉♠❛■♠♣❛r❡s ✶ ✾

❬✭✶✱✶✮✱✭✷✱✹✮✱✭✸✱✾✮✱✭✹✱✶✻✮✱✭✺✱✷✺✮✱✭✻✱✸✻✮✱✭✼✱✹✾✮✱✭✽✱✻✹✮✱✭✾✱✽✶✮❪

Ejercicio 9.1.5. Demostrar por inducción que para todo ♥, ✭s✉♠❛■♠♣❛r❡s ♥✮ es igual a n2.

Solución: Por inducción en n.Caso base: Hay que demostrar que

s✉♠❛■♠♣❛r❡s(0) = 02

En efecto,s✉♠❛■♠♣❛r❡s(0)= 0 [por s✉♠❛■♠♣❛r❡s.1]= 02 [por aritmética]

Caso inductivo: Se supone la hipótesis de inducción (H.I.)

s✉♠❛■♠♣❛r❡s(n) = n2

Hay que demostrar que

s✉♠❛■♠♣❛r❡s(n + 1) = (n + 1)2

En efecto,s✉♠❛■♠♣❛r❡s(n + 1)= (2 ∗ n + 1) + s✉♠❛■♠♣❛r❡s(n) [por s✉♠❛■♠♣❛r❡s.2]= (2 ∗ n + 1) + n2 [por H.I.]= (n + 1)2 [por álgebra]

9.2. Uno más la suma de potencias de dos

Ejercicio 9.2.1. Definir, por recursión, la función

s✉♠❛P♦t❡♥❝✐❛s❉❡❉♦s▼❛s❯♥♦ ✿✿ ■♥t ✲❃ ■♥t

tal que ✭s✉♠❛P♦t❡♥❝✐❛s❉❡❉♦s▼❛s❯♥♦ ♥✮ es igual a 1+ 20 + 21 + 22 + · · ·+ 2n. Por ejemplo,

s✉♠❛P♦t❡♥❝✐❛s❉❡❉♦s▼❛s❯♥♦ ✸ ❂❂ ✶✻

Solución:

s✉♠❛P♦t❡♥❝✐❛s❉❡❉♦s▼❛s❯♥♦ ✿✿ ■♥t ✲❃ ■♥t

s✉♠❛P♦t❡♥❝✐❛s❉❡❉♦s▼❛s❯♥♦ ✵ ❂ ✷

s✉♠❛P♦t❡♥❝✐❛s❉❡❉♦s▼❛s❯♥♦ ♥ ❂ ✷❫♥ ✰ s✉♠❛P♦t❡♥❝✐❛s❉❡❉♦s▼❛s❯♥♦ ✭♥✲✶✮

202 Capítulo 9. Demostración de propiedades por inducción

Ejercicio 9.2.2. Definir por comprensión la función

s✉♠❛P♦t❡♥❝✐❛s❉❡❉♦s▼❛s❯♥♦✬ ✿✿ ■♥t ✲❃ ■♥t

tal que s✉♠❛P♦t❡♥❝✐❛s❉❡❉♦s▼❛s❯♥♦′n = 1 + 20 + 21 + 22 + · · ·+ 2n. Por ejemplo,

s✉♠❛P♦t❡♥❝✐❛s❉❡❉♦s▼❛s❯♥♦✬ ✸ ❂❂ ✶✻

Solución:

s✉♠❛P♦t❡♥❝✐❛s❉❡❉♦s▼❛s❯♥♦✬ ✿✿ ■♥t ✲❃ ■♥t

s✉♠❛P♦t❡♥❝✐❛s❉❡❉♦s▼❛s❯♥♦✬ ♥ ❂ ✶ ✰ s✉♠ ❬✷❫① ⑤ ① ❁✲ ❬✵✳✳♥❪❪

Ejercicio 9.2.3. Demostrar por inducción que s✉♠❛P♦t❡♥❝✐❛s❉❡❉♦s▼❛s❯♥♦n = 2n+1.

Solución: Por inducción en n.Caso base: Hay que demostrar que

s✉♠❛P♦t❡♥❝✐❛s❉❡❉♦s▼❛s❯♥♦(0) = 20+1

En efecto,

s✉♠❛P♦t❡♥❝✐❛s❉❡❉♦s▼❛s❯♥♦(0)= 2 [por s✉♠❛P♦t❡♥❝✐❛s❉❡❉♦s▼❛s❯♥♦.1]= 20+1 [por aritmética]

Caso inductivo: Se supone la hipótesis de inducción (H.I.)

s✉♠❛P♦t❡♥❝✐❛s❉❡❉♦s▼❛s❯♥♦(n) = 2n+1

Hay que demostrar que

s✉♠❛P♦t❡♥❝✐❛s❉❡❉♦s▼❛s❯♥♦(n + 1) = 2(n+1)+1

En efecto,

s✉♠❛P♦t❡♥❝✐❛s❉❡❉♦s▼❛s❯♥♦(n + 1)= 2n+1 + s✉♠❛P♦t❡♥❝✐❛s❉❡❉♦s▼❛s❯♥♦(n) [por s✉♠❛P♦t❡♥❝✐❛s❉❡❉♦s▼❛s❯♥♦.2]= 2n+1 + 2n+1 [por H.I.]= 2(n+1)+1 [por aritmética]

9.3. Copias de un elemento 203

9.3. Copias de un elemento

Ejercicio 9.3.1. Definir por recursión la función

❝♦♣✐❛ ✿✿ ■♥t ✲❃ ❛ ✲❃ ❬❛❪

tal que ✭❝♦♣✐❛ ♥ ①✮ es la lista formado por ♥ copias del elemento ①. Por ejemplo,

❝♦♣✐❛ ✸ ✷ ❂❂ ❬✷✱✷✱✷❪

Solución:

❝♦♣✐❛ ✿✿ ■♥t ✲❃ ❛ ✲❃ ❬❛❪

❝♦♣✐❛ ✵ ❴ ❂ ❬❪ ✲✲ ❝♦♣✐❛✳✶

❝♦♣✐❛ ♥ ① ❂ ① ✿ ❝♦♣✐❛ ✭♥✲✶✮ ① ✲✲ ❝♦♣✐❛✳✷

Ejercicio 9.3.2. Definir por recursión la función

t♦❞♦s ✿✿ ✭❛ ✲❃ ❇♦♦❧✮ ✲❃ ❬❛❪ ✲❃ ❇♦♦❧

tal que ✭t♦❞♦s ♣ ①s✮ se verifica si todos los elementos de ①s cumplen la propiedad ♣. Por

ejemplo,

t♦❞♦s ❡✈❡♥ ❬✷✱✻✱✹❪ ❂❂ ❚r✉❡

t♦❞♦s ❡✈❡♥ ❬✷✱✺✱✹❪ ❂❂ ❋❛❧s❡

Solución:

t♦❞♦s ✿✿ ✭❛ ✲❃ ❇♦♦❧✮ ✲❃ ❬❛❪ ✲❃ ❇♦♦❧

t♦❞♦s ♣ ❬❪ ❂ ❚r✉❡ ✲✲ t♦❞♦s✳✶

t♦❞♦s ♣ ✭① ✿ ①s✮ ❂ ♣ ① ✫✫ t♦❞♦s ♣ ①s ✲✲ t♦❞♦s✳✷

Ejercicio 9.3.3. Comprobar con QuickCheck que todos los elementos de ✭❝♦♣✐❛ ♥ ①✮ son igua-

les a ①.

Solución: La propiedad es

♣r♦♣❴❝♦♣✐❛ ✿✿ ❊q ❛ ❂❃ ■♥t ✲❃ ❛ ✲❃ ❇♦♦❧

♣r♦♣❴❝♦♣✐❛ ♥ ① ❂

t♦❞♦s ✭❂❂①✮ ✭❝♦♣✐❛ ♥✬ ①✮

✇❤❡r❡ ♥✬ ❂ ❛❜s ♥

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴❝♦♣✐❛

❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

204 Capítulo 9. Demostración de propiedades por inducción

Ejercicio 9.3.4. Demostrar, por inducción en ♥, que todos los elementos de ✭❝♦♣✐❛ ♥ ①✮ son

iguales a ①.

Solución: Hay que demostrar que para todo n y todo x,

t♦❞♦s (== x) (❝♦♣✐❛ n x)

Caso base: Hay que demostrar que

t♦❞♦s (== x) (❝♦♣✐❛ 0 x) = True

En efecto,t♦❞♦s (== x) (❝♦♣✐❛ 0 x)= t♦❞♦s (== x) [] [por ❝♦♣✐❛.1]= True [por t♦❞♦s.1]

Caso inductivo: Se supone la hipótesis de inducción (H.I.)

t♦❞♦s (== x) (❝♦♣✐❛ n x) = True

Hay que demostrar que

t♦❞♦s (== x) (❝♦♣✐❛ (n + 1) x) = True

En efecto,

t♦❞♦s (== x) (❝♦♣✐❛ (n + 1) x)= t♦❞♦s (== x) (x : ❝♦♣✐❛ n x) [por ❝♦♣✐❛.2]= x == x && t♦❞♦s (== x) (❝♦♣✐❛ n x) [por t♦❞♦s.2]= True && t♦❞♦s (== x) (❝♦♣✐❛ n x) [por def. de ==]= t♦❞♦s (== x) (❝♦♣✐❛ n x) [por def. de &&]= True [por H.I.]

Ejercicio 9.3.5. Definir por plegado la función

t♦❞♦s✬ ✿✿ ✭❛ ✲❃ ❇♦♦❧✮ ✲❃ ❬❛❪ ✲❃ ❇♦♦❧

tal que ✭t♦❞♦s✬ ♣ ①s✮ se verifica si todos los elementos de ①s cumplen la propiedad ♣. Por

ejemplo,

t♦❞♦s✬ ❡✈❡♥ ❬✷✱✻✱✹❪ ❂❂❃ ❚r✉❡

t♦❞♦s✬ ❡✈❡♥ ❬✷✱✺✱✹❪ ❂❂❃ ❋❛❧s❡

Solución: Se presentan 3 definiciones. La primera definición es

9.3. Copias de un elemento 205

t♦❞♦s✬❴✶ ✿✿ ✭❛ ✲❃ ❇♦♦❧✮ ✲❃ ❬❛❪ ✲❃ ❇♦♦❧

t♦❞♦s✬❴✶ ♣ ❂ ❢♦❧❞r ❢ ❚r✉❡

✇❤❡r❡ ❢ ① ② ❂ ♣ ① ✫✫ ②

La segunda definición es

t♦❞♦s✬❴✷ ✿✿ ✭❛ ✲❃ ❇♦♦❧✮ ✲❃ ❬❛❪ ✲❃ ❇♦♦❧

t♦❞♦s✬❴✷ ♣ ❂ ❢♦❧❞r ❢ ❚r✉❡

✇❤❡r❡ ❢ ① ② ❂ ✭✭✭✫✫✮ ✳ ♣✮ ①✮ ②

La tercera definición es

t♦❞♦s✬ ✿✿ ✭❛ ✲❃ ❇♦♦❧✮ ✲❃ ❬❛❪ ✲❃ ❇♦♦❧

t♦❞♦s✬ ♣ ❂ ❢♦❧❞r ✭✭✫✫✮ ✳ ♣✮ ❚r✉❡

206 Capítulo 9. Demostración de propiedades por inducción

Parte II

Tipos abstractos de datos y algorítmica

207

Capítulo 10

Polinomios

En este capítulo se proponen ejercicios con el tipo abstracto de datos (TAD) de lospolinomios presentados en el tema 21 de [1]. Para hacerlo autocontenido se recuerda elTAD y sus implementaciones.

Contenido10.1 El TAD de los polinomios . . . . . . . . . . . . . . . . . . . . . . . . . . 210

10.1.1 Especificación del TAD de los polinomios . . . . . . . . . . . . 210

10.1.2 Los polinomios como tipo de dato algebraico . . . . . . . . . . 211

10.1.3 Los polinomios como listas dispersas . . . . . . . . . . . . . . . 214

10.1.4 Los polinomios como listas densas . . . . . . . . . . . . . . . . 217

10.1.5 Comprobación de las implementaciones con QuickCheck . . . 220

10.2 Operaciones con polinomios . . . . . . . . . . . . . . . . . . . . . . . . 223

10.2.1 Funciones sobre términos . . . . . . . . . . . . . . . . . . . . . . 224

10.2.2 Suma de polinomios . . . . . . . . . . . . . . . . . . . . . . . . . 225

10.2.3 Producto de polinomios . . . . . . . . . . . . . . . . . . . . . . 226

10.2.4 El polinomio unidad . . . . . . . . . . . . . . . . . . . . . . . . 227

10.2.5 Resta de polinomios . . . . . . . . . . . . . . . . . . . . . . . . . 228

10.2.6 Valor de un polinomio en un punto . . . . . . . . . . . . . . . . 228

10.2.7 Verificación de raices de polinomios . . . . . . . . . . . . . . . 228

10.2.8 Derivación de polinomios . . . . . . . . . . . . . . . . . . . . . 229

10.3 Ejercicios sobre polinomios . . . . . . . . . . . . . . . . . . . . . . . . . 229

10.3.1 Polinomio a partir de la representación dispersa . . . . . . . . 230

10.3.2 Polinomio a partir de la representación densa . . . . . . . . . . 230

10.3.3 Representación densa de un polinomio . . . . . . . . . . . . . . 231

209

210 Capítulo 10. Polinomios

10.3.4 Transformación de la representación densa a dispersa . . . . . 231

10.3.5 Representación dispersa de un polinomio . . . . . . . . . . . . 231

10.3.6 Coeficiente del término de grado k . . . . . . . . . . . . . . . . 232

10.3.7 Lista de los coeficientes de un polinomio . . . . . . . . . . . . . 232

10.3.8 Potencia de un polinomio . . . . . . . . . . . . . . . . . . . . . . 233

10.3.9 Integración de polinomios . . . . . . . . . . . . . . . . . . . . . 234

10.3.10 Multiplicación de un polinomio por un número . . . . . . . . . 235

10.3.11 División de polinomios . . . . . . . . . . . . . . . . . . . . . . . 235

10.3.12 Divisibilidad de polinomios . . . . . . . . . . . . . . . . . . . . 236

10.4 La regla de Ruffini . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238

10.4.1 Divisores de un número . . . . . . . . . . . . . . . . . . . . . . 238

10.4.2 Término independiente de un polinomio . . . . . . . . . . . . . 238

10.4.3 Paso de la regla de Ruffini . . . . . . . . . . . . . . . . . . . . . 239

10.4.4 Cociente mediante la regla de Ruffini . . . . . . . . . . . . . . . 239

10.4.5 Resto mediante la regla de Ruffini . . . . . . . . . . . . . . . . . 240

10.4.6 Raíces mediante la regla de Ruffini . . . . . . . . . . . . . . . . 240

10.4.7 Factorización mediante la regla de Ruffini . . . . . . . . . . . . 241

10.1. El TAD de los polinomios

10.1.1. Especificación del TAD de los polinomios

La signatura del TAD de los polinomios es

♣♦❧❈❡r♦ ✿✿ P♦❧✐♥♦♠✐♦ ❛

❡sP♦❧❈❡r♦ ✿✿ ◆✉♠ ❛ ❂❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ ❇♦♦❧

❝♦♥sP♦❧ ✿✿ ◆✉♠ ❛ ❂❃ ■♥t ✲❃ ❛ ✲❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ P♦❧✐♥♦♠✐♦ ❛

❣r❛❞♦ ✿✿ P♦❧✐♥♦♠✐♦ ❛ ✲❃ ■♥t

❝♦❡❢▲✐❞❡r ✿✿ ◆✉♠ ❛ ❂❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ ❛

r❡st♦P♦❧ ✿✿ P♦❧✐♥♦♠✐♦ ❛ ✲❃ P♦❧✐♥♦♠✐♦ ❛

donde el significado de las operaciones es

♣♦❧❈❡r♦ es el polinomio cero.

✭❡sP♦❧❈❡r♦ ♣✮ se verifica si ♣ es el polinomio cero.

✭❝♦♥sP♦❧ ♥ ❜ ♣✮ es el polinomio bxn + p.

10.1. El TAD de los polinomios 211

✭❣r❛❞♦ ♣✮ es el grado del polinomio ♣.

✭❝♦❡❢▲✐❞❡r ♣✮ es el coeficiente líder del polinomio ♣.

✭r❡st♦P♦❧ ♣✮ es el resto del polinomio ♣.

La propiedades del TAD de los polinomios son

1. ♣♦❧❈❡r♦ es el polinomio cero.

2. Si n es mayor que el grado de p y b no es cero, entonces ✭❝♦♥sP♦❧ ♥ ❜ ♣✮ es unpolinomio distinto del cero.

3. ✭❝♦♥sP♦❧ ✭❣r❛❞♦ ♣✮ ✭❝♦❡❢▲✐❞❡r ♣✮ ✭r❡st♦P♦❧ ♣✮✮ es igual a ♣.

4. Si n es mayor que el grado de p y b no es cero, entonces el grado de ✭❝♦♥sP♦❧ ♥ ❜ ♣✮

es n.

5. Si n es mayor que el grado de p y b no es cero, entonces el coeficiente líder de✭❝♦♥sP♦❧ ♥ ❜ ♣✮ es b.

6. Si n es mayor que el grado de p y b no es cero, entonces el resto de ✭❝♦♥sP♦❧ ♥ ❜ ♣✮

es ♣.

10.1.2. Los polinomios como tipo de dato algebraico

Los polinomios se pueden representar mediante los constructores ❈♦♥sP♦❧ y P♦❧❈❡r♦.Por ejemplo, el polinomio 6x4 − 5x2 + 4x − 7 se representa por

❈♦♥sP♦❧ ✹ ✻ ✭❈♦♥sP♦❧ ✷ ✭✲✺✮ ✭❈♦♥sP♦❧ ✶ ✹ ✭❈♦♥sP♦❧ ✵ ✭✲✼✮ P♦❧❈❡r♦✮✮✮

En el módulo P♦❧❘❡♣❚❉❆ se implementa el TAD de los polinomios como tipos dedato algebraico. La cabecera del módulo es

♠♦❞✉❧❡ P♦❧❘❡♣❚❉❆

✭ P♦❧✐♥♦♠✐♦✱

♣♦❧❈❡r♦✱ ✲✲ P♦❧✐♥♦♠✐♦ ❛

❡sP♦❧❈❡r♦✱ ✲✲ ◆✉♠ ❛ ❂❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ ❇♦♦❧

❝♦♥sP♦❧✱ ✲✲ ✭◆✉♠ ❛✮ ❂❃ ■♥t ✲❃ ❛ ✲❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ P♦❧✐♥♦♠✐♦ ❛

❣r❛❞♦✱ ✲✲ P♦❧✐♥♦♠✐♦ ❛ ✲❃ ■♥t

❝♦❡❢▲✐❞❡r✱ ✲✲ ◆✉♠ t ❂❃ P♦❧✐♥♦♠✐♦ t ✲❃ t

r❡st♦P♦❧ ✲✲ P♦❧✐♥♦♠✐♦ t ✲❃ P♦❧✐♥♦♠✐♦ t

✮ ✇❤❡r❡

La definición del tipo de los polinomios es

212 Capítulo 10. Polinomios

❞❛t❛ P♦❧✐♥♦♠✐♦ ❛ ❂ P♦❧❈❡r♦

⑤ ❈♦♥sP♦❧ ■♥t ❛ ✭P♦❧✐♥♦♠✐♦ ❛✮

❞❡r✐✈✐♥❣ ❊q

Para facilitar la escritura de los polinomios se define

✐♥st❛♥❝❡ ◆✉♠ ❛ ❂❃ ❙❤♦✇ ✭P♦❧✐♥♦♠✐♦ ❛✮ ✇❤❡r❡

s❤♦✇ P♦❧❈❡r♦ ❂ ✧✵✧

s❤♦✇ ✭❈♦♥sP♦❧ ✵ ❜ P♦❧❈❡r♦✮ ❂ s❤♦✇ ❜

s❤♦✇ ✭❈♦♥sP♦❧ ✵ ❜ ♣✮ ❂ ❝♦♥❝❛t ❬s❤♦✇ ❜✱ ✧ ✰ ✧✱ s❤♦✇ ♣❪

s❤♦✇ ✭❈♦♥sP♦❧ ✶ ❜ P♦❧❈❡r♦✮ ❂ ❝♦♥❝❛t ❬s❤♦✇ ❜✱ ✧✯①✧❪

s❤♦✇ ✭❈♦♥sP♦❧ ✶ ❜ ♣✮ ❂ ❝♦♥❝❛t ❬s❤♦✇ ❜✱ ✧✯① ✰ ✧✱ s❤♦✇ ♣❪

s❤♦✇ ✭❈♦♥sP♦❧ ♥ ✶ P♦❧❈❡r♦✮ ❂ ❝♦♥❝❛t ❬✧①❫✧✱ s❤♦✇ ♥❪

s❤♦✇ ✭❈♦♥sP♦❧ ♥ ❜ P♦❧❈❡r♦✮ ❂ ❝♦♥❝❛t ❬s❤♦✇ ❜✱ ✧✯①❫✧✱ s❤♦✇ ♥❪

s❤♦✇ ✭❈♦♥sP♦❧ ♥ ✶ ♣✮ ❂ ❝♦♥❝❛t ❬✧①❫✧✱ s❤♦✇ ♥✱ ✧ ✰ ✧✱ s❤♦✇ ♣❪

s❤♦✇ ✭❈♦♥sP♦❧ ♥ ❜ ♣✮ ❂ ❝♦♥❝❛t ❬s❤♦✇ ❜✱ ✧✯①❫✧✱ s❤♦✇ ♥✱ ✧ ✰ ✧✱ s❤♦✇ ♣❪

Los siguientes ejemplos muestran polinomios con coeficientes enteros:

❡❥P♦❧✶✱ ❡❥P♦❧✷✱ ❡❥P♦❧✸✿✿ P♦❧✐♥♦♠✐♦ ■♥t

❡❥P♦❧✶ ❂ ❝♦♥sP♦❧ ✹ ✸ ✭❝♦♥sP♦❧ ✷ ✭✲✺✮ ✭❝♦♥sP♦❧ ✵ ✸ ♣♦❧❈❡r♦✮✮

❡❥P♦❧✷ ❂ ❝♦♥sP♦❧ ✺ ✶ ✭❝♦♥sP♦❧ ✷ ✺ ✭❝♦♥sP♦❧ ✶ ✹ ♣♦❧❈❡r♦✮✮

❡❥P♦❧✸ ❂ ❝♦♥sP♦❧ ✹ ✻ ✭❝♦♥sP♦❧ ✶ ✷ ♣♦❧❈❡r♦✮

y los siguientes con coeficientes reales

❡❥P♦❧✺✱ ❡❥P♦❧✻✱ ❡❥P♦❧✼✿✿ P♦❧✐♥♦♠✐♦ ❋❧♦❛t

❡❥P♦❧✺ ❂ ❝♦♥sP♦❧ ✹ ✸ ✭❝♦♥sP♦❧ ✷ ✭✲✺✮ ✭❝♦♥sP♦❧ ✵ ✸ ♣♦❧❈❡r♦✮✮

❡❥P♦❧✻ ❂ ❝♦♥sP♦❧ ✺ ✶ ✭❝♦♥sP♦❧ ✷ ✺ ✭❝♦♥sP♦❧ ✶ ✹ ♣♦❧❈❡r♦✮✮

❡❥P♦❧✼ ❂ ❝♦♥sP♦❧ ✶ ✷ ✭❝♦♥sP♦❧ ✹ ✻ ♣♦❧❈❡r♦✮

Se puede comprobar la función de escritura como sigue:

❣❤❝✐❃ ❡❥P♦❧✶

✸✯①❫✹ ✰ ✲✺✯①❫✷ ✰ ✸

❣❤❝✐❃ ❡❥P♦❧✷

①❫✺ ✰ ✺✯①❫✷ ✰ ✹✯①

❣❤❝✐❃ ❡❥P♦❧✸

✻✯①❫✹ ✰ ✷✯①

❣❤❝✐❃ ❡❥P♦❧✺

10.1. El TAD de los polinomios 213

✸✳✵✯①❫✹ ✰ ✲✺✳✵✯①❫✷ ✰ ✸✳✵

❣❤❝✐❃ ❡❥P♦❧✻

①❫✺ ✰ ✺✳✵✯①❫✷ ✰ ✹✳✵✯①

❣❤❝✐❃ ❡❥P♦❧✼

✻✳✵✯①❫✹ ✰ ✷✳✵✯①

La implementación de la especificación es la siguiente:

♣♦❧❈❡r♦ es el polinomio cero. Por ejemplo,

❣❤❝✐❃ ♣♦❧❈❡r♦

♣♦❧❈❡r♦ ✿✿ P♦❧✐♥♦♠✐♦ ❛

♣♦❧❈❡r♦ ❂ P♦❧❈❡r♦

✭❡sP♦❧❈❡r♦ ♣✮ se verifica si ♣ es el polinomio cero. Por ejemplo,

❡sP♦❧❈❡r♦ ♣♦❧❈❡r♦ ❂❂ ❚r✉❡

❡sP♦❧❈❡r♦ ❡❥P♦❧✶ ❂❂ ❋❛❧s❡

❡sP♦❧❈❡r♦ ✿✿ P♦❧✐♥♦♠✐♦ ❛ ✲❃ ❇♦♦❧

❡sP♦❧❈❡r♦ P♦❧❈❡r♦ ❂ ❚r✉❡

❡sP♦❧❈❡r♦ ❴ ❂ ❋❛❧s❡

✭❝♦♥sP♦❧ ♥ ❜ ♣✮ es el polinomio bxn + p. Por ejemplo,

❡❥P♦❧✷ ❂❂ ①❫✺ ✰ ✺✯①❫✷ ✰ ✹✯①

❝♦♥sP♦❧ ✸ ✵ ❡❥P♦❧✷ ❂❂ ①❫✺ ✰ ✺✯①❫✷ ✰ ✹✯①

❝♦♥sP♦❧ ✸ ✷ ♣♦❧❈❡r♦ ❂❂ ✷✯①❫✸

❝♦♥sP♦❧ ✻ ✼ ❡❥P♦❧✷ ❂❂ ✼✯①❫✻ ✰ ①❫✺ ✰ ✺✯①❫✷ ✰ ✹✯①

❝♦♥sP♦❧ ✹ ✼ ❡❥P♦❧✷ ❂❂ ①❫✺ ✰ ✼✯①❫✹ ✰ ✺✯①❫✷ ✰ ✹✯①

❝♦♥sP♦❧ ✺ ✼ ❡❥P♦❧✷ ❂❂ ✽✯①❫✺ ✰ ✺✯①❫✷ ✰ ✹✯①

❝♦♥sP♦❧ ✿✿ ◆✉♠ ❛ ❂❃ ■♥t ✲❃ ❛ ✲❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ P♦❧✐♥♦♠✐♦ ❛

❝♦♥sP♦❧ ❴ ✵ ♣ ❂ ♣

❝♦♥sP♦❧ ♥ ❜ P♦❧❈❡r♦ ❂ ❈♦♥sP♦❧ ♥ ❜ P♦❧❈❡r♦

❝♦♥sP♦❧ ♥ ❜ ✭❈♦♥sP♦❧ ♠ ❝ ♣✮

⑤ ♥ ❃ ♠ ❂ ❈♦♥sP♦❧ ♥ ❜ ✭❈♦♥sP♦❧ ♠ ❝ ♣✮

⑤ ♥ ❁ ♠ ❂ ❈♦♥sP♦❧ ♠ ❝ ✭❝♦♥sP♦❧ ♥ ❜ ♣✮

⑤ ❜✰❝ ❂❂ ✵ ❂ ♣

⑤ ♦t❤❡r✇✐s❡ ❂ ❈♦♥sP♦❧ ♥ ✭❜✰❝✮ ♣

214 Capítulo 10. Polinomios

✭❣r❛❞♦ ♣✮ es el grado del polinomio ♣. Por ejemplo,

❡❥P♦❧✸ ❂❂ ✻✯①❫✹ ✰ ✷✯①

❣r❛❞♦ ❡❥P♦❧✸ ❂❂ ✹

❣r❛❞♦ ✿✿ P♦❧✐♥♦♠✐♦ ❛ ✲❃ ■♥t

❣r❛❞♦ P♦❧❈❡r♦ ❂ ✵

❣r❛❞♦ ✭❈♦♥sP♦❧ ♥ ❴ ❴✮ ❂ ♥

✭❝♦❡❢▲✐❞❡r ♣✮ es el coeficiente líder del polinomio ♣. Por ejemplo,

❡❥P♦❧✸ ❂❂ ✻✯①❫✹ ✰ ✷✯①

❝♦❡❢▲✐❞❡r ❡❥P♦❧✸ ❂❂ ✻

❝♦❡❢▲✐❞❡r✿✿ ◆✉♠ t ❂❃ P♦❧✐♥♦♠✐♦ t ✲❃ t

❝♦❡❢▲✐❞❡r P♦❧❈❡r♦ ❂ ✵

❝♦❡❢▲✐❞❡r ✭❈♦♥sP♦❧ ❴ ❜ ❴✮ ❂ ❜

✭r❡st♦P♦❧ ♣✮ es el resto del polinomio ♣. Por ejemplo,

❡❥P♦❧✸ ❂❂ ✻✯①❫✹ ✰ ✷✯①

r❡st♦P♦❧ ❡❥P♦❧✸ ❂❂ ✷✯①

❡❥P♦❧✷ ❂❂ ①❫✺ ✰ ✺✯①❫✷ ✰ ✹✯①

r❡st♦P♦❧ ❡❥P♦❧✷ ❂❂ ✺✯①❫✷ ✰ ✹✯①

r❡st♦P♦❧ ✿✿ P♦❧✐♥♦♠✐♦ t ✲❃ P♦❧✐♥♦♠✐♦ t

r❡st♦P♦❧ P♦❧❈❡r♦ ❂ P♦❧❈❡r♦

r❡st♦P♦❧ ✭❈♦♥sP♦❧ ❴ ❴ ♣✮ ❂ ♣

10.1.3. Los polinomios como listas dispersas

Los polinomios se pueden representar mediante la lista de sus coeficientes ordena-dos en orden decreciente según el grado. Por ejemplo, el polinomio 6x4 − 5x2 + 4x − 7se representa por ❬✻✱✵✱✲✷✱✹✱✲✼❪. Dicha representación se llama listas dispersas.

En el módulo P♦❧❘❡♣❉✐s♣❡rs❛ se implementa el TAD de los polinomios como listasdispersas. La cabecera del módulo es

♠♦❞✉❧❡ P♦❧❘❡♣❉✐s♣❡rs❛

✭ P♦❧✐♥♦♠✐♦✱

♣♦❧❈❡r♦✱ ✲✲ P♦❧✐♥♦♠✐♦ ❛

❡sP♦❧❈❡r♦✱ ✲✲ ◆✉♠ ❛ ❂❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ ❇♦♦❧

10.1. El TAD de los polinomios 215

❝♦♥sP♦❧✱ ✲✲ ✭◆✉♠ ❛✮ ❂❃ ■♥t ✲❃ ❛ ✲❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ P♦❧✐♥♦♠✐♦ ❛

❣r❛❞♦✱ ✲✲ P♦❧✐♥♦♠✐♦ ❛ ✲❃ ■♥t

❝♦❡❢▲✐❞❡r✱ ✲✲ ◆✉♠ ❛ ❂❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ ❛

r❡st♦P♦❧ ✲✲ P♦❧✐♥♦♠✐♦ ❛ ✲❃ P♦❧✐♥♦♠✐♦ ❛

✮ ✇❤❡r❡

La definición del tipo de los polinomios es

❞❛t❛ P♦❧✐♥♦♠✐♦ ❛ ❂ P♦❧ ❬❛❪

❞❡r✐✈✐♥❣ ❊q

Para facilitar la escritura de los polinomios se define

✐♥st❛♥❝❡ ◆✉♠ ❛ ❂❃ ❙❤♦✇ ✭P♦❧✐♥♦♠✐♦ ❛✮ ✇❤❡r❡

s❤♦✇ ♣♦❧

⑤ ❡sP♦❧❈❡r♦ ♣♦❧ ❂ ✧✵✧

⑤ ♥ ❂❂ ✵ ✫✫ ❡sP♦❧❈❡r♦ ♣ ❂ s❤♦✇ ❛

⑤ ♥ ❂❂ ✵ ❂ ❝♦♥❝❛t ❬s❤♦✇ ❛✱ ✧ ✰ ✧✱ s❤♦✇ ♣❪

⑤ ♥ ❂❂ ✶ ✫✫ ❡sP♦❧❈❡r♦ ♣ ❂ ❝♦♥❝❛t ❬s❤♦✇ ❛✱ ✧✯①✧❪

⑤ ♥ ❂❂ ✶ ❂ ❝♦♥❝❛t ❬s❤♦✇ ❛✱ ✧✯① ✰ ✧✱ s❤♦✇ ♣❪

⑤ ❛ ❂❂ ✶ ✫✫ ❡sP♦❧❈❡r♦ ♣ ❂ ❝♦♥❝❛t ❬✧①❫✧✱ s❤♦✇ ♥❪

⑤ ❡sP♦❧❈❡r♦ ♣ ❂ ❝♦♥❝❛t ❬s❤♦✇ ❛✱ ✧✯①❫✧✱ s❤♦✇ ♥❪

⑤ ❛ ❂❂ ✶ ❂ ❝♦♥❝❛t ❬✧①❫✧✱ s❤♦✇ ♥✱ ✧ ✰ ✧✱ s❤♦✇ ♣❪

⑤ ♦t❤❡r✇✐s❡ ❂ ❝♦♥❝❛t ❬s❤♦✇ ❛✱ ✧✯①❫✧✱ s❤♦✇ ♥✱ ✧ ✰ ✧✱ s❤♦✇ ♣❪

✇❤❡r❡ ♥ ❂ ❣r❛❞♦ ♣♦❧

❛ ❂ ❝♦❡❢▲✐❞❡r ♣♦❧

♣ ❂ r❡st♦P♦❧ ♣♦❧

Los siguientes ejemplos muestran polinomios con coeficientes enteros:

❡❥P♦❧✶✱ ❡❥P♦❧✷✱ ❡❥P♦❧✸✿✿ P♦❧✐♥♦♠✐♦ ■♥t

❡❥P♦❧✶ ❂ ❝♦♥sP♦❧ ✹ ✸ ✭❝♦♥sP♦❧ ✷ ✭✲✺✮ ✭❝♦♥sP♦❧ ✵ ✸ ♣♦❧❈❡r♦✮✮

❡❥P♦❧✷ ❂ ❝♦♥sP♦❧ ✺ ✶ ✭❝♦♥sP♦❧ ✷ ✺ ✭❝♦♥sP♦❧ ✶ ✹ ♣♦❧❈❡r♦✮✮

❡❥P♦❧✸ ❂ ❝♦♥sP♦❧ ✹ ✻ ✭❝♦♥sP♦❧ ✶ ✷ ♣♦❧❈❡r♦✮

Se puede comprobar la función de escritura como sigue:

❣❤❝✐❃ ❡❥P♦❧✶

✸✯①❫✹ ✰ ✲✺✯①❫✷ ✰ ✸

❣❤❝✐❃ ❡❥P♦❧✷

①❫✺ ✰ ✺✯①❫✷ ✰ ✹✯①

❣❤❝✐❃ ❡❥P♦❧✸

✻✯①❫✹ ✰ ✷✯①

216 Capítulo 10. Polinomios

La implementación de la especificación es la siguiente:

♣♦❧❈❡r♦ es el polinomio cero. Por ejemplo,

❣❤❝✐❃ ♣♦❧❈❡r♦

♣♦❧❈❡r♦ ✿✿ P♦❧✐♥♦♠✐♦ ❛

♣♦❧❈❡r♦ ❂ P♦❧ ❬❪

✭❡sP♦❧❈❡r♦ ♣✮ se verifica si ♣ es el polinomio cero. Por ejemplo,

❡sP♦❧❈❡r♦ ♣♦❧❈❡r♦ ❂❂ ❚r✉❡

❡sP♦❧❈❡r♦ ❡❥P♦❧✶ ❂❂ ❋❛❧s❡

❡sP♦❧❈❡r♦ ✿✿ P♦❧✐♥♦♠✐♦ ❛ ✲❃ ❇♦♦❧

❡sP♦❧❈❡r♦ ✭P♦❧ ❬❪✮ ❂ ❚r✉❡

❡sP♦❧❈❡r♦ ❴ ❂ ❋❛❧s❡

✭❝♦♥sP♦❧ ♥ ❜ ♣✮ es el polinomio bxn + p. Por ejemplo,

❡❥P♦❧✷ ❂❂ ①❫✺ ✰ ✺✯①❫✷ ✰ ✹✯①

❝♦♥sP♦❧ ✸ ✵ ❡❥P♦❧✷ ❂❂ ①❫✺ ✰ ✺✯①❫✷ ✰ ✹✯①

❝♦♥sP♦❧ ✸ ✷ ♣♦❧❈❡r♦ ❂❂ ✷✯①❫✸

❝♦♥sP♦❧ ✻ ✼ ❡❥P♦❧✷ ❂❂ ✼✯①❫✻ ✰ ①❫✺ ✰ ✺✯①❫✷ ✰ ✹✯①

❝♦♥sP♦❧ ✹ ✼ ❡❥P♦❧✷ ❂❂ ①❫✺ ✰ ✼✯①❫✹ ✰ ✺✯①❫✷ ✰ ✹✯①

❝♦♥sP♦❧ ✺ ✼ ❡❥P♦❧✷ ❂❂ ✽✯①❫✺ ✰ ✺✯①❫✷ ✰ ✹✯①

❝♦♥sP♦❧ ✿✿ ◆✉♠ ❛ ❂❃ ■♥t ✲❃ ❛ ✲❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ P♦❧✐♥♦♠✐♦ ❛

❝♦♥sP♦❧ ❴ ✵ ♣ ❂ ♣

❝♦♥sP♦❧ ♥ ❜ ♣❅✭P♦❧ ①s✮

⑤ ❡sP♦❧❈❡r♦ ♣ ❂ P♦❧ ✭❜✿r❡♣❧✐❝❛t❡ ♥ ✵✮

⑤ ♥ ❃ ♠ ❂ P♦❧ ✭❜✿✭r❡♣❧✐❝❛t❡ ✭♥✲♠✲✶✮ ✵✮✰✰①s✮

⑤ ♥ ❁ ♠ ❂ ❝♦♥sP♦❧ ♠ ❝ ✭❝♦♥sP♦❧ ♥ ❜ ✭r❡st♦P♦❧ ♣✮✮

⑤ ❜✰❝ ❂❂ ✵ ❂ P♦❧ ✭❞r♦♣❲❤✐❧❡ ✭❂❂✵✮ ✭t❛✐❧ ①s✮✮

⑤ ♦t❤❡r✇✐s❡ ❂ P♦❧ ✭✭❜✰❝✮✿t❛✐❧ ①s✮

✇❤❡r❡

❝ ❂ ❝♦❡❢▲✐❞❡r ♣

♠ ❂ ❣r❛❞♦ ♣

✭❣r❛❞♦ ♣✮ es el grado del polinomio ♣. Por ejemplo,

10.1. El TAD de los polinomios 217

❡❥P♦❧✸ ❂❂ ✻✯①❫✹ ✰ ✷✯①

❣r❛❞♦ ❡❥P♦❧✸ ❂❂ ✹

❣r❛❞♦✿✿ P♦❧✐♥♦♠✐♦ ❛ ✲❃ ■♥t

❣r❛❞♦ ✭P♦❧ ❬❪✮ ❂ ✵

❣r❛❞♦ ✭P♦❧ ①s✮ ❂ ❧❡♥❣t❤ ①s ✲ ✶

✭❝♦❡❢▲✐❞❡r ♣✮ es el coeficiente líder del polinomio ♣. Por ejemplo,

❡❥P♦❧✸ ❂❂ ✻✯①❫✹ ✰ ✷✯①

❝♦❡❢▲✐❞❡r ❡❥P♦❧✸ ❂❂ ✻

❝♦❡❢▲✐❞❡r✿✿ ◆✉♠ t ❂❃ P♦❧✐♥♦♠✐♦ t ✲❃ t

❝♦❡❢▲✐❞❡r ✭P♦❧ ❬❪✮ ❂ ✵

❝♦❡❢▲✐❞❡r ✭P♦❧ ✭❛✿❴✮✮ ❂ ❛

✭r❡st♦P♦❧ ♣✮ es el resto del polinomio ♣. Por ejemplo,

❡❥P♦❧✸ ❂❂ ✻✯①❫✹ ✰ ✷✯①

r❡st♦P♦❧ ❡❥P♦❧✸ ❂❂ ✷✯①

❡❥P♦❧✷ ❂❂ ①❫✺ ✰ ✺✯①❫✷ ✰ ✹✯①

r❡st♦P♦❧ ❡❥P♦❧✷ ❂❂ ✺✯①❫✷ ✰ ✹✯①

r❡st♦P♦❧ ✿✿ ◆✉♠ t ❂❃ P♦❧✐♥♦♠✐♦ t ✲❃ P♦❧✐♥♦♠✐♦ t

r❡st♦P♦❧ ✭P♦❧ ❬❪✮ ❂ ♣♦❧❈❡r♦

r❡st♦P♦❧ ✭P♦❧ ❬❴❪✮ ❂ ♣♦❧❈❡r♦

r❡st♦P♦❧ ✭P♦❧ ✭❴✿❜✿❛s✮✮

⑤ ❜ ❂❂ ✵ ❂ P♦❧ ✭❞r♦♣❲❤✐❧❡ ✭❂❂✵✮ ❛s✮

⑤ ♦t❤❡r✇✐s❡ ❂ P♦❧ ✭❜✿❛s✮

10.1.4. Los polinomios como listas densas

Los polinomios se pueden representar mediante la lista de pares ✭❣r❛❞♦✱❝♦❡❢✮, or-denados en orden decreciente según el grado. Por ejemplo, el polinomio 6x4 − 5x2 +4x − 7 se representa por ❬✭✹✱✻✮✱✭✷✱✲✺✮✱✭✶✱✹✮✱✭✵✱✲✼✮❪. Dicha representación se llamalistas densas.

En el módulo P♦❧❘❡♣❉❡♥s❛ se implementa el TAD de los polinomios como listasdensas. La cabecera del módulo es

218 Capítulo 10. Polinomios

♠♦❞✉❧❡ P♦❧❘❡♣❉❡♥s❛

✭ P♦❧✐♥♦♠✐♦✱

♣♦❧❈❡r♦✱ ✲✲ P♦❧✐♥♦♠✐♦ ❛

❡sP♦❧❈❡r♦✱ ✲✲ ◆✉♠ ❛ ❂❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ ❇♦♦❧

❝♦♥sP♦❧✱ ✲✲ ◆✉♠ ❛ ❂❃ ■♥t ✲❃ ❛ ✲❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ P♦❧✐♥♦♠✐♦ ❛

❣r❛❞♦✱ ✲✲ P♦❧✐♥♦♠✐♦ ❛ ✲❃ ■♥t

❝♦❡❢▲✐❞❡r✱ ✲✲ ◆✉♠ ❛ ❂❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ ❛

r❡st♦P♦❧ ✲✲ P♦❧✐♥♦♠✐♦ ❛ ✲❃ P♦❧✐♥♦♠✐♦ ❛

✮ ✇❤❡r❡

La definición del tipo de los polinomios es

❞❛t❛ P♦❧✐♥♦♠✐♦ ❛ ❂ P♦❧ ❬✭■♥t✱❛✮❪

❞❡r✐✈✐♥❣ ❊q

Para facilitar la escritura de los polinomios se define

✐♥st❛♥❝❡ ◆✉♠ t ❂❃ ❙❤♦✇ ✭P♦❧✐♥♦♠✐♦ t✮ ✇❤❡r❡

s❤♦✇ ♣♦❧

⑤ ❡sP♦❧❈❡r♦ ♣♦❧ ❂ ✧✵✧

⑤ ♥ ❂❂ ✵ ✫✫ ❡sP♦❧❈❡r♦ ♣ ❂ s❤♦✇ ❛

⑤ ♥ ❂❂ ✵ ❂ ❝♦♥❝❛t ❬s❤♦✇ ❛✱ ✧ ✰ ✧✱ s❤♦✇ ♣❪

⑤ ♥ ❂❂ ✶ ✫✫ ❡sP♦❧❈❡r♦ ♣ ❂ ❝♦♥❝❛t ❬s❤♦✇ ❛✱ ✧✯①✧❪

⑤ ♥ ❂❂ ✶ ❂ ❝♦♥❝❛t ❬s❤♦✇ ❛✱ ✧✯① ✰ ✧✱ s❤♦✇ ♣❪

⑤ ❛ ❂❂ ✶ ✫✫ ❡sP♦❧❈❡r♦ ♣ ❂ ❝♦♥❝❛t ❬✧①❫✧✱ s❤♦✇ ♥❪

⑤ ❡sP♦❧❈❡r♦ ♣ ❂ ❝♦♥❝❛t ❬s❤♦✇ ❛✱ ✧✯①❫✧✱ s❤♦✇ ♥❪

⑤ ❛ ❂❂ ✶ ❂ ❝♦♥❝❛t ❬✧①❫✧✱ s❤♦✇ ♥✱ ✧ ✰ ✧✱ s❤♦✇ ♣❪

⑤ ♦t❤❡r✇✐s❡ ❂ ❝♦♥❝❛t ❬s❤♦✇ ❛✱ ✧✯①❫✧✱ s❤♦✇ ♥✱ ✧ ✰ ✧✱ s❤♦✇ ♣❪

✇❤❡r❡ ♥ ❂ ❣r❛❞♦ ♣♦❧

❛ ❂ ❝♦❡❢▲✐❞❡r ♣♦❧

♣ ❂ r❡st♦P♦❧ ♣♦❧

Los siguientes ejemplos muestran polinomios con coeficientes enteros:

❡❥P♦❧✶✱ ❡❥P♦❧✷✱ ❡❥P♦❧✸✿✿ P♦❧✐♥♦♠✐♦ ■♥t

❡❥P♦❧✶ ❂ ❝♦♥sP♦❧ ✹ ✸ ✭❝♦♥sP♦❧ ✷ ✭✲✺✮ ✭❝♦♥sP♦❧ ✵ ✸ ♣♦❧❈❡r♦✮✮

❡❥P♦❧✷ ❂ ❝♦♥sP♦❧ ✺ ✶ ✭❝♦♥sP♦❧ ✷ ✺ ✭❝♦♥sP♦❧ ✶ ✹ ♣♦❧❈❡r♦✮✮

❡❥P♦❧✸ ❂ ❝♦♥sP♦❧ ✹ ✻ ✭❝♦♥sP♦❧ ✶ ✷ ♣♦❧❈❡r♦✮

Se puede comprobar la función de escritura como sigue:

10.1. El TAD de los polinomios 219

❣❤❝✐❃ ❡❥P♦❧✶

✸✯①❫✹ ✰ ✲✺✯①❫✷ ✰ ✸

❣❤❝✐❃ ❡❥P♦❧✷

①❫✺ ✰ ✺✯①❫✷ ✰ ✹✯①

❣❤❝✐❃ ❡❥P♦❧✸

✻✯①❫✹ ✰ ✷✯①

La implementación de la especificación es la siguiente:

♣♦❧❈❡r♦ es el polinomio cero. Por ejemplo,

❣❤❝✐❃ ♣♦❧❈❡r♦

♣♦❧❈❡r♦ ✿✿ ◆✉♠ ❛ ❂❃ P♦❧✐♥♦♠✐♦ ❛

♣♦❧❈❡r♦ ❂ P♦❧ ❬❪

✭❡sP♦❧❈❡r♦ ♣✮ se verifica si ♣ es el polinomio cero. Por ejemplo,

❡sP♦❧❈❡r♦ ♣♦❧❈❡r♦ ❂❂ ❚r✉❡

❡sP♦❧❈❡r♦ ❡❥P♦❧✶ ❂❂ ❋❛❧s❡

❡sP♦❧❈❡r♦ ✿✿ ◆✉♠ ❛ ❂❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ ❇♦♦❧

❡sP♦❧❈❡r♦ ✭P♦❧ ❬❪✮ ❂ ❚r✉❡

❡sP♦❧❈❡r♦ ❴ ❂ ❋❛❧s❡

✭❝♦♥sP♦❧ ♥ ❜ ♣✮ es el polinomio bxn + p. Por ejemplo,

❡❥P♦❧✷ ❂❂ ①❫✺ ✰ ✺✯①❫✷ ✰ ✹✯①

❝♦♥sP♦❧ ✸ ✵ ❡❥P♦❧✷ ❂❂ ①❫✺ ✰ ✺✯①❫✷ ✰ ✹✯①

❝♦♥sP♦❧ ✸ ✷ ♣♦❧❈❡r♦ ❂❂ ✷✯①❫✸

❝♦♥sP♦❧ ✻ ✼ ❡❥P♦❧✷ ❂❂ ✼✯①❫✻ ✰ ①❫✺ ✰ ✺✯①❫✷ ✰ ✹✯①

❝♦♥sP♦❧ ✹ ✼ ❡❥P♦❧✷ ❂❂ ①❫✺ ✰ ✼✯①❫✹ ✰ ✺✯①❫✷ ✰ ✹✯①

❝♦♥sP♦❧ ✺ ✼ ❡❥P♦❧✷ ❂❂ ✽✯①❫✺ ✰ ✺✯①❫✷ ✰ ✹✯①

❝♦♥sP♦❧ ✿✿ ◆✉♠ ❛ ❂❃ ■♥t ✲❃ ❛ ✲❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ P♦❧✐♥♦♠✐♦ ❛

❝♦♥sP♦❧ ❴ ✵ ♣ ❂ ♣

❝♦♥sP♦❧ ♥ ❜ ♣❅✭P♦❧ ①s✮

⑤ ❡sP♦❧❈❡r♦ ♣ ❂ P♦❧ ❬✭♥✱❜✮❪

⑤ ♥ ❃ ♠ ❂ P♦❧ ✭✭♥✱❜✮✿①s✮

⑤ ♥ ❁ ♠ ❂ ❝♦♥sP♦❧ ♠ ❝ ✭❝♦♥sP♦❧ ♥ ❜ ✭P♦❧ ✭t❛✐❧ ①s✮✮✮

⑤ ❜✰❝ ❂❂ ✵ ❂ P♦❧ ✭t❛✐❧ ①s✮

220 Capítulo 10. Polinomios

⑤ ♦t❤❡r✇✐s❡ ❂ P♦❧ ✭✭♥✱❜✰❝✮✿✭t❛✐❧ ①s✮✮

✇❤❡r❡

❝ ❂ ❝♦❡❢▲✐❞❡r ♣

♠ ❂ ❣r❛❞♦ ♣

✭❣r❛❞♦ ♣✮ es el grado del polinomio ♣. Por ejemplo,

❡❥P♦❧✸ ❂❂ ✻✯①❫✹ ✰ ✷✯①

❣r❛❞♦ ❡❥P♦❧✸ ❂❂ ✹

❣r❛❞♦✿✿ P♦❧✐♥♦♠✐♦ ❛ ✲❃ ■♥t

❣r❛❞♦ ✭P♦❧ ❬❪✮ ❂ ✵

❣r❛❞♦ ✭P♦❧ ✭✭♥✱❴✮✿❴✮✮ ❂ ♥

✭❝♦❡❢▲✐❞❡r ♣✮ es el coeficiente líder del polinomio ♣. Por ejemplo,

❡❥P♦❧✸ ❂❂ ✻✯①❫✹ ✰ ✷✯①

❝♦❡❢▲✐❞❡r ❡❥P♦❧✸ ❂❂ ✻

❝♦❡❢▲✐❞❡r✿✿ ◆✉♠ t ❂❃ P♦❧✐♥♦♠✐♦ t ✲❃ t

❝♦❡❢▲✐❞❡r ✭P♦❧ ❬❪✮ ❂ ✵

❝♦❡❢▲✐❞❡r ✭P♦❧ ✭✭❴✱❜✮✿❴✮✮ ❂ ❜

✭r❡st♦P♦❧ ♣✮ es el resto del polinomio ♣. Por ejemplo,

❡❥P♦❧✸ ❂❂ ✻✯①❫✹ ✰ ✷✯①

r❡st♦P♦❧ ❡❥P♦❧✸ ❂❂ ✷✯①

❡❥P♦❧✷ ❂❂ ①❫✺ ✰ ✺✯①❫✷ ✰ ✹✯①

r❡st♦P♦❧ ❡❥P♦❧✷ ❂❂ ✺✯①❫✷ ✰ ✹✯①

r❡st♦P♦❧ ✿✿ ◆✉♠ t ❂❃ P♦❧✐♥♦♠✐♦ t ✲❃ P♦❧✐♥♦♠✐♦ t

r❡st♦P♦❧ ✭P♦❧ ❬❪✮ ❂ ♣♦❧❈❡r♦

r❡st♦P♦❧ ✭P♦❧ ❬❴❪✮ ❂ ♣♦❧❈❡r♦

r❡st♦P♦❧ ✭P♦❧ ✭❴✿①s✮✮ ❂ P♦❧ ①s

10.1.5. Comprobación de las implementaciones con QuickCheck

En el módulo ♣♦❧Pr♦♣✐❡❞❛❞❡s se comprueba con QuickCheck que las 3 implemen-taciones del TAD de los polinomios cumplen las propiedades de la especificación. Paraello, se define un generador de polinomios. Este generador se usará en las siguientessecciones para verificar propiedades de las operaciones con polinomios.

La cabecera del módulo es

10.1. El TAD de los polinomios 221

④✲★ ▲❆◆●❯❆●❊ ❋❧❡①✐❜❧❡■♥st❛♥❝❡s ★✲⑥

♠♦❞✉❧❡ P♦❧Pr♦♣✐❡❞❛❞❡s ✇❤❡r❡

✐♠♣♦rt P♦❧❘❡♣❚❉❆

✲✲ ✐♠♣♦rt P♦❧❘❡♣❉✐s♣❡rs❛

✲✲ ✐♠♣♦rt P♦❧❘❡♣❉❡♥s❛

✐♠♣♦rt ❚❡st✳◗✉✐❝❦❈❤❡❝❦

Nótese que hay que elegir (descomentando) una implementación del TAD de polino-mios. Nosotros hemos elegido la primera.

Para la generación arbitraria de polinomios se define la función

❣❡♥P♦❧ ✿✿ ■♥t ✲❃ ●❡♥ ✭P♦❧✐♥♦♠✐♦ ■♥t✮

tal que ✭❣❡♥P♦❧ ♥✮ es un generador de polinomios. Por ejemplo,

❣❤❝✐❃ s❛♠♣❧❡ ✭❣❡♥P♦❧ ✶✮

✼✯①❫✾ ✰ ✾✯①❫✽ ✰ ✶✵✯①❫✼ ✰ ✲✶✹✯①❫✺ ✰ ✲✶✺✯①❫✷ ✰ ✲✶✵

✲✹✯①❫✽ ✰ ✷✯①

✲✽✯①❫✾ ✰ ✹✯①❫✽ ✰ ✷✯①❫✻ ✰ ✹✯①❫✺ ✰ ✲✻✯①❫✹ ✰ ✺✯①❫✷ ✰ ✲✽✯①

✲✾✯①❫✾ ✰ ①❫✺ ✰ ✲✼

✽✯①❫✶✵ ✰ ✲✾✯①❫✼ ✰ ✼✯①❫✻ ✰ ✾✯①❫✺ ✰ ✶✵✯①❫✸ ✰ ✲✶✯①❫✷

✼✯①❫✶✵ ✰ ✺✯①❫✾ ✰ ✲✺

✲✽✯①❫✶✵ ✰ ✲✼

✲✺✯①

✺✯①❫✶✵ ✰ ✹✯①❫✹ ✰ ✲✸

✸✯①❫✸ ✰ ✲✹

✶✵✯①

❣❡♥P♦❧ ✿✿ ■♥t ✲❃ ●❡♥ ✭P♦❧✐♥♦♠✐♦ ■♥t✮

❣❡♥P♦❧ ✵ ❂ r❡t✉r♥ ♣♦❧❈❡r♦

❣❡♥P♦❧ ♥ ❂ ❞♦ ♥ ❁✲ ❝❤♦♦s❡ ✭✵✱✶✵✮

❜ ❁✲ ❝❤♦♦s❡ ✭✲✶✵✱✶✵✮

♣ ❁✲ ❣❡♥P♦❧ ✭❞✐✈ ♥ ✷✮

r❡t✉r♥ ✭❝♦♥sP♦❧ ♥ ❜ ♣✮

y se declara los polinomios como una clase arbitraria

✐♥st❛♥❝❡ ❆r❜✐tr❛r② ✭P♦❧✐♥♦♠✐♦ ■♥t✮ ✇❤❡r❡

❛r❜✐tr❛r② ❂ s✐③❡❞ ❣❡♥P♦❧

222 Capítulo 10. Polinomios

La formalización de las propiedades del TAD de los polinomios es

1. ♣♦❧❈❡r♦ es el polinomio cero.

♣r♦♣❴♣♦❧❈❡r♦❴❡s❴❝❡r♦ ✿✿ ❇♦♦❧

♣r♦♣❴♣♦❧❈❡r♦❴❡s❴❝❡r♦ ❂

❡sP♦❧❈❡r♦ ♣♦❧❈❡r♦

2. Si n es mayor que el grado de p y b no es cero, entonces ✭❝♦♥sP♦❧ ♥ ❜ ♣✮ es unpolinomio distinto del cero.

♣r♦♣❴❝♦♥sP♦❧❴♥♦❴❝❡r♦ ✿✿ ■♥t ✲❃ ■♥t ✲❃ P♦❧✐♥♦♠✐♦ ■♥t ✲❃ Pr♦♣❡rt②

♣r♦♣❴❝♦♥sP♦❧❴♥♦❴❝❡r♦ ♥ ❜ ♣ ❂

♥ ❃ ❣r❛❞♦ ♣ ✫✫ ❜ ✴❂ ✵ ❂❂❃

♥♦t ✭❡sP♦❧❈❡r♦ ✭❝♦♥sP♦❧ ♥ ❜ ♣✮✮

3. ✭❝♦♥sP♦❧ ✭❣r❛❞♦ ♣✮ ✭❝♦❡❢▲✐❞❡r ♣✮ ✭r❡st♦P♦❧ ♣✮✮ es igual a ♣.

♣r♦♣❴❝♦♥sP♦❧ ✿✿ P♦❧✐♥♦♠✐♦ ■♥t ✲❃ ❇♦♦❧

♣r♦♣❴❝♦♥sP♦❧ ♣ ❂

❝♦♥sP♦❧ ✭❣r❛❞♦ ♣✮ ✭❝♦❡❢▲✐❞❡r ♣✮ ✭r❡st♦P♦❧ ♣✮ ❂❂ ♣

4. Si n es mayor que el grado de p y b no es cero, entonces el grado de ✭❝♦♥sP♦❧ ♥ ❜ ♣✮

es n.

♣r♦♣❴❣r❛❞♦ ✿✿ ■♥t ✲❃ ■♥t ✲❃ P♦❧✐♥♦♠✐♦ ■♥t ✲❃ Pr♦♣❡rt②

♣r♦♣❴❣r❛❞♦ ♥ ❜ ♣ ❂

♥ ❃ ❣r❛❞♦ ♣ ✫✫ ❜ ✴❂ ✵ ❂❂❃

❣r❛❞♦ ✭❝♦♥sP♦❧ ♥ ❜ ♣✮ ❂❂ ♥

5. Si n es mayor que el grado de p y b no es cero, entonces el coeficiente líder de✭❝♦♥sP♦❧ ♥ ❜ ♣✮ es b.

♣r♦♣❴❝♦❡❢▲✐❞❡r ✿✿ ■♥t ✲❃ ■♥t ✲❃ P♦❧✐♥♦♠✐♦ ■♥t ✲❃ Pr♦♣❡rt②

♣r♦♣❴❝♦❡❢▲✐❞❡r ♥ ❜ ♣ ❂

♥ ❃ ❣r❛❞♦ ♣ ✫✫ ❜ ✴❂ ✵ ❂❂❃

❝♦❡❢▲✐❞❡r ✭❝♦♥sP♦❧ ♥ ❜ ♣✮ ❂❂ ❜

6. Si n es mayor que el grado de p y b no es cero, entonces el resto de ✭❝♦♥sP♦❧ ♥ ❜ ♣✮

es ♣.

10.2. Operaciones con polinomios 223

♣r♦♣❴r❡st♦P♦❧ ✿✿ ■♥t ✲❃ ■♥t ✲❃ P♦❧✐♥♦♠✐♦ ■♥t ✲❃ Pr♦♣❡rt②

♣r♦♣❴r❡st♦P♦❧ ♥ ❜ ♣ ❂

♥ ❃ ❣r❛❞♦ ♣ ✫✫ ❜ ✴❂ ✵ ❂❂❃

r❡st♦P♦❧ ✭❝♦♥sP♦❧ ♥ ❜ ♣✮ ❂❂ ♣

La comprobación de las propiedades es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴♣♦❧❈❡r♦❴❡s❴❝❡r♦

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴❝♦♥sP♦❧❴♥♦❴❝❡r♦

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴❝♦♥sP♦❧

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴❣r❛❞♦

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴❝♦❡❢▲✐❞❡r

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴r❡st♦P♦❧

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

10.2. Operaciones con polinomios

En el módulo P♦❧❖♣❡r❛❝✐♦♥❡s se definen, usando el TAD de los polinomios, las ope-raciones básicas con polinomios. La cabecera del módulo es

♠♦❞✉❧❡ P♦❧❖♣❡r❛❝✐♦♥❡s ✭♠♦❞✉❧❡ P♦❧✱ ♠♦❞✉❧❡ P♦❧❖♣❡r❛❝✐♦♥❡s✮ ✇❤❡r❡

✲✲ ✐♠♣♦rt P♦❧❘❡♣❚❉❆ ❛s P♦❧

✲✲ ✐♠♣♦rt P♦❧❘❡♣❉✐s♣❡rs❛ ❛s P♦❧

✐♠♣♦rt P♦❧❘❡♣❉❡♥s❛ ❛s P♦❧

✐♠♣♦rt ❚❡st✳◗✉✐❝❦❈❤❡❝❦

Nótese que hay que elegir (descomentándola) una implementación del TAD de los po-linomios. Nosotros hemos elegido la tercera.

224 Capítulo 10. Polinomios

En esta sección usaremos los siguientes ejemplos de polinomios:

❡❥P♦❧✶✱ ❡❥P♦❧✷✱ ❡❥P♦❧✸✱ ❡❥❚❡r♠✿✿ P♦❧✐♥♦♠✐♦ ■♥t

❡❥P♦❧✶ ❂ ❝♦♥sP♦❧ ✹ ✸ ✭❝♦♥sP♦❧ ✷ ✭✲✺✮ ✭❝♦♥sP♦❧ ✵ ✸ ♣♦❧❈❡r♦✮✮

❡❥P♦❧✷ ❂ ❝♦♥sP♦❧ ✺ ✶ ✭❝♦♥sP♦❧ ✷ ✺ ✭❝♦♥sP♦❧ ✶ ✹ ♣♦❧❈❡r♦✮✮

❡❥P♦❧✸ ❂ ❝♦♥sP♦❧ ✹ ✻ ✭❝♦♥sP♦❧ ✶ ✷ ♣♦❧❈❡r♦✮

❡❥❚❡r♠ ❂ ❝♦♥sP♦❧ ✶ ✹ ♣♦❧❈❡r♦

Usamos el generador definido en la sección anterior

❣❡♥P♦❧ ✿✿ ✭❆r❜✐tr❛r② ❛✱ ◆✉♠ ❛✮ ❂❃ ■♥t ✲❃ ●❡♥ ✭P♦❧✐♥♦♠✐♦ ❛✮

❣❡♥P♦❧ ✵ ❂ r❡t✉r♥ ♣♦❧❈❡r♦

❣❡♥P♦❧ ♥ ❂ ❞♦ ♥ ❁✲ ❝❤♦♦s❡ ✭✵✱✶✵✮

❜ ❁✲ ❛r❜✐tr❛r②

♣ ❁✲ ❣❡♥P♦❧ ✭❞✐✈ ♥ ✷✮

r❡t✉r♥ ✭❝♦♥sP♦❧ ♥ ❜ ♣✮

✐♥st❛♥❝❡ ✭❆r❜✐tr❛r② ❛✱ ◆✉♠ ❛✮ ❂❃ ❆r❜✐tr❛r② ✭P♦❧✐♥♦♠✐♦ ❛✮ ✇❤❡r❡

❛r❜✐tr❛r② ❂ s✐③❡❞ ❣❡♥P♦❧

10.2.1. Funciones sobre términos

✭❝r❡❛❚❡r♠✐♥♦ ♥ ❛✮ es el término a ∗ xn. Por ejemplo,

❝r❡❛❚❡r♠✐♥♦ ✷ ✺ ❂❂ ✺✯①❫✷

❝r❡❛❚❡r♠✐♥♦✿✿ ◆✉♠ t ❂❃ ■♥t ✲❃ t ✲❃ P♦❧✐♥♦♠✐♦ t

❝r❡❛❚❡r♠✐♥♦ ♥ ❛ ❂ ❝♦♥sP♦❧ ♥ ❛ ♣♦❧❈❡r♦

✭t❡r♠▲✐❞❡r ♣✮ es el término líder del polinomio ♣. Por ejemplo,

❡❥P♦❧✷ ❂❂ ①❫✺ ✰ ✺✯①❫✷ ✰ ✹✯①

t❡r♠▲✐❞❡r ❡❥P♦❧✷ ❂❂ ①❫✺

t❡r♠▲✐❞❡r✿✿ ◆✉♠ t ❂❃ P♦❧✐♥♦♠✐♦ t ✲❃ P♦❧✐♥♦♠✐♦ t

t❡r♠▲✐❞❡r ♣ ❂ ❝r❡❛❚❡r♠✐♥♦ ✭❣r❛❞♦ ♣✮ ✭❝♦❡❢▲✐❞❡r ♣✮

10.2. Operaciones con polinomios 225

10.2.2. Suma de polinomios

✭s✉♠❛P♦❧ ♣ q✮ es la suma de los polinomios ♣ y q. Por ejemplo,

❡❥P♦❧✶ ❂❂ ✸✯①❫✹ ✰ ✲✺✯①❫✷ ✰ ✸

❡❥P♦❧✷ ❂❂ ①❫✺ ✰ ✺✯①❫✷ ✰ ✹✯①

s✉♠❛P♦❧ ❡❥P♦❧✶ ❡❥P♦❧✷ ❂❂ ①❫✺ ✰ ✸✯①❫✹ ✰ ✹✯① ✰ ✸

s✉♠❛P♦❧✿✿ ◆✉♠ ❛ ❂❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ P♦❧✐♥♦♠✐♦ ❛

s✉♠❛P♦❧ ♣ q

⑤ ❡sP♦❧❈❡r♦ ♣ ❂ q

⑤ ❡sP♦❧❈❡r♦ q ❂ ♣

⑤ ♥✶ ❃ ♥✷ ❂ ❝♦♥sP♦❧ ♥✶ ❛✶ ✭s✉♠❛P♦❧ r✶ q✮

⑤ ♥✶ ❁ ♥✷ ❂ ❝♦♥sP♦❧ ♥✷ ❛✷ ✭s✉♠❛P♦❧ ♣ r✷✮

⑤ ❛✶✰❛✷ ✴❂ ✵ ❂ ❝♦♥sP♦❧ ♥✶ ✭❛✶✰❛✷✮ ✭s✉♠❛P♦❧ r✶ r✷✮

⑤ ♦t❤❡r✇✐s❡ ❂ s✉♠❛P♦❧ r✶ r✷

✇❤❡r❡ ♥✶ ❂ ❣r❛❞♦ ♣

❛✶ ❂ ❝♦❡❢▲✐❞❡r ♣

r✶ ❂ r❡st♦P♦❧ ♣

♥✷ ❂ ❣r❛❞♦ q

❛✷ ❂ ❝♦❡❢▲✐❞❡r q

r✷ ❂ r❡st♦P♦❧ q

La suma verifica las siguientes propiedades:

1. El polinomio cero es el elemento neutro de la suma.

♣r♦♣❴♥❡✉tr♦❙✉♠❛P♦❧ ✿✿ P♦❧✐♥♦♠✐♦ ■♥t ✲❃ ❇♦♦❧

♣r♦♣❴♥❡✉tr♦❙✉♠❛P♦❧ ♣ ❂

s✉♠❛P♦❧ ♣♦❧❈❡r♦ ♣ ❂❂ ♣

Su comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴♥❡✉tr♦❙✉♠❛P♦❧

❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

2. La suma es conmutativa.

♣r♦♣❴❝♦♥♠✉t❛t✐✈❛❙✉♠❛ ✿✿ P♦❧✐♥♦♠✐♦ ■♥t ✲❃ P♦❧✐♥♦♠✐♦ ■♥t ✲❃ ❇♦♦❧

♣r♦♣❴❝♦♥♠✉t❛t✐✈❛❙✉♠❛ ♣ q ❂

s✉♠❛P♦❧ ♣ q ❂❂ s✉♠❛P♦❧ q ♣

Su comprobación es

226 Capítulo 10. Polinomios

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴❝♦♥♠✉t❛t✐✈❛❙✉♠❛

❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

10.2.3. Producto de polinomios

✭♠✉❧tP♦r❚❡r♠ t ♣✮ es el producto del término t por el polinomio ♣. Por ejemplo,

❡❥❚❡r♠ ❂❂ ✹✯①

❡❥P♦❧✷ ❂❂ ①❫✺ ✰ ✺✯①❫✷ ✰ ✹✯①

♠✉❧tP♦r❚❡r♠ ❡❥❚❡r♠ ❡❥P♦❧✷ ❂❂ ✹✯①❫✻ ✰ ✷✵✯①❫✸ ✰ ✶✻✯①❫✷

♠✉❧tP♦r❚❡r♠ ✿✿ ◆✉♠ t ❂❃ P♦❧✐♥♦♠✐♦ t ✲❃ P♦❧✐♥♦♠✐♦ t ✲❃ P♦❧✐♥♦♠✐♦ t

♠✉❧tP♦r❚❡r♠ t❡r♠ ♣♦❧

⑤ ❡sP♦❧❈❡r♦ ♣♦❧ ❂ ♣♦❧❈❡r♦

⑤ ♦t❤❡r✇✐s❡ ❂ ❝♦♥sP♦❧ ✭♥✰♠✮ ✭❛✯❜✮ ✭♠✉❧tP♦r❚❡r♠ t❡r♠ r✮

✇❤❡r❡ ♥ ❂ ❣r❛❞♦ t❡r♠

❛ ❂ ❝♦❡❢▲✐❞❡r t❡r♠

♠ ❂ ❣r❛❞♦ ♣♦❧

❜ ❂ ❝♦❡❢▲✐❞❡r ♣♦❧

r ❂ r❡st♦P♦❧ ♣♦❧

✭♠✉❧tP♦❧ ♣ q✮ es el producto de los polinomios ♣ y q. Por ejemplo,

❣❤❝✐❃ ❡❥P♦❧✶

✸✯①❫✹ ✰ ✲✺✯①❫✷ ✰ ✸

❣❤❝✐❃ ❡❥P♦❧✷

①❫✺ ✰ ✺✯①❫✷ ✰ ✹✯①

❣❤❝✐❃ ♠✉❧tP♦❧ ❡❥P♦❧✶ ❡❥P♦❧✷

✸✯①❫✾ ✰ ✲✺✯①❫✼ ✰ ✶✺✯①❫✻ ✰ ✶✺✯①❫✺ ✰ ✲✷✺✯①❫✹ ✰ ✲✷✵✯①❫✸ ✰ ✶✺✯①❫✷ ✰ ✶✷✯①

♠✉❧tP♦❧ ✿✿ ◆✉♠ ❛ ❂❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ P♦❧✐♥♦♠✐♦ ❛

♠✉❧tP♦❧ ♣ q

⑤ ❡sP♦❧❈❡r♦ ♣ ❂ ♣♦❧❈❡r♦

⑤ ♦t❤❡r✇✐s❡ ❂ s✉♠❛P♦❧ ✭♠✉❧tP♦r❚❡r♠ ✭t❡r♠▲✐❞❡r ♣✮ q✮

✭♠✉❧tP♦❧ ✭r❡st♦P♦❧ ♣✮ q✮

El producto de polinomios verifica las siguientes propiedades

1. El producto de polinomios es conmutativo.

10.2. Operaciones con polinomios 227

♣r♦♣❴❝♦♥♠✉t❛t✐✈❛Pr♦❞✉❝t♦ ✿✿ P♦❧✐♥♦♠✐♦ ■♥t ✲❃ P♦❧✐♥♦♠✐♦ ■♥t ✲❃ ❇♦♦❧

♣r♦♣❴❝♦♥♠✉t❛t✐✈❛Pr♦❞✉❝t♦ ♣ q ❂

♠✉❧tP♦❧ ♣ q ❂❂ ♠✉❧tP♦❧ q ♣

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴❝♦♥♠✉t❛t✐✈❛Pr♦❞✉❝t♦

❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

2. El producto es distributivo respecto de la suma.

♣r♦♣❴❞✐str✐❜✉t✐✈❛Pr♦❞✉❝t♦❙✉♠❛ ✿✿ P♦❧✐♥♦♠✐♦ ■♥t ✲❃ P♦❧✐♥♦♠✐♦ ■♥t

✲❃ P♦❧✐♥♦♠✐♦ ■♥t ✲❃ ❇♦♦❧

♣r♦♣❴❞✐str✐❜✉t✐✈❛Pr♦❞✉❝t♦❙✉♠❛ ♣ q r ❂

♠✉❧tP♦❧ ♣ ✭s✉♠❛P♦❧ q r✮ ❂❂ s✉♠❛P♦❧ ✭♠✉❧tP♦❧ ♣ q✮ ✭♠✉❧tP♦❧ ♣ r✮

La comprobación es:

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴❞✐str✐❜✉t✐✈❛Pr♦❞✉❝t♦❙✉♠❛

❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

10.2.4. El polinomio unidad

♣♦❧❯♥✐❞❛❞ es el polinomio unidad. Por ejemplo,

❣❤❝✐❃ ♣♦❧❯♥✐❞❛❞

♣♦❧❯♥✐❞❛❞✿✿ ◆✉♠ t ❂❃ P♦❧✐♥♦♠✐♦ t

♣♦❧❯♥✐❞❛❞ ❂ ❝♦♥sP♦❧ ✵ ✶ ♣♦❧❈❡r♦

El polinomio unidad es el elemento neutro del producto.

♣r♦♣❴♣♦❧❯♥✐❞❛❞ ✿✿ P♦❧✐♥♦♠✐♦ ■♥t ✲❃ ❇♦♦❧

♣r♦♣❴♣♦❧❯♥✐❞❛❞ ♣ ❂

♠✉❧tP♦❧ ♣ ♣♦❧❯♥✐❞❛❞ ❂❂ ♣

La comprobación es:

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴♣♦❧❯♥✐❞❛❞

❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

228 Capítulo 10. Polinomios

10.2.5. Resta de polinomios

✭r❡st❛ ♣ q✮ es la el polinomio obtenido restándole a ♣ el q. Por ejemplo,

❡❥P♦❧✶ ❂❂ ✸✯①❫✹ ✰ ✲✺✯①❫✷ ✰ ✸

❡❥P♦❧✷ ❂❂ ①❫✺ ✰ ✺✯①❫✷ ✰ ✹✯①

r❡st❛P♦❧ ❡❥P♦❧✶ ❡❥P♦❧✷ ❂❂ ✲✶✯①❫✺ ✰ ✸✯①❫✹ ✰ ✲✶✵✯①❫✷ ✰ ✲✹✯① ✰ ✸

r❡st❛P♦❧ ✿✿ ✭◆✉♠ ❛✮ ❂❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ P♦❧✐♥♦♠✐♦ ❛

r❡st❛P♦❧ ♣ q ❂

s✉♠❛P♦❧ ♣ ✭♠✉❧tP♦r❚❡r♠ ✭❝r❡❛❚❡r♠✐♥♦ ✵ ✭✲✶✮✮ q✮

10.2.6. Valor de un polinomio en un punto

✭✈❛❧♦r ♣ ❝✮ es el valor del polinomio ♣ al sustituir su variable por c. Por ejemplo,

❡❥P♦❧✶ ❂❂ ✸✯①❫✹ ✰ ✲✺✯①❫✷ ✰ ✸

✈❛❧♦r ❡❥P♦❧✶ ✵ ❂❂ ✸

✈❛❧♦r ❡❥P♦❧✶ ✶ ❂❂ ✶

✈❛❧♦r ❡❥P♦❧✶ ✭✲✷✮ ❂❂ ✸✶

✈❛❧♦r✿✿ ◆✉♠ ❛ ❂❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ ❛ ✲❃ ❛

✈❛❧♦r ♣ ❝

⑤ ❡sP♦❧❈❡r♦ ♣ ❂ ✵

⑤ ♦t❤❡r✇✐s❡ ❂ ❜✯❝❫♥ ✰ ✈❛❧♦r r ❝

✇❤❡r❡ ♥ ❂ ❣r❛❞♦ ♣

❜ ❂ ❝♦❡❢▲✐❞❡r ♣

r ❂ r❡st♦P♦❧ ♣

10.2.7. Verificación de raices de polinomios

✭❡s❘❛✐③ ❝ ♣✮ se verifica si ❝ es una raíz del polinomio ♣. Por ejemplo,

❡❥P♦❧✸ ❂❂ ✻✯①❫✹ ✰ ✷✯①

❡s❘❛✐③ ✶ ❡❥P♦❧✸ ❂❂ ❋❛❧s❡

❡s❘❛✐③ ✵ ❡❥P♦❧✸ ❂❂ ❚r✉❡

❡s❘❛✐③✿✿ ◆✉♠ ❛ ❂❃ ❛ ✲❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ ❇♦♦❧

❡s❘❛✐③ ❝ ♣ ❂ ✈❛❧♦r ♣ ❝ ❂❂ ✵

10.3. Ejercicios sobre polinomios 229

10.2.8. Derivación de polinomios

✭❞❡r✐✈❛❞❛ ♣✮ es la derivada del polinomio ♣. Por ejemplo,

❡❥P♦❧✷ ❂❂ ①❫✺ ✰ ✺✯①❫✷ ✰ ✹✯①

❞❡r✐✈❛❞❛ ❡❥P♦❧✷ ❂❂ ✺✯①❫✹ ✰ ✶✵✯① ✰ ✹

❞❡r✐✈❛❞❛ ✿✿ P♦❧✐♥♦♠✐♦ ■♥t ✲❃ P♦❧✐♥♦♠✐♦ ■♥t

❞❡r✐✈❛❞❛ ♣

⑤ ♥ ❂❂ ✵ ❂ ♣♦❧❈❡r♦

⑤ ♦t❤❡r✇✐s❡ ❂ ❝♦♥sP♦❧ ✭♥✲✶✮ ✭♥✯❜✮ ✭❞❡r✐✈❛❞❛ r✮

✇❤❡r❡ ♥ ❂ ❣r❛❞♦ ♣

❜ ❂ ❝♦❡❢▲✐❞❡r ♣

r ❂ r❡st♦P♦❧ ♣

La derivada de la suma es la suma de las derivadas.

♣r♦♣❴❞❡r✐✈❛❞❛ ✿✿ P♦❧✐♥♦♠✐♦ ■♥t ✲❃ P♦❧✐♥♦♠✐♦ ■♥t ✲❃ ❇♦♦❧

♣r♦♣❴❞❡r✐✈❛❞❛ ♣ q ❂

❞❡r✐✈❛❞❛ ✭s✉♠❛P♦❧ ♣ q✮ ❂❂ s✉♠❛P♦❧ ✭❞❡r✐✈❛❞❛ ♣✮ ✭❞❡r✐✈❛❞❛ q✮

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴❞❡r✐✈❛❞❛

❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

10.3. Ejercicios sobre polinomios

El objetivo de esta sección es ampliar el conjunto de operaciones sobre polinomiosdefinidas utilizando las implementaciones del TAD de polinomio. Además, en algunosejemplos de usan polinomios con coeficientes racionales. En Haskell, el número racionalxy se representa por ①✪②. El TAD de los números racionales está definido en el módulo❉❛t❛✳❘❛t✐♦.

Nota. Se usarán las siguientes librerías

✐♠♣♦rt P♦❧❖♣❡r❛❝✐♦♥❡s

✐♠♣♦rt ❚❡st✳◗✉✐❝❦❈❤❡❝❦

✐♠♣♦rt ❉❛t❛✳❘❛t✐♦

230 Capítulo 10. Polinomios

10.3.1. Polinomio a partir de la representación dispersa

Ejercicio 10.3.1.1. Definir la función

❝r❡❛P♦❧❉✐s♣❡rs❛ ✿✿ ◆✉♠ ❛ ❂❃ ❬❛❪ ✲❃ P♦❧✐♥♦♠✐♦ ❛

tal que ✭❝r❡❛P♦❧❉✐s♣❡rs❛ ①s✮ es el polinomio cuya representación dispersa es ①s. Por ejemplo,

❝r❡❛P♦❧❉✐s♣❡rs❛ ❬✼✱✵✱✵✱✹✱✵✱✸❪ ❂❂ ✼✯①❫✺ ✰ ✹✯①❫✷ ✰ ✸

Solución:

❝r❡❛P♦❧❉✐s♣❡rs❛ ✿✿ ◆✉♠ ❛ ❂❃ ❬❛❪ ✲❃ P♦❧✐♥♦♠✐♦ ❛

❝r❡❛P♦❧❉✐s♣❡rs❛ ❬❪ ❂ ♣♦❧❈❡r♦

❝r❡❛P♦❧❉✐s♣❡rs❛ ✭①✿①s✮ ❂ ❝♦♥sP♦❧ ✭❧❡♥❣t❤ ①s✮ ① ✭❝r❡❛P♦❧❉✐s♣❡rs❛ ①s✮

10.3.2. Polinomio a partir de la representación densa

Ejercicio 10.3.2.1. Definir la función

❝r❡❛P♦❧❉❡♥s❛ ✿✿ ◆✉♠ ❛ ❂❃ ❬✭■♥t✱❛✮❪ ✲❃ P♦❧✐♥♦♠✐♦ ❛

tal que ✭❝r❡❛P♦❧❉❡♥s❛ ①s✮ es el polinomio cuya representación densa es ①s. Por ejemplo,

❝r❡❛P♦❧❉❡♥s❛ ❬✭✺✱✼✮✱✭✹✱✷✮✱✭✸✱✵✮❪ ❂❂ ✼✯①❫✺ ✰ ✷✯①❫✹

Solución:

❝r❡❛P♦❧❉❡♥s❛ ✿✿ ◆✉♠ ❛ ❂❃ ❬✭■♥t✱❛✮❪ ✲❃ P♦❧✐♥♦♠✐♦ ❛

❝r❡❛P♦❧❉❡♥s❛ ❬❪ ❂ ♣♦❧❈❡r♦

❝r❡❛P♦❧❉❡♥s❛ ✭✭♥✱❛✮✿♣s✮ ❂ ❝♦♥sP♦❧ ♥ ❛ ✭❝r❡❛P♦❧❉❡♥s❛ ♣s✮

Nota. En el resto de la sucesión se usará en los ejemplos los los polinomios que se defi-nen a continuación.

♣♦❧✶✱ ♣♦❧✷✱ ♣♦❧✸ ✿✿ ◆✉♠ ❛ ❂❃ P♦❧✐♥♦♠✐♦ ❛

♣♦❧✶ ❂ ❝r❡❛P♦❧❉❡♥s❛ ❬✭✺✱✶✮✱✭✷✱✺✮✱✭✶✱✹✮❪

♣♦❧✷ ❂ ❝r❡❛P♦❧❉✐s♣❡rs❛ ❬✷✱✸❪

♣♦❧✸ ❂ ❝r❡❛P♦❧❉❡♥s❛ ❬✭✼✱✷✮✱✭✹✱✺✮✱✭✷✱✺✮❪

♣♦❧✹✱ ♣♦❧✺✱ ♣♦❧✻ ✿✿ P♦❧✐♥♦♠✐♦ ❘❛t✐♦♥❛❧

♣♦❧✹ ❂ ❝r❡❛P♦❧❉❡♥s❛ ❬✭✹✱✸✮✱✭✷✱✺✮✱✭✵✱✸✮❪

♣♦❧✺ ❂ ❝r❡❛P♦❧❉❡♥s❛ ❬✭✷✱✻✮✱✭✶✱✷✮❪

♣♦❧✻ ❂ ❝r❡❛P♦❧❉❡♥s❛ ❬✭✷✱✽✮✱✭✶✱✶✹✮✱✭✵✱✸✮❪

10.3. Ejercicios sobre polinomios 231

10.3.3. Representación densa de un polinomio

Ejercicio 10.3.3.1. Definir la función

❞❡♥s❛ ✿✿ ◆✉♠ ❛ ❂❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ ❬✭■♥t✱❛✮❪

tal que ✭❞❡♥s❛ ♣✮ es la representación densa del polinomio ♣. Por ejemplo,

♣♦❧✶ ❂❂ ①❫✺ ✰ ✺✯①❫✷ ✰ ✹✯①

❞❡♥s❛ ♣♦❧✶ ❂❂ ❬✭✺✱✶✮✱✭✷✱✺✮✱✭✶✱✹✮❪

Solución:

❞❡♥s❛ ✿✿ ◆✉♠ ❛ ❂❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ ❬✭■♥t✱❛✮❪

❞❡♥s❛ ♣ ⑤ ❡sP♦❧❈❡r♦ ♣ ❂ ❬❪

⑤ ♦t❤❡r✇✐s❡ ❂ ✭❣r❛❞♦ ♣✱ ❝♦❡❢▲✐❞❡r ♣✮ ✿ ❞❡♥s❛ ✭r❡st♦P♦❧ ♣✮

10.3.4. Transformación de la representación densa a dispersa

Ejercicio 10.3.4.1. Definir la función

❞❡♥s❛❆❞✐s♣❡rs❛ ✿✿ ◆✉♠ ❛ ❂❃ ❬✭■♥t✱❛✮❪ ✲❃ ❬❛❪

tal que ✭❞❡♥s❛❆❞✐s♣❡rs❛ ♣s✮ es la representación dispersa del polinomio cuya representación

densa es ♣s. Por ejemplo,

❞❡♥s❛❆❞✐s♣❡rs❛ ❬✭✺✱✶✮✱✭✷✱✺✮✱✭✶✱✹✮❪ ❂❂ ❬✶✱✵✱✵✱✺✱✹✱✵❪

Solución:

❞❡♥s❛❆❞✐s♣❡rs❛ ✿✿ ◆✉♠ ❛ ❂❃ ❬✭■♥t✱❛✮❪ ✲❃ ❬❛❪

❞❡♥s❛❆❞✐s♣❡rs❛ ❬❪ ❂ ❬❪

❞❡♥s❛❆❞✐s♣❡rs❛ ❬✭♥✱❛✮❪ ❂ ❛ ✿ r❡♣❧✐❝❛t❡ ♥ ✵

❞❡♥s❛❆❞✐s♣❡rs❛ ✭✭♥✱❛✮✿✭♠✱❜✮✿♣s✮ ❂

❛ ✿ ✭r❡♣❧✐❝❛t❡ ✭♥✲♠✲✶✮ ✵✮ ✰✰ ❞❡♥s❛❆❞✐s♣❡rs❛ ✭✭♠✱❜✮✿♣s✮

10.3.5. Representación dispersa de un polinomio

Ejercicio 10.3.5.1. Definir la función

❞✐s♣❡rs❛ ✿✿ ◆✉♠ ❛ ❂❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ ❬❛❪

tal que ✭❞✐s♣❡rs❛ ♣✮ es la representación dispersa del polinomio ♣. Por ejemplo,

♣♦❧✶ ❂❂ ①❫✺ ✰ ✺✯①❫✷ ✰ ✹✯①

❞✐s♣❡rs❛ ♣♦❧✶ ❂❂ ❬✶✱✵✱✵✱✺✱✹✱✵❪

Solución:

❞✐s♣❡rs❛ ✿✿ ◆✉♠ ❛ ❂❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ ❬❛❪

❞✐s♣❡rs❛ ❂ ❞❡♥s❛❆❞✐s♣❡rs❛ ✳ ❞❡♥s❛

232 Capítulo 10. Polinomios

10.3.6. Coeficiente del término de grado k

Ejercicio 10.3.6.1. Definir la función

❝♦❡❢✐❝✐❡♥t❡ ✿✿ ◆✉♠ ❛ ❂❃ ■♥t ✲❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ ❛

tal que ✭❝♦❡❢✐❝✐❡♥t❡ ❦ ♣✮ es el coeficiente del término de grado ❦ del polinomio ♣. Por ejemplo,

♣♦❧✶ ❂❂ ①❫✺ ✰ ✺✯①❫✷ ✰ ✹✯①

❝♦❡❢✐❝✐❡♥t❡ ✷ ♣♦❧✶ ❂❂ ✺

❝♦❡❢✐❝✐❡♥t❡ ✸ ♣♦❧✶ ❂❂ ✵

Solución:

❝♦❡❢✐❝✐❡♥t❡ ✿✿ ◆✉♠ ❛ ❂❃ ■♥t ✲❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ ❛

❝♦❡❢✐❝✐❡♥t❡ ❦ ♣ ⑤ ❦ ❂❂ ♥ ❂ ❝♦❡❢▲✐❞❡r ♣

⑤ ❦ ❃ ❣r❛❞♦ ✭r❡st♦P♦❧ ♣✮ ❂ ✵

⑤ ♦t❤❡r✇✐s❡ ❂ ❝♦❡❢✐❝✐❡♥t❡ ❦ ✭r❡st♦P♦❧ ♣✮

✇❤❡r❡ ♥ ❂ ❣r❛❞♦ ♣

Otra definición equivalente es

❝♦❡❢✐❝✐❡♥t❡✬ ✿✿ ◆✉♠ ❛ ❂❃ ■♥t ✲❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ ❛

❝♦❡❢✐❝✐❡♥t❡✬ ❦ ♣ ❂ ❜✉s❝❛ ❦ ✭❞❡♥s❛ ♣✮

✇❤❡r❡ ❜✉s❝❛ ❦ ♣s ❂ ❤❡❛❞ ✭❬❛ ⑤ ✭♥✱❛✮ ❁✲ ♣s✱ ♥ ❂❂ ❦❪ ✰✰ ❬✵❪✮

10.3.7. Lista de los coeficientes de un polinomio

Ejercicio 10.3.7.1. Definir la función

❝♦❡❢✐❝✐❡♥t❡s ✿✿ ◆✉♠ ❛ ❂❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ ❬❛❪

tal que ✭❝♦❡❢✐❝✐❡♥t❡s ♣✮ es la lista de los coeficientes del polinomio ♣. Por ejemplo,

♣♦❧✶ ❂❂ ①❫✺ ✰ ✺✯①❫✷ ✰ ✹✯①

❝♦❡❢✐❝✐❡♥t❡s ♣♦❧✶ ❂❂ ❬✶✱✵✱✵✱✺✱✹✱✵❪

Solución:

❝♦❡❢✐❝✐❡♥t❡s ✿✿ ◆✉♠ ❛ ❂❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ ❬❛❪

❝♦❡❢✐❝✐❡♥t❡s ♣ ❂ ❬❝♦❡❢✐❝✐❡♥t❡ ❦ ♣ ⑤ ❦ ❁✲❬♥✱♥✲✶✳✳✵❪❪

✇❤❡r❡ ♥ ❂ ❣r❛❞♦ ♣

Una definición equivalente es

10.3. Ejercicios sobre polinomios 233

❝♦❡❢✐❝✐❡♥t❡s✬ ✿✿ ◆✉♠ ❛ ❂❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ ❬❛❪

❝♦❡❢✐❝✐❡♥t❡s✬ ❂ ❞✐s♣❡rs❛

Ejercicio 10.3.7.2. Comprobar con QuickCheck que, dado un polinomio ♣, el polinomio obtenido

mediante ❝r❡❛P♦❧❉✐s♣❡rs❛ a partir de la lista de coeficientes de ♣ coincide con ♣.

Solución: La propiedad es

♣r♦♣❴❝♦❡❢ ✿✿ P♦❧✐♥♦♠✐♦ ■♥t ✲❃ ❇♦♦❧

♣r♦♣❴❝♦❡❢ ♣ ❂

❝r❡❛P♦❧❉✐s♣❡rs❛ ✭❝♦❡❢✐❝✐❡♥t❡s ♣✮ ❂❂ ♣

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴❝♦❡❢

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

10.3.8. Potencia de un polinomio

Ejercicio 10.3.8.1. Definir la función

♣♦t❡♥❝✐❛ ✿✿ ◆✉♠ ❛ ❂❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ ■♥t ✲❃ P♦❧✐♥♦♠✐♦ ❛

tal que ✭♣♦t❡♥❝✐❛ ♣ ♥✮ es la potencia ♥–ésima del polinomio ♣. Por ejemplo,

♣♦❧✷ ❂❂ ✷✯① ✰ ✸

♣♦t❡♥❝✐❛ ♣♦❧✷ ✷ ❂❂ ✹✯①❫✷ ✰ ✶✷✯① ✰ ✾

♣♦t❡♥❝✐❛ ♣♦❧✷ ✸ ❂❂ ✽✯①❫✸ ✰ ✸✻✯①❫✷ ✰ ✺✹✯① ✰ ✷✼

Solución:

♣♦t❡♥❝✐❛ ✿✿ ◆✉♠ ❛ ❂❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ ■♥t ✲❃ P♦❧✐♥♦♠✐♦ ❛

♣♦t❡♥❝✐❛ ♣ ✵ ❂ ♣♦❧❯♥✐❞❛❞

♣♦t❡♥❝✐❛ ♣ ♥ ❂ ♠✉❧tP♦❧ ♣ ✭♣♦t❡♥❝✐❛ ♣ ✭♥✲✶✮✮

Ejercicio 10.3.8.2. Mejorar la definición de potencia definiendo la función

♣♦t❡♥❝✐❛▼ ✿✿ ◆✉♠ ❛ ❂❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ ■♥t ✲❃ P♦❧✐♥♦♠✐♦ ❛

tal que ✭♣♦t❡♥❝✐❛▼ ♣ ♥✮ es la potencia ♥–ésima del polinomio ♣, utilizando las siguientes pro-

piedades:

Si n es par, entonces xn = (x2)n2

234 Capítulo 10. Polinomios

Si n es impar, entonces xn = x × (x2)n−1

2 .

Por ejemplo,

♣♦❧✷ ❂❂ ✷✯① ✰ ✸

♣♦t❡♥❝✐❛▼ ♣♦❧✷ ✷ ❂❂ ✹✯①❫✷ ✰ ✶✷✯① ✰ ✾

♣♦t❡♥❝✐❛▼ ♣♦❧✷ ✸ ❂❂ ✽✯①❫✸ ✰ ✸✻✯①❫✷ ✰ ✺✹✯① ✰ ✷✼

Solución:

♣♦t❡♥❝✐❛▼ ✿✿ ◆✉♠ ❛ ❂❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ ■♥t ✲❃ P♦❧✐♥♦♠✐♦ ❛

♣♦t❡♥❝✐❛▼ ♣ ✵ ❂ ♣♦❧❯♥✐❞❛❞

♣♦t❡♥❝✐❛▼ ♣ ♥

⑤ ❡✈❡♥ ♥ ❂ ♣♦t❡♥❝✐❛▼ ✭♠✉❧tP♦❧ ♣ ♣✮ ✭♥ ❵❞✐✈❵ ✷✮

⑤ ♦t❤❡r✇✐s❡ ❂ ♠✉❧tP♦❧ ♣ ✭♣♦t❡♥❝✐❛▼ ✭♠✉❧tP♦❧ ♣ ♣✮ ✭✭♥✲✶✮ ❵❞✐✈❵ ✷✮✮

10.3.9. Integración de polinomios

Ejercicio 10.3.9.1. Definir la función

✐♥t❡❣r❛❧ ✿✿ ❋r❛❝t✐♦♥❛❧ ❛ ❂❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ P♦❧✐♥♦♠✐♦ ❛

tal que (✐♥t❡❣r❛❧ p) es la integral del polinomio ♣ cuyos coefientes son números racionales. Por

ejemplo,

❣❤❝✐❃ ♣♦❧✸

✷✯①❫✼ ✰ ✺✯①❫✹ ✰ ✺✯①❫✷

❣❤❝✐❃ ✐♥t❡❣r❛❧ ♣♦❧✸

✵✳✷✺✯①❫✽ ✰ ①❫✺ ✰ ✶✳✻✻✻✻✻✻✻✻✻✻✻✻✻✻✻✼✯①❫✸

❣❤❝✐❃ ✐♥t❡❣r❛❧ ♣♦❧✸ ✿✿ P♦❧✐♥♦♠✐♦ ❘❛t✐♦♥❛❧

✶ ✪ ✹✯①❫✽ ✰ ①❫✺ ✰ ✺ ✪ ✸✯①❫✸

Solución:

✐♥t❡❣r❛❧ ✿✿ ❋r❛❝t✐♦♥❛❧ ❛ ❂❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ P♦❧✐♥♦♠✐♦ ❛

✐♥t❡❣r❛❧ ♣

⑤ ❡sP♦❧❈❡r♦ ♣ ❂ ♣♦❧❈❡r♦

⑤ ♦t❤❡r✇✐s❡ ❂ ❝♦♥sP♦❧ ✭♥✰✶✮ ✭❜ ✴ ✭❢r♦♠■♥t❡❣r❛❧ ✭♥✰✶✮✮✮ ✭✐♥t❡❣r❛❧ r✮

✇❤❡r❡ ♥ ❂ ❣r❛❞♦ ♣

❜ ❂ ❝♦❡❢▲✐❞❡r ♣

r ❂ r❡st♦P♦❧ ♣

Ejercicio 10.3.9.2. Definir la función

10.3. Ejercicios sobre polinomios 235

✐♥t❡❣r❛❧❉❡❢ ✿✿ ❋r❛❝t✐♦♥❛❧ t ❂❃ P♦❧✐♥♦♠✐♦ t ✲❃ t ✲❃ t ✲❃ t

tal que ✭✐♥t❡❣r❛❧❉❡❢ ♣ ❛ ❜✮ es la integral definida del polinomio ♣, cuyos coefientes son nú-

meros racionales, entre ❛ y ❜. Por ejemplo,

❣❤❝✐❃ ✐♥t❡❣r❛❧❉❡❢ ♣♦❧✸ ✵ ✶

✷✳✾✶✻✻✻✻✻✻✻✻✻✻✻✻✼

❣❤❝✐❃ ✐♥t❡❣r❛❧❉❡❢ ♣♦❧✸ ✵ ✶ ✿✿ ❘❛t✐♦♥❛❧

✸✺ ✪ ✶✷

Solución:

✐♥t❡❣r❛❧❉❡❢ ✿✿ ❋r❛❝t✐♦♥❛❧ t ❂❃ P♦❧✐♥♦♠✐♦ t ✲❃ t ✲❃ t ✲❃ t

✐♥t❡❣r❛❧❉❡❢ ♣ ❛ ❜ ❂ ✭✈❛❧♦r q ❜✮ ✲ ✭✈❛❧♦r q ❛✮

✇❤❡r❡ q ❂ ✐♥t❡❣r❛❧ ♣

10.3.10. Multiplicación de un polinomio por un número

Ejercicio 10.3.10.1. Definir la función

♠✉❧t❊s❝❛❧❛r ✿✿ ◆✉♠ ❛ ❂❃ ❛ ✲❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ P♦❧✐♥♦♠✐♦ ❛

tal que ✭♠✉❧t❊s❝❛❧❛r ❝ ♣✮ es el polinomio obtenido multiplicando el número ❝ por el polino-

mio ♣. Por ejemplo,

♣♦❧✷ ❂❂ ✷✯① ✰ ✸

♠✉❧t❊s❝❛❧❛r ✹ ♣♦❧✷ ❂❂ ✽✯① ✰ ✶✷

♠✉❧t❊s❝❛❧❛r ✭✶✪✹✮ ♣♦❧✷ ❂❂ ✶ ✪ ✷✯① ✰ ✸ ✪ ✹

Solución:

♠✉❧t❊s❝❛❧❛r ✿✿ ◆✉♠ ❛ ❂❃ ❛ ✲❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ P♦❧✐♥♦♠✐♦ ❛

♠✉❧t❊s❝❛❧❛r ❝ ♣

⑤ ❡sP♦❧❈❡r♦ ♣ ❂ ♣♦❧❈❡r♦

⑤ ♦t❤❡r✇✐s❡ ❂ ❝♦♥sP♦❧ ♥ ✭❝✯❜✮ ✭♠✉❧t❊s❝❛❧❛r ❝ r✮

✇❤❡r❡ ♥ ❂ ❣r❛❞♦ ♣

❜ ❂ ❝♦❡❢▲✐❞❡r ♣

r ❂ r❡st♦P♦❧ ♣

10.3.11. División de polinomios

Ejercicio 10.3.11.1. Definir la función

❝♦❝✐❡♥t❡✿✿ ❋r❛❝t✐♦♥❛❧ ❛ ❂❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ P♦❧✐♥♦♠✐♦ ❛

236 Capítulo 10. Polinomios

tal que ✭❝♦❝✐❡♥t❡ ♣ q✮ es el cociente de la división de ♣ entre q. Por ejemplo,

♣♦❧✹ ❂❂ ✸ ✪ ✶✯①❫✹ ✰ ✺ ✪ ✶✯①❫✷ ✰ ✸ ✪ ✶

♣♦❧✺ ❂❂ ✻ ✪ ✶✯①❫✷ ✰ ✷ ✪ ✶✯①

❝♦❝✐❡♥t❡ ♣♦❧✹ ♣♦❧✺ ❂❂ ✶ ✪ ✷✯①❫✷ ✰ ✭✲✶✮ ✪ ✻✯① ✰ ✽ ✪ ✾

Solución:

❝♦❝✐❡♥t❡ ✿✿ ❋r❛❝t✐♦♥❛❧ ❛ ❂❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ P♦❧✐♥♦♠✐♦ ❛

❝♦❝✐❡♥t❡ ♣ q

⑤ ♥✷ ❂❂ ✵ ❂ ♠✉❧t❊s❝❛❧❛r ✭✶✴❛✷✮ ♣

⑤ ♥✶ ❁ ♥✷ ❂ ♣♦❧❈❡r♦

⑤ ♦t❤❡r✇✐s❡ ❂ ❝♦♥sP♦❧ ♥✬ ❛✬ ✭❝♦❝✐❡♥t❡ ♣✬ q✮

✇❤❡r❡ ♥✶ ❂ ❣r❛❞♦ ♣

❛✶ ❂ ❝♦❡❢▲✐❞❡r ♣

♥✷ ❂ ❣r❛❞♦ q

❛✷ ❂ ❝♦❡❢▲✐❞❡r q

♥✬ ❂ ♥✶✲♥✷

❛✬ ❂ ❛✶✴❛✷

♣✬ ❂ r❡st❛P♦❧ ♣ ✭♠✉❧tP♦r❚❡r♠ ✭❝r❡❛❚❡r♠✐♥♦ ♥✬ ❛✬✮ q✮

Ejercicio 10.3.11.2. Definir la función

r❡st♦ ✿✿ ❋r❛❝t✐♦♥❛❧ ❛ ❂❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ P♦❧✐♥♦♠✐♦ ❛

tal que ✭r❡st♦ ♣ q✮ es el resto de la división de ♣ entre q. Por ejemplo,

♣♦❧✹ ❂❂ ✸ ✪ ✶✯①❫✹ ✰ ✺ ✪ ✶✯①❫✷ ✰ ✸ ✪ ✶

♣♦❧✺ ❂❂ ✻ ✪ ✶✯①❫✷ ✰ ✷ ✪ ✶✯①

r❡st♦ ♣♦❧✹ ♣♦❧✺ ❂❂ ✭✲✶✻✮ ✪ ✾✯① ✰ ✸ ✪ ✶

Solución:

r❡st♦ ✿✿ ❋r❛❝t✐♦♥❛❧ ❛ ❂❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ P♦❧✐♥♦♠✐♦ ❛

r❡st♦ ♣ q ❂ r❡st❛P♦❧ ♣ ✭♠✉❧tP♦❧ ✭❝♦❝✐❡♥t❡ ♣ q✮ q✮

10.3.12. Divisibilidad de polinomios

Ejercicio 10.3.12.1. Definir la función

❞✐✈✐s✐❜❧❡P♦❧ ✿✿ ❋r❛❝t✐♦♥❛❧ ❛ ❂❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ ❇♦♦❧

tal que ✭❞✐✈✐s✐❜❧❡P♦❧ ♣ q✮ se verifica si el polinomio ♣ es divisible por el polinomio q. Por

ejemplo,

10.3. Ejercicios sobre polinomios 237

♣♦❧✻ ❂❂ ✽ ✪ ✶✯①❫✷ ✰ ✶✹ ✪ ✶✯① ✰ ✸ ✪ ✶

♣♦❧✷ ❂❂ ✷✯① ✰ ✸

♣♦❧✺ ❂❂ ✻ ✪ ✶✯①❫✷ ✰ ✷ ✪ ✶✯①

❞✐✈✐s✐❜❧❡P♦❧ ♣♦❧✻ ♣♦❧✷ ❂❂ ❚r✉❡

❞✐✈✐s✐❜❧❡P♦❧ ♣♦❧✻ ♣♦❧✺ ❂❂ ❋❛❧s❡

Solución:

❞✐✈✐s✐❜❧❡P♦❧ ✿✿ ❋r❛❝t✐♦♥❛❧ ❛ ❂❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ ❇♦♦❧

❞✐✈✐s✐❜❧❡P♦❧ ♣ q ❂ ❡sP♦❧❈❡r♦ ✭r❡st♦ ♣ q✮

Ejercicio 10.3.12.2. El método de Horner para calcular el valor de un polinomio se basa en

representarlo de una forma forma alernativa. Por ejemplo, para calcular el valor de ax5 + b ∗x4 + c ∗ x3 + d ∗ x2 + e ∗ x + f se representa como

✭✭✭✭❛ ✯ ① ✰ ❜✮ ✯ ① ✰ ❝✮ ✯ ① ✰ ❞✮ ✯ ① ✰ ❡✮ ✯ ① ✰ ❢

y se evalúa de dentro hacia afuera.

Definir la función

❤♦r♥❡r ✿✿ ◆✉♠ ❛ ❂❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ ❛ ✲❃ ❛

tal que ✭❤♦r♥❡r ♣ ①✮ es el valor del polinomio ♣ al sustituir su variable por el número ①. Por

ejemplo,

❤♦r♥❡r ♣♦❧✶ ✵ ❂❂ ✵

❤♦r♥❡r ♣♦❧✶ ✶ ❂❂ ✶✵

❤♦r♥❡r ♣♦❧✶ ✶✳✺ ❂❂ ✷✹✳✽✹✸✼✺

❤♦r♥❡r ♣♦❧✶ ✭✸✪✷✮ ❂❂ ✼✾✺ ✪ ✸✷

Solución:

❤♦r♥❡r ✿✿ ◆✉♠ ❛ ❂❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ ❛ ✲❃ ❛

❤♦r♥❡r ♣ ① ❂ ❤♦r♥❡r❆✉① ✭❝♦❡❢✐❝✐❡♥t❡s ♣✮ ✵

✇❤❡r❡ ❤♦r♥❡r❆✉① ❬❪ ✈ ❂ ✈

❤♦r♥❡r❆✉① ✭❛✿❛s✮ ✈ ❂ ❤♦r♥❡r❆✉① ❛s ✭❛✰✈✯①✮

Una defininición equivalente por plegado es

❤♦r♥❡r✬ ✿✿ ◆✉♠ ❛ ❂❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ ❛ ✲❃ ❛

❤♦r♥❡r✬ ♣ ① ❂ ✭❢♦❧❞r ✭❭❛ ❜ ✲❃ ❛ ✰ ❜✯①✮ ✵✮ ✭❝♦❡❢✐❝✐❡♥t❡s ♣✮

238 Capítulo 10. Polinomios

10.4. La regla de Ruffini

El objetivo de esta sección es implementar la regla de Ruffini y sus aplicaciones uti-lizando las implementaciones del TAD de polinomio.

Además de los ejemplos de polinomios (❡❥P♦❧✶, ❡❥P♦❧✷ y ❡❥P♦❧✸) que se encuentranen P♦❧❖♣❡r❛❝✐♦♥❡s, usaremos el siguiente ejemplo

❡❥P♦❧✹ ✿✿ P♦❧✐♥♦♠✐♦ ■♥t

❡❥P♦❧✹ ❂ ❝♦♥sP♦❧ ✸ ✶

✭❝♦♥sP♦❧ ✷ ✷

✭❝♦♥sP♦❧ ✶ ✭✲✶✮

✭❝♦♥sP♦❧ ✵ ✭✲✷✮ ♣♦❧❈❡r♦✮✮✮

10.4.1. Divisores de un número

Ejercicio 10.4.1.1. Definir la función

❞✐✈✐s♦r❡s ✿✿ ■♥t ✲❃ ❬■♥t❪

tal que ✭❞✐✈✐s♦r❡s ♥✮ es la lista de todos los divisores enteros de ♥. Por ejemplo,

❞✐✈✐s♦r❡s ✹ ❂❂ ❬✶✱✲✶✱✷✱✲✷✱✹✱✲✹❪

❞✐✈✐s♦r❡s ✭✲✻✮ ❂❂ ❬✶✱✲✶✱✷✱✲✷✱✸✱✲✸✱✻✱✲✻❪

Solución:

❞✐✈✐s♦r❡s ✿✿ ■♥t ✲❃ ❬■♥t❪

❞✐✈✐s♦r❡s ♥ ❂ ❝♦♥❝❛t ❬❬①✱✲①❪ ⑤ ① ❁✲ ❬✶✳✳❛❜s ♥❪✱ r❡♠ ♥ ① ❂❂ ✵❪

10.4.2. Término independiente de un polinomio

Ejercicio 10.4.2.1. Definir la función

t❡r♠✐♥♦■♥❞❡♣ ✿✿ ◆✉♠ ❛ ❂❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ ❛

tal que ✭t❡r♠✐♥♦■♥❞❡♣ ♣✮ es el término independiente del polinomio ♣. Por ejemplo,

t❡r♠✐♥♦■♥❞❡♣ ❡❥P♦❧✶ ❂❂ ✸

t❡r♠✐♥♦■♥❞❡♣ ❡❥P♦❧✷ ❂❂ ✵

t❡r♠✐♥♦■♥❞❡♣ ❡❥P♦❧✹ ❂❂ ✲✷

Solución:

t❡r♠✐♥♦■♥❞❡♣ ✿✿ ◆✉♠ ❛ ❂❃ P♦❧✐♥♦♠✐♦ ❛ ✲❃ ❛

t❡r♠✐♥♦■♥❞❡♣ ♣ ❂ ❝♦❡❢✐❝✐❡♥t❡ ✵ ♣

10.4. La regla de Ruffini 239

10.4.3. Paso de la regla de Ruffini

Ejercicio 10.4.3.1. Definir una función

♣❘✉❢❢✐♥✐✿✿ ■♥t ✲❃ ❬■♥t❪ ✲❃ ❬■♥t❪

tal que ✭♣❘✉❢❢✐♥✐ r ❝s✮ es la lista que resulta de aplicar un paso del regla de Ruffini al número

entero r y a la lista de coeficientes ❝s. Por ejemplo,

♣❘✉❢❢✐♥✐ ✷ ❬✶✱✷✱✲✶✱✲✷❪ ❂❂ ❬✶✱✹✱✼✱✶✷❪

♣❘✉❢❢✐♥✐ ✶ ❬✶✱✷✱✲✶✱✲✷❪ ❂❂ ❬✶✱✸✱✷✱✵❪

ya que

⑤ ✶ ✷ ✲✶ ✲✷ ⑤ ✶ ✷ ✲✶ ✲✷

✷ ⑤ ✷ ✽ ✶✹ ✶ ⑤ ✶ ✸ ✷

✲✲✰✲✲✲✲✲✲✲✲✲✲✲✲✲✲ ✲✲✰✲✲✲✲✲✲✲✲✲✲✲✲✲

⑤ ✶ ✹ ✼ ✶✷ ⑤ ✶ ✸ ✷ ✵

Solución:

♣❘✉❢❢✐♥✐ ✿✿ ■♥t ✲❃ ❬■♥t❪ ✲❃ ❬■♥t❪

♣❘✉❢❢✐♥✐ r ♣❅✭❝✿❝s✮ ❂

❝ ✿ ❬①✰r✯② ⑤ ✭①✱②✮ ❁✲ ③✐♣ ❝s ✭♣❘✉❢❢✐♥✐ r ♣✮❪

Otra forma de definirla es

♣❘✉❢❢✐♥✐✬ ✿✿ ■♥t ✲❃ ❬■♥t❪ ✲❃ ❬■♥t❪

♣❘✉❢❢✐♥✐✬ r ❂ s❝❛♥❧✶ ✭❭s ① ✲❃ s ✯ r ✰ ①✮

10.4.4. Cociente mediante la regla de Ruffini

Ejercicio 10.4.4.1. Definir la función

❝♦❝✐❡♥t❡❘✉❢❢✐♥✐ ✿✿ ■♥t ✲❃ P♦❧✐♥♦♠✐♦ ■♥t ✲❃ P♦❧✐♥♦♠✐♦ ■♥t

tal que ✭❝♦❝✐❡♥t❡❘✉❢❢✐♥✐ r ♣✮ es el cociente de dividir el polinomio ♣ por el polinomio ①✲r.

Por ejemplo,

❝♦❝✐❡♥t❡❘✉❢❢✐♥✐ ✷ ❡❥P♦❧✹ ❂❂ ①❫✷ ✰ ✹✯① ✰ ✼

❝♦❝✐❡♥t❡❘✉❢❢✐♥✐ ✭✲✷✮ ❡❥P♦❧✹ ❂❂ ①❫✷ ✰ ✲✶

❝♦❝✐❡♥t❡❘✉❢❢✐♥✐ ✸ ❡❥P♦❧✹ ❂❂ ①❫✷ ✰ ✺✯① ✰ ✶✹

Solución:

❝♦❝✐❡♥t❡❘✉❢❢✐♥✐ ✿✿ ■♥t ✲❃ P♦❧✐♥♦♠✐♦ ■♥t ✲❃ P♦❧✐♥♦♠✐♦ ■♥t

❝♦❝✐❡♥t❡❘✉❢❢✐♥✐ r ♣ ❂ ❝r❡❛P♦❧❉✐s♣❡rs❛ ✭✐♥✐t ✭♣❘✉❢❢✐♥✐ r ✭❝♦❡❢✐❝✐❡♥t❡s ♣✮✮✮

240 Capítulo 10. Polinomios

10.4.5. Resto mediante la regla de Ruffini

Ejercicio 10.4.5.1. Definir la función

r❡st♦❘✉❢❢✐♥✐✿✿ ■♥t ✲❃ P♦❧✐♥♦♠✐♦ ■♥t ✲❃ ■♥t

tal que ✭r❡st♦❘✉❢❢✐♥✐ r ♣✮ es el resto de dividir el polinomio ♣ por el polinomio ①✲r. Por

ejemplo,

r❡st♦❘✉❢❢✐♥✐ ✷ ❡❥P♦❧✹ ❂❂ ✶✷

r❡st♦❘✉❢❢✐♥✐ ✭✲✷✮ ❡❥P♦❧✹ ❂❂ ✵

r❡st♦❘✉❢❢✐♥✐ ✸ ❡❥P♦❧✹ ❂❂ ✹✵

Solución:

r❡st♦❘✉❢❢✐♥✐ ✿✿ ■♥t ✲❃ P♦❧✐♥♦♠✐♦ ■♥t ✲❃ ■♥t

r❡st♦❘✉❢❢✐♥✐ r ♣ ❂ ❧❛st ✭♣❘✉❢❢✐♥✐ r ✭❝♦❡❢✐❝✐❡♥t❡s ♣✮✮

Ejercicio 10.4.5.2. Comprobar con QuickCheck que, dado un polinomio ♣ y un número entero

r, las funciones anteriores verifican la propiedad de la división euclídea.

Solución: La propiedad es

♣r♦♣❴❞✐✈✐❊✉❝❧✐❞❡❛ ✿✿ ■♥t ✲❃ P♦❧✐♥♦♠✐♦ ■♥t ✲❃ ❇♦♦❧

♣r♦♣❴❞✐✈✐❊✉❝❧✐❞❡❛ r ♣ ❂

♣ ❂❂ s✉♠❛P♦❧ ✭♠✉❧tP♦❧ ❝♦❝ ❞✐✈✮ r❡s

✇❤❡r❡ ❝♦❝ ❂ ❝♦❝✐❡♥t❡❘✉❢❢✐♥✐ r ♣

❞✐✈ ❂ ❝r❡❛P♦❧❉✐s♣❡rs❛ ❬✶✱✲r❪

r❡s ❂ ❝r❡❛❚❡r♠✐♥♦ ✵ ✭r❡st♦❘✉❢❢✐♥✐ r ♣✮

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴❞✐✈✐❊✉❝❧✐❞❡❛

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

10.4.6. Raíces mediante la regla de Ruffini

Ejercicio 10.4.6.1. Definir la función

❡s❘❛✐③❘✉❢❢✐♥✐✿✿ ■♥t ✲❃ P♦❧✐♥♦♠✐♦ ■♥t ✲❃ ❇♦♦❧

tal que ✭❡s❘❛✐③❘✉❢❢✐♥✐ r ♣✮ se verifica si r es una raiz de ♣, usando para ello el regla de

Ruffini. Por ejemplo,

❡s❘❛✐③❘✉❢❢✐♥✐ ✵ ❡❥P♦❧✸ ❂❂ ❚r✉❡

❡s❘❛✐③❘✉❢❢✐♥✐ ✶ ❡❥P♦❧✸ ❂❂ ❋❛❧s❡

10.4. La regla de Ruffini 241

Solución:

❡s❘❛✐③❘✉❢❢✐♥✐ ✿✿ ■♥t ✲❃ P♦❧✐♥♦♠✐♦ ■♥t ✲❃ ❇♦♦❧

❡s❘❛✐③❘✉❢❢✐♥✐ r ♣ ❂ r❡st♦❘✉❢❢✐♥✐ r ♣ ❂❂ ✵

Ejercicio 10.4.6.2. Definir la función

r❛✐❝❡s❘✉❢❢✐♥✐ ✿✿ P♦❧✐♥♦♠✐♦ ■♥t ✲❃ ❬■♥t❪

tal que ✭r❛✐❝❡s❘✉❢❢✐♥✐ ♣✮ es la lista de las raices enteras de ♣, calculadas usando el regla de

Ruffini. Por ejemplo,

r❛✐❝❡s❘✉❢❢✐♥✐ ❡❥P♦❧✶ ❂❂ ❬❪

r❛✐❝❡s❘✉❢❢✐♥✐ ❡❥P♦❧✷ ❂❂ ❬✵✱✲✶❪

r❛✐❝❡s❘✉❢❢✐♥✐ ❡❥P♦❧✸ ❂❂ ❬✵❪

r❛✐❝❡s❘✉❢❢✐♥✐ ❡❥P♦❧✹ ❂❂ ❬✶✱✲✶✱✲✷❪

r❛✐❝❡s❘✉❢❢✐♥✐ ♣♦❧❈❡r♦ ❂❂ ❬❪

Solución:

r❛✐❝❡s❘✉❢❢✐♥✐ ✿✿ P♦❧✐♥♦♠✐♦ ■♥t ✲❃ ❬■♥t❪

r❛✐❝❡s❘✉❢❢✐♥✐ ♣

⑤ ❡sP♦❧❈❡r♦ ♣ ❂ ❬❪

⑤ ♦t❤❡r✇✐s❡ ❂ ❛✉① ✭✵ ✿ ❞✐✈✐s♦r❡s ✭t❡r♠✐♥♦■♥❞❡♣ ♣✮✮

✇❤❡r❡

❛✉① ❬❪ ❂ ❬❪

❛✉① ✭r✿rs✮

⑤ ❡s❘❛✐③❘✉❢❢✐♥✐ r ♣ ❂ r ✿ r❛✐❝❡s❘✉❢❢✐♥✐ ✭❝♦❝✐❡♥t❡❘✉❢❢✐♥✐ r ♣✮

⑤ ♦t❤❡r✇✐s❡ ❂ ❛✉① rs

10.4.7. Factorización mediante la regla de Ruffini

Ejercicio 10.4.7.1. Definir la función

❢❛❝t♦r✐③❛❝✐♦♥ ✿✿ P♦❧✐♥♦♠✐♦ ■♥t ✲❃ ❬P♦❧✐♥♦♠✐♦ ■♥t❪

tal que ✭❢❛❝t♦r✐③❛❝✐♦♥ ♣✮ es la lista de la descomposición del polinomio ♣ en factores obtenida

mediante el regla de Ruffini. Por ejemplo,

❡❥P♦❧✷ ❂❂ ①❫✺ ✰ ✺✯①❫✷ ✰ ✹✯①

❢❛❝t♦r✐③❛❝✐♦♥ ❡❥P♦❧✷ ❂❂ ❬✶✯①✱✶✯①✰✶✱①❫✸✰✲✶✯①❫✷✰✶✯①✰✹❪

❡❥P♦❧✹ ❂❂ ①❫✸ ✰ ✷✯①❫✷ ✰ ✲✶✯① ✰ ✲✷

❢❛❝t♦r✐③❛❝✐♦♥ ❡❥P♦❧✹ ❂❂ ❬✶✯① ✰ ✲✶✱✶✯① ✰ ✶✱✶✯① ✰ ✷✱✶❪

❢❛❝t♦r✐③❛❝✐♦♥ ✭❝r❡❛P♦❧❉✐s♣❡rs❛ ❬✶✱✵✱✵✱✵✱✲✶❪✮ ❂❂ ❬✶✯① ✰ ✲✶✱✶✯① ✰ ✶✱①❫✷ ✰ ✶❪

242 Capítulo 10. Polinomios

Solución:

❢❛❝t♦r✐③❛❝✐♦♥ ✿✿ P♦❧✐♥♦♠✐♦ ■♥t ✲❃ ❬P♦❧✐♥♦♠✐♦ ■♥t❪

❢❛❝t♦r✐③❛❝✐♦♥ ♣

⑤ ❡sP♦❧❈❡r♦ ♣ ❂ ❬♣❪

⑤ ♦t❤❡r✇✐s❡ ❂ ❛✉① ✭✵ ✿ ❞✐✈✐s♦r❡s ✭t❡r♠✐♥♦■♥❞❡♣ ♣✮✮

✇❤❡r❡

❛✉① ❬❪ ❂ ❬♣❪

❛✉① ✭r✿rs✮

⑤ ❡s❘❛✐③❘✉❢❢✐♥✐ r ♣ ❂

✭❝r❡❛P♦❧❉✐s♣❡rs❛ ❬✶✱✲r❪✮ ✿ ❢❛❝t♦r✐③❛❝✐♦♥ ✭❝♦❝✐❡♥t❡❘✉❢❢✐♥✐ r ♣✮

⑤ ♦t❤❡r✇✐s❡ ❂ ❛✉① rs

Capítulo 11

Vectores y matrices

Contenido11.1 Posiciones de un elemento en una matriz . . . . . . . . . . . . . . . . . 244

11.2 Tipos de los vectores y de las matrices . . . . . . . . . . . . . . . . . . . 244

11.3 Operaciones básicas con matrices . . . . . . . . . . . . . . . . . . . . . . 245

11.4 Suma de matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247

11.5 Producto de matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249

11.6 Traspuestas y simétricas . . . . . . . . . . . . . . . . . . . . . . . . . . . 250

11.7 Diagonales de una matriz . . . . . . . . . . . . . . . . . . . . . . . . . . 251

11.8 Submatrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252

11.9 Transformaciones elementales . . . . . . . . . . . . . . . . . . . . . . . 252

11.10 Triangularización de matrices . . . . . . . . . . . . . . . . . . . . . . . . 255

11.11 Algoritmo de Gauss para triangularizar matrices . . . . . . . . . . . . 257

11.12 Determinante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260

11.13 Máximo de las sumas de elementos de una matriz en líneas distintas . 261

El objetivo de este capítulo es hacer ejercicios sobre vectores y matrices con el tipode tablas de las tablas, definido en el módulo ❉❛t❛✳❆rr❛② y explicado en el tema 18 de[1].

Además, en algunos ejemplos de usan matrices con números racionales. En Has-kell, el número racional x

y se representa por ①✪②. El TAD de los números racionales estádefinido en el módulo ❉❛t❛✳❘❛t✐♦.

Nota. Se importan ambas librerías

243

244 Capítulo 11. Vectores y matrices

✐♠♣♦rt ❉❛t❛✳❆rr❛②

✐♠♣♦rt ❉❛t❛✳❘❛t✐♦

11.1. Posiciones de un elemento en una matriz

Ejercicio 11.1.1. Definir la función

♣♦s✐❝✐♦♥❡s ✿✿ ❊q ❛ ❂❃ ❛ ✲❃ ❆rr❛② ✭■♥t✱■♥t✮ ❛ ✲❃ ❬✭■♥t✱■♥t✮❪

tal que ✭♣♦s✐❝✐♦♥❡s ① ♣✮ es la lista de las posiciones de la matriz ♣ cuyo valor es ①. Por

ejemplo,

❣❤❝✐❃ ❧❡t ♣ ❂ ❧✐st❆rr❛② ✭✭✶✱✶✮✱✭✷✱✸✮✮ ❬✶✱✷✱✸✱✷✱✹✱✻❪

❣❤❝✐❃ ♣

❛rr❛② ✭✭✶✱✶✮✱✭✷✱✸✮✮ ❬✭✭✶✱✶✮✱✶✮✱✭✭✶✱✷✮✱✷✮✱✭✭✶✱✸✮✱✸✮✱

✭✭✷✱✶✮✱✷✮✱✭✭✷✱✷✮✱✹✮✱✭✭✷✱✸✮✱✻✮❪

❣❤❝✐❃ ♣♦s✐❝✐♦♥❡s ✷ ♣

❬✭✶✱✷✮✱✭✷✱✶✮❪

❣❤❝✐❃ ♣♦s✐❝✐♦♥❡s ✻ ♣

❬✭✷✱✸✮❪

❣❤❝✐❃ ♣♦s✐❝✐♦♥❡s ✼ ♣

❬❪

Solución:

♣♦s✐❝✐♦♥❡s ✿✿ ❊q ❛ ❂❃ ❛ ✲❃ ❆rr❛② ✭■♥t✱■♥t✮ ❛ ✲❃ ❬✭■♥t✱■♥t✮❪

♣♦s✐❝✐♦♥❡s ① ♣ ❂ ❬✭✐✱❥✮ ⑤ ✭✐✱❥✮ ❁✲ ✐♥❞✐❝❡s ♣✱ ♣✦✭✐✱❥✮ ❂❂ ①❪

11.2. Tipos de los vectores y de las matrices

Nota. Los vectores son tablas cuyos índices son números naturales.

t②♣❡ ❱❡❝t♦r ❛ ❂ ❆rr❛② ■♥t ❛

Las matrices son tablas cuyos índices son pares de números naturales.

t②♣❡ ▼❛tr✐③ ❛ ❂ ❆rr❛② ✭■♥t✱■♥t✮ ❛

11.3. Operaciones básicas con matrices 245

11.3. Operaciones básicas con matrices

Ejercicio 11.3.1. Definir la función

❧✐st❛❱❡❝t♦r ✿✿ ◆✉♠ ❛ ❂❃ ❬❛❪ ✲❃ ❱❡❝t♦r ❛

tal que ✭❧✐st❛❱❡❝t♦r ①s✮ es el vector correspondiente a la lista ①s. Por ejemplo,

❣❤❝✐❃ ❧✐st❛❱❡❝t♦r ❬✸✱✷✱✺❪

❛rr❛② ✭✶✱✸✮ ❬✭✶✱✸✮✱✭✷✱✷✮✱✭✸✱✺✮❪

Solución:

❧✐st❛❱❡❝t♦r ✿✿ ◆✉♠ ❛ ❂❃ ❬❛❪ ✲❃ ❱❡❝t♦r ❛

❧✐st❛❱❡❝t♦r ①s ❂ ❧✐st❆rr❛② ✭✶✱♥✮ ①s

✇❤❡r❡ ♥ ❂ ❧❡♥❣t❤ ①s

Ejercicio 11.3.2. Definir la función

❧✐st❛▼❛tr✐③ ✿✿ ◆✉♠ ❛ ❂❃ ❬❬❛❪❪ ✲❃ ▼❛tr✐③ ❛

tal que ✭❧✐st❛▼❛tr✐③ ①ss✮ es la matriz cuyas filas son los elementos de ①ss. Por ejemplo,

❣❤❝✐❃ ❧✐st❛▼❛tr✐③ ❬❬✶✱✸✱✺❪✱❬✷✱✹✱✼❪❪

❛rr❛② ✭✭✶✱✶✮✱✭✷✱✸✮✮ ❬✭✭✶✱✶✮✱✶✮✱✭✭✶✱✷✮✱✸✮✱✭✭✶✱✸✮✱✺✮✱

✭✭✷✱✶✮✱✷✮✱✭✭✷✱✷✮✱✹✮✱✭✭✷✱✸✮✱✼✮❪

Solución:

❧✐st❛▼❛tr✐③ ✿✿ ◆✉♠ ❛ ❂❃ ❬❬❛❪❪ ✲❃ ▼❛tr✐③ ❛

❧✐st❛▼❛tr✐③ ①ss ❂ ❧✐st❆rr❛② ✭✭✶✱✶✮✱✭♠✱♥✮✮ ✭❝♦♥❝❛t ①ss✮

✇❤❡r❡ ♠ ❂ ❧❡♥❣t❤ ①ss

♥ ❂ ❧❡♥❣t❤ ✭❤❡❛❞ ①ss✮

Ejercicio 11.3.3. Definir la función

♥✉♠❋✐❧❛s ✿✿ ◆✉♠ ❛ ❂❃ ▼❛tr✐③ ❛ ✲❃ ■♥t

tal que ✭♥✉♠❋✐❧❛s ♠✮ es el número de filas de la matriz ♠. Por ejemplo,

♥✉♠❋✐❧❛s ✭❧✐st❛▼❛tr✐③ ❬❬✶✱✸✱✺❪✱❬✷✱✹✱✼❪❪✮ ❂❂ ✷

Solución:

♥✉♠❋✐❧❛s ✿✿ ◆✉♠ ❛ ❂❃ ▼❛tr✐③ ❛ ✲❃ ■♥t

♥✉♠❋✐❧❛s ❂ ❢st ✳ s♥❞ ✳ ❜♦✉♥❞s

246 Capítulo 11. Vectores y matrices

Ejercicio 11.3.4. Definir la función

♥✉♠❈♦❧✉♠♥❛s ✿✿ ◆✉♠ ❛ ❂❃ ▼❛tr✐③ ❛ ✲❃ ■♥t

tal que ✭♥✉♠❈♦❧✉♠♥❛s ♠✮ es el número de columnas de la matriz ♠. Por ejemplo,

♥✉♠❈♦❧✉♠♥❛s ✭❧✐st❛▼❛tr✐③ ❬❬✶✱✸✱✺❪✱❬✷✱✹✱✼❪❪✮ ❂❂ ✸

Solución:

♥✉♠❈♦❧✉♠♥❛s ✿✿ ◆✉♠ ❛ ❂❃ ▼❛tr✐③ ❛ ✲❃ ■♥t

♥✉♠❈♦❧✉♠♥❛s ❂ s♥❞ ✳ s♥❞ ✳ ❜♦✉♥❞s

Ejercicio 11.3.5. Definir la función

❞✐♠❡♥s✐♦♥ ✿✿ ◆✉♠ ❛ ❂❃ ▼❛tr✐③ ❛ ✲❃ ✭■♥t✱■♥t✮

tal que ✭❞✐♠❡♥s✐♦♥ ♠✮ es el número de filas y columnas de la matriz ♠. Por ejemplo,

❞✐♠❡♥s✐♦♥ ✭❧✐st❛▼❛tr✐③ ❬❬✶✱✸✱✺❪✱❬✷✱✹✱✼❪❪✮ ❂❂ ✭✷✱✸✮

Solución:

❞✐♠❡♥s✐♦♥ ✿✿ ◆✉♠ ❛ ❂❃ ▼❛tr✐③ ❛ ✲❃ ✭■♥t✱■♥t✮

❞✐♠❡♥s✐♦♥ ♣ ❂ ✭♥✉♠❋✐❧❛s ♣✱ ♥✉♠❈♦❧✉♠♥❛s ♣✮

Ejercicio 11.3.6. Definir la función

s❡♣❛r❛ ✿✿ ■♥t ✲❃ ❬❛❪ ✲❃ ❬❬❛❪❪

tal que ✭s❡♣❛r❛ ♥ ①s✮ es la lista obtenida separando los elementos de ①s en grupos de ♥ ele-

mentos (salvo el último que puede tener menos de ♥ elementos). Por ejemplo,

s❡♣❛r❛ ✸ ❬✶✳✳✶✶❪ ❂❂ ❬❬✶✱✷✱✸❪✱❬✹✱✺✱✻❪✱❬✼✱✽✱✾❪✱❬✶✵✱✶✶❪❪

Solución:

s❡♣❛r❛ ✿✿ ■♥t ✲❃ ❬❛❪ ✲❃ ❬❬❛❪❪

s❡♣❛r❛ ❴ ❬❪ ❂ ❬❪

s❡♣❛r❛ ♥ ①s ❂ t❛❦❡ ♥ ①s ✿ s❡♣❛r❛ ♥ ✭❞r♦♣ ♥ ①s✮

Ejercicio 11.3.7. Definir la función

♠❛tr✐③▲✐st❛ ✿✿ ◆✉♠ ❛ ❂❃ ▼❛tr✐③ ❛ ✲❃ ❬❬❛❪❪

tal que ✭♠❛tr✐③▲✐st❛ ①✮ es la lista de las filas de la matriz ①. Por ejemplo,

11.4. Suma de matrices 247

❣❤❝✐❃ ❧❡t ♠ ❂ ❧✐st❛▼❛tr✐③ ❬❬✺✱✶✱✵❪✱❬✸✱✷✱✻❪❪

❣❤❝✐❃ ♠

❛rr❛② ✭✭✶✱✶✮✱✭✷✱✸✮✮ ❬✭✭✶✱✶✮✱✺✮✱✭✭✶✱✷✮✱✶✮✱✭✭✶✱✸✮✱✵✮✱

✭✭✷✱✶✮✱✸✮✱✭✭✷✱✷✮✱✷✮✱✭✭✷✱✸✮✱✻✮❪

❣❤❝✐❃ ♠❛tr✐③▲✐st❛ ♠

❬❬✺✱✶✱✵❪✱❬✸✱✷✱✻❪❪

Solución:

♠❛tr✐③▲✐st❛ ✿✿ ◆✉♠ ❛ ❂❃ ▼❛tr✐③ ❛ ✲❃ ❬❬❛❪❪

♠❛tr✐③▲✐st❛ ♣ ❂ s❡♣❛r❛ ✭♥✉♠❈♦❧✉♠♥❛s ♣✮ ✭❡❧❡♠s ♣✮

Ejercicio 11.3.8. Definir la función

✈❡❝t♦r▲✐st❛ ✿✿ ◆✉♠ ❛ ❂❃ ❱❡❝t♦r ❛ ✲❃ ❬❛❪

tal que ✭✈❡❝t♦r▲✐st❛ ①✮ es la lista de los elementos del vector ✈. Por ejemplo,

❣❤❝✐❃ ❧❡t ✈ ❂ ❧✐st❛❱❡❝t♦r ❬✸✱✷✱✺❪

❣❤❝✐❃ ✈

❛rr❛② ✭✶✱✸✮ ❬✭✶✱✸✮✱✭✷✱✷✮✱✭✸✱✺✮❪

❣❤❝✐❃ ✈❡❝t♦r▲✐st❛ ✈

❬✸✱✷✱✺❪

Solución:

✈❡❝t♦r▲✐st❛ ✿✿ ◆✉♠ ❛ ❂❃ ❱❡❝t♦r ❛ ✲❃ ❬❛❪

✈❡❝t♦r▲✐st❛ ❂ ❡❧❡♠s

11.4. Suma de matrices

Ejercicio 11.4.1. Definir la función

s✉♠❛▼❛tr✐❝❡s✿✿ ◆✉♠ ❛ ❂❃ ▼❛tr✐③ ❛ ✲❃ ▼❛tr✐③ ❛ ✲❃ ▼❛tr✐③ ❛

tal que ✭s✉♠❛▼❛tr✐❝❡s ① ②✮ es la suma de las matrices ① e ②. Por ejemplo,

❣❤❝✐❃ ❧❡t ♠✶ ❂ ❧✐st❛▼❛tr✐③ ❬❬✺✱✶✱✵❪✱❬✸✱✷✱✻❪❪

❣❤❝✐❃ ❧❡t ♠✷ ❂ ❧✐st❛▼❛tr✐③ ❬❬✹✱✻✱✸❪✱❬✶✱✺✱✷❪❪

❣❤❝✐❃ ♠❛tr✐③▲✐st❛ ✭s✉♠❛▼❛tr✐❝❡s ♠✶ ♠✷✮

❬❬✾✱✼✱✸❪✱❬✹✱✼✱✽❪❪

Solución:

248 Capítulo 11. Vectores y matrices

s✉♠❛▼❛tr✐❝❡s ✿✿ ◆✉♠ ❛ ❂❃ ▼❛tr✐③ ❛ ✲❃ ▼❛tr✐③ ❛ ✲❃ ▼❛tr✐③ ❛

s✉♠❛▼❛tr✐❝❡s ♣ q ❂

❛rr❛② ✭✭✶✱✶✮✱✭♠✱♥✮✮ ❬✭✭✐✱❥✮✱♣✦✭✐✱❥✮✰q✦✭✐✱❥✮✮ ⑤

✐ ❁✲ ❬✶✳✳♠❪✱ ❥ ❁✲ ❬✶✳✳♥❪❪

✇❤❡r❡ ✭♠✱♥✮ ❂ ❞✐♠❡♥s✐♦♥ ♣

Ejercicio 11.4.2. Definir la función

❢✐❧❛▼❛t ✿✿ ◆✉♠ ❛ ❂❃ ■♥t ✲❃ ▼❛tr✐③ ❛ ✲❃ ❱❡❝t♦r ❛

tal que ✭❢✐❧❛▼❛t ✐ ♣✮ es el vector correspondiente a la fila ✐–ésima de la matriz ♣. Por ejemplo,

❣❤❝✐❃ ❧❡t ♣ ❂ ❧✐st❛▼❛tr✐③ ❬❬✺✱✶✱✵❪✱❬✸✱✷✱✻❪✱❬✹✱✺✱✼❪❪

❣❤❝✐❃ ❢✐❧❛▼❛t ✷ ♣

❛rr❛② ✭✶✱✸✮ ❬✭✶✱✸✮✱✭✷✱✷✮✱✭✸✱✻✮❪

❣❤❝✐❃ ✈❡❝t♦r▲✐st❛ ✭❢✐❧❛▼❛t ✷ ♣✮

❬✸✱✷✱✻❪

Solución:

❢✐❧❛▼❛t ✿✿ ◆✉♠ ❛ ❂❃ ■♥t ✲❃ ▼❛tr✐③ ❛ ✲❃ ❱❡❝t♦r ❛

❢✐❧❛▼❛t ✐ ♣ ❂ ❛rr❛② ✭✶✱♥✮ ❬✭❥✱♣✦✭✐✱❥✮✮ ⑤ ❥ ❁✲ ❬✶✳✳♥❪❪

✇❤❡r❡ ♥ ❂ ♥✉♠❈♦❧✉♠♥❛s ♣

Ejercicio 11.4.3. Definir la función

❝♦❧✉♠♥❛▼❛t ✿✿ ◆✉♠ ❛ ❂❃ ■♥t ✲❃ ▼❛tr✐③ ❛ ✲❃ ❱❡❝t♦r ❛

tal que ✭❝♦❧✉♠♥❛▼❛t ❥ ♣✮ es el vector correspondiente a la columna ❥–ésima de la matriz ♣.

Por ejemplo,

❣❤❝✐❃ ❧❡t ♣ ❂ ❧✐st❛▼❛tr✐③ ❬❬✺✱✶✱✵❪✱❬✸✱✷✱✻❪✱❬✹✱✺✱✼❪❪

❣❤❝✐❃ ❝♦❧✉♠♥❛▼❛t ✷ ♣

❛rr❛② ✭✶✱✸✮ ❬✭✶✱✶✮✱✭✷✱✷✮✱✭✸✱✺✮❪

❣❤❝✐❃ ✈❡❝t♦r▲✐st❛ ✭❝♦❧✉♠♥❛▼❛t ✷ ♣✮

❬✶✱✷✱✺❪

Solución:

❝♦❧✉♠♥❛▼❛t ✿✿ ◆✉♠ ❛ ❂❃ ■♥t ✲❃ ▼❛tr✐③ ❛ ✲❃ ❱❡❝t♦r ❛

❝♦❧✉♠♥❛▼❛t ❥ ♣ ❂ ❛rr❛② ✭✶✱♠✮ ❬✭✐✱♣✦✭✐✱❥✮✮ ⑤ ✐ ❁✲ ❬✶✳✳♠❪❪

✇❤❡r❡ ♠ ❂ ♥✉♠❋✐❧❛s ♣

11.5. Producto de matrices 249

11.5. Producto de matrices

Ejercicio 11.5.1. Definir la función

♣r♦❞❊s❝❛❧❛r ✿✿ ◆✉♠ ❛ ❂❃ ❱❡❝t♦r ❛ ✲❃ ❱❡❝t♦r ❛ ✲❃ ❛

tal que ✭♣r♦❞❊s❝❛❧❛r ✈✶ ✈✷✮ es el producto escalar de los vectores ✈✶ y ✈✷. Por ejemplo,

❣❤❝✐❃ ❧❡t ✈ ❂ ❧✐st❛❱❡❝t♦r ❬✸✱✶✱✶✵❪

❣❤❝✐❃ ♣r♦❞❊s❝❛❧❛r ✈ ✈

✶✶✵

Solución:

♣r♦❞❊s❝❛❧❛r ✿✿ ◆✉♠ ❛ ❂❃ ❱❡❝t♦r ❛ ✲❃ ❱❡❝t♦r ❛ ✲❃ ❛

♣r♦❞❊s❝❛❧❛r ✈✶ ✈✷ ❂

s✉♠ ❬✐✯❥ ⑤ ✭✐✱❥✮ ❁✲ ③✐♣ ✭❡❧❡♠s ✈✶✮ ✭❡❧❡♠s ✈✷✮❪

Ejercicio 11.5.2. Definir la función

♣r♦❞▼❛tr✐❝❡s ✿✿ ◆✉♠ ❛ ❂❃ ▼❛tr✐③ ❛ ✲❃ ▼❛tr✐③ ❛ ✲❃ ▼❛tr✐③ ❛

tal que ✭♣r♦❞▼❛tr✐❝❡s ♣ q✮ es el producto de las matrices ♣ y q. Por ejemplo,

❣❤❝✐❃ ❧❡t ♣ ❂ ❧✐st❛▼❛tr✐③ ❬❬✸✱✶❪✱❬✷✱✹❪❪

❣❤❝✐❃ ♣r♦❞▼❛tr✐❝❡s ♣ ♣

❛rr❛② ✭✭✶✱✶✮✱✭✷✱✷✮✮ ❬✭✭✶✱✶✮✱✶✶✮✱✭✭✶✱✷✮✱✼✮✱✭✭✷✱✶✮✱✶✹✮✱✭✭✷✱✷✮✱✶✽✮❪

❣❤❝✐❃ ♠❛tr✐③▲✐st❛ ✭♣r♦❞▼❛tr✐❝❡s ♣ ♣✮

❬❬✶✶✱✼❪✱❬✶✹✱✶✽❪❪

❣❤❝✐❃ ❧❡t q ❂ ❧✐st❛▼❛tr✐③ ❬❬✼❪✱❬✺❪❪

❣❤❝✐❃ ♣r♦❞▼❛tr✐❝❡s ♣ q

❛rr❛② ✭✭✶✱✶✮✱✭✷✱✶✮✮ ❬✭✭✶✱✶✮✱✷✻✮✱✭✭✷✱✶✮✱✸✹✮❪

❣❤❝✐❃ ♠❛tr✐③▲✐st❛ ✭♣r♦❞▼❛tr✐❝❡s ♣ q✮

❬❬✷✻❪✱❬✸✹❪❪

Solución:

♣r♦❞▼❛tr✐❝❡s ✿✿ ◆✉♠ ❛ ❂❃ ▼❛tr✐③ ❛ ✲❃ ▼❛tr✐③ ❛ ✲❃ ▼❛tr✐③ ❛

♣r♦❞▼❛tr✐❝❡s ♣ q ❂

❛rr❛② ✭✭✶✱✶✮✱✭♠✱♥✮✮

❬✭✭✐✱❥✮✱ ♣r♦❞❊s❝❛❧❛r ✭❢✐❧❛▼❛t ✐ ♣✮ ✭❝♦❧✉♠♥❛▼❛t ❥ q✮✮ ⑤

✐ ❁✲ ❬✶✳✳♠❪✱ ❥ ❁✲ ❬✶✳✳♥❪❪

✇❤❡r❡ ♠ ❂ ♥✉♠❋✐❧❛s ♣

♥ ❂ ♥✉♠❈♦❧✉♠♥❛s q

250 Capítulo 11. Vectores y matrices

11.6. Traspuestas y simétricas

Ejercicio 11.6.1. Definir la función

tr❛s♣✉❡st❛ ✿✿ ◆✉♠ ❛ ❂❃ ▼❛tr✐③ ❛ ✲❃ ▼❛tr✐③ ❛

tal que ✭tr❛s♣✉❡st❛ ♣✮ es la traspuesta de la matriz ♣. Por ejemplo,

❣❤❝✐❃ ❧❡t ♣ ❂ ❧✐st❛▼❛tr✐③ ❬❬✺✱✶✱✵❪✱❬✸✱✷✱✻❪❪

❣❤❝✐❃ tr❛s♣✉❡st❛ ♣

❛rr❛② ✭✭✶✱✶✮✱✭✸✱✷✮✮ ❬✭✭✶✱✶✮✱✺✮✱✭✭✶✱✷✮✱✸✮✱

✭✭✷✱✶✮✱✶✮✱✭✭✷✱✷✮✱✷✮✱

✭✭✸✱✶✮✱✵✮✱✭✭✸✱✷✮✱✻✮❪

❣❤❝✐❃ ♠❛tr✐③▲✐st❛ ✭tr❛s♣✉❡st❛ ♣✮

❬❬✺✱✸❪✱❬✶✱✷❪✱❬✵✱✻❪❪

Solución:

tr❛s♣✉❡st❛ ✿✿ ◆✉♠ ❛ ❂❃ ▼❛tr✐③ ❛ ✲❃ ▼❛tr✐③ ❛

tr❛s♣✉❡st❛ ♣ ❂

❛rr❛② ✭✭✶✱✶✮✱✭♥✱♠✮✮

❬✭✭✐✱❥✮✱ ♣✦✭❥✱✐✮✮ ⑤ ✐ ❁✲ ❬✶✳✳♥❪✱ ❥ ❁✲ ❬✶✳✳♠❪❪

✇❤❡r❡ ✭♠✱♥✮ ❂ ❞✐♠❡♥s✐♦♥ ♣

Ejercicio 11.6.2. Definir la función

❡s❈✉❛❞r❛❞❛ ✿✿ ◆✉♠ ❛ ❂❃ ▼❛tr✐③ ❛ ✲❃ ❇♦♦❧

tal que ✭❡s❈✉❛❞r❛❞❛ ♣✮ se verifica si la matriz ♣ es cuadrada. Por ejemplo,

❣❤❝✐❃ ❧❡t ♣ ❂ ❧✐st❛▼❛tr✐③ ❬❬✺✱✶✱✵❪✱❬✸✱✷✱✻❪❪

❣❤❝✐❃ ❡s❈✉❛❞r❛❞❛ ♣

❋❛❧s❡

❣❤❝✐❃ ❧❡t q ❂ ❧✐st❛▼❛tr✐③ ❬❬✺✱✶❪✱❬✸✱✷❪❪

❣❤❝✐❃ ❡s❈✉❛❞r❛❞❛ q

❚r✉❡

Solución:

❡s❈✉❛❞r❛❞❛ ✿✿ ◆✉♠ ❛ ❂❃ ▼❛tr✐③ ❛ ✲❃ ❇♦♦❧

❡s❈✉❛❞r❛❞❛ ① ❂ ♥✉♠❋✐❧❛s ① ❂❂ ♥✉♠❈♦❧✉♠♥❛s ①

Ejercicio 11.6.3. Definir la función

❡s❙✐♠❡tr✐❝❛ ✿✿ ◆✉♠ ❛ ❂❃ ▼❛tr✐③ ❛ ✲❃ ❇♦♦❧

11.7. Diagonales de una matriz 251

tal que ✭❡s❙✐♠❡tr✐❝❛ ♣✮ se verifica si la matriz ♣ es simétrica. Por ejemplo,

❣❤❝✐❃ ❧❡t ♣ ❂ ❧✐st❛▼❛tr✐③ ❬❬✺✱✶✱✸❪✱❬✶✱✹✱✼❪✱❬✸✱✼✱✷❪❪

❣❤❝✐❃ ❡s❙✐♠❡tr✐❝❛ ♣

❚r✉❡

❣❤❝✐❃ ❧❡t q ❂ ❧✐st❛▼❛tr✐③ ❬❬✺✱✶✱✸❪✱❬✶✱✹✱✼❪✱❬✸✱✹✱✷❪❪

❣❤❝✐❃ ❡s❙✐♠❡tr✐❝❛ q

❋❛❧s❡

Solución:

❡s❙✐♠❡tr✐❝❛ ✿✿ ◆✉♠ ❛ ❂❃ ▼❛tr✐③ ❛ ✲❃ ❇♦♦❧

❡s❙✐♠❡tr✐❝❛ ① ❂ ① ❂❂ tr❛s♣✉❡st❛ ①

11.7. Diagonales de una matriz

Ejercicio 11.7.1. Definir la función

❞✐❛❣♦♥❛❧Pr❛❧ ✿✿ ◆✉♠ ❛ ❂❃ ▼❛tr✐③ ❛ ✲❃ ❱❡❝t♦r ❛

tal que ✭❞✐❛❣♦♥❛❧Pr❛❧ ♣✮ es la diagonal principal de la matriz ♣. Por ejemplo,

❣❤❝✐❃ ❧❡t ♣ ❂ ❧✐st❛▼❛tr✐③ ❬❬✺✱✶✱✵❪✱❬✸✱✷✱✻❪❪

❣❤❝✐❃ ❞✐❛❣♦♥❛❧Pr❛❧ ♣

❛rr❛② ✭✶✱✷✮ ❬✭✶✱✺✮✱✭✷✱✷✮❪

❣❤❝✐❃ ✈❡❝t♦r▲✐st❛ ✭❞✐❛❣♦♥❛❧Pr❛❧ ♣✮

❬✺✱✷❪

Solución:

❞✐❛❣♦♥❛❧Pr❛❧ ✿✿ ◆✉♠ ❛ ❂❃ ▼❛tr✐③ ❛ ✲❃ ❱❡❝t♦r ❛

❞✐❛❣♦♥❛❧Pr❛❧ ♣ ❂ ❛rr❛② ✭✶✱♥✮ ❬✭✐✱♣✦✭✐✱✐✮✮ ⑤ ✐ ❁✲ ❬✶✳✳♥❪❪

✇❤❡r❡ ♥ ❂ ♠✐♥ ✭♥✉♠❋✐❧❛s ♣✮ ✭♥✉♠❈♦❧✉♠♥❛s ♣✮

Ejercicio 11.7.2. Definir la función

❞✐❛❣♦♥❛❧❙❡❝ ✿✿ ◆✉♠ ❛ ❂❃ ▼❛tr✐③ ❛ ✲❃ ❱❡❝t♦r ❛

tal que ✭❞✐❛❣♦♥❛❧❙❡❝ ♣✮ es la diagonal secundaria de la matriz ♣. Por ejemplo,

❣❤❝✐❃ ❧❡t ♣ ❂ ❧✐st❛▼❛tr✐③ ❬❬✺✱✶✱✵❪✱❬✸✱✷✱✻❪❪

❣❤❝✐❃ ❞✐❛❣♦♥❛❧❙❡❝ ♣

❛rr❛② ✭✶✱✷✮ ❬✭✶✱✶✮✱✭✷✱✸✮❪

❣❤❝✐❃ ✈❡❝t♦r▲✐st❛ ✭❞✐❛❣♦♥❛❧Pr❛❧ ♣✮

❬✺✱✷❪

252 Capítulo 11. Vectores y matrices

Solución:

❞✐❛❣♦♥❛❧❙❡❝ ✿✿ ◆✉♠ ❛ ❂❃ ▼❛tr✐③ ❛ ✲❃ ❱❡❝t♦r ❛

❞✐❛❣♦♥❛❧❙❡❝ ♣ ❂ ❛rr❛② ✭✶✱♥✮ ❬✭✐✱♣✦✭✐✱♠✰✶✲✐✮✮ ⑤ ✐ ❁✲ ❬✶✳✳♥❪❪

✇❤❡r❡ ♥ ❂ ♠✐♥ ✭♥✉♠❋✐❧❛s ♣✮ ✭♥✉♠❈♦❧✉♠♥❛s ♣✮

♠ ❂ ♥✉♠❋✐❧❛s ♣

11.8. Submatrices

Ejercicio 11.8.1. Definir la función

s✉❜♠❛tr✐③ ✿✿ ◆✉♠ ❛ ❂❃ ■♥t ✲❃ ■♥t ✲❃ ▼❛tr✐③ ❛ ✲❃ ▼❛tr✐③ ❛

tal que ✭s✉❜♠❛tr✐③ ✐ ❥ ♣✮ es la matriz obtenida a partir de la ♣ eliminando la fila ✐ y la

columna ❥. Por ejemplo,

❣❤❝✐❃ ❧❡t ♣ ❂ ❧✐st❛▼❛tr✐③ ❬❬✺✱✶✱✵❪✱❬✸✱✷✱✻❪✱❬✹✱✻✱✾❪❪

❣❤❝✐❃ s✉❜♠❛tr✐③ ✷ ✸ ♣

❛rr❛② ✭✭✶✱✶✮✱✭✷✱✷✮✮ ❬✭✭✶✱✶✮✱✺✮✱✭✭✶✱✷✮✱✶✮✱✭✭✷✱✶✮✱✹✮✱✭✭✷✱✷✮✱✻✮❪

❣❤❝✐❃ ♠❛tr✐③▲✐st❛ ✭s✉❜♠❛tr✐③ ✷ ✸ ♣✮

❬❬✺✱✶❪✱❬✹✱✻❪❪

Solución:

s✉❜♠❛tr✐③ ✿✿ ◆✉♠ ❛ ❂❃ ■♥t ✲❃ ■♥t ✲❃ ▼❛tr✐③ ❛ ✲❃ ▼❛tr✐③ ❛

s✉❜♠❛tr✐③ ✐ ❥ ♣ ❂

❛rr❛② ✭✭✶✱✶✮✱ ✭♠✲✶✱♥ ✲✶✮✮

❬✭✭❦✱❧✮✱ ♣ ✦ ❢ ❦ ❧✮ ⑤ ❦ ❁✲ ❬✶✳✳♠✲✶❪✱ ❧ ❁✲ ❬✶✳✳ ♥✲✶❪❪

✇❤❡r❡ ✭♠✱♥✮ ❂ ❞✐♠❡♥s✐♦♥ ♣

❢ ❦ ❧ ⑤ ❦ ❁ ✐ ✫✫ ❧ ❁ ❥ ❂ ✭❦✱❧✮

⑤ ❦ ❃❂ ✐ ✫✫ ❧ ❁ ❥ ❂ ✭❦✰✶✱❧✮

⑤ ❦ ❁ ✐ ✫✫ ❧ ❃❂ ❥ ❂ ✭❦✱❧✰✶✮

⑤ ♦t❤❡r✇✐s❡ ❂ ✭❦✰✶✱❧✰✶✮

11.9. Transformaciones elementales

Ejercicio 11.9.1. Definir la función

✐♥t❡r❝❛♠❜✐❛❋✐❧❛s ✿✿ ◆✉♠ ❛ ❂❃ ■♥t ✲❃ ■♥t ✲❃ ▼❛tr✐③ ❛ ✲❃ ▼❛tr✐③ ❛

tal que ✭✐♥t❡r❝❛♠❜✐❛❋✐❧❛s ❦ ❧ ♣✮ es la matriz obtenida intercambiando las filas ❦ y ❧ de la

matriz ♣. Por ejemplo,

11.9. Transformaciones elementales 253

❣❤❝✐❃ ❧❡t ♣ ❂ ❧✐st❛▼❛tr✐③ ❬❬✺✱✶✱✵❪✱❬✸✱✷✱✻❪✱❬✹✱✻✱✾❪❪

❣❤❝✐❃ ✐♥t❡r❝❛♠❜✐❛❋✐❧❛s ✶ ✸ ♣

❛rr❛② ✭✭✶✱✶✮✱✭✸✱✸✮✮ ❬✭✭✶✱✶✮✱✹✮✱✭✭✶✱✷✮✱✻✮✱✭✭✶✱✸✮✱✾✮✱

✭✭✷✱✶✮✱✸✮✱✭✭✷✱✷✮✱✷✮✱✭✭✷✱✸✮✱✻✮✱

✭✭✸✱✶✮✱✺✮✱✭✭✸✱✷✮✱✶✮✱✭✭✸✱✸✮✱✵✮❪

❣❤❝✐❃ ♠❛tr✐③▲✐st❛ ✭✐♥t❡r❝❛♠❜✐❛❋✐❧❛s ✶ ✸ ♣✮

❬❬✹✱✻✱✾❪✱❬✸✱✷✱✻❪✱❬✺✱✶✱✵❪❪

Solución:

✐♥t❡r❝❛♠❜✐❛❋✐❧❛s ✿✿ ◆✉♠ ❛ ❂❃ ■♥t ✲❃ ■♥t ✲❃ ▼❛tr✐③ ❛ ✲❃ ▼❛tr✐③ ❛

✐♥t❡r❝❛♠❜✐❛❋✐❧❛s ❦ ❧ ♣ ❂

❛rr❛② ✭✭✶✱✶✮✱ ✭♠✱♥✮✮

❬✭✭✐✱❥✮✱ ♣✦ ❢ ✐ ❥✮ ⑤ ✐ ❁✲ ❬✶✳✳♠❪✱ ❥ ❁✲ ❬✶✳✳♥❪❪

✇❤❡r❡ ✭♠✱♥✮ ❂ ❞✐♠❡♥s✐♦♥ ♣

❢ ✐ ❥ ⑤ ✐ ❂❂ ❦ ❂ ✭❧✱❥✮

⑤ ✐ ❂❂ ❧ ❂ ✭❦✱❥✮

⑤ ♦t❤❡r✇✐s❡ ❂ ✭✐✱❥✮

Ejercicio 11.9.2. Definir la función

✐♥t❡r❝❛♠❜✐❛❈♦❧✉♠♥❛s ✿✿ ◆✉♠ ❛ ❂❃ ■♥t ✲❃ ■♥t ✲❃ ▼❛tr✐③ ❛ ✲❃ ▼❛tr✐③ ❛

tal que ✭✐♥t❡r❝❛♠❜✐❛❈♦❧✉♠♥❛s ❦ ❧ ♣✮ es la matriz obtenida intercambiando las columnas ❦

y ❧ de la matriz ♣. Por ejemplo,

❣❤❝✐❃ ❧❡t ♣ ❂ ❧✐st❛▼❛tr✐③ ❬❬✺✱✶✱✵❪✱❬✸✱✷✱✻❪✱❬✹✱✻✱✾❪❪

❣❤❝✐❃ ♠❛tr✐③▲✐st❛ ✭✐♥t❡r❝❛♠❜✐❛❈♦❧✉♠♥❛s ✶ ✸ ♣✮

❬❬✵✱✶✱✺❪✱❬✻✱✷✱✸❪✱❬✾✱✻✱✹❪❪

Solución:

✐♥t❡r❝❛♠❜✐❛❈♦❧✉♠♥❛s ✿✿ ◆✉♠ ❛ ❂❃ ■♥t ✲❃ ■♥t ✲❃ ▼❛tr✐③ ❛ ✲❃ ▼❛tr✐③ ❛

✐♥t❡r❝❛♠❜✐❛❈♦❧✉♠♥❛s ❦ ❧ ♣ ❂

❛rr❛② ✭✭✶✱✶✮✱ ✭♠✱♥✮✮

❬✭✭✐✱❥✮✱ ♣ ✦ ❢ ✐ ❥✮ ⑤ ✐ ❁✲ ❬✶✳✳♠❪✱ ❥ ❁✲ ❬✶✳✳♥❪❪

✇❤❡r❡ ✭♠✱♥✮ ❂ ❞✐♠❡♥s✐♦♥ ♣

❢ ✐ ❥ ⑤ ❥ ❂❂ ❦ ❂ ✭✐✱❧✮

⑤ ❥ ❂❂ ❧ ❂ ✭✐✱❦✮

⑤ ♦t❤❡r✇✐s❡ ❂ ✭✐✱❥✮

Ejercicio 11.9.3. Definir la función

♠✉❧t❋✐❧❛P♦r ✿✿ ◆✉♠ ❛ ❂❃ ■♥t ✲❃ ❛ ✲❃ ▼❛tr✐③ ❛ ✲❃ ▼❛tr✐③ ❛

254 Capítulo 11. Vectores y matrices

tal que ✭♠✉❧t❋✐❧❛P♦r ❦ ① ♣✮ es a matriz obtenida multiplicando la fila ❦ de la matriz ♣ por el

número ①. Por ejemplo,

❣❤❝✐❃ ❧❡t ♣ ❂ ❧✐st❛▼❛tr✐③ ❬❬✺✱✶✱✵❪✱❬✸✱✷✱✻❪✱❬✹✱✻✱✾❪❪

❣❤❝✐❃ ♠❛tr✐③▲✐st❛ ✭♠✉❧t❋✐❧❛P♦r ✷ ✸ ♣✮

❬❬✺✱✶✱✵❪✱❬✾✱✻✱✶✽❪✱❬✹✱✻✱✾❪❪

Solución:

♠✉❧t❋✐❧❛P♦r ✿✿ ◆✉♠ ❛ ❂❃ ■♥t ✲❃ ❛ ✲❃ ▼❛tr✐③ ❛ ✲❃ ▼❛tr✐③ ❛

♠✉❧t❋✐❧❛P♦r ❦ ① ♣ ❂

❛rr❛② ✭✭✶✱✶✮✱ ✭♠✱♥✮✮

❬✭✭✐✱❥✮✱ ❢ ✐ ❥✮ ⑤ ✐ ❁✲ ❬✶✳✳♠❪✱ ❥ ❁✲ ❬✶✳✳♥❪❪

✇❤❡r❡ ✭♠✱♥✮ ❂ ❞✐♠❡♥s✐♦♥ ♣

❢ ✐ ❥ ⑤ ✐ ❂❂ ❦ ❂ ①✯✭♣✦✭✐✱❥✮✮

⑤ ♦t❤❡r✇✐s❡ ❂ ♣✦✭✐✱❥✮

Ejercicio 11.9.4. Definir la función

s✉♠❛❋✐❧❛❋✐❧❛ ✿✿ ◆✉♠ ❛ ❂❃ ■♥t ✲❃ ■♥t ✲❃ ▼❛tr✐③ ❛ ✲❃ ▼❛tr✐③ ❛

tal que ✭s✉♠❛❋✐❧❛❋✐❧❛ ❦ ❧ ♣✮ es la matriz obtenida sumando la fila ❧ a la fila ❦ de la matriz

♣. Por ejemplo,

❣❤❝✐❃ ❧❡t ♣ ❂ ❧✐st❛▼❛tr✐③ ❬❬✺✱✶✱✵❪✱❬✸✱✷✱✻❪✱❬✹✱✻✱✾❪❪

❣❤❝✐❃ ♠❛tr✐③▲✐st❛ ✭s✉♠❛❋✐❧❛❋✐❧❛ ✷ ✸ ♣✮

❬❬✺✱✶✱✵❪✱❬✼✱✽✱✶✺❪✱❬✹✱✻✱✾❪❪

Solución:

s✉♠❛❋✐❧❛❋✐❧❛ ✿✿ ◆✉♠ ❛ ❂❃ ■♥t ✲❃ ■♥t ✲❃ ▼❛tr✐③ ❛ ✲❃ ▼❛tr✐③ ❛

s✉♠❛❋✐❧❛❋✐❧❛ ❦ ❧ ♣ ❂

❛rr❛② ✭✭✶✱✶✮✱ ✭♠✱♥✮✮

❬✭✭✐✱❥✮✱ ❢ ✐ ❥✮ ⑤ ✐ ❁✲ ❬✶✳✳♠❪✱ ❥ ❁✲ ❬✶✳✳♥❪❪

✇❤❡r❡ ✭♠✱♥✮ ❂ ❞✐♠❡♥s✐♦♥ ♣

❢ ✐ ❥ ⑤ ✐ ❂❂ ❦ ❂ ♣✦✭✐✱❥✮ ✰ ♣✦✭❧✱❥✮

⑤ ♦t❤❡r✇✐s❡ ❂ ♣✦✭✐✱❥✮

Ejercicio 11.9.5. Definir la función

s✉♠❛❋✐❧❛P♦r ✿✿ ◆✉♠ ❛ ❂❃ ■♥t ✲❃ ■♥t ✲❃ ❛ ✲❃ ▼❛tr✐③ ❛ ✲❃ ▼❛tr✐③ ❛

tal que ✭s✉♠❛❋✐❧❛P♦r ❦ ❧ ① ♣✮ es la matriz obtenida sumando a la fila ❦ de la matriz ♣ la fila

❧ multiplicada por ①. Por ejemplo,

11.10. Triangularización de matrices 255

❣❤❝✐❃ ❧❡t ♣ ❂ ❧✐st❛▼❛tr✐③ ❬❬✺✱✶✱✵❪✱❬✸✱✷✱✻❪✱❬✹✱✻✱✾❪❪

❣❤❝✐❃ ♠❛tr✐③▲✐st❛ ✭s✉♠❛❋✐❧❛P♦r ✷ ✸ ✶✵ ♣✮

❬❬✺✱✶✱✵❪✱❬✹✸✱✻✷✱✾✻❪✱❬✹✱✻✱✾❪❪

Solución:

s✉♠❛❋✐❧❛P♦r ✿✿ ◆✉♠ ❛ ❂❃ ■♥t ✲❃ ■♥t ✲❃ ❛ ✲❃ ▼❛tr✐③ ❛ ✲❃ ▼❛tr✐③ ❛

s✉♠❛❋✐❧❛P♦r ❦ ❧ ① ♣ ❂

❛rr❛② ✭✭✶✱✶✮✱ ✭♠✱♥✮✮

❬✭✭✐✱❥✮✱ ❢ ✐ ❥✮ ⑤ ✐ ❁✲ ❬✶✳✳♠❪✱ ❥ ❁✲ ❬✶✳✳♥❪❪

✇❤❡r❡ ✭♠✱♥✮ ❂ ❞✐♠❡♥s✐♦♥ ♣

❢ ✐ ❥ ⑤ ✐ ❂❂ ❦ ❂ ♣✦✭✐✱❥✮ ✰ ①✯♣✦✭❧✱❥✮

⑤ ♦t❤❡r✇✐s❡ ❂ ♣✦✭✐✱❥✮

11.10. Triangularización de matrices

Ejercicio 11.10.1. Definir la función

❜✉s❝❛■♥❞✐❝❡❉❡s❞❡ ✿✿ ◆✉♠ ❛ ❂❃ ▼❛tr✐③ ❛ ✲❃ ■♥t ✲❃ ■♥t ✲❃ ▼❛②❜❡ ■♥t

tal que ✭❜✉s❝❛■♥❞✐❝❡❉❡s❞❡ ♣ ❥ ✐✮ es el menor índice ❦, mayor o igual que ✐, tal que el ele-

mento de la matriz ♣ en la posición ✭❦✱❥✮ es no nulo. Por ejemplo,

❣❤❝✐❃ ❧❡t ♣ ❂ ❧✐st❛▼❛tr✐③ ❬❬✺✱✶✱✵❪✱❬✸✱✷✱✻❪✱❬✹✱✻✱✾❪❪

❣❤❝✐❃ ❜✉s❝❛■♥❞✐❝❡❉❡s❞❡ ♣ ✸ ✷

❏✉st ✷

❣❤❝✐❃ ❧❡t q ❂ ❧✐st❛▼❛tr✐③ ❬❬✺✱✶✱✶❪✱❬✸✱✷✱✵❪✱❬✹✱✻✱✵❪❪

❣❤❝✐❃ ❜✉s❝❛■♥❞✐❝❡❉❡s❞❡ q ✸ ✷

◆♦t❤✐♥❣

Solución:

❜✉s❝❛■♥❞✐❝❡❉❡s❞❡ ✿✿ ◆✉♠ ❛ ❂❃ ▼❛tr✐③ ❛ ✲❃ ■♥t ✲❃ ■♥t ✲❃ ▼❛②❜❡ ■♥t

❜✉s❝❛■♥❞✐❝❡❉❡s❞❡ ♣ ❥ ✐

⑤ ♥✉❧❧ ①s ❂ ◆♦t❤✐♥❣

⑤ ♦t❤❡r✇✐s❡ ❂ ❏✉st ✭❤❡❛❞ ①s✮

✇❤❡r❡ ①s ❂ ❬❦ ⑤ ✭✭❦✱❥✬✮✱②✮ ❁✲ ❛ss♦❝s ♣✱ ❥ ❂❂ ❥✬✱ ② ✴❂ ✵✱ ❦❃❂✐❪

Ejercicio 11.10.2. Definir la función

❜✉s❝❛P✐✈♦t❡❉❡s❞❡ ✿✿ ◆✉♠ ❛ ❂❃ ▼❛tr✐③ ❛ ✲❃ ■♥t ✲❃ ■♥t ✲❃ ▼❛②❜❡ ❛

tal que ✭❜✉s❝❛P✐✈♦t❡❉❡s❞❡ ♣ ❥ ✐✮ es el elemento de la matriz ♣ en la posición ✭❦✱❥✮ donde

❦ es ✭❜✉s❝❛■♥❞✐❝❡❉❡s❞❡ ♣ ❥ ✐✮. Por ejemplo,

256 Capítulo 11. Vectores y matrices

❣❤❝✐❃ ❧❡t ♣ ❂ ❧✐st❛▼❛tr✐③ ❬❬✺✱✶✱✵❪✱❬✸✱✷✱✻❪✱❬✹✱✻✱✾❪❪

❣❤❝✐❃ ❜✉s❝❛P✐✈♦t❡❉❡s❞❡ ♣ ✸ ✷

❏✉st ✻

❣❤❝✐❃ ❧❡t q ❂ ❧✐st❛▼❛tr✐③ ❬❬✺✱✶✱✶❪✱❬✸✱✷✱✵❪✱❬✹✱✻✱✵❪❪

❣❤❝✐❃ ❜✉s❝❛P✐✈♦t❡❉❡s❞❡ q ✸ ✷

◆♦t❤✐♥❣

Solución:

❜✉s❝❛P✐✈♦t❡❉❡s❞❡ ✿✿ ◆✉♠ ❛ ❂❃ ▼❛tr✐③ ❛ ✲❃ ■♥t ✲❃ ■♥t ✲❃ ▼❛②❜❡ ❛

❜✉s❝❛P✐✈♦t❡❉❡s❞❡ ♣ ❥ ✐

⑤ ♥✉❧❧ ①s ❂ ◆♦t❤✐♥❣

⑤ ♦t❤❡r✇✐s❡ ❂ ❏✉st ✭❤❡❛❞ ①s✮

✇❤❡r❡ ①s ❂ ❬② ⑤ ✭✭❦✱❥✬✮✱②✮ ❁✲ ❛ss♦❝s ♣✱ ❥ ❂❂ ❥✬✱ ② ✴❂ ✵✱ ❦❃❂✐❪

Ejercicio 11.10.3. Definir la función

❛♥✉❧❛❞❛❈♦❧✉♠♥❛❉❡s❞❡ ✿✿ ◆✉♠ ❛ ❂❃ ■♥t ✲❃ ■♥t ✲❃ ▼❛tr✐③ ❛ ✲❃ ❇♦♦❧

tal que ✭❛♥✉❧❛❞❛❈♦❧✉♠♥❛❉❡s❞❡ ❥ ✐ ♣✮ se verifica si todos los elementos de la columna ❥ de la

matriz ♣ desde i + 1 en adelante son nulos. Por ejemplo,

❣❤❝✐❃ ❧❡t q ❂ ❧✐st❛▼❛tr✐③ ❬❬✺✱✶✱✶❪✱❬✸✱✷✱✵❪✱❬✹✱✻✱✵❪❪

❣❤❝✐❃ ❛♥✉❧❛❞❛❈♦❧✉♠♥❛❉❡s❞❡ q ✸ ✷

❚r✉❡

❣❤❝✐❃ ❧❡t ♣ ❂ ❧✐st❛▼❛tr✐③ ❬❬✺✱✶✱✵❪✱❬✸✱✷✱✻❪✱❬✹✱✻✱✾❪❪

❣❤❝✐❃ ❛♥✉❧❛❞❛❈♦❧✉♠♥❛❉❡s❞❡ ♣ ✸ ✷

❋❛❧s❡

Solución:

❛♥✉❧❛❞❛❈♦❧✉♠♥❛❉❡s❞❡ ✿✿ ◆✉♠ ❛ ❂❃ ▼❛tr✐③ ❛ ✲❃ ■♥t ✲❃ ■♥t ✲❃ ❇♦♦❧

❛♥✉❧❛❞❛❈♦❧✉♠♥❛❉❡s❞❡ ♣ ❥ ✐ ❂

❜✉s❝❛■♥❞✐❝❡❉❡s❞❡ ♣ ❥ ✭✐✰✶✮ ❂❂ ◆♦t❤✐♥❣

Ejercicio 11.10.4. Definir la función

❛♥✉❧❛❊❧t♦❈♦❧✉♠♥❛❉❡s❞❡ ✿✿ ❋r❛❝t✐♦♥❛❧ ❛ ❂❃

▼❛tr✐③ ❛ ✲❃ ■♥t ✲❃ ■♥t ✲❃ ▼❛tr✐③ ❛

tal que ✭❛♥✉❧❛❊❧t♦❈♦❧✉♠♥❛❉❡s❞❡ ♣ ❥ ✐✮ es la matriz obtenida a partir de ♣ anulando el pri-

mer elemento de la columna ❥ por debajo de la fila ✐ usando el elemento de la posición ✭✐✱❥✮.

Por ejemplo,

11.11. Algoritmo de Gauss para triangularizar matrices 257

❣❤❝✐❃ ❧❡t ♣ ❂ ❧✐st❛▼❛tr✐③ ❬❬✷✱✸✱✶❪✱❬✺✱✵✱✺❪✱❬✽✱✻✱✾❪❪ ✿✿ ▼❛tr✐③ ❉♦✉❜❧❡

❣❤❝✐❃ ♠❛tr✐③▲✐st❛ ✭❛♥✉❧❛❊❧t♦❈♦❧✉♠♥❛❉❡s❞❡ ♣ ✷ ✶✮

❬❬✷✳✵✱✸✳✵✱✶✳✵❪✱❬✺✳✵✱✵✳✵✱✺✳✵❪✱❬✹✳✵✱✵✳✵✱✼✳✵❪❪

Solución:

❛♥✉❧❛❊❧t♦❈♦❧✉♠♥❛❉❡s❞❡ ✿✿ ❋r❛❝t✐♦♥❛❧ ❛ ❂❃ ▼❛tr✐③ ❛ ✲❃ ■♥t ✲❃ ■♥t ✲❃ ▼❛tr✐③ ❛

❛♥✉❧❛❊❧t♦❈♦❧✉♠♥❛❉❡s❞❡ ♣ ❥ ✐ ❂

s✉♠❛❋✐❧❛P♦r ❧ ✐ ✭✲✭♣✦✭❧✱❥✮✴❛✮✮ ♣

✇❤❡r❡ ❏✉st ❧ ❂ ❜✉s❝❛■♥❞✐❝❡❉❡s❞❡ ♣ ❥ ✭✐✰✶✮

❛ ❂ ♣✦✭✐✱❥✮

Ejercicio 11.10.5. Definir la función

❛♥✉❧❛❈♦❧✉♠♥❛❉❡s❞❡ ✿✿ ❋r❛❝t✐♦♥❛❧ ❛ ❂❃ ▼❛tr✐③ ❛ ✲❃ ■♥t ✲❃ ■♥t ✲❃ ▼❛tr✐③ ❛

tal que ✭❛♥✉❧❛❈♦❧✉♠♥❛❉❡s❞❡ ♣ ❥ ✐✮ es la matriz obtenida anulando todos los elementos de la

columna ❥ de la matriz ♣ por debajo de la posición ✭✐✱❥✮ (se supone que el elemento pi,j es no

nulo). Por ejemplo,

❣❤❝✐❃ ❧❡t ♣ ❂ ❧✐st❛▼❛tr✐③ ❬❬✷✱✷✱✶❪✱❬✺✱✹✱✺❪✱❬✶✵✱✽✱✾❪❪ ✿✿ ▼❛tr✐③ ❉♦✉❜❧❡

❣❤❝✐❃ ♠❛tr✐③▲✐st❛ ✭❛♥✉❧❛❈♦❧✉♠♥❛❉❡s❞❡ ♣ ✷ ✶✮

❬❬✷✳✵✱✷✳✵✱✶✳✵❪✱❬✶✳✵✱✵✳✵✱✸✳✵❪✱❬✷✳✵✱✵✳✵✱✺✳✵❪❪

❣❤❝✐❃ ❧❡t ♣ ❂ ❧✐st❛▼❛tr✐③ ❬❬✹✱✺❪✱❬✷✱✼✪✷❪✱❬✻✱✶✵❪❪

❣❤❝✐❃ ♠❛tr✐③▲✐st❛ ✭❛♥✉❧❛❈♦❧✉♠♥❛❉❡s❞❡ ♣ ✶ ✶✮

❬❬✹ ✪ ✶✱✺ ✪ ✶❪✱❬✵ ✪ ✶✱✶ ✪ ✶❪✱❬✵ ✪ ✶✱✺ ✪ ✷❪❪

Solución:

❛♥✉❧❛❈♦❧✉♠♥❛❉❡s❞❡ ✿✿ ❋r❛❝t✐♦♥❛❧ ❛ ❂❃ ▼❛tr✐③ ❛ ✲❃ ■♥t ✲❃ ■♥t ✲❃ ▼❛tr✐③ ❛

❛♥✉❧❛❈♦❧✉♠♥❛❉❡s❞❡ ♣ ❥ ✐

⑤ ❛♥✉❧❛❞❛❈♦❧✉♠♥❛❉❡s❞❡ ♣ ❥ ✐ ❂ ♣

⑤ ♦t❤❡r✇✐s❡ ❂ ❛♥✉❧❛❈♦❧✉♠♥❛❉❡s❞❡ ✭❛♥✉❧❛❊❧t♦❈♦❧✉♠♥❛❉❡s❞❡ ♣ ❥ ✐✮ ❥ ✐

11.11. Algoritmo de Gauss para triangularizar matrices

Ejercicio 11.11.1. Definir la función

❡❧❡♠❡♥t♦s◆♦◆✉❧♦s❈♦❧❉❡s❞❡ ✿✿ ◆✉♠ ❛ ❂❃ ▼❛tr✐③ ❛ ✲❃ ■♥t ✲❃ ■♥t ✲❃ ❬❛❪

tal que ✭❡❧❡♠❡♥t♦s◆♦◆✉❧♦s❈♦❧❉❡s❞❡ ♣ ❥ ✐✮ es la lista de los elementos no nulos de la co-

lumna ❥ a partir de la fila ✐. Por ejemplo,

258 Capítulo 11. Vectores y matrices

❣❤❝✐❃ ❧❡t ♣ ❂ ❧✐st❛▼❛tr✐③ ❬❬✸✱✷❪✱❬✺✱✶❪✱❬✵✱✹❪❪

❣❤❝✐❃ ❡❧❡♠❡♥t♦s◆♦◆✉❧♦s❈♦❧❉❡s❞❡ ♣ ✶ ✷

❬✺❪

Solución:

❡❧❡♠❡♥t♦s◆♦◆✉❧♦s❈♦❧❉❡s❞❡ ✿✿ ◆✉♠ ❛ ❂❃ ▼❛tr✐③ ❛ ✲❃ ■♥t ✲❃ ■♥t ✲❃ ❬❛❪

❡❧❡♠❡♥t♦s◆♦◆✉❧♦s❈♦❧❉❡s❞❡ ♣ ❥ ✐ ❂

❬① ⑤ ✭✭❦✱❥✬✮✱①✮ ❁✲ ❛ss♦❝s ♣✱ ① ✴❂ ✵✱ ❥✬ ❂❂ ❥✱ ❦ ❃❂ ✐❪

Ejercicio 11.11.2. Definir la función

❡①✐st❡❈♦❧◆♦◆✉❧❛❉❡s❞❡ ✿✿ ◆✉♠ ❛ ❂❃ ▼❛tr✐③ ❛ ✲❃ ■♥t ✲❃ ■♥t ✲❃ ❇♦♦❧

tal que ✭❡①✐st❡❈♦❧◆♦◆✉❧❛❉❡s❞❡ ♣ ❥ ✐✮ se verifica si la matriz ♣ tiene una columna a partir

de la ❥ tal que tiene algún elemento no nulo por debajo de la ❥; es decir, si la submatriz de

♣ obtenida eliminando las i − 1 primeras filas y las j − 1 primeras columnas es no nula. Por

ejemplo,

❣❤❝✐❃ ❧❡t ♣ ❂ ❧✐st❛▼❛tr✐③ ❬❬✸✱✷✱✺❪✱❬✺✱✵✱✵❪✱❬✻✱✵✱✵❪❪

❣❤❝✐❃ ❡①✐st❡❈♦❧◆♦◆✉❧❛❉❡s❞❡ ♣ ✷ ✷

❋❛❧s❡

❣❤❝✐❃ ❧❡t q ❂ ❧✐st❛▼❛tr✐③ ❬❬✸✱✷✱✺❪✱❬✺✱✼✱✵❪✱❬✻✱✵✱✵❪❪

❣❤❝✐❃ ❡①✐st❡❈♦❧◆♦◆✉❧❛❉❡s❞❡ q ✷ ✷

Solución:

❡①✐st❡❈♦❧◆♦◆✉❧❛❉❡s❞❡ ✿✿ ◆✉♠ ❛ ❂❃ ▼❛tr✐③ ❛ ✲❃ ■♥t ✲❃ ■♥t ✲❃ ❇♦♦❧

❡①✐st❡❈♦❧◆♦◆✉❧❛❉❡s❞❡ ♣ ❥ ✐ ❂

♦r ❬♥♦t ✭♥✉❧❧ ✭❡❧❡♠❡♥t♦s◆♦◆✉❧♦s❈♦❧❉❡s❞❡ ♣ ❧ ✐✮✮ ⑤ ❧ ❁✲ ❬❥✳✳♥❪❪

✇❤❡r❡ ♥ ❂ ♥✉♠❈♦❧✉♠♥❛s ♣

Ejercicio 11.11.3. Definir la función

♠❡♥♦r■♥❞✐❝❡❈♦❧◆♦◆✉❧❛❉❡s❞❡

✿✿ ◆✉♠ ❛ ❂❃ ▼❛tr✐③ ❛ ✲❃ ■♥t ✲❃ ■♥t ✲❃ ▼❛②❜❡ ■♥t

tal que ✭♠❡♥♦r■♥❞✐❝❡❈♦❧◆♦◆✉❧❛❉❡s❞❡ ♣ ❥ ✐✮ es el índice de la primera columna, a partir de

la ❥, en el que la matriz ♣ tiene un elemento no nulo a partir de la fila ✐. Por ejemplo,

❣❤❝✐❃ ❧❡t ♣ ❂ ❧✐st❛▼❛tr✐③ ❬❬✸✱✷✱✺❪✱❬✺✱✼✱✵❪✱❬✻✱✵✱✵❪❪

❣❤❝✐❃ ♠❡♥♦r■♥❞✐❝❡❈♦❧◆♦◆✉❧❛❉❡s❞❡ ♣ ✷ ✷

❏✉st ✷

❣❤❝✐❃ ❧❡t q ❂ ❧✐st❛▼❛tr✐③ ❬❬✸✱✷✱✺❪✱❬✺✱✵✱✵❪✱❬✻✱✵✱✷❪❪

❣❤❝✐❃ ♠❡♥♦r■♥❞✐❝❡❈♦❧◆♦◆✉❧❛❉❡s❞❡ q ✷ ✷

11.11. Algoritmo de Gauss para triangularizar matrices 259

❏✉st ✸

❣❤❝✐❃ ❧❡t r ❂ ❧✐st❛▼❛tr✐③ ❬❬✸✱✷✱✺❪✱❬✺✱✵✱✵❪✱❬✻✱✵✱✵❪❪

❣❤❝✐❃ ♠❡♥♦r■♥❞✐❝❡❈♦❧◆♦◆✉❧❛❉❡s❞❡ r ✷ ✷

◆♦t❤✐♥❣

Solución:

♠❡♥♦r■♥❞✐❝❡❈♦❧◆♦◆✉❧❛❉❡s❞❡ ✿✿ ✭◆✉♠ ❛✮ ❂❃ ▼❛tr✐③ ❛ ✲❃ ■♥t ✲❃ ■♥t ✲❃ ▼❛②❜❡ ■♥t

♠❡♥♦r■♥❞✐❝❡❈♦❧◆♦◆✉❧❛❉❡s❞❡ ♣ ❥ ✐

⑤ ♥✉❧❧ ❥s ❂ ◆♦t❤✐♥❣

⑤ ♦t❤❡r✇✐s❡ ❂ ❏✉st ✭❤❡❛❞ ❥s✮

✇❤❡r❡ ♥ ❂ ♥✉♠❈♦❧✉♠♥❛s ♣

❥s ❂ ❬❥✬ ⑤ ❥✬ ❁✲ ❬❥✳✳♥❪✱

♥♦t ✭♥✉❧❧ ✭❡❧❡♠❡♥t♦s◆♦◆✉❧♦s❈♦❧❉❡s❞❡ ♣ ❥✬ ✐✮✮❪

Ejercicio 11.11.4. Definir la función

❣❛✉ss❆✉① ✿✿ ❋r❛❝t✐♦♥❛❧ ❛ ❂❃ ▼❛tr✐③ ❛ ✲❃ ■♥t ✲❃ ■♥t ✲❃ ▼❛tr✐③ ❛

tal que ✭❣❛✉ss ♣✮ es la matriz que en el que las i− 1 primeras filas y las j− 1 primeras columnas

son las de ♣ y las restantes están triangularizadas por el método de Gauss; es decir,

1. Si la dimensión de p es (i, j), entonces p.

2. Si la submatriz de p sin las i − 1 primeras filas y las j − 1 primeras columnas es nulas,

entonces p.

3. En caso contrario, ✭❣❛✉ss❆✉① ♣✬ ✭✐✰✶✮ ✭❥✰✶✮✮ siendo

a) j′ la primera columna a partir de la j donde p tiene algún elemento no nulo a partir

de la fila i,

b) p1 la matriz obtenida intercambiando las columnas j y j′ de p,

c) i′ la primera fila a partir de la i donde la columna j de p1 tiene un elemento no nulo,

d) p2 la matriz obtenida intercambiando las filas i e i′ de la matriz p1 y

e) p′ la matriz obtenida anulando todos los elementos de la columna j de p2 por debajo

de la fila i.

Por ejemplo,

❣❤❝✐❃ ❧❡t ♣ ❂ ❧✐st❛▼❛tr✐③ ❬❬✶✳✵✱✷✱✸❪✱❬✶✱✷✱✹❪✱❬✸✱✷✱✺❪❪

❣❤❝✐❃ ♠❛tr✐③▲✐st❛ ✭❣❛✉ss❆✉① ♣ ✷ ✷✮

❬❬✶✳✵✱✷✳✵✱✸✳✵❪✱❬✶✳✵✱✷✳✵✱✹✳✵❪✱❬✷✳✵✱✵✳✵✱✶✳✵❪❪

Solución:

260 Capítulo 11. Vectores y matrices

❣❛✉ss❆✉① ✿✿ ❋r❛❝t✐♦♥❛❧ ❛ ❂❃ ▼❛tr✐③ ❛ ✲❃ ■♥t ✲❃ ■♥t ✲❃ ▼❛tr✐③ ❛

❣❛✉ss❆✉① ♣ ✐ ❥

⑤ ❞✐♠❡♥s✐♦♥ ♣ ❂❂ ✭✐✱❥✮ ❂ ♣ ✲✲ ✶

⑤ ♥♦t ✭❡①✐st❡❈♦❧◆♦◆✉❧❛❉❡s❞❡ ♣ ❥ ✐✮ ❂ ♣ ✲✲ ✷

⑤ ♦t❤❡r✇✐s❡ ❂ ❣❛✉ss❆✉① ♣✬ ✭✐✰✶✮ ✭❥✰✶✮ ✲✲ ✸

✇❤❡r❡ ❏✉st ❥✬ ❂ ♠❡♥♦r■♥❞✐❝❡❈♦❧◆♦◆✉❧❛❉❡s❞❡ ♣ ❥ ✐ ✲✲ ✸✳✶

♣✶ ❂ ✐♥t❡r❝❛♠❜✐❛❈♦❧✉♠♥❛s ❥ ❥✬ ♣ ✲✲ ✸✳✷

❏✉st ✐✬ ❂ ❜✉s❝❛■♥❞✐❝❡❉❡s❞❡ ♣✶ ❥ ✐ ✲✲ ✸✳✸

♣✷ ❂ ✐♥t❡r❝❛♠❜✐❛❋✐❧❛s ✐ ✐✬ ♣✶ ✲✲ ✸✳✹

♣✬ ❂ ❛♥✉❧❛❈♦❧✉♠♥❛❉❡s❞❡ ♣✷ ❥ ✐ ✲✲ ✸✳✺

Ejercicio 11.11.5. Definir la función

❣❛✉ss ✿✿ ❋r❛❝t✐♦♥❛❧ ❛ ❂❃ ▼❛tr✐③ ❛ ✲❃ ▼❛tr✐③ ❛

tal que ✭❣❛✉ss ♣✮ es la triangularización de la matriz ♣ por el método de Gauss. Por ejemplo,

❣❤❝✐❃ ❧❡t ♣ ❂ ❧✐st❛▼❛tr✐③ ❬❬✶✳✵✱✷✱✸❪✱❬✶✱✷✱✹❪✱❬✶✱✷✱✺❪❪

❣❤❝✐❃ ❣❛✉ss ♣

❛rr❛② ✭✭✶✱✶✮✱✭✸✱✸✮✮ ❬✭✭✶✱✶✮✱✶✳✵✮✱✭✭✶✱✷✮✱✸✳✵✮✱✭✭✶✱✸✮✱✷✳✵✮✱

✭✭✷✱✶✮✱✵✳✵✮✱✭✭✷✱✷✮✱✶✳✵✮✱✭✭✷✱✸✮✱✵✳✵✮✱

✭✭✸✱✶✮✱✵✳✵✮✱✭✭✸✱✷✮✱✵✳✵✮✱✭✭✸✱✸✮✱✵✳✵✮❪

❣❤❝✐❃ ♠❛tr✐③▲✐st❛ ✭❣❛✉ss ♣✮

❬❬✶✳✵✱✸✳✵✱✷✳✵❪✱❬✵✳✵✱✶✳✵✱✵✳✵❪✱❬✵✳✵✱✵✳✵✱✵✳✵❪❪

❣❤❝✐❃ ❧❡t ♣ ❂ ❧✐st❛▼❛tr✐③ ❬❬✸✳✵✱✷✱✸❪✱❬✶✱✷✱✹❪✱❬✶✱✷✱✺❪❪

❣❤❝✐❃ ♠❛tr✐③▲✐st❛ ✭❣❛✉ss ♣✮

❬❬✸✳✵✱✷✳✵✱✸✳✵❪✱❬✵✳✵✱✶✳✸✸✸✸✸✸✸✸✸✸✸✸✸✸✸✺✱✸✳✵❪✱❬✵✳✵✱✵✳✵✱✶✳✵❪❪

❣❤❝✐❃ ❧❡t ♣ ❂ ❧✐st❛▼❛tr✐③ ❬❬✸✪✶✱✷✱✸❪✱❬✶✱✷✱✹❪✱❬✶✱✷✱✺❪❪

❣❤❝✐❃ ♠❛tr✐③▲✐st❛ ✭❣❛✉ss ♣✮

❬❬✸ ✪ ✶✱✷ ✪ ✶✱✸ ✪ ✶❪✱❬✵ ✪ ✶✱✹ ✪ ✸✱✸ ✪ ✶❪✱❬✵ ✪ ✶✱✵ ✪ ✶✱✶ ✪ ✶❪❪

❣❤❝✐❃ ❧❡t ♣ ❂ ❧✐st❛▼❛tr✐③ ❬❬✶✳✵✱✵✱✸❪✱❬✶✱✵✱✹❪✱❬✸✱✵✱✺❪❪

❣❤❝✐❃ ♠❛tr✐③▲✐st❛ ✭❣❛✉ss ♣✮

❬❬✶✳✵✱✸✳✵✱✵✳✵❪✱❬✵✳✵✱✶✳✵✱✵✳✵❪✱❬✵✳✵✱✵✳✵✱✵✳✵❪❪

Solución:

❣❛✉ss ✿✿ ❋r❛❝t✐♦♥❛❧ ❛ ❂❃ ▼❛tr✐③ ❛ ✲❃ ▼❛tr✐③ ❛

❣❛✉ss ♣ ❂ ❣❛✉ss❆✉① ♣ ✶ ✶

11.12. Determinante

Ejercicio 11.12.1. Definir la función

11.13. Máximo de las sumas de elementos de una matriz en líneas distintas 261

❞❡t❡r♠✐♥❛♥t❡ ✿✿ ❋r❛❝t✐♦♥❛❧ ❛ ❂❃ ▼❛tr✐③ ❛ ✲❃ ❛

tal que ✭❞❡t❡r♠✐♥❛♥t❡ ♣✮ es el determinante de la matriz ♣. Por ejemplo,

❣❤❝✐❃ ❧❡t ♣ ❂ ❧✐st❛▼❛tr✐③ ❬❬✶✳✵✱✷✱✸❪✱❬✶✱✷✱✹❪✱❬✶✱✷✱✺❪❪

❣❤❝✐❃ ❞❡t❡r♠✐♥❛♥t❡ ♣

✵✳✵

❣❤❝✐❃ ❧❡t ♣ ❂ ❧✐st❛▼❛tr✐③ ❬❬✶✳✵✱✷✱✸❪✱❬✶✱✸✱✹❪✱❬✶✱✷✱✺❪❪

❣❤❝✐❃ ❞❡t❡r♠✐♥❛♥t❡ ♣

✷✳✵

Solución:

❞❡t❡r♠✐♥❛♥t❡ ✿✿ ❋r❛❝t✐♦♥❛❧ ❛ ❂❃ ▼❛tr✐③ ❛ ✲❃ ❛

❞❡t❡r♠✐♥❛♥t❡ ♣ ❂ ♣r♦❞✉❝t ✭❡❧❡♠s ✭❞✐❛❣♦♥❛❧Pr❛❧ ✭❣❛✉ss ♣✮✮✮

11.13. Máximo de las sumas de elementos de una matrizen líneas distintas

Ejercicio 11.13.1 (Problema 345 del proyecto Euler). Las matrices puede representarse me-

diante tablas cuyos índices son pares de números naturales:

t②♣❡ ▼❛tr✐③ ❂ ❆rr❛② ✭■♥t✱■♥t✮ ■♥t

Definir la función

♠❛①✐♠❛❙✉♠❛ ✿✿ ▼❛tr✐③ ✲❃ ■♥t

tal que ✭♠❛①✐♠❛❙✉♠❛ ♣✮ es el máximo de las sumas de las listas de elementos de la matriz ♣ tales

que cada elemento pertenece sólo a una fila y a una columna. Por ejemplo,

❣❤❝✐❃ ♠❛①✐♠❛❙✉♠❛ ✭❧✐st❆rr❛② ✭✭✶✱✶✮✱✭✸✱✸✮✮ ❬✶✱✷✱✸✱✽✱✹✱✾✱✺✱✻✱✼❪✮

✶✼

ya que las selecciones, y sus sumas, de la matriz

1 2 38 4 95 6 7

son

262 Capítulo 11. Vectores y matrices

Selección Suma

[1,4,7] 12

[1,9,6] 16

[2,8,7] 17

[2,9,5] 16

[3,8,6] 17

[3,4,5] 12

Hay dos selecciones con máxima suma: [2, 8, 7] y [3, 8, 6].

Solución:

t②♣❡ ▼❛tr✐③ ❂ ❆rr❛② ✭■♥t✱■♥t✮ ■♥t

♠❛①✐♠❛❙✉♠❛ ✿✿ ▼❛tr✐③ ✲❃ ■♥t

♠❛①✐♠❛❙✉♠❛ ♣ ❂ ♠❛①✐♠✉♠ ❬s✉♠ ①s ⑤ ①s ❁✲ s❡❧❡❝❝✐♦♥❡s ♣❪

donde ✭s❡❧❡❝❝✐♦♥❡s ♣✮ es la lista de las selecciones en las que cada elemento pertenecea un única fila y a una única columna de la matriz ♣. Por ejemplo,

❣❤❝✐❃ s❡❧❡❝❝✐♦♥❡s ✭❧✐st❆rr❛② ✭✭✶✱✶✮✱✭✸✱✸✮✮ ❬✶✱✷✱✸✱✽✱✹✱✾✱✺✱✻✱✼❪✮

❬❬✶✱✹✱✼❪✱❬✷✱✽✱✼❪✱❬✸✱✹✱✺❪✱❬✷✱✾✱✺❪✱❬✸✱✽✱✻❪✱❬✶✱✾✱✻❪❪

s❡❧❡❝❝✐♦♥❡s ✿✿ ▼❛tr✐③ ✲❃ ❬❬■♥t❪❪

s❡❧❡❝❝✐♦♥❡s ♣ ❂

❬❬♣✦✭✐✱❥✮ ⑤ ✭✐✱❥✮ ❁✲ ✐❥s❪ ⑤

✐❥s ❁✲ ❬③✐♣ ❬✶✳✳♥❪ ①s ⑤ ①s ❁✲ ♣❡r♠✉t❛t✐♦♥s ❬✶✳✳♥❪❪❪

✇❤❡r❡ ✭❴✱✭♠✱♥✮✮ ❂ ❜♦✉♥❞s ♣

Otra solución (mediante submatrices) es:

♠❛①✐♠❛❙✉♠❛✷ ✿✿ ▼❛tr✐③ ✲❃ ■♥t

♠❛①✐♠❛❙✉♠❛✷ ♣

⑤ ✭♠✱♥✮ ❂❂ ✭✶✱✶✮ ❂ ♣✦✭✶✱✶✮

⑤ ♦t❤❡r✇✐s❡ ❂ ♠❛①✐♠✉♠ ❬♣✦✭✶✱❥✮

✰ ♠❛①✐♠❛❙✉♠❛✷ ✭s✉❜♠❛tr✐③ ✶ ❥ ♣✮ ⑤ ❥ ❁✲ ❬✶✳✳♥❪❪

✇❤❡r❡ ✭♠✱♥✮ ❂ ❞✐♠❡♥s✐♦♥ ♣

donde

✭❞✐♠❡♥s✐♦♥ ♣✮ es la dimensión de la matriz ♣.

11.13. Máximo de las sumas de elementos de una matriz en líneas distintas 263

❞✐♠❡♥s✐♦♥ ✿✿ ▼❛tr✐③ ✲❃ ✭■♥t✱■♥t✮

❞✐♠❡♥s✐♦♥ ❂ s♥❞ ✳ ❜♦✉♥❞s

✭s✉❜♠❛tr✐③ ✐ ❥ ♣✮ es la matriz obtenida a partir de la ♣ eliminando la fila ✐ y lacolumna ❥. Por ejemplo,

❣❤❝✐❃ s✉❜♠❛tr✐③ ✷ ✸ ✭❧✐st❆rr❛② ✭✭✶✱✶✮✱✭✸✱✸✮✮ ❬✶✱✷✱✸✱✽✱✹✱✾✱✺✱✻✱✼❪✮

❛rr❛② ✭✭✶✱✶✮✱✭✷✱✷✮✮ ❬✭✭✶✱✶✮✱✶✮✱✭✭✶✱✷✮✱✷✮✱✭✭✷✱✶✮✱✺✮✱✭✭✷✱✷✮✱✻✮❪

s✉❜♠❛tr✐③ ✿✿ ■♥t ✲❃ ■♥t ✲❃ ▼❛tr✐③ ✲❃ ▼❛tr✐③

s✉❜♠❛tr✐③ ✐ ❥ ♣ ❂

❛rr❛② ✭✭✶✱✶✮✱ ✭♠✲✶✱♥ ✲✶✮✮

❬✭✭❦✱❧✮✱ ♣ ✦ ❢ ❦ ❧✮ ⑤ ❦ ❁✲ ❬✶✳✳♠✲✶❪✱ ❧ ❁✲ ❬✶✳✳ ♥✲✶❪❪

✇❤❡r❡ ✭♠✱♥✮ ❂ ❞✐♠❡♥s✐♦♥ ♣

❢ ❦ ❧ ⑤ ❦ ❁ ✐ ✫✫ ❧ ❁ ❥ ❂ ✭❦✱❧✮

⑤ ❦ ❃❂ ✐ ✫✫ ❧ ❁ ❥ ❂ ✭❦✰✶✱❧✮

⑤ ❦ ❁ ✐ ✫✫ ❧ ❃❂ ❥ ❂ ✭❦✱❧✰✶✮

⑤ ♦t❤❡r✇✐s❡ ❂ ✭❦✰✶✱❧✰✶✮

264 Capítulo 11. Vectores y matrices

Capítulo 12

Relaciones binarias homogéneas

Contenido12.1 Tipo de dato de las relaciones binarias . . . . . . . . . . . . . . . . . . . 266

12.2 Universo de una relación . . . . . . . . . . . . . . . . . . . . . . . . . . 266

12.3 Grafo de una relación . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267

12.4 Relaciones reflexivas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267

12.5 Relaciones simétricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267

12.6 Reconocimiento de subconjuntos . . . . . . . . . . . . . . . . . . . . . . 268

12.7 Composición de relaciones . . . . . . . . . . . . . . . . . . . . . . . . . 268

12.8 Relación transitiva . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268

12.9 Relación de equivalencia . . . . . . . . . . . . . . . . . . . . . . . . . . . 269

12.10 Relación irreflexiva . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269

12.11 Relación antisimétrica . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269

12.12 Relación total . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270

12.13 Clausura reflexiva . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271

12.14 Clausura simétrica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272

12.15 Clausura transitiva . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273

El objetivo de esta relación de ejercicios es definir propiedades y operaciones sobrelas relaciones binarias (homogéneas).

Como referencia se puede usar el artículo de la wikipedia Relación binaria1

1❤tt♣✿✴✴❡s✳✇✐❦✐♣❡❞✐❛✳♦r❣✴✇✐❦✐✴❘❡❧❛❝✐ó♥❴❜✐♥❛r✐❛

265

266 Capítulo 12. Relaciones binarias homogéneas

Nota. Se usarán las siguientes librerías auxiliares

✐♠♣♦rt ❚❡st✳◗✉✐❝❦❈❤❡❝❦

✐♠♣♦rt ❉❛t❛✳▲✐st

12.1. Tipo de dato de las relaciones binarias

Ejercicio 12.1.1. Una relación binaria R sobre un conjunto A puede representar mediante un

par ✭①s✱♣s✮ donde ①s es la lista de los elementos de A (el universo de R) y ❭❜❡❣✐♥④s❡s✐♦♥⑥ es

la lista de pares de R (el grafo de R).

Definir el tipo de dato ✭❘❡❧ ❛✮ para representar las relaciones binarias sobre ❛.

Solución:

t②♣❡ ❘❡❧ ❛ ❂ ✭❬❛❪✱❬✭❛✱❛✮❪✮

Nota. En los ejemplos usaremos las siguientes relaciones binarias:

r✶✱ r✷✱ r✸ ✿✿ ❘❡❧ ■♥t

r✶ ❂ ✭❬✶✳✳✾❪✱❬✭✶✱✸✮✱ ✭✷✱✻✮✱ ✭✽✱✾✮✱ ✭✷✱✼✮❪✮

r✷ ❂ ✭❬✶✳✳✾❪✱❬✭✶✱✸✮✱ ✭✷✱✻✮✱ ✭✽✱✾✮✱ ✭✸✱✼✮❪✮

r✸ ❂ ✭❬✶✳✳✾❪✱❬✭✶✱✸✮✱ ✭✷✱✻✮✱ ✭✽✱✾✮✱ ✭✸✱✻✮❪✮

12.2. Universo de una relación

Ejercicio 12.2.1. Definir la función

✉♥✐✈❡rs♦ ✿✿ ❊q ❛ ❂❃ ❘❡❧ ❛ ✲❃ ❬❛❪

tal que ✭✉♥✐✈❡rs♦ r✮ es el universo de la relación r. Por ejemplo,

r✶ ❂❂ ✭❬✶✱✷✱✸✱✹✱✺✱✻✱✼✱✽✱✾❪✱❬✭✶✱✸✮✱✭✷✱✻✮✱✭✽✱✾✮✱✭✷✱✼✮❪✮

✉♥✐✈❡rs♦ r✶ ❂❂ ❬✶✱✷✱✸✱✹✱✺✱✻✱✼✱✽✱✾❪

Solución:

✉♥✐✈❡rs♦ ✿✿ ❊q ❛ ❂❃ ❘❡❧ ❛ ✲❃ ❬❛❪

✉♥✐✈❡rs♦ ✭✉s✱❴✮ ❂ ✉s

12.3. Grafo de una relación 267

12.3. Grafo de una relación

Ejercicio 12.3.1. Definir la función

❣r❛❢♦ ✿✿ ❊q ❛ ❂❃ ✭❬❛❪✱❬✭❛✱❛✮❪✮ ✲❃ ❬✭❛✱❛✮❪

tal que ✭❣r❛❢♦ r✮ es el grafo de la relación r. Por ejemplo,

r✶ ❂❂ ✭❬✶✱✷✱✸✱✹✱✺✱✻✱✼✱✽✱✾❪✱❬✭✶✱✸✮✱✭✷✱✻✮✱✭✽✱✾✮✱✭✷✱✼✮❪✮

❣r❛❢♦ r✶ ❂❂ ❬✭✶✱✸✮✱✭✷✱✻✮✱✭✽✱✾✮✱✭✷✱✼✮❪

Solución:

❣r❛❢♦ ✿✿ ❊q ❛ ❂❃ ✭❬❛❪✱❬✭❛✱❛✮❪✮ ✲❃ ❬✭❛✱❛✮❪

❣r❛❢♦ ✭❴✱♣s✮ ❂ ♣s

12.4. Relaciones reflexivas

Ejercicio 12.4.1. Definir la función

r❡❢❧❡①✐✈❛ ✿✿ ❊q ❛ ❂❃ ❘❡❧ ❛ ✲❃ ❇♦♦❧

tal que ✭r❡❢❧❡①✐✈❛ r✮ se verifica si la relación r es reflexiva. Por ejemplo,

r❡❢❧❡①✐✈❛ ✭❬✶✱✸❪✱❬✭✶✱✶✮✱✭✶✱✸✮✱✭✸✱✸✮❪✮ ❂❂ ❚r✉❡

r❡❢❧❡①✐✈❛ ✭❬✶✱✷✱✸❪✱❬✭✶✱✶✮✱✭✶✱✸✮✱✭✸✱✸✮❪✮ ❂❂ ❋❛❧s❡

Solución:

r❡❢❧❡①✐✈❛ ✿✿ ❊q ❛ ❂❃ ❘❡❧ ❛ ✲❃ ❇♦♦❧

r❡❢❧❡①✐✈❛ ✭✉s✱♣s✮ ❂ ❛♥❞ ❬✭①✱①✮ ❵❡❧❡♠❵ ♣s ⑤ ① ❁✲ ✉s❪

12.5. Relaciones simétricas

Ejercicio 12.5.1. Definir la función

s✐♠❡tr✐❝❛ ✿✿ ❊q ❛ ❂❃ ❘❡❧ ❛ ✲❃ ❇♦♦❧

tal que ✭s✐♠❡tr✐❝❛ r✮ se verifica si la relación r es simétrica. Por ejemplo,

s✐♠❡tr✐❝❛ ✭❬✶✱✸❪✱❬✭✶✱✶✮✱✭✶✱✸✮✱✭✸✱✶✮❪✮ ❂❂ ❚r✉❡

s✐♠❡tr✐❝❛ ✭❬✶✱✸❪✱❬✭✶✱✶✮✱✭✶✱✸✮✱✭✸✱✷✮❪✮ ❂❂ ❋❛❧s❡

s✐♠❡tr✐❝❛ ✭❬✶✱✸❪✱❬❪✮ ❂❂ ❚r✉❡

Solución:

s✐♠❡tr✐❝❛ ✿✿ ❊q ❛ ❂❃ ❘❡❧ ❛ ✲❃ ❇♦♦❧

s✐♠❡tr✐❝❛ ✭✉s✱♣s✮ ❂ ❛♥❞ ❬✭②✱①✮ ❵❡❧❡♠❵ ♣s ⑤ ✭①✱②✮ ❁✲ ♣s❪

268 Capítulo 12. Relaciones binarias homogéneas

12.6. Reconocimiento de subconjuntos

Ejercicio 12.6.1. Definir la función

s✉❜❝♦♥❥✉♥t♦ ✿✿ ❊q ❛ ❂❃ ❬❛❪ ✲❃ ❬❛❪ ✲❃ ❇♦♦❧

tal que ✭s✉❜❝♦♥❥✉♥t♦ ①s ②s✮ se verifica si ①s es un subconjunto de ②s. Por ejemplo,

s✉❜❝♦♥❥✉♥t♦ ❬✶✱✸❪ ❬✸✱✶✱✺❪ ❂❂ ❚r✉❡

s✉❜❝♦♥❥✉♥t♦ ❬✸✱✶✱✺❪ ❬✶✱✸❪ ❂❂ ❋❛❧s❡

Solución:

s✉❜❝♦♥❥✉♥t♦ ✿✿ ❊q ❛ ❂❃ ❬❛❪ ✲❃ ❬❛❪ ✲❃ ❇♦♦❧

s✉❜❝♦♥❥✉♥t♦ ①s ②s ❂ ❛♥❞ ❬① ❵❡❧❡♠❵②s ⑤ ① ❁✲ ①s❪

12.7. Composición de relaciones

Ejercicio 12.7.1. Definir la función

❝♦♠♣♦s✐❝✐♦♥ ✿✿ ❊q ❛ ❂❃ ❘❡❧ ❛ ✲❃ ❘❡❧ ❛ ✲❃ ❘❡❧ ❛

tal que ✭❝♦♠♣♦s✐❝✐♦♥ r s✮ es la composición de las relaciones r y s. Por ejemplo,

❣❤❝✐❃ ❝♦♠♣♦s✐❝✐♦♥ ✭❬✶✱✷❪✱❬✭✶✱✷✮✱✭✷✱✷✮❪✮ ✭❬✶✱✷❪✱❬✭✷✱✶✮❪✮

✭❬✶✱✷❪✱❬✭✶✱✶✮✱✭✷✱✶✮❪✮

Solución:

❝♦♠♣♦s✐❝✐♦♥ ✿✿ ❊q ❛ ❂❃ ❘❡❧ ❛ ✲❃ ❘❡❧ ❛ ✲❃ ❘❡❧ ❛

❝♦♠♣♦s✐❝✐♦♥ ✭①s✱♣s✮ ✭❴✱qs✮ ❂

✭①s✱❬✭①✱③✮ ⑤ ✭①✱②✮ ❁✲ ♣s✱ ✭②✬✱③✮ ❁✲ qs✱ ② ❂❂ ②✬❪✮

12.8. Relación transitiva

Ejercicio 12.8.1. Definir la función

tr❛♥s✐t✐✈❛ ✿✿ ❊q ❛ ❂❃ ❘❡❧ ❛ ✲❃ ❇♦♦❧

tal que ✭tr❛♥s✐t✐✈❛ r✮ se verifica si la relación r es transitiva. Por ejemplo,

tr❛♥s✐t✐✈❛ ✭❬✶✱✸✱✺❪✱❬✭✶✱✶✮✱✭✶✱✸✮✱✭✸✱✶✮✱✭✸✱✸✮✱✭✺✱✺✮❪✮ ❂❂ ❚r✉❡

tr❛♥s✐t✐✈❛ ✭❬✶✱✸✱✺❪✱❬✭✶✱✶✮✱✭✶✱✸✮✱✭✸✱✶✮✱✭✺✱✺✮❪✮ ❂❂ ❋❛❧s❡

Solución:

tr❛♥s✐t✐✈❛ ✿✿ ❊q ❛ ❂❃ ❘❡❧ ❛ ✲❃ ❇♦♦❧

tr❛♥s✐t✐✈❛ r❅✭①s✱♣s✮ ❂

s✉❜❝♦♥❥✉♥t♦ ✭❣r❛❢♦ ✭❝♦♠♣♦s✐❝✐♦♥ r r✮✮ ♣s

12.9. Relación de equivalencia 269

12.9. Relación de equivalencia

Ejercicio 12.9.1. Definir la función

❡s❊q✉✐✈❛❧❡♥❝✐❛ ✿✿ ❊q ❛ ❂❃ ❘❡❧ ❛ ✲❃ ❇♦♦❧

tal que ✭❡s❊q✉✐✈❛❧❡♥❝✐❛ r✮ se verifica si la relación r es de equivalencia. Por ejemplo,

❣❤❝✐❃ ❡s❊q✉✐✈❛❧❡♥❝✐❛ ✭❬✶✱✸✱✺❪✱❬✭✶✱✶✮✱✭✶✱✸✮✱✭✸✱✶✮✱✭✸✱✸✮✱✭✺✱✺✮❪✮

❚r✉❡

❣❤❝✐❃ ❡s❊q✉✐✈❛❧❡♥❝✐❛ ✭❬✶✱✷✱✸✱✺❪✱❬✭✶✱✶✮✱✭✶✱✸✮✱✭✸✱✶✮✱✭✸✱✸✮✱✭✺✱✺✮❪✮

❋❛❧s❡

❣❤❝✐❃ ❡s❊q✉✐✈❛❧❡♥❝✐❛ ✭❬✶✱✸✱✺❪✱❬✭✶✱✶✮✱✭✶✱✸✮✱✭✸✱✸✮✱✭✺✱✺✮❪✮

❋❛❧s❡

Solución:

❡s❊q✉✐✈❛❧❡♥❝✐❛ ✿✿ ❊q ❛ ❂❃ ❘❡❧ ❛ ✲❃ ❇♦♦❧

❡s❊q✉✐✈❛❧❡♥❝✐❛ r ❂ r❡❢❧❡①✐✈❛ r ✫✫ s✐♠❡tr✐❝❛ r ✫✫ tr❛♥s✐t✐✈❛ r

12.10. Relación irreflexiva

Ejercicio 12.10.1. Definir la función

✐rr❡❢❧❡①✐✈❛ ✿✿ ❊q ❛ ❂❃ ❘❡❧ ❛ ✲❃ ❇♦♦❧

tal que ✭✐rr❡❢❧❡①✐✈❛ r✮ se verifica si la relación r es irreflexiva; es decir, si ningún elemento

de su universo está relacionado con él mismo. Por ejemplo,

✐rr❡❢❧❡①✐✈❛ ✭❬✶✱✷✱✸❪✱❬✭✶✱✷✮✱✭✷✱✶✮✱✭✷✱✸✮❪✮ ❂❂ ❚r✉❡

✐rr❡❢❧❡①✐✈❛ ✭❬✶✱✷✱✸❪✱❬✭✶✱✷✮✱✭✷✱✶✮✱✭✸✱✸✮❪✮ ❂❂ ❋❛❧s❡

Solución:

✐rr❡❢❧❡①✐✈❛ ✿✿ ❊q ❛ ❂❃ ❘❡❧ ❛ ✲❃ ❇♦♦❧

✐rr❡❢❧❡①✐✈❛ ✭①s✱♣s✮ ❂ ❛♥❞ ❬✭①✱①✮ ❵♥♦t❊❧❡♠❵ ♣s ⑤ ① ❁✲ ①s❪

12.11. Relación antisimétrica

Ejercicio 12.11.1. Definir la función

❛♥t✐s✐♠❡tr✐❝❛ ✿✿ ❊q ❛ ❂❃ ❘❡❧ ❛ ✲❃ ❇♦♦❧

270 Capítulo 12. Relaciones binarias homogéneas

tal que ✭❛♥t✐s✐♠❡tr✐❝❛ r✮ se verifica si la relación r es antisimétrica; es decir, si ✭①✱②✮ e

✭②✱①✮ están relacionado, entonces ①❂②. Por ejemplo,

❛♥t✐s✐♠❡tr✐❝❛ ✭❬✶✱✷❪✱❬✭✶✱✷✮❪✮ ❂❂ ❚r✉❡

❛♥t✐s✐♠❡tr✐❝❛ ✭❬✶✱✷❪✱❬✭✶✱✷✮✱✭✷✱✶✮❪✮ ❂❂ ❋❛❧s❡

❛♥t✐s✐♠❡tr✐❝❛ ✭❬✶✱✷❪✱❬✭✶✱✶✮✱✭✷✱✶✮❪✮ ❂❂ ❚r✉❡

Solución:

❛♥t✐s✐♠❡tr✐❝❛ ✿✿ ❊q ❛ ❂❃ ❘❡❧ ❛ ✲❃ ❇♦♦❧

❛♥t✐s✐♠❡tr✐❝❛ ✭❴✱♣s✮ ❂

♥✉❧❧ ❬✭①✱②✮ ⑤ ✭①✱②✮ ❁✲ ♣s✱ ① ✴❂ ②✱ ✭②✱①✮ ❵❡❧❡♠❵ ♣s❪

Otra definición es

❛♥t✐s✐♠❡tr✐❝❛✬ ✿✿ ❊q ❛ ❂❃ ❘❡❧ ❛ ✲❃ ❇♦♦❧

❛♥t✐s✐♠❡tr✐❝❛✬ ✭①s✱♣s✮ ❂

❛♥❞ ❬✭✭①✱②✮ ❵❡❧❡♠❵ ♣s ✫✫ ✭②✱①✮ ❵❡❧❡♠❵ ♣s✮ ✲✲❃ ✭① ❂❂ ②✮

⑤ ① ❁✲ ①s✱ ② ❁✲ ①s❪

✇❤❡r❡ ♣ ✲✲❃ q ❂ ♥♦t ♣ ⑤⑤ q

Las dos definiciones son equivalentes

♣r♦♣❴❛♥t✐s✐♠❡tr✐❝❛ ✿✿ ❘❡❧ ■♥t ✲❃ ❇♦♦❧

♣r♦♣❴❛♥t✐s✐♠❡tr✐❝❛ r ❂

❛♥t✐s✐♠❡tr✐❝❛ r ❂❂ ❛♥t✐s✐♠❡tr✐❝❛✬ r

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴❛♥t✐s✐♠❡tr✐❝❛

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

12.12. Relación total

Ejercicio 12.12.1. Definir la función

t♦t❛❧ ✿✿ ❊q ❛ ❂❃ ❘❡❧ ❛ ✲❃ ❇♦♦❧

tal que ✭t♦t❛❧ r✮ se verifica si la relación r es total; es decir, si para cualquier par ①, ② de

elementos del universo de r, se tiene que ① está relacionado con ② ó ② etá relacionado con ①. Por

ejemplo,

12.13. Clausura reflexiva 271

t♦t❛❧ ✭❬✶✱✸❪✱❬✭✶✱✶✮✱✭✸✱✶✮✱✭✸✱✸✮❪✮ ❂❂ ❚r✉❡

t♦t❛❧ ✭❬✶✱✸❪✱❬✭✶✱✶✮✱✭✸✱✶✮❪✮ ❂❂ ❋❛❧s❡

t♦t❛❧ ✭❬✶✱✸❪✱❬✭✶✱✶✮✱✭✸✱✸✮❪✮ ❂❂ ❋❛❧s❡

Solución:

t♦t❛❧ ✿✿ ❊q ❛ ❂❃ ❘❡❧ ❛ ✲❃ ❇♦♦❧

t♦t❛❧ ✭①s✱♣s✮ ❂

❛♥❞ ❬✭①✱②✮ ❵❡❧❡♠❵ ♣s ⑤⑤ ✭②✱①✮ ❵❡❧❡♠❵ ♣s ⑤ ① ❁✲ ①s✱ ② ❁✲ ①s❪

Ejercicio 12.12.2. Comprobar con QuickCheck que las relaciones totales son reflexivas.

Solución: La propiedad es

♣r♦♣❴t♦t❛❧❴r❡❢❧❡①✐✈❛ ✿✿ ❘❡❧ ■♥t ✲❃ Pr♦♣❡rt②

♣r♦♣❴t♦t❛❧❴r❡❢❧❡①✐✈❛ r ❂

t♦t❛❧ r ❂❂❃ r❡❢❧❡①✐✈❛ r

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴t♦t❛❧❴r❡❢❧❡①✐✈❛

✯✯✯ ●❛✈❡ ✉♣✦ P❛ss❡❞ ♦♥❧② ✶✾ t❡sts✳

12.13. Clausura reflexiva

Ejercicio 12.13.1. Definir la función

❝❧❛✉s✉r❛❘❡❢❧❡①✐✈❛ ✿✿ ❊q ❛ ❂❃ ❘❡❧ ❛ ✲❃ ❘❡❧ ❛

tal que ✭❝❧❛✉s✉r❛❘❡❢❧❡①✐✈❛ r✮ es la clausura reflexiva de r; es decir, la menor relación refle-

xiva que contiene a r. Por ejemplo,

❣❤❝✐❃ ❝❧❛✉s✉r❛❘❡❢❧❡①✐✈❛ ✭❬✶✱✸❪✱❬✭✶✱✶✮✱✭✸✱✶✮❪✮

✭❬✶✱✸❪✱❬✭✶✱✶✮✱✭✸✱✶✮✱✭✸✱✸✮❪✮

Solución:

❝❧❛✉s✉r❛❘❡❢❧❡①✐✈❛ ✿✿ ❊q ❛ ❂❃ ❘❡❧ ❛ ✲❃ ❘❡❧ ❛

❝❧❛✉s✉r❛❘❡❢❧❡①✐✈❛ ✭①s✱♣s✮ ❂

✭①s✱ ♣s ❵✉♥✐♦♥❵ ❬✭①✱①✮ ⑤ ① ❁✲ ①s❪✮

Ejercicio 12.13.2. Comprobar con QuickCheck que ✭❝❧❛✉s✉r❛❘❡❢❧❡①✐✈❛ r✮ es reflexiva.

Solución: La propiedad es

272 Capítulo 12. Relaciones binarias homogéneas

♣r♦♣❴❈❧❛✉s✉r❛❘❡❢❧❡①✐✈❛ ✿✿ ❘❡❧ ■♥t ✲❃ ❇♦♦❧

♣r♦♣❴❈❧❛✉s✉r❛❘❡❢❧❡①✐✈❛ r ❂

r❡❢❧❡①✐✈❛ ✭❝❧❛✉s✉r❛❘❡❢❧❡①✐✈❛ r✮

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴❈❧❛✉s✉r❛❘❡❢❧

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

12.14. Clausura simétrica

Ejercicio 12.14.1. Definir la función

❝❧❛✉s✉r❛❙✐♠❡tr✐❝❛ ✿✿ ❊q ❛ ❂❃ ❘❡❧ ❛ ✲❃ ❘❡❧ ❛

tal que ✭❝❧❛✉s✉r❛❙✐♠❡tr✐❝❛ r✮ es la clausura simétrica de r; es decir, la menor relación simé-

trica que contiene a r. Por ejemplo,

❣❤❝✐❃ ❝❧❛✉s✉r❛❙✐♠❡tr✐❝❛ ✭❬✶✱✸✱✺❪✱❬✭✶✱✶✮✱✭✸✱✶✮✱✭✶✱✺✮❪✮

✭❬✶✱✸✱✺❪✱❬✭✶✱✶✮✱✭✸✱✶✮✱✭✶✱✺✮✱✭✶✱✸✮✱✭✺✱✶✮❪✮

Solución:

❝❧❛✉s✉r❛❙✐♠❡tr✐❝❛ ✿✿ ❊q ❛ ❂❃ ❘❡❧ ❛ ✲❃ ❘❡❧ ❛

❝❧❛✉s✉r❛❙✐♠❡tr✐❝❛ ✭①s✱♣s✮ ❂

✭①s✱ ♣s ❵✉♥✐♦♥❵ ❬✭②✱①✮ ⑤ ✭①✱②✮ ❁✲ ♣s❪✮

Ejercicio 12.14.2. Comprobar con QuickCheck que ✭❝❧❛✉s✉r❛❙✐♠❡tr✐❝❛ r✮ es simétrica.

Solución: La propiedad es

♣r♦♣❴❈❧❛✉s✉r❛❙✐♠❡tr✐❝❛ ✿✿ ❘❡❧ ■♥t ✲❃ ❇♦♦❧

♣r♦♣❴❈❧❛✉s✉r❛❙✐♠❡tr✐❝❛ r ❂

s✐♠❡tr✐❝❛ ✭❝❧❛✉s✉r❛❙✐♠❡tr✐❝❛ r✮

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴❈❧❛✉s✉r❛❙✐♠❡tr✐❝❛

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

12.15. Clausura transitiva 273

12.15. Clausura transitiva

Ejercicio 12.15.1. Definir la función

❝❧❛✉s✉r❛❚r❛♥s✐t✐✈❛ ✿✿ ❊q ❛ ❂❃ ❘❡❧ ❛ ✲❃ ❘❡❧ ❛

tal que ✭❝❧❛✉s✉r❛❚r❛♥s✐t✐✈❛ r✮ es la clausura transitiva de r; es decir, la menor relación

transitiva que contiene a r. Por ejemplo,

❣❤❝✐❃ ❝❧❛✉s✉r❛❚r❛♥s✐t✐✈❛ ✭❬✶✳✳✻❪✱❬✭✶✱✷✮✱✭✷✱✺✮✱✭✺✱✻✮❪✮

✭❬✶✱✷✱✸✱✹✱✺✱✻❪✱❬✭✶✱✷✮✱✭✷✱✺✮✱✭✺✱✻✮✱✭✶✱✺✮✱✭✷✱✻✮✱✭✶✱✻✮❪✮

Solución:

❝❧❛✉s✉r❛❚r❛♥s✐t✐✈❛ ✿✿ ❊q ❛ ❂❃ ❘❡❧ ❛ ✲❃ ❘❡❧ ❛

❝❧❛✉s✉r❛❚r❛♥s✐t✐✈❛ ✭①s✱♣s✮ ❂ ✭①s✱ ❛✉① ♣s✮

✇❤❡r❡ ❛✉① ①s ⑤ ❝❡rr❛❞♦❚r ①s ❂ ①s

⑤ ♦t❤❡r✇✐s❡ ❂ ❛✉① ✭①s ❵✉♥✐♦♥❵ ❝♦♠♣ ①s ①s✮

❝❡rr❛❞♦❚r r ❂ s✉❜❝♦♥❥✉♥t♦ ✭❝♦♠♣ r r✮ r

❝♦♠♣ r s ❂ ❬✭①✱③✮ ⑤ ✭①✱②✮ ❁✲ r✱ ✭②✬✱③✮ ❁✲ s✱ ② ❂❂ ②✬❪

Ejercicio 12.15.2. Comprobar con QuickCheck que ✭❝❧❛✉s✉r❛❚r❛♥s✐t✐✈❛ r✮ es transitiva.

Solución: La propiedad es

♣r♦♣❴❈❧❛✉s✉r❛❚r❛♥s✐t✐✈❛ ✿✿ ❘❡❧ ■♥t ✲❃ ❇♦♦❧

♣r♦♣❴❈❧❛✉s✉r❛❚r❛♥s✐t✐✈❛ r ❂

tr❛♥s✐t✐✈❛ ✭❝❧❛✉s✉r❛❚r❛♥s✐t✐✈❛ r✮

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴❈❧❛✉s✉r❛❚r❛♥s✐t✐✈❛

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

274 Capítulo 12. Relaciones binarias homogéneas

Capítulo 13

Operaciones con conjuntos

Contenido13.1 Representación de conjuntos y operaciones básicas . . . . . . . . . . . 276

13.1.1 El tipo de los conjuntos . . . . . . . . . . . . . . . . . . . . . . . 276

13.1.2 El conjunto vacío . . . . . . . . . . . . . . . . . . . . . . . . . . . 277

13.1.3 Reconocimiento del conjunto vacío . . . . . . . . . . . . . . . . 277

13.1.4 Pertenencia de un elemento a un conjunto . . . . . . . . . . . . 277

13.1.5 Inserción de un elemento en un conjunto . . . . . . . . . . . . . 278

13.1.6 Eliminación de un elemento de un conjunto . . . . . . . . . . . 278

13.2 Ejercicios sobre conjuntos . . . . . . . . . . . . . . . . . . . . . . . . . . 278

13.2.1 Reconocimiento de subconjuntos . . . . . . . . . . . . . . . . . 278

13.2.2 Reconocimiento de subconjunto propio . . . . . . . . . . . . . . 280

13.2.3 Conjunto unitario . . . . . . . . . . . . . . . . . . . . . . . . . . 281

13.2.4 Cardinal de un conjunto . . . . . . . . . . . . . . . . . . . . . . 281

13.2.5 Unión de conjuntos . . . . . . . . . . . . . . . . . . . . . . . . . 281

13.2.6 Unión de una lista de conjuntos . . . . . . . . . . . . . . . . . . 282

13.2.7 Intersección de conjuntos . . . . . . . . . . . . . . . . . . . . . . 283

13.2.8 Intersección de una lista de conjuntos . . . . . . . . . . . . . . . 284

13.2.9 Conjuntos disjuntos . . . . . . . . . . . . . . . . . . . . . . . . . 284

13.2.10 Diferencia de conjuntos . . . . . . . . . . . . . . . . . . . . . . . 285

13.2.11 Diferencia simétrica de conjuntos . . . . . . . . . . . . . . . . . 285

13.2.12 Filtrado en conjuntos . . . . . . . . . . . . . . . . . . . . . . . . 285

13.2.13 Partición de un conjunto según una propiedad . . . . . . . . . 286

275

276 Capítulo 13. Operaciones con conjuntos

13.2.14 División de un conjunto según un elemento . . . . . . . . . . . 286

13.2.15 Aplicación de una función a un conjunto . . . . . . . . . . . . . 286

13.2.16 Todos los elementos verifican una propiedad . . . . . . . . . . 287

13.2.17 Algunos elementos verifican una propiedad . . . . . . . . . . . 287

13.2.18 Producto cartesiano . . . . . . . . . . . . . . . . . . . . . . . . . 287

13.2.19 Orden en el tipo de los conjuntos . . . . . . . . . . . . . . . . . 288

13.2.20 Conjunto potencia . . . . . . . . . . . . . . . . . . . . . . . . . . 288

13.2.21 Verificación de propiedades de conjuntos . . . . . . . . . . . . 288

El objetivo de este capítulo de ejercicios es definir operaciones entre conjuntos, re-presentados mediante listas ordenadas sin repeticiones. Esta, y otras representaciones,se encuentran en el tema 17 de [1]. Pra hace el capítulo autocontenido mostramos acontinuación las definiciones de dicha representación.

Nota. La cabecera del módulo es

④✲★ ▲❆◆●❯❆●❊ ❋❧❡①✐❜❧❡■♥st❛♥❝❡s ★✲⑥

✐♠♣♦rt ❚❡st✳◗✉✐❝❦❈❤❡❝❦

13.1. Representación de conjuntos y operaciones básicas

13.1.1. El tipo de los conjuntos

El tipo de los conjuntos (con elementos de tipo ❛) como listas ordenadas sin repeti-ciones es ❈♦♥❥ ❛:

♥❡✇t②♣❡ ❈♦♥❥ ❛ ❂ ❈❥ ❬❛❪

❞❡r✐✈✐♥❣ ❊q

Para facilitar la escritura de los conjuntos se define

✐♥st❛♥❝❡ ✭❙❤♦✇ ❛✮ ❂❃ ❙❤♦✇ ✭❈♦♥❥ ❛✮ ✇❤❡r❡

s❤♦✇sPr❡❝ ❴ ✭❈❥ s✮ ❝❛❞ ❂ s❤♦✇❈♦♥❥ s ❝❛❞

s❤♦✇❈♦♥❥ ❬❪ ❝❛❞ ❂ s❤♦✇❙tr✐♥❣ ✧④⑥✧ ❝❛❞

s❤♦✇❈♦♥❥ ✭①✿①s✮ ❝❛❞ ❂ s❤♦✇❈❤❛r ✬④✬ ✭s❤♦✇s ① ✭s❤♦✇❧ ①s ❝❛❞✮✮

✇❤❡r❡ s❤♦✇❧ ❬❪ ❝❛❞ ❂ s❤♦✇❈❤❛r ✬⑥✬ ❝❛❞

s❤♦✇❧ ✭①✿①s✮ ❝❛❞ ❂ s❤♦✇❈❤❛r ✬✱✬ ✭s❤♦✇s ① ✭s❤♦✇❧ ①s ❝❛❞✮✮

13.1. Representación de conjuntos y operaciones básicas 277

Usaremos los siguientes ejemplos de conjunto: c1, c2, c3, c4 :: Conj Int c1 = foldr inser-ta vacio [2,5,1,3,7,5,3,2,1,9,0] c2 = foldr inserta vacio [2,6,8,6,1,2,1,9,6] c3 = Cj [2..100000]c4 = Cj [1..100000]

Se puede comprobar la función de escritura:

❣❤❝✐❃ ❝✶

✵✱✶✱✷✱✸✱✺✱✼✱✾

13.1.2. El conjunto vacío

✈❛❝✐♦ es el conjunto vacío. Por ejemplo,

❣❤❝✐❃ ✈❛❝✐♦

✈❛❝✐♦ ✿✿ ❈♦♥❥ ❛

✈❛❝✐♦ ❂ ❈❥ ❬❪

13.1.3. Reconocimiento del conjunto vacío

✭❡s❱❛❝✐♦ ❝✮ se verifica si ❝ es el conjunto vacío. Por ejemplo,

❡s❱❛❝✐♦ ❝✶ ❂❂ ❋❛❧s❡

❡s❱❛❝✐♦ ✈❛❝✐♦ ❂❂ ❚r✉❡

❡s❱❛❝✐♦ ✿✿ ❈♦♥❥ ❛ ✲❃ ❇♦♦❧

❡s❱❛❝✐♦ ✭❈❥ ①s✮ ❂ ♥✉❧❧ ①s

13.1.4. Pertenencia de un elemento a un conjunto

✭♣❡rt❡♥❡❝❡ ① ❝✮ se verifica si ① pertenece al conjunto ❝. Por ejemplo,

❝✶ ❂❂ ✵✱✶✱✷✱✸✱✺✱✼✱✾

♣❡rt❡♥❡❝❡ ✸ ❝✶ ❂❂ ❚r✉❡

♣❡rt❡♥❡❝❡ ✹ ❝✶ ❂❂ ❋❛❧s❡

♣❡rt❡♥❡❝❡ ✿✿ ❖r❞ ❛ ❂❃ ❛ ✲❃ ❈♦♥❥ ❛ ✲❃ ❇♦♦❧

♣❡rt❡♥❡❝❡ ① ✭❈❥ s✮ ❂ ① ❵❡❧❡♠❵ t❛❦❡❲❤✐❧❡ ✭❁❂ ①✮ s

278 Capítulo 13. Operaciones con conjuntos

13.1.5. Inserción de un elemento en un conjunto

✭✐♥s❡rt❛ ① ❝✮ es el conjunto obtenido añadiendo el elemento ① al conjunto ❝. Porejemplo,

❝✶ ❂❂ ✵✱✶✱✷✱✸✱✺✱✼✱✾

✐♥s❡rt❛ ✺ ❝✶ ❂❂ ✵✱✶✱✷✱✸✱✺✱✼✱✾

✐♥s❡rt❛ ✹ ❝✶ ❂❂ ✵✱✶✱✷✱✸✱✹✱✺✱✼✱✾

✐♥s❡rt❛ ✿✿ ❖r❞ ❛ ❂❃ ❛ ✲❃ ❈♦♥❥ ❛ ✲❃ ❈♦♥❥ ❛

✐♥s❡rt❛ ① ✭❈❥ s✮ ❂ ❈❥ ✭❛❣r❡❣❛ ① s✮

✇❤❡r❡ ❛❣r❡❣❛ ① ❬❪ ❂ ❬①❪

❛❣r❡❣❛ ① s❅✭②✿②s✮ ⑤ ① ❃ ② ❂ ② ✿ ❛❣r❡❣❛ ① ②s

⑤ ① ❁ ② ❂ ① ✿ s

⑤ ♦t❤❡r✇✐s❡ ❂ s

13.1.6. Eliminación de un elemento de un conjunto

✭❡❧✐♠✐♥❛ ① ❝✮ es el conjunto obtenido eliminando el elemento ① del conjunto ❝.Por ejemplo,

❝✶ ❂❂ ✵✱✶✱✷✱✸✱✺✱✼✱✾

❡❧✐♠✐♥❛ ✸ ❝✶ ❂❂ ✵✱✶✱✷✱✺✱✼✱✾

❡❧✐♠✐♥❛ ✿✿ ❖r❞ ❛ ❂❃ ❛ ✲❃ ❈♦♥❥ ❛ ✲❃ ❈♦♥❥ ❛

❡❧✐♠✐♥❛ ① ✭❈❥ s✮ ❂ ❈❥ ✭❡❧✐♠✐♥❛ ① s✮

✇❤❡r❡ ❡❧✐♠✐♥❛ ① ❬❪ ❂ ❬❪

❡❧✐♠✐♥❛ ① s❅✭②✿②s✮ ⑤ ① ❃ ② ❂ ② ✿ ❡❧✐♠✐♥❛ ① ②s

⑤ ① ❁ ② ❂ s

⑤ ♦t❤❡r✇✐s❡ ❂ ②s

13.2. Ejercicios sobre conjuntos

13.2.1. Reconocimiento de subconjuntos

Ejercicio 13.2.1. Definir la función

s✉❜❝♦♥❥✉♥t♦ ✿✿ ❖r❞ ❛ ❂❃ ❈♦♥❥ ❛ ✲❃ ❈♦♥❥ ❛ ✲❃ ❇♦♦❧

tal que ✭s✉❜❝♦♥❥✉♥t♦ ❝✶ ❝✷✮ se verifica si todos los elementos de ❝✶ pertenecen a ❝✷. Por

ejemplo,

13.2. Ejercicios sobre conjuntos 279

s✉❜❝♦♥❥✉♥t♦ ✭❈❥ ❬✷✳✳✶✵✵✵✵✵❪✮ ✭❈❥ ❬✶✳✳✶✵✵✵✵✵❪✮ ❂❂ ❚r✉❡

s✉❜❝♦♥❥✉♥t♦ ✭❈❥ ❬✶✳✳✶✵✵✵✵✵❪✮ ✭❈❥ ❬✷✳✳✶✵✵✵✵✵❪✮ ❂❂ ❋❛❧s❡

Solución: Se presentan distintas definiciones y se compara su eficiencia. La primeradefinición es

s✉❜❝♦♥❥✉♥t♦✶ ✿✿ ❖r❞ ❛ ❂❃ ❈♦♥❥ ❛ ✲❃ ❈♦♥❥ ❛ ✲❃ ❇♦♦❧

s✉❜❝♦♥❥✉♥t♦✶ ✭❈❥ ①s✮ ✭❈❥ ②s✮ ❂ s✉❜❧✐st❛ ①s ②s

✇❤❡r❡ s✉❜❧✐st❛ ❬❪ ❴ ❂ ❚r✉❡

s✉❜❧✐st❛ ✭①✿①s✮ ②s ❂ ❡❧❡♠ ① ②s ✫✫ s✉❜❧✐st❛ ①s ②s

La segunda definición es

s✉❜❝♦♥❥✉♥t♦✷ ✿✿ ❖r❞ ❛ ❂❃ ❈♦♥❥ ❛ ✲❃ ❈♦♥❥ ❛ ✲❃ ❇♦♦❧

s✉❜❝♦♥❥✉♥t♦✷ ✭❈❥ ①s✮ ❝ ❂

❛♥❞ ❬♣❡rt❡♥❡❝❡ ① ❝ ⑤ ① ❁✲①s❪

La tercera definición

s✉❜❝♦♥❥✉♥t♦✸ ✿✿ ❖r❞ ❛ ❂❃ ❈♦♥❥ ❛ ✲❃ ❈♦♥❥ ❛ ✲❃ ❇♦♦❧

s✉❜❝♦♥❥✉♥t♦✸ ✭❈❥ ①s✮ ✭❈❥ ②s✮ ❂ s✉❜❧✐st❛✬ ①s ②s

✇❤❡r❡ s✉❜❧✐st❛✬ ❬❪ ❴ ❂ ❚r✉❡

s✉❜❧✐st❛✬ ❴ ❬❪ ❂ ❋❛❧s❡

s✉❜❧✐st❛✬ ✭①✿①s✮ ②s❅✭②✿③s✮ ❂ ① ❃❂ ② ✫✫ ❡❧❡♠ ① ②s ✫✫

s✉❜❧✐st❛✬ ①s ③s

La cuarta definición es

s✉❜❝♦♥❥✉♥t♦✹ ✿✿ ❖r❞ ❛ ❂❃ ❈♦♥❥ ❛ ✲❃ ❈♦♥❥ ❛ ✲❃ ❇♦♦❧

s✉❜❝♦♥❥✉♥t♦✹ ✭❈❥ ①s✮ ✭❈❥ ②s✮ ❂ s✉❜❧✐st❛✬ ①s ②s

✇❤❡r❡ s✉❜❧✐st❛✬ ❬❪ ❴ ❂ ❚r✉❡

s✉❜❧✐st❛✬ ❴ ❬❪ ❂ ❋❛❧s❡

s✉❜❧✐st❛✬ ✭①✿①s✮ ②s❅✭②✿③s✮

⑤ ① ❁ ② ❂ ❋❛❧s❡

⑤ ① ❂❂ ② ❂ s✉❜❧✐st❛✬ ①s ③s

⑤ ① ❃ ② ❂ ❡❧❡♠ ① ③s ✫✫ s✉❜❧✐st❛✬ ①s ③s

La comparación de la eficiencia es

❣❤❝✐❃ s✉❜❝♦♥❥✉♥t♦✶ ✭❈❥ ❬✷✳✳✶✵✵✵✵✵❪✮ ✭❈❥ ❬✶✳✳✶✵✵✵✵✵✵❪✮

❈✲❝ ❈✲❝■♥t❡rr✉♣t❡❞✳

❣❤❝✐❃ s✉❜❝♦♥❥✉♥t♦✷ ✭❈❥ ❬✷✳✳✶✵✵✵✵✵❪✮ ✭❈❥ ❬✶✳✳✶✵✵✵✵✵✵❪✮

❈✲❝ ❈✲❝■♥t❡rr✉♣t❡❞✳

280 Capítulo 13. Operaciones con conjuntos

❣❤❝✐❃ s✉❜❝♦♥❥✉♥t♦✸ ✭❈❥ ❬✷✳✳✶✵✵✵✵✵❪✮ ✭❈❥ ❬✶✳✳✶✵✵✵✵✵✵❪✮

❚r✉❡

✭✵✳✺✷ s❡❝s✱ ✷✻✵✾✼✵✼✻ ❜②t❡s✮

❣❤❝✐❃ s✉❜❝♦♥❥✉♥t♦✹ ✭❈❥ ❬✷✳✳✶✵✵✵✵✵❪✮ ✭❈❥ ❬✶✳✳✶✵✵✵✵✵✵❪✮

❚r✉❡

✭✵✳✻✻ s❡❝s✱ ✸✷✷✸✻✼✵✵ ❜②t❡s✮

❣❤❝✐❃ s✉❜❝♦♥❥✉♥t♦✶ ✭❈❥ ❬✷✳✳✶✵✵✵✵✵❪✮ ✭❈❥ ❬✶✳✳✶✵✵✵✵❪✮

❋❛❧s❡

✭✵✳✺✹ s❡❝s✱ ✸✻✼✾✵✷✹ ❜②t❡s✮

❣❤❝✐❃ s✉❜❝♦♥❥✉♥t♦✷ ✭❈❥ ❬✷✳✳✶✵✵✵✵✵❪✮ ✭❈❥ ❬✶✳✳✶✵✵✵✵❪✮

❋❛❧s❡

✭✸✽✳✶✾ s❡❝s✱ ✶✹✶✺✺✻✷✵✸✷ ❜②t❡s✮

❣❤❝✐❃ s✉❜❝♦♥❥✉♥t♦✸ ✭❈❥ ❬✷✳✳✶✵✵✵✵✵❪✮ ✭❈❥ ❬✶✳✳✶✵✵✵✵❪✮

❋❛❧s❡

✭✵✳✵✽ s❡❝s✱ ✸✷✵✶✶✶✷ ❜②t❡s✮

❣❤❝✐❃ s✉❜❝♦♥❥✉♥t♦✹ ✭❈❥ ❬✷✳✳✶✵✵✵✵✵❪✮ ✭❈❥ ❬✶✳✳✶✵✵✵✵❪✮

❋❛❧s❡

✭✵✳✵✾ s❡❝s✱ ✸✼✵✽✾✽✽ ❜②t❡s✮

En lo que sigue, se usará la 3a definición:

s✉❜❝♦♥❥✉♥t♦ ✿✿ ❖r❞ ❛ ❂❃ ❈♦♥❥ ❛ ✲❃ ❈♦♥❥ ❛ ✲❃ ❇♦♦❧

s✉❜❝♦♥❥✉♥t♦ ❂ s✉❜❝♦♥❥✉♥t♦✸

13.2.2. Reconocimiento de subconjunto propio

Ejercicio 13.2.2. Definir la función

s✉❜❝♦♥❥✉♥t♦Pr♦♣✐♦ ✿✿ ❖r❞ ❛ ❂❃ ❈♦♥❥ ❛ ✲❃ ❈♦♥❥ ❛ ✲❃ ❇♦♦❧

tal ✭s✉❜❝♦♥❥✉♥t♦Pr♦♣✐♦ ❝✶ ❝✷✮ se verifica si ❝✶ es un subconjunto propio de ❝✷. Por ejemplo,

s✉❜❝♦♥❥✉♥t♦Pr♦♣✐♦ ✭❈❥ ❬✷✳✳✺❪✮ ✭❈❥ ❬✶✳✳✼❪✮ ❂❂ ❚r✉❡

s✉❜❝♦♥❥✉♥t♦Pr♦♣✐♦ ✭❈❥ ❬✷✳✳✺❪✮ ✭❈❥ ❬✶✳✳✹❪✮ ❂❂ ❋❛❧s❡

s✉❜❝♦♥❥✉♥t♦Pr♦♣✐♦ ✭❈❥ ❬✷✳✳✺❪✮ ✭❈❥ ❬✷✳✳✺❪✮ ❂❂ ❋❛❧s❡

Solución:

s✉❜❝♦♥❥✉♥t♦Pr♦♣✐♦ ✿✿ ❖r❞ ❛ ❂❃ ❈♦♥❥ ❛ ✲❃ ❈♦♥❥ ❛ ✲❃ ❇♦♦❧

s✉❜❝♦♥❥✉♥t♦Pr♦♣✐♦ ❝✶ ❝✷ ❂

s✉❜❝♦♥❥✉♥t♦ ❝✶ ❝✷ ✫✫ ❝✶ ✴❂ ❝✷

13.2. Ejercicios sobre conjuntos 281

13.2.3. Conjunto unitario

Ejercicio 13.2.3. Definir la función

✉♥✐t❛r✐♦ ✿✿ ❖r❞ ❛ ❂❃ ❛ ✲❃ ❈♦♥❥ ❛

tal que ✭✉♥✐t❛r✐♦ ①✮ es el conjunto ④①⑥. Por ejemplo,

✉♥✐t❛r✐♦ ✺ ❂❂ ✺

Solución:

✉♥✐t❛r✐♦ ✿✿ ❖r❞ ❛ ❂❃ ❛ ✲❃ ❈♦♥❥ ❛

✉♥✐t❛r✐♦ ① ❂ ✐♥s❡rt❛ ① ✈❛❝✐♦

13.2.4. Cardinal de un conjunto

Ejercicio 13.2.4. Definir la función

❝❛r❞✐♥❛❧ ✿✿ ❈♦♥❥ ❛ ✲❃ ■♥t

tal que ✭❝❛r❞✐♥❛❧ ❝✮ es el número de elementos del conjunto ❝. Por ejemplo,

❝❛r❞✐♥❛❧ ❝✶ ❂❂ ✼

❝❛r❞✐♥❛❧ ❝✷ ❂❂ ✺

Solución:

❝❛r❞✐♥❛❧ ✿✿ ❈♦♥❥ ❛ ✲❃ ■♥t

❝❛r❞✐♥❛❧ ✭❈❥ ①s✮ ❂ ❧❡♥❣t❤ ①s

13.2.5. Unión de conjuntos

Ejercicio 13.2.5. Definir la función

✉♥✐♦♥ ✿✿ ❖r❞ ❛ ❂❃ ❈♦♥❥ ❛ ✲❃ ❈♦♥❥ ❛ ✲❃ ❈♦♥❥ ❛

tal ✭✉♥✐♦♥ ❝✶ ❝✷✮ es la unión de ambos conjuntos. Por ejemplo,

✉♥✐♦♥ ❝✶ ❝✷ ❂❂ ✵✱✶✱✷✱✸✱✺✱✻✱✼✱✽✱✾

❝❛r❞✐♥❛❧ ✭✉♥✐♦♥✷ ❝✸ ❝✹✮ ❂❂ ✶✵✵✵✵✵

Solución: Se considera distintas definiciones y se compara la eficiencia. La primeradefinición es

282 Capítulo 13. Operaciones con conjuntos

✉♥✐♦♥✶ ✿✿ ❖r❞ ❛ ❂❃ ❈♦♥❥ ❛ ✲❃ ❈♦♥❥ ❛ ✲❃ ❈♦♥❥ ❛

✉♥✐♦♥✶ ✭❈❥ ①s✮ ✭❈❥ ②s✮ ❂ ❢♦❧❞r ✐♥s❡rt❛ ✭❈❥ ②s✮ ①s

Otra definión es

✉♥✐♦♥✷ ✿✿ ❖r❞ ❛ ❂❃ ❈♦♥❥ ❛ ✲❃ ❈♦♥❥ ❛ ✲❃ ❈♦♥❥ ❛

✉♥✐♦♥✷ ✭❈❥ ①s✮ ✭❈❥ ②s✮ ❂ ❈❥ ✭✉♥✐♦♥▲ ①s ②s✮

✇❤❡r❡ ✉♥✐♦♥▲ ❬❪ ②s ❂ ②s

✉♥✐♦♥▲ ①s ❬❪ ❂ ①s

✉♥✐♦♥▲ ❧✶❅✭①✿①s✮ ❧✷❅✭②✿②s✮

⑤ ① ❁ ② ❂ ① ✿ ✉♥✐♦♥▲ ①s ❧✷

⑤ ① ❂❂ ② ❂ ① ✿ ✉♥✐♦♥▲ ①s ②s

⑤ ① ❃ ② ❂ ② ✿ ✉♥✐♦♥▲ ❧✶ ②s

La comparación de eficiencia es

❣❤❝✐❃ ✿s❡t ✰s

❣❤❝✐❃ ❧❡t ❝ ❂ ❈❥ ❬✶✳✳✶✵✵✵❪

❣❤❝✐❃ ❝❛r❞✐♥❛❧ ✭✉♥✐♦♥✶ ❝ ❝✮

✶✵✵✵

✭✶✳✵✹ s❡❝s✱ ✺✻✾✶✹✸✸✷ ❜②t❡s✮

❣❤❝✐❃ ❝❛r❞✐♥❛❧ ✭✉♥✐♦♥✷ ❝ ❝✮

✶✵✵✵

✭✵✳✵✶ s❡❝s✱ ✺✹✾✺✾✻ ❜②t❡s✮

En lo que sigue se usará la segunda definición

✉♥✐♦♥ ✿✿ ❖r❞ ❛ ❂❃ ❈♦♥❥ ❛ ✲❃ ❈♦♥❥ ❛ ✲❃ ❈♦♥❥ ❛

✉♥✐♦♥ ❂ ✉♥✐♦♥✷

13.2.6. Unión de una lista de conjuntos

Ejercicio 13.2.6. Definir la función

✉♥✐♦♥● ✿✿ ❖r❞ ❛ ❂❃ ❬❈♦♥❥ ❛❪ ✲❃ ❈♦♥❥ ❛

tal ✭✉♥✐♦♥● ❝s✮ calcule la unión de la lista de conjuntos ❝s. Por ejemplo,

✉♥✐♦♥● ❬❝✶✱ ❝✷❪ ❂❂ ✵✱✶✱✷✱✸✱✺✱✻✱✼✱✽✱✾

Solución:

13.2. Ejercicios sobre conjuntos 283

✉♥✐♦♥● ✿✿ ❖r❞ ❛ ❂❃ ❬❈♦♥❥ ❛❪ ✲❃ ❈♦♥❥ ❛

✉♥✐♦♥● ❬❪ ❂ ✈❛❝✐♦

✉♥✐♦♥● ✭❈❥ ①s✿❝ss✮ ❂ ❈❥ ①s ❵✉♥✐♦♥❵ ✉♥✐♦♥● ❝ss

Se puede definir por plegados

✉♥✐♦♥●✷ ✿✿ ❖r❞ ❛ ❂❃ ❬❈♦♥❥ ❛❪ ✲❃ ❈♦♥❥ ❛

✉♥✐♦♥●✷ ❂ ❢♦❧❞r ✉♥✐♦♥ ✈❛❝✐♦

13.2.7. Intersección de conjuntos

Ejercicio 13.2.7. Definir la función

✐♥t❡rs❡❝❝✐♦♥ ✿✿ ❊q ❛ ❂❃ ❈♦♥❥ ❛ ✲❃ ❈♦♥❥ ❛ ✲❃ ❈♦♥❥ ❛

tal que ✭✐♥t❡rs❡❝❝✐♦♥ ❝✶ ❝✷✮ es la intersección de los conjuntos ❝✶ y ❝✷. Por ejemplo,

✐♥t❡rs❡❝❝✐♦♥ ✭❈❥ ❬✶✳✳✼❪✮ ✭❈❥ ❬✹✳✳✾❪✮ ❂❂ ✹✱✺✱✻✱✼

✐♥t❡rs❡❝❝✐♦♥ ✭❈❥ ❬✷✳✳✶✵✵✵✵✵✵❪✮ ✭❈❥ ❬✶❪✮ ❂❂

Solución: Se da distintas definiciones y se compara su eficiencia. La primera definiciónes

✐♥t❡rs❡❝❝✐♦♥✶ ✿✿ ❊q ❛ ❂❃ ❈♦♥❥ ❛ ✲❃ ❈♦♥❥ ❛ ✲❃ ❈♦♥❥ ❛

✐♥t❡rs❡❝❝✐♦♥✶ ✭❈❥ ①s✮ ✭❈❥ ②s✮ ❂ ❈❥ ❬① ⑤ ① ❁✲ ①s✱ ① ❵❡❧❡♠❵ ②s❪

La segunda definición es

✐♥t❡rs❡❝❝✐♦♥✷ ✿✿ ❖r❞ ❛ ❂❃ ❈♦♥❥ ❛ ✲❃ ❈♦♥❥ ❛ ✲❃ ❈♦♥❥ ❛

✐♥t❡rs❡❝❝✐♦♥✷ ✭❈❥ ①s✮ ✭❈❥ ②s✮ ❂ ❈❥ ✭✐♥t❡rs❡❝❝✐♦♥▲ ①s ②s✮

✇❤❡r❡ ✐♥t❡rs❡❝❝✐♦♥▲ ❧✶❅✭①✿①s✮ ❧✷❅✭②✿②s✮

⑤ ① ❃ ② ❂ ✐♥t❡rs❡❝❝✐♦♥▲ ❧✶ ②s

⑤ ① ❂❂ ② ❂ ① ✿ ✐♥t❡rs❡❝❝✐♦♥▲ ①s ②s

⑤ ① ❁ ② ❂ ✐♥t❡rs❡❝❝✐♦♥▲ ①s ❧✷

✐♥t❡rs❡❝❝✐♦♥▲ ❴ ❴ ❂ ❬❪

La comparación de eficiencia es

❣❤❝✐❃ ✐♥t❡rs❡❝❝✐♦♥✶ ✭❈❥ ❬✷✳✳✶✵✵✵✵✵✵❪✮ ✭❈❥ ❬✶❪✮

✭✵✳✸✷ s❡❝s✱ ✽✵✸✾✻✶✽✽ ❜②t❡s✮

❣❤❝✐❃ ✐♥t❡rs❡❝❝✐♦♥✷ ✭❈❥ ❬✷✳✳✶✵✵✵✵✵✵❪✮ ✭❈❥ ❬✶❪✮

✭✵✳✵✵ s❡❝s✱ ✷✶✵✽✽✹✽ ❜②t❡s✮

284 Capítulo 13. Operaciones con conjuntos

En lo que sigue se usa la segunda definición:

✐♥t❡rs❡❝❝✐♦♥ ✿✿ ❖r❞ ❛ ❂❃ ❈♦♥❥ ❛ ✲❃ ❈♦♥❥ ❛ ✲❃ ❈♦♥❥ ❛

✐♥t❡rs❡❝❝✐♦♥ ❂ ✐♥t❡rs❡❝❝✐♦♥✷

13.2.8. Intersección de una lista de conjuntos

Ejercicio 13.2.8. Definir la función

✐♥t❡rs❡❝❝✐♦♥● ✿✿ ❖r❞ ❛ ❂❃ ❬❈♦♥❥ ❛❪ ✲❃ ❈♦♥❥ ❛

tal que ✭✐♥t❡rs❡❝❝✐♦♥● ❝s✮ es la intersección de la lista de conjuntos ❝s. Por ejemplo,

✐♥t❡rs❡❝❝✐♦♥● ❬❝✶✱ ❝✷❪ ❂❂ ✶✱✷✱✾

Solución:

✐♥t❡rs❡❝❝✐♦♥● ✿✿ ❖r❞ ❛ ❂❃ ❬❈♦♥❥ ❛❪ ✲❃ ❈♦♥❥ ❛

✐♥t❡rs❡❝❝✐♦♥● ❬❝❪ ❂ ❝

✐♥t❡rs❡❝❝✐♦♥● ✭❝s✿❝ss✮ ❂ ✐♥t❡rs❡❝❝✐♦♥ ❝s ✭✐♥t❡rs❡❝❝✐♦♥● ❝ss✮

Se puede definir por plegado

✐♥t❡rs❡❝❝✐♦♥●✷ ✿✿ ❖r❞ ❛ ❂❃ ❬❈♦♥❥ ❛❪ ✲❃ ❈♦♥❥ ❛

✐♥t❡rs❡❝❝✐♦♥●✷ ❂ ❢♦❧❞r✶ ✐♥t❡rs❡❝❝✐♦♥

13.2.9. Conjuntos disjuntos

Ejercicio 13.2.9. Definir la función

❞✐s❥✉♥t♦s ✿✿ ❖r❞ ❛ ❂❃ ❈♦♥❥ ❛ ✲❃ ❈♦♥❥ ❛ ✲❃ ❇♦♦❧

tal que ✭❞✐s❥✉♥t♦s ❝✶ ❝✷✮ se verifica si los conjuntos ❝✶ y ❝✷ son disjuntos. Por ejemplo,

❞✐s❥✉♥t♦s ✭❈❥ ❬✷✳✳✺❪✮ ✭❈❥ ❬✻✳✳✾❪✮ ❂❂ ❚r✉❡

❞✐s❥✉♥t♦s ✭❈❥ ❬✷✳✳✺❪✮ ✭❈❥ ❬✶✳✳✾❪✮ ❂❂ ❋❛❧s❡

Solución:

❞✐s❥✉♥t♦s ✿✿ ❖r❞ ❛ ❂❃ ❈♦♥❥ ❛ ✲❃ ❈♦♥❥ ❛ ✲❃ ❇♦♦❧

❞✐s❥✉♥t♦s ❝✶ ❝✷ ❂ ❡s❱❛❝✐♦ ✭✐♥t❡rs❡❝❝✐♦♥ ❝✶ ❝✷✮

13.2. Ejercicios sobre conjuntos 285

13.2.10. Diferencia de conjuntos

Ejercicio 13.2.10. Ejercicio 10. Definir la función

❞✐❢❡r❡♥❝✐❛ ✿✿ ❊q ❛ ❂❃ ❈♦♥❥ ❛ ✲❃ ❈♦♥❥ ❛ ✲❃ ❈♦♥❥ ❛

tal que ✭❞✐❢❡r❡♥❝✐❛ ❝✶ ❝✷✮ es el conjunto de los elementos de ❝✶ que no son elementos de ❝✷.

Por ejemplo,

❞✐❢❡r❡♥❝✐❛ ❝✶ ❝✷ ❂❂ ✵✱✸✱✺✱✼

❞✐❢❡r❡♥❝✐❛ ❝✷ ❝✶ ❂❂ ✻✱✽

Solución:

❞✐❢❡r❡♥❝✐❛ ✿✿ ❊q ❛ ❂❃ ❈♦♥❥ ❛ ✲❃ ❈♦♥❥ ❛ ✲❃ ❈♦♥❥ ❛

❞✐❢❡r❡♥❝✐❛ ✭❈❥ ①s✮ ✭❈❥ ②s✮ ❂ ❈❥ ③s

✇❤❡r❡ ③s ❂ ❬① ⑤ ① ❁✲ ①s✱ ① ❵♥♦t❊❧❡♠❵ ②s❪

13.2.11. Diferencia simétrica de conjuntos

Ejercicio 13.2.11. Definir la función

❞✐❢❡r❡♥❝✐❛❙✐♠❡tr✐❝❛ ✿✿ ❖r❞ ❛ ❂❃ ❈♦♥❥ ❛ ✲❃ ❈♦♥❥ ❛ ✲❃ ❈♦♥❥ ❛

tal que ✭❞✐❢❡r❡♥❝✐❛❙✐♠❡tr✐❝❛ ❝✶ ❝✷✮ es la diferencia simétrica de los conjuntos ❝✶ y ❝✷. Por

ejemplo,

❞✐❢❡r❡♥❝✐❛❙✐♠❡tr✐❝❛ ❝✶ ❝✷ ❂❂ ✵✱✸✱✺✱✻✱✼✱✽

❞✐❢❡r❡♥❝✐❛❙✐♠❡tr✐❝❛ ❝✷ ❝✶ ❂❂ ✵✱✸✱✺✱✻✱✼✱✽

Solución:

❞✐❢❡r❡♥❝✐❛❙✐♠❡tr✐❝❛ ✿✿ ❖r❞ ❛ ❂❃ ❈♦♥❥ ❛ ✲❃ ❈♦♥❥ ❛ ✲❃ ❈♦♥❥ ❛

❞✐❢❡r❡♥❝✐❛❙✐♠❡tr✐❝❛ ❝✶ ❝✷ ❂

❞✐❢❡r❡♥❝✐❛ ✭✉♥✐♦♥ ❝✶ ❝✷✮ ✭✐♥t❡rs❡❝❝✐♦♥ ❝✶ ❝✷✮

13.2.12. Filtrado en conjuntos

Ejercicio 13.2.12. Definir la función

❢✐❧tr❛ ✿✿ ✭❛ ✲❃ ❇♦♦❧✮ ✲❃ ❈♦♥❥ ❛ ✲❃ ❈♦♥❥ ❛

tal ✭❢✐❧tr❛ ♣ ❝✮ es el conjunto de elementos de ❝ que verifican el predicado ♣. Por ejemplo,

❢✐❧tr❛ ❡✈❡♥ ❝✶ ❂❂ ✵✱✷

❢✐❧tr❛ ♦❞❞ ❝✶ ❂❂ ✶✱✸✱✺✱✼✱✾

Solución:

❢✐❧tr❛ ✿✿ ✭❛ ✲❃ ❇♦♦❧✮ ✲❃ ❈♦♥❥ ❛ ✲❃ ❈♦♥❥ ❛

❢✐❧tr❛ ♣ ✭❈❥ ①s✮ ❂ ❈❥ ✭❢✐❧t❡r ♣ ①s✮

286 Capítulo 13. Operaciones con conjuntos

13.2.13. Partición de un conjunto según una propiedad

Ejercicio 13.2.13. Definir la función

♣❛rt✐❝✐♦♥ ✿✿ ✭❛ ✲❃ ❇♦♦❧✮ ✲❃ ❈♦♥❥ ❛ ✲❃ ✭❈♦♥❥ ❛✱ ❈♦♥❥ ❛✮

tal que ✭♣❛rt✐❝✐♦♥ ❝✮ es el par formado por dos conjuntos: el de sus elementos que verifican ♣

y el de los elementos que no lo verifica. Por ejemplo,

♣❛rt✐❝✐♦♥ ❡✈❡♥ ❝✶ ❂❂ ✭✵✱✷✱✶✱✸✱✺✱✼✱✾✮

Solución:

♣❛rt✐❝✐♦♥ ✿✿ ✭❛ ✲❃ ❇♦♦❧✮ ✲❃ ❈♦♥❥ ❛ ✲❃ ✭❈♦♥❥ ❛✱ ❈♦♥❥ ❛✮

♣❛rt✐❝✐♦♥ ♣ ❝ ❂ ✭❢✐❧tr❛ ♣ ❝✱ ❢✐❧tr❛ ✭♥♦t ✳ ♣✮ ❝✮

13.2.14. División de un conjunto según un elemento

Ejercicio 13.2.14. Definir la función

❞✐✈✐❞❡ ✿✿ ❖r❞ ❛ ❂❃ ❛ ✲❃ ❈♦♥❥ ❛ ✲❃ ✭❈♦♥❥ ❛✱ ❈♦♥❥ ❛✮

tal que ✭❞✐✈✐❞❡ ① ❝✮ es el par formado por dos subconjuntos de ❝: el de los elementos menores

o iguales que ① y el de los mayores que ①. Por ejemplo,

❞✐✈✐❞❡ ✺ ❝✶ ❂❂ ✭✵✱✶✱✷✱✸✱✺✱✼✱✾✮

Solución:

❞✐✈✐❞❡ ✿✿ ❖r❞ ❛ ❂❃ ❛✲❃ ❈♦♥❥ ❛ ✲❃ ✭❈♦♥❥ ❛✱ ❈♦♥❥ ❛✮

❞✐✈✐❞❡ ① ❂ ♣❛rt✐❝✐♦♥ ✭❁❂ ①✮

13.2.15. Aplicación de una función a un conjunto

Ejercicio 13.2.15. Definir la función

♠❛♣❈ ✿✿ ✭❛ ✲❃ ❜✮ ✲❃ ❈♦♥❥ ❛ ✲❃ ❈♦♥❥ ❜

tal que ✭♠❛♣ ❢ ❝✮ es el conjunto formado por las imágenes de los elementos de ❝, mediante ❢.

Por ejemplo,

♠❛♣❈ ✭✯✷✮ ✭❈❥ ❬✶✳✳✹❪✮ ❂❂ ✷✱✹✱✻✱✽

Solución:

♠❛♣❈ ✿✿ ✭❛ ✲❃ ❜✮ ✲❃ ❈♦♥❥ ❛ ✲❃ ❈♦♥❥ ❜

♠❛♣❈ ❢ ✭❈❥ ①s✮ ❂ ❈❥ ✭♠❛♣ ❢ ①s✮

13.2. Ejercicios sobre conjuntos 287

13.2.16. Todos los elementos verifican una propiedad

Ejercicio 13.2.16. Definir la función

❡✈❡r②❈ ✿✿ ✭❛ ✲❃ ❇♦♦❧✮ ✲❃ ❈♦♥❥ ❛ ✲❃ ❇♦♦❧

tal que ✭❡✈❡r②❈ ♣ ❝✮ se verifica si todos los elementos de ❝ verifican el predicado ♣. Por ejemplo,

❡✈❡r②❈ ❡✈❡♥ ✭❈❥ ❬✷✱✹✳✳✶✵❪✮ ❂❂ ❚r✉❡

❡✈❡r②❈ ❡✈❡♥ ✭❈❥ ❬✷✳✳✶✵❪✮ ❂❂ ❋❛❧s❡

Solución:

❡✈❡r②❈ ✿✿ ✭❛ ✲❃ ❇♦♦❧✮ ✲❃ ❈♦♥❥ ❛ ✲❃ ❇♦♦❧

❡✈❡r②❈ ♣ ✭❈❥ ①s✮ ❂ ❛❧❧ ♣ ①s

13.2.17. Algunos elementos verifican una propiedad

Ejercicio 13.2.17. Definir la función

s♦♠❡❈ ✿✿ ✭❛ ✲❃ ❇♦♦❧✮ ✲❃ ❈♦♥❥ ❛ ✲❃ ❇♦♦❧

tal que ✭s♦♠❡❈ ♣ ❝✮ se verifica si algún elemento de ❝ verifica el predicado ♣. Por ejemplo,

s♦♠❡❈ ❡✈❡♥ ✭❈❥ ❬✶✱✹✱✼❪✮ ❂❂ ❚r✉❡

s♦♠❡❈ ❡✈❡♥ ✭❈❥ ❬✶✱✸✱✼❪✮ ❂❂ ❋❛❧s❡

Solución:

s♦♠❡❈ ✿✿ ✭❛ ✲❃ ❇♦♦❧✮ ✲❃ ❈♦♥❥ ❛ ✲❃ ❇♦♦❧

s♦♠❡❈ ♣ ✭❈❥ ①s✮ ❂ ❛♥② ♣ ①s

13.2.18. Producto cartesiano

Ejercicio 13.2.18. Definir la función

♣r♦❞✉❝t♦❈ ✿✿ ✭❖r❞ ❛✱ ❖r❞ ❜✮ ❂❃ ❈♦♥❥ ❛ ✲❃ ❈♦♥❥ ❜ ✲❃ ❈♦♥❥ ✭❛✱❜✮

tal que ✭♣r♦❞✉❝t♦❈ ❝✶ ❝✷✮ es el producto cartesiano de los conjuntos ❝✶ y ❝✷. Por ejemplo,

♣r♦❞✉❝t♦❈ ✭❈❥ ❬✶✱✸❪✮ ✭❈❥ ❬✷✱✹❪✮❂❂ ✭✶✱✷✮✱✭✶✱✹✮✱✭✸✱✷✮✱✭✸✱✹✮

Solución:

♣r♦❞✉❝t♦❈ ✿✿ ✭❖r❞ ❛✱ ❖r❞ ❜✮ ❂❃ ❈♦♥❥ ❛ ✲❃ ❈♦♥❥ ❜ ✲❃ ❈♦♥❥ ✭❛✱❜✮

♣r♦❞✉❝t♦❈ ✭❈❥ ①s✮ ✭❈❥ ②s✮ ❂

❢♦❧❞r ✐♥s❡rt❛ ✈❛❝✐♦ ❬✭①✱②✮ ⑤ ① ❁✲ ①s✱ ② ❁✲ ②s❪

288 Capítulo 13. Operaciones con conjuntos

13.2.19. Orden en el tipo de los conjuntos

Ejercicio 13.2.19. Especificar que, dado un tipo ordenado ❛, el orden entre los conjuntos con

elementos en ❛ es el orden inducido por el orden existente entre las listas con elementos en ❛.

Solución:

✐♥st❛♥❝❡ ❖r❞ ❛ ❂❃ ❖r❞ ✭❈♦♥❥ ❛✮ ✇❤❡r❡

✭❈❥ ①s✮ ❁❂ ✭❈❥ ②s✮ ❂ ①s ❁❂ ②s

13.2.20. Conjunto potencia

Ejercicio 13.2.20. Definir la función

♣♦t❡♥❝✐❛ ✿✿ ❖r❞ ❛ ❂❃ ❈♦♥❥ ❛ ✲❃ ❈♦♥❥ ✭❈♦♥❥ ❛✮

tal que ✭♣♦t❡♥❝✐❛ ❝✮ es el conjunto potencia de ❝; es decir, el conjunto de todos los subconjuntos

de ❝. Por ejemplo,

♣♦t❡♥❝✐❛ ✭❈❥ ❬✶✱✷❪✮ ❂❂ ✱✶✱✶✱✷✱✷

♣♦t❡♥❝✐❛ ✭❈❥ ❬✶✳✳✸❪✮ ❂❂ ✱✶✱✶✱✷✱✶✱✷✱✸✱✶✱✸✱✷✱✷✱✸✱✸

Solución:

♣♦t❡♥❝✐❛ ✿✿ ❖r❞ ❛ ❂❃ ❈♦♥❥ ❛ ✲❃ ❈♦♥❥ ✭❈♦♥❥ ❛✮

♣♦t❡♥❝✐❛ ✭❈❥ ❬❪✮ ❂ ✉♥✐t❛r✐♦ ✈❛❝✐♦

♣♦t❡♥❝✐❛ ✭❈❥ ✭①✿①s✮✮ ❂ ♠❛♣❈ ✭✐♥s❡rt❛ ①✮ ♣r ❵✉♥✐♦♥❵ ♣r

✇❤❡r❡ ♣r ❂ ♣♦t❡♥❝✐❛ ✭❈❥ ①s✮

13.2.21. Verificación de propiedades de conjuntos

Generador de conjuntos

Para verificar las propidades con QuickCheck se define ❣❡♥❈♦♥❥✉♥t♦ que es un ge-nerador de conjuntos. Por ejemplo,

❣❤❝✐❃ s❛♠♣❧❡ ❣❡♥❈♦♥❥✉♥t♦

✸✱✲✷✱✲✷✱✲✸✱✲✷✱✹

✲✽✱✵✱✹✱✻✱✲✺✱✲✷

✶✷✱✲✷✱✲✶✱✲✶✵✱✲✷✱✷✱✶✺✱✶✺

13.2. Ejercicios sobre conjuntos 289

✲✹✷✱✺✺✱✺✺✱✲✶✶✱✷✸✱✷✸✱✲✶✶✱✷✼✱✲✶✼✱✲✹✽✱✶✻✱✲✶✺✱✲✼✱✺✱✹✶✱✹✸

✲✶✷✹✱✲✻✻✱✲✺✱✲✹✼✱✺✽✱✲✽✽✱✲✸✷✱✲✶✷✺

✹✾✱✲✸✽✱✲✷✸✶✱✲✶✶✼✱✲✸✷✱✲✸✱✹✺✱✷✷✼✱✲✹✶✱✺✹✱✶✻✾✱✲✶✻✵✱✶✾

❣❡♥❈♦♥❥✉♥t♦ ✿✿ ●❡♥ ✭❈♦♥❥ ■♥t✮

❣❡♥❈♦♥❥✉♥t♦ ❂ ❞♦ ①s ❁✲ ❧✐st❖❢ ❛r❜✐tr❛r②

r❡t✉r♥ ✭❢♦❧❞r ✐♥s❡rt❛ ✈❛❝✐♦ ①s✮

y se declara que los conjuntos son concreciones de los arbitrarios:

✐♥st❛♥❝❡ ❆r❜✐tr❛r② ✭❈♦♥❥ ■♥t✮ ✇❤❡r❡

❛r❜✐tr❛r② ❂ ❣❡♥❈♦♥❥✉♥t♦

Ejercicio 13.2.21. Comprobar con QuickCheck que la relación de subconjunto es un orden par-

cial. Es decir, es una relación reflexiva, antisimétrica y transitiva.

Solución: La propiedad reflexiva es

♣r♦♣❙✉❜❝♦♥❥✉♥t♦❘❡❢❧❡①✐✈❛✿✿ ❈♦♥❥ ■♥t ✲❃ ❇♦♦❧

♣r♦♣❙✉❜❝♦♥❥✉♥t♦❘❡❢❧❡①✐✈❛ ❝ ❂ s✉❜❝♦♥❥✉♥t♦ ❝ ❝

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❙✉❜❝♦♥❥✉♥t♦❘❡❢❧❡①✐✈❛

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

La propiedad antisimétrica es

♣r♦♣❙✉❜❝♦♥❥✉♥t♦❆♥t✐s✐♠❡tr✐❝❛✿✿ ❈♦♥❥ ■♥t ✲❃ ❈♦♥❥ ■♥t ✲❃ Pr♦♣❡rt②

♣r♦♣❙✉❜❝♦♥❥✉♥t♦❆♥t✐s✐♠❡tr✐❝❛ ❝✶ ❝✷ ❂

s✉❜❝♦♥❥✉♥t♦ ❝✶ ❝✷ ✫✫ s✉❜❝♦♥❥✉♥t♦ ❝✷ ❝✶ ❂❂❃ ❝✶ ❂❂ ❝✷

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❙✉❜❝♦♥❥✉♥t♦❆♥t✐s✐♠❡tr✐❝❛

✯✯✯ ●❛✈❡ ✉♣✦ P❛ss❡❞ ♦♥❧② ✶✸ t❡sts✳

La propiedad transitiva es

♣r♦♣❙✉❜❝♦♥❥✉♥t♦❚r❛♥s✐t✐✈❛ ✿✿ ❈♦♥❥ ■♥t ✲❃ ❈♦♥❥ ■♥t ✲❃ ❈♦♥❥ ■♥t ✲❃ Pr♦♣❡rt②

♣r♦♣❙✉❜❝♦♥❥✉♥t♦❚r❛♥s✐t✐✈❛ ❝✶ ❝✷ ❝✸ ❂

s✉❜❝♦♥❥✉♥t♦ ❝✶ ❝✷ ✫✫ s✉❜❝♦♥❥✉♥t♦ ❝✷ ❝✸ ❂❂❃ s✉❜❝♦♥❥✉♥t♦ ❝✶ ❝✸

290 Capítulo 13. Operaciones con conjuntos

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❙✉❜❝♦♥❥✉♥t♦❚r❛♥s✐t✐✈❛

✯✯✯ ●❛✈❡ ✉♣✦ P❛ss❡❞ ♦♥❧② ✼ t❡sts✳

Ejercicio 13.2.22. Comprobar con QuickCheck que el conjunto vacío está contenido en cualquier

conjunto.

Solución: La propiedad es

♣r♦♣❙✉❜❝♦♥❥✉♥t♦❱❛❝✐♦✿✿ ❈♦♥❥ ■♥t ✲❃ ❇♦♦❧

♣r♦♣❙✉❜❝♦♥❥✉♥t♦❱❛❝✐♦ ❝ ❂ s✉❜❝♦♥❥✉♥t♦ ✈❛❝✐♦ ❝

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❙✉❜❝♦♥❥✉♥t♦❱❛❝✐♦

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

Ejercicio 13.2.23. Comprobar con QuickCheck las siguientes propiedades de la unión de con-

juntos:Idempotente: A ∪ A = A

Neutro: A ∪ ∅ = A

Commutativa: A ∪ B = B ∪ A

Asociativa: A ∪ (B ∪ C) = (A ∪ B) ∪ C

Subconjunto: A ⊆ (A ∪ B), B ⊆ (A ∪ B)Diferencia: A ∪ B = A ∪ (B A)

Solución: Las propiedades son

♣r♦♣❯♥✐♦♥■❞❡♠♣♦t❡♥t❡ ✿✿ ❈♦♥❥ ■♥t ✲❃ ❇♦♦❧

♣r♦♣❯♥✐♦♥■❞❡♠♣♦t❡♥t❡ ❝ ❂

✉♥✐♦♥ ❝ ❝ ❂❂ ❝

♣r♦♣❱❛❝✐♦◆❡✉tr♦❯♥✐♦♥✿✿ ❈♦♥❥ ■♥t ✲❃ ❇♦♦❧

♣r♦♣❱❛❝✐♦◆❡✉tr♦❯♥✐♦♥ ❝ ❂

✉♥✐♦♥ ❝ ✈❛❝✐♦ ❂❂ ❝

♣r♦♣❯♥✐♦♥❈♦♠♠✉t❛t✐✈❛✿✿ ❈♦♥❥ ■♥t ✲❃ ❈♦♥❥ ■♥t ✲❃ ❇♦♦❧

♣r♦♣❯♥✐♦♥❈♦♠♠✉t❛t✐✈❛ ❝✶ ❝✷ ❂

✉♥✐♦♥ ❝✶ ❝✷ ❂❂ ✉♥✐♦♥ ❝✷ ❝✶

♣r♦♣❯♥✐♦♥❆s♦❝✐❛t✐✈❛✿✿ ❈♦♥❥ ■♥t ✲❃ ❈♦♥❥ ■♥t ✲❃ ❈♦♥❥ ■♥t ✲❃ ❇♦♦❧

♣r♦♣❯♥✐♦♥❆s♦❝✐❛t✐✈❛ ❝✶ ❝✷ ❝✸ ❂

13.2. Ejercicios sobre conjuntos 291

✉♥✐♦♥ ❝✶ ✭✉♥✐♦♥ ❝✷ ❝✸✮ ❂❂ ✉♥✐♦♥ ✭✉♥✐♦♥ ❝✶ ❝✷✮ ❝✸

♣r♦♣❯♥✐♦♥❙✉❜❝♦♥❥✉♥t♦ ✿✿ ❈♦♥❥ ■♥t ✲❃ ❈♦♥❥ ■♥t ✲❃ ❇♦♦❧

♣r♦♣❯♥✐♦♥❙✉❜❝♦♥❥✉♥t♦ ❝✶ ❝✷ ❂

s✉❜❝♦♥❥✉♥t♦ ❝✶ ❝✸ ✫✫ s✉❜❝♦♥❥✉♥t♦ ❝✷ ❝✸

✇❤❡r❡ ❝✸ ❂ ✉♥✐♦♥ ❝✶ ❝✷

♣r♦♣❯♥✐♦♥❉✐❢❡r❡♥❝✐❛ ✿✿ ❈♦♥❥ ■♥t ✲❃ ❈♦♥❥ ■♥t ✲❃ ❇♦♦❧

♣r♦♣❯♥✐♦♥❉✐❢❡r❡♥❝✐❛ ❝✶ ❝✷ ❂

✉♥✐♦♥ ❝✶ ❝✷ ❂❂ ✉♥✐♦♥ ❝✶ ✭❞✐❢❡r❡♥❝✐❛ ❝✷ ❝✶✮

Sus comprobaciones son

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❯♥✐♦♥■❞❡♠♣♦t❡♥t❡

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❱❛❝✐♦◆❡✉tr♦❯♥✐♦♥

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❯♥✐♦♥❈♦♠♠✉t❛t✐✈❛

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❯♥✐♦♥❆s♦❝✐❛t✐✈❛

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❯♥✐♦♥❙✉❜❝♦♥❥✉♥t♦

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❯♥✐♦♥❉✐❢❡r❡♥❝✐❛

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

Ejercicio 13.2.24. Comprobar con QuickCheck las siguientes propiedades de la intersección de

conjuntos:Idempotente: A ∩ A = A

VacioInterseccion: A ∩ ∅ = ∅

Commutativa: A ∩ B = B ∩ A

Asociativa: A ∩ (B ∩ C) = (A ∩ B) ∩ C

InterseccionSubconjunto: (A ∩ B) ⊆ A, (A ∩ B) ⊆ A

DistributivaIU: A ∩ (B ∪ C) = (A ∩ B) ∪ (A ∩ C)DistributivaUI: A ∪ (B ∩ C) = (A ∪ B) ∩ (A ∪ C)

Solución: Las propiedades son

292 Capítulo 13. Operaciones con conjuntos

♣r♦♣■♥t❡rs❡❝❝✐♦♥■❞❡♠♣♦t❡♥t❡ ✿✿ ❈♦♥❥ ■♥t ✲❃ ❇♦♦❧

♣r♦♣■♥t❡rs❡❝❝✐♦♥■❞❡♠♣♦t❡♥t❡ ❝ ❂

✐♥t❡rs❡❝❝✐♦♥ ❝ ❝ ❂❂ ❝

♣r♦♣❱❛❝✐♦■♥t❡rs❡❝❝✐♦♥✿✿ ❈♦♥❥ ■♥t ✲❃ ❇♦♦❧

♣r♦♣❱❛❝✐♦■♥t❡rs❡❝❝✐♦♥ ❝ ❂

✐♥t❡rs❡❝❝✐♦♥ ❝ ✈❛❝✐♦ ❂❂ ✈❛❝✐♦

♣r♦♣■♥t❡rs❡❝❝✐♦♥❈♦♠♠✉t❛t✐✈❛✿✿ ❈♦♥❥ ■♥t ✲❃ ❈♦♥❥ ■♥t ✲❃ ❇♦♦❧

♣r♦♣■♥t❡rs❡❝❝✐♦♥❈♦♠♠✉t❛t✐✈❛ ❝✶ ❝✷ ❂

✐♥t❡rs❡❝❝✐♦♥ ❝✶ ❝✷ ❂❂ ✐♥t❡rs❡❝❝✐♦♥ ❝✷ ❝✶

♣r♦♣■♥t❡rs❡❝❝✐♦♥❆s♦❝✐❛t✐✈❛✿✿ ❈♦♥❥ ■♥t ✲❃ ❈♦♥❥ ■♥t ✲❃ ❈♦♥❥ ■♥t ✲❃ ❇♦♦❧

♣r♦♣■♥t❡rs❡❝❝✐♦♥❆s♦❝✐❛t✐✈❛ ❝✶ ❝✷ ❝✸ ❂

✐♥t❡rs❡❝❝✐♦♥ ❝✶ ✭✐♥t❡rs❡❝❝✐♦♥ ❝✷ ❝✸✮ ❂❂ ✐♥t❡rs❡❝❝✐♦♥ ✭✐♥t❡rs❡❝❝✐♦♥ ❝✶ ❝✷✮ ❝✸

♣r♦♣■♥t❡rs❡❝❝✐♦♥❙✉❜❝♦♥❥✉♥t♦ ✿✿ ❈♦♥❥ ■♥t ✲❃ ❈♦♥❥ ■♥t ✲❃ ❇♦♦❧

♣r♦♣■♥t❡rs❡❝❝✐♦♥❙✉❜❝♦♥❥✉♥t♦ ❝✶ ❝✷ ❂

s✉❜❝♦♥❥✉♥t♦ ❝✸ ❝✶ ✫✫ s✉❜❝♦♥❥✉♥t♦ ❝✸ ❝✷

✇❤❡r❡ ❝✸ ❂ ✐♥t❡rs❡❝❝✐♦♥ ❝✶ ❝✷

♣r♦♣❉✐str✐❜✉t✐✈❛■❯✿✿ ❈♦♥❥ ■♥t ✲❃ ❈♦♥❥ ■♥t ✲❃ ❈♦♥❥ ■♥t ✲❃ ❇♦♦❧

♣r♦♣❉✐str✐❜✉t✐✈❛■❯ ❝✶ ❝✷ ❝✸ ❂

✐♥t❡rs❡❝❝✐♦♥ ❝✶ ✭✉♥✐♦♥ ❝✷ ❝✸✮ ❂❂ ✉♥✐♦♥ ✭✐♥t❡rs❡❝❝✐♦♥ ❝✶ ❝✷✮

✭✐♥t❡rs❡❝❝✐♦♥ ❝✶ ❝✸✮

♣r♦♣❉✐str✐❜✉t✐✈❛❯■✿✿ ❈♦♥❥ ■♥t ✲❃ ❈♦♥❥ ■♥t ✲❃ ❈♦♥❥ ■♥t ✲❃ ❇♦♦❧

♣r♦♣❉✐str✐❜✉t✐✈❛❯■ ❝✶ ❝✷ ❝✸ ❂

✉♥✐♦♥ ❝✶ ✭✐♥t❡rs❡❝❝✐♦♥ ❝✷ ❝✸✮ ❂❂ ✐♥t❡rs❡❝❝✐♦♥ ✭✉♥✐♦♥ ❝✶ ❝✷✮

✭✉♥✐♦♥ ❝✶ ❝✸✮

Sus comprobaciones son

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣■♥t❡rs❡❝❝✐♦♥■❞❡♠♣♦t❡♥t❡

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❱❛❝✐♦■♥t❡rs❡❝❝✐♦♥

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣■♥t❡rs❡❝❝✐♦♥❈♦♠♠✉t❛t✐✈❛

13.2. Ejercicios sobre conjuntos 293

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣■♥t❡rs❡❝❝✐♦♥❆s♦❝✐❛t✐✈❛

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣■♥t❡rs❡❝❝✐♦♥❙✉❜❝♦♥❥✉♥t♦

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❉✐str✐❜✉t✐✈❛■❯

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❉✐str✐❜✉t✐✈❛❯■

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

Ejercicio 13.2.25. Comprobar con QuickCheck las siguientes propiedades de la diferencia de

conjuntos:DiferenciaVacio1: A \ ∅ = A

DiferenciaVacio2: ∅ \ A = ∅

DiferenciaDif1: (A \ B) \ C = A \ (B ∪ C)DiferenciaDif2: A \ (B \ C) = (A \ B) ∪ (A ∩ C)DiferenciaSubc: (A \ B) ⊆ A

DiferenciaDisj: A y B \ A son disjuntos

DiferenciaUI: (A ∪ B) \ A = B \ (A ∩ B)

Solución: Las propiedades son

♣r♦♣❉✐❢❡r❡♥❝✐❛❱❛❝✐♦✶ ✿✿ ❈♦♥❥ ■♥t ✲❃ ❇♦♦❧

♣r♦♣❉✐❢❡r❡♥❝✐❛❱❛❝✐♦✶ ❝ ❂ ❞✐❢❡r❡♥❝✐❛ ❝ ✈❛❝✐♦ ❂❂ ❝

♣r♦♣❉✐❢❡r❡♥❝✐❛❱❛❝✐♦✷ ✿✿ ❈♦♥❥ ■♥t ✲❃ ❇♦♦❧

♣r♦♣❉✐❢❡r❡♥❝✐❛❱❛❝✐♦✷ ❝ ❂ ❞✐❢❡r❡♥❝✐❛ ✈❛❝✐♦ ❝ ❂❂ ✈❛❝✐♦

♣r♦♣❉✐❢❡r❡♥❝✐❛❉✐❢✶ ✿✿ ❈♦♥❥ ■♥t ✲❃ ❈♦♥❥ ■♥t ✲❃ ❈♦♥❥ ■♥t ✲❃ ❇♦♦❧

♣r♦♣❉✐❢❡r❡♥❝✐❛❉✐❢✶ ❝✶ ❝✷ ❝✸ ❂

❞✐❢❡r❡♥❝✐❛ ✭❞✐❢❡r❡♥❝✐❛ ❝✶ ❝✷✮ ❝✸ ❂❂ ❞✐❢❡r❡♥❝✐❛ ❝✶ ✭✉♥✐♦♥ ❝✷ ❝✸✮

♣r♦♣❉✐❢❡r❡♥❝✐❛❉✐❢✷ ✿✿ ❈♦♥❥ ■♥t ✲❃ ❈♦♥❥ ■♥t ✲❃ ❈♦♥❥ ■♥t ✲❃ ❇♦♦❧

♣r♦♣❉✐❢❡r❡♥❝✐❛❉✐❢✷ ❝✶ ❝✷ ❝✸ ❂

❞✐❢❡r❡♥❝✐❛ ❝✶ ✭❞✐❢❡r❡♥❝✐❛ ❝✷ ❝✸✮ ❂❂ ✉♥✐♦♥ ✭❞✐❢❡r❡♥❝✐❛ ❝✶ ❝✷✮

✭✐♥t❡rs❡❝❝✐♦♥ ❝✶ ❝✸✮

♣r♦♣❉✐❢❡r❡♥❝✐❛❙✉❜❝✿✿ ❈♦♥❥ ■♥t ✲❃ ❈♦♥❥ ■♥t ✲❃ ❇♦♦❧

294 Capítulo 13. Operaciones con conjuntos

♣r♦♣❉✐❢❡r❡♥❝✐❛❙✉❜❝ ❝✶ ❝✷ ❂

s✉❜❝♦♥❥✉♥t♦ ✭❞✐❢❡r❡♥❝✐❛ ❝✶ ❝✷✮ ❝✶

♣r♦♣❉✐❢❡r❡♥❝✐❛❉✐s❥✿✿ ❈♦♥❥ ■♥t ✲❃ ❈♦♥❥ ■♥t ✲❃ ❇♦♦❧

♣r♦♣❉✐❢❡r❡♥❝✐❛❉✐s❥ ❝✶ ❝✷ ❂

❞✐s❥✉♥t♦s ❝✶ ✭❞✐❢❡r❡♥❝✐❛ ❝✷ ❝✶✮

♣r♦♣❉✐❢❡r❡♥❝✐❛❯■✿✿ ❈♦♥❥ ■♥t ✲❃ ❈♦♥❥ ■♥t ✲❃ ❇♦♦❧

♣r♦♣❉✐❢❡r❡♥❝✐❛❯■ ❝✶ ❝✷ ❂

❞✐❢❡r❡♥❝✐❛ ✭✉♥✐♦♥ ❝✶ ❝✷✮ ❝✶ ❂❂ ❞✐❢❡r❡♥❝✐❛ ❝✷ ✭✐♥t❡rs❡❝❝✐♦♥ ❝✶ ❝✷✮

Sus comprobaciones son

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❉✐❢❡r❡♥❝✐❛❱❛❝✐♦✷

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❉✐❢❡r❡♥❝✐❛❱❛❝✐♦✷

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❉✐❢❡r❡♥❝✐❛❉✐❢✶

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❉✐❢❡r❡♥❝✐❛❉✐❢✷

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❉✐❢❡r❡♥❝✐❛❙✉❜❝

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❉✐❢❡r❡♥❝✐❛❉✐s❥

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❉✐❢❡r❡♥❝✐❛❯■

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

Capítulo 14

Grafos

En este capítulo se proponen ejercicios con el tipo abstracto de datos (TAD) de losgrafos presentados en el tema 22 de [1]. Para hacerlo autocontenido se recuerdan el TADy sus implementaciones.

Contenido14.1 El TAD de los grafos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296

14.1.1 Especificación del TAD de los grafos . . . . . . . . . . . . . . . 296

14.1.2 Los grafos como vectores de adyacencia . . . . . . . . . . . . . 297

14.1.3 Los grafos como matrices de adyacencia . . . . . . . . . . . . . 300

14.1.4 Los grafos como listas . . . . . . . . . . . . . . . . . . . . . . . . 304

14.2 Ejercicios sobre grafos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309

14.2.1 Generador de grafos . . . . . . . . . . . . . . . . . . . . . . . . . 310

14.2.2 El grafo completo de orden n . . . . . . . . . . . . . . . . . . . . 312

14.2.3 El ciclo de orden n . . . . . . . . . . . . . . . . . . . . . . . . . . 312

14.2.4 Número de vértices . . . . . . . . . . . . . . . . . . . . . . . . . 313

14.2.5 Reconocimiento de grafos no dirigidos . . . . . . . . . . . . . . 313

14.2.6 Vértices incidentes . . . . . . . . . . . . . . . . . . . . . . . . . . 314

14.2.7 Vértices contiguos . . . . . . . . . . . . . . . . . . . . . . . . . . 314

14.2.8 Lazos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314

14.2.9 Número de lazos . . . . . . . . . . . . . . . . . . . . . . . . . . . 315

14.2.10 Número de aristas . . . . . . . . . . . . . . . . . . . . . . . . . . 315

14.2.11 Grado positivo de un vértice . . . . . . . . . . . . . . . . . . . . 316

14.2.12 Grado negativo de un vértice . . . . . . . . . . . . . . . . . . . 317

14.2.13 Grado de un vértice . . . . . . . . . . . . . . . . . . . . . . . . . 317

295

296 Capítulo 14. Grafos

14.2.14 Grafos regulares . . . . . . . . . . . . . . . . . . . . . . . . . . . 319

14.2.15 Grafos k–regulares . . . . . . . . . . . . . . . . . . . . . . . . . . 320

14.1. El TAD de los grafos

14.1.1. Especificación del TAD de los grafos

La signatura del TAD de los grafos es

❝r❡❛●r❛❢♦ ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ❖r✐❡♥t❛❝✐♦♥ ✲❃ ✭✈✱✈✮ ✲❃ ❬✭✈✱✈✱♣✮❪ ✲❃

●r❛❢♦ ✈ ♣

❞✐r✐❣✐❞♦ ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ✭●r❛❢♦ ✈ ♣✮ ✲❃ ❇♦♦❧

❛❞②❛❝❡♥t❡s ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ✭●r❛❢♦ ✈ ♣✮ ✲❃ ✈ ✲❃ ❬✈❪

♥♦❞♦s ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ✭●r❛❢♦ ✈ ♣✮ ✲❃ ❬✈❪

❛r✐st❛s ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ✭●r❛❢♦ ✈ ♣✮ ✲❃ ❬✭✈✱✈✱♣✮❪

❛r✐st❛❊♥ ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ✭●r❛❢♦ ✈ ♣✮ ✲❃ ✭✈✱✈✮ ✲❃ ❇♦♦❧

♣❡s♦ ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ✈ ✲❃ ✈ ✲❃ ✭●r❛❢♦ ✈ ♣✮ ✲❃ ♣

donde el significado de las operaciones es

✭❝r❡❛●r❛❢♦ ❞ ❝s ❛s✮ es un grafo (dirigido o no, según el valor de ♦), con el parde cotas ❝s y listas de aristas ❛s (cada arista es un trío formado por los dos vérticesy su peso). Por ejemplo,

❝r❡❛●r❛❢♦ ◆❉ ✭✶✱✺✮ ❬✭✶✱✷✱✶✷✮✱✭✶✱✸✱✸✹✮✱✭✶✱✺✱✼✽✮✱

✭✷✱✹✱✺✺✮✱✭✷✱✺✱✸✷✮✱

✭✸✱✹✱✻✶✮✱✭✸✱✺✱✹✹✮✱

✭✹✱✺✱✾✸✮❪

crea el grafo

✶✷

✶ ✲✲✲✲✲✲✲✲ ✷

⑤ ❭✼✽ ✴⑤

⑤ ❭ ✸✷✴ ⑤

⑤ ❭ ✴ ⑤

✸✹⑤ ✺ ⑤✺✺

⑤ ✴ ❭ ⑤

⑤ ✴✹✹ ❭ ⑤

⑤ ✴ ✾✸❭⑤

✸ ✲✲✲✲✲✲✲✲ ✹

✻✶

14.1. El TAD de los grafos 297

✭❞✐r✐❣✐❞♦ ❣✮ se verifica si ❣ es dirigido.

✭♥♦❞♦s ❣✮ es la lista de todos los nodos del grafo ❣.

✭❛r✐st❛s ❣✮ es la lista de las aristas del grafo ❣.

✭❛❞②❛❝❡♥t❡s ❣ ✈✮ es la lista de los vértices adyacentes al nodo ✈ en el grafo ❣.

✭❛r✐st❛❊♥ ❣ ❛✮ se verifica si ❛ es una arista del grafo ❣.

✭♣❡s♦ ✈✶ ✈✷ ❣✮ es el peso de la arista que une los vértices ✈✶ y ✈✷ en el grafo ❣.

14.1.2. Los grafos como vectores de adyacencia

En el módulo ●r❛❢♦❈♦♥❱❡❝t♦r❉❡❆❞②❛❝❡♥❝✐❛ se implementa el TAD de los grafosmediante vectores de adyacencia. La cabecera del módulo es

♠♦❞✉❧❡ ●r❛❢♦❈♦♥❱❡❝t♦r❉❡❆❞②❛❝❡♥❝✐❛

✭❖r✐❡♥t❛❝✐♦♥ ✭✳✳✮✱

●r❛❢♦✱

❝r❡❛●r❛❢♦✱ ✲✲ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ❖r✐❡♥t❛❝✐♦♥ ✲❃ ✭✈✱✈✮ ✲❃ ❬✭✈✱✈✱♣✮❪ ✲❃

✲✲ ●r❛❢♦ ✈ ♣

❞✐r✐❣✐❞♦✱ ✲✲ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ✭●r❛❢♦ ✈ ♣✮ ✲❃ ❇♦♦❧

❛❞②❛❝❡♥t❡s✱ ✲✲ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ✭●r❛❢♦ ✈ ♣✮ ✲❃ ✈ ✲❃ ❬✈❪

♥♦❞♦s✱ ✲✲ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ✭●r❛❢♦ ✈ ♣✮ ✲❃ ❬✈❪

❛r✐st❛s✱ ✲✲ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ✭●r❛❢♦ ✈ ♣✮ ✲❃ ❬✭✈✱✈✱♣✮❪

❛r✐st❛❊♥✱ ✲✲ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ✭●r❛❢♦ ✈ ♣✮ ✲❃ ✭✈✱✈✮ ✲❃ ❇♦♦❧

♣❡s♦ ✲✲ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ✈ ✲❃ ✈ ✲❃ ✭●r❛❢♦ ✈ ♣✮ ✲❃ ♣

✮ ✇❤❡r❡

Se usa la librería ❆rr❛②

✐♠♣♦rt ❉❛t❛✳❆rr❛②

La implementación del TAD es la siguiente:

❖r✐❡♥t❛❝✐♦♥ es ❉ (dirigida) ó ◆❉ (no dirigida).

❞❛t❛ ❖r✐❡♥t❛❝✐♦♥ ❂ ❉ ⑤ ◆❉

❞❡r✐✈✐♥❣ ✭❊q✱ ❙❤♦✇✮

✭●r❛❢♦ ✈ ♣✮ es un grafo con vértices de tipo ✈ y pesos de tipo ♣.

298 Capítulo 14. Grafos

❞❛t❛ ●r❛❢♦ ✈ ♣ ❂ ● ❖r✐❡♥t❛❝✐♦♥ ✭❆rr❛② ✈ ❬✭✈✱♣✮❪✮

❞❡r✐✈✐♥❣ ✭❊q✱ ❙❤♦✇✮

✭❝r❡❛●r❛❢♦ ♦ ❝s ❛s✮ es un grafo (dirigido o no, según el valor de ♦), con el parde cotas ❝s y listas de aristas ❛s (cada arista es un trío formado por los dos vérticesy su peso). Por ejemplo,

• El grafo no dirigido correspondiente a

✶✷

✶ ✲✲✲✲✲✲✲✲ ✷

⑤ ❭✼✽ ✴⑤

⑤ ❭ ✸✷✴ ⑤

⑤ ❭ ✴ ⑤

✸✹⑤ ✺ ⑤✺✺

⑤ ✴ ❭ ⑤

⑤ ✴✹✹ ❭ ⑤

⑤ ✴ ✾✸❭⑤

✸ ✲✲✲✲✲✲✲✲ ✹

✻✶

se define por

❡❥●r❛❢♦◆❉ ❂ ❝r❡❛●r❛❢♦ ◆❉ ✭✶✱✺✮ ❬✭✶✱✷✱✶✷✮✱✭✶✱✸✱✸✹✮✱✭✶✱✺✱✼✽✮✱

✭✷✱✹✱✺✺✮✱✭✷✱✺✱✸✷✮✱

✭✸✱✹✱✻✶✮✱✭✸✱✺✱✹✹✮✱

✭✹✱✺✱✾✸✮❪

y su valor es

❣❤❝✐❃ ❡❥●r❛❢♦◆❉

● ◆❉ ❛rr❛② ✭✶✱✺✮ ❬✭✶✱❬✭✷✱✶✷✮✱✭✸✱✸✹✮✱✭✺✱✼✽✮❪✮✱

✭✷✱❬✭✶✱✶✷✮✱✭✹✱✺✺✮✱✭✺✱✸✷✮❪✮✱

✭✸✱❬✭✶✱✸✹✮✱✭✹✱✻✶✮✱✭✺✱✹✹✮❪✮✱

✭✹✱❬✭✷✱✺✺✮✱✭✸✱✻✶✮✱✭✺✱✾✸✮❪✮✱

✭✺✱❬✭✶✱✼✽✮✱✭✷✱✸✷✮✱✭✸✱✹✹✮✱✭✹✱✾✸✮❪✮❪✮

• El grafo dirigido correspondiente a la figura anterior se define por

❡❥●r❛❢♦❉ ❂ ❝r❡❛●r❛❢♦ ❉ ✭✶✱✺✮ ❬✭✶✱✷✱✶✷✮✱✭✶✱✸✱✸✹✮✱✭✶✱✺✱✼✽✮✱

✭✷✱✹✱✺✺✮✱✭✷✱✺✱✸✷✮✱

✭✸✱✹✱✻✶✮✱✭✸✱✺✱✹✹✮✱

✭✹✱✺✱✾✸✮❪

14.1. El TAD de los grafos 299

su valor es

❣❤❝✐❃ ❡❥●r❛❢♦❉

● ❉ ❛rr❛② ✭✶✱✺✮ ❬✭✶✱❬✭✷✱✶✷✮✱✭✸✱✸✹✮✱✭✺✱✼✽✮❪✮✱

✭✷✱❬✭✹✱✺✺✮✱✭✺✱✸✷✮❪✮✱

✭✸✱❬✭✹✱✻✶✮✱✭✺✱✹✹✮❪✮✱

✭✹✱❬✭✺✱✾✸✮❪✮✱

✭✺✱❬❪✮❪✮

La definición de ❝r❡❛●r❛❢♦ es

❝r❡❛●r❛❢♦ ✿✿ ✭■① ✈✱ ◆✉♠ ♣✮ ❂❃ ❖r✐❡♥t❛❝✐♦♥ ✲❃ ✭✈✱✈✮ ✲❃ ❬✭✈✱✈✱♣✮❪ ✲❃ ●r❛❢♦ ✈ ♣

❝r❡❛●r❛❢♦ ♦ ❝s ✈s ❂

● ♦ ✭❛❝❝✉♠❆rr❛②

✭❭①s ① ✲❃ ①s✰✰❬①❪✮ ❬❪ ❝s

✭✭✐❢ ♦ ❂❂ ❉ t❤❡♥ ❬❪

❡❧s❡ ❬✭①✷✱✭①✶✱♣✮✮⑤✭①✶✱①✷✱♣✮ ❁✲ ✈s✱ ①✶ ✴❂ ①✷❪✮ ✰✰

❬✭①✶✱✭①✷✱♣✮✮ ⑤ ✭①✶✱①✷✱♣✮ ❁✲ ✈s❪✮✮

✭❞✐r✐❣✐❞♦ ❣✮ se verifica si ❣ es dirigido. Por ejemplo,

❞✐r✐❣✐❞♦ ❡❥●r❛❢♦❉ ❂❂ ❚r✉❡

❞✐r✐❣✐❞♦ ❡❥●r❛❢♦◆❉ ❂❂ ❋❛❧s❡

❞✐r✐❣✐❞♦ ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ✭●r❛❢♦ ✈ ♣✮ ✲❃ ❇♦♦❧

❞✐r✐❣✐❞♦ ✭● ♦ ❴✮ ❂ ♦ ❂❂ ❉

✭♥♦❞♦s ❣✮ es la lista de todos los nodos del grafo ❣. Por ejemplo,

♥♦❞♦s ❡❥●r❛❢♦◆❉ ❂❂ ❬✶✱✷✱✸✱✹✱✺❪

♥♦❞♦s ❡❥●r❛❢♦❉ ❂❂ ❬✶✱✷✱✸✱✹✱✺❪

♥♦❞♦s ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ✭●r❛❢♦ ✈ ♣✮ ✲❃ ❬✈❪

♥♦❞♦s ✭● ❴ ❣✮ ❂ ✐♥❞✐❝❡s ❣

✭❛❞②❛❝❡♥t❡s ❣ ✈✮ es la lista de los vértices adyacentes al nodo ✈ en el grafo ❣. Porejemplo,

❛❞②❛❝❡♥t❡s ❡❥●r❛❢♦◆❉ ✹ ❂❂ ❬✷✱✸✱✺❪

❛❞②❛❝❡♥t❡s ❡❥●r❛❢♦❉ ✹ ❂❂ ❬✺❪

❛❞②❛❝❡♥t❡s ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ✭●r❛❢♦ ✈ ♣✮ ✲❃ ✈ ✲❃ ❬✈❪

❛❞②❛❝❡♥t❡s ✭● ❴ ❣✮ ✈ ❂ ♠❛♣ ❢st ✭❣✦✈✮

300 Capítulo 14. Grafos

✭❛r✐st❛❊♥ ❣ ❛✮ se verifica si ❛ es una arista del grafo ❣. Por ejemplo,

❛r✐st❛❊♥ ❡❥●r❛❢♦◆❉ ✭✺✱✶✮ ❂❂ ❚r✉❡

❛r✐st❛❊♥ ❡❥●r❛❢♦◆❉ ✭✹✱✶✮ ❂❂ ❋❛❧s❡

❛r✐st❛❊♥ ❡❥●r❛❢♦❉ ✭✺✱✶✮ ❂❂ ❋❛❧s❡

❛r✐st❛❊♥ ❡❥●r❛❢♦❉ ✭✶✱✺✮ ❂❂ ❚r✉❡

❛r✐st❛❊♥ ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ✭●r❛❢♦ ✈ ♣✮ ✲❃ ✭✈✱✈✮ ✲❃ ❇♦♦❧

❛r✐st❛❊♥ ❣ ✭①✱②✮ ❂ ② ❵❡❧❡♠❵ ❛❞②❛❝❡♥t❡s ❣ ①

✭♣❡s♦ ✈✶ ✈✷ ❣✮ es el peso de la arista que une los vértices ✈✶ y ✈✷ en el grafo ❣.Por ejemplo,

♣❡s♦ ✶ ✺ ❡❥●r❛❢♦◆❉ ❂❂ ✼✽

♣❡s♦ ✶ ✺ ❡❥●r❛❢♦❉ ❂❂ ✼✽

♣❡s♦ ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ✈ ✲❃ ✈ ✲❃ ✭●r❛❢♦ ✈ ♣✮ ✲❃ ♣

♣❡s♦ ① ② ✭● ❴ ❣✮ ❂ ❤❡❛❞ ❬❝ ⑤ ✭❛✱❝✮ ❁✲ ❣✦① ✱ ❛ ❂❂ ②❪

✭❛r✐st❛s ❣✮ es la lista de las aristas del grafo ❣. Por ejemplo,

❣❤❝✐❃ ❛r✐st❛s ❡❥●r❛❢♦❉

❬✭✶✱✷✱✶✷✮✱✭✶✱✸✱✸✹✮✱✭✶✱✺✱✼✽✮✱✭✷✱✹✱✺✺✮✱✭✷✱✺✱✸✷✮✱✭✸✱✹✱✻✶✮✱

✭✸✱✺✱✹✹✮✱✭✹✱✺✱✾✸✮❪

❣❤❝✐❃ ❛r✐st❛s ❡❥●r❛❢♦◆❉

❬✭✶✱✷✱✶✷✮✱✭✶✱✸✱✸✹✮✱✭✶✱✺✱✼✽✮✱✭✷✱✶✱✶✷✮✱✭✷✱✹✱✺✺✮✱✭✷✱✺✱✸✷✮✱

✭✸✱✶✱✸✹✮✱✭✸✱✹✱✻✶✮✱✭✸✱✺✱✹✹✮✱✭✹✱✷✱✺✺✮✱✭✹✱✸✱✻✶✮✱✭✹✱✺✱✾✸✮✱

✭✺✱✶✱✼✽✮✱✭✺✱✷✱✸✷✮✱✭✺✱✸✱✹✹✮✱✭✺✱✹✱✾✸✮❪

❛r✐st❛s ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ✭●r❛❢♦ ✈ ♣✮ ✲❃ ❬✭✈✱✈✱♣✮❪

❛r✐st❛s ✭● ♦ ❣✮ ❂ ❬✭✈✶✱✈✷✱✇✮ ⑤ ✈✶ ❁✲ ♥♦❞♦s ✭● ♦ ❣✮ ✱ ✭✈✷✱✇✮ ❁✲ ❣✦✈✶❪

14.1.3. Los grafos como matrices de adyacencia

En el módulo ●r❛❢♦❈♦♥▼❛tr✐③❉❡❆❞②❛❝❡♥❝✐❛ se implementa el TAD de los grafosmediante matrices de adyacencia. La cabecera del módulo es

♠♦❞✉❧❡ ●r❛❢♦❈♦♥▼❛tr✐③❉❡❆❞②❛❝❡♥❝✐❛

✭❖r✐❡♥t❛❝✐♦♥ ✭✳✳✮✱

●r❛❢♦✱

❝r❡❛●r❛❢♦✱ ✲✲ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ❖r✐❡♥t❛❝✐♦♥ ✲❃ ✭✈✱✈✮ ✲❃ ❬✭✈✱✈✱♣✮❪ ✲❃

14.1. El TAD de los grafos 301

✲✲ ●r❛❢♦ ✈ ♣

❞✐r✐❣✐❞♦✱ ✲✲ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ✭●r❛❢♦ ✈ ♣✮ ✲❃ ❇♦♦❧

❛❞②❛❝❡♥t❡s✱ ✲✲ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ✭●r❛❢♦ ✈ ♣✮ ✲❃ ✈ ✲❃ ❬✈❪

♥♦❞♦s✱ ✲✲ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ✭●r❛❢♦ ✈ ♣✮ ✲❃ ❬✈❪

❛r✐st❛s✱ ✲✲ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ✭●r❛❢♦ ✈ ♣✮ ✲❃ ❬✭✈✱✈✱♣✮❪

❛r✐st❛❊♥✱ ✲✲ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ✭●r❛❢♦ ✈ ♣✮ ✲❃ ✭✈✱✈✮ ✲❃ ❇♦♦❧

♣❡s♦ ✲✲ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ✈ ✲❃ ✈ ✲❃ ✭●r❛❢♦ ✈ ♣✮ ✲❃ ♣

✮ ✇❤❡r❡

Se usa la librería ❆rr❛②

✐♠♣♦rt ❉❛t❛✳❆rr❛②

La implementación del TAD es la siguiente:

❖r✐❡♥t❛❝✐♦♥ es ❉ (dirigida) ó ◆❉ (no dirigida).

❞❛t❛ ❖r✐❡♥t❛❝✐♦♥ ❂ ❉ ⑤ ◆❉

❞❡r✐✈✐♥❣ ✭❊q✱ ❙❤♦✇✮

✭●r❛❢♦ ✈ ♣✮ es un grafo con vértices de tipo ✈ y pesos de tipo ♣.

❞❛t❛ ●r❛❢♦ ✈ ♣ ❂ ● ❖r✐❡♥t❛❝✐♦♥ ✭❆rr❛② ✭✈✱✈✮ ✭▼❛②❜❡ ♣✮✮

❞❡r✐✈✐♥❣ ✭❊q✱ ❙❤♦✇✮

✭❝r❡❛●r❛❢♦ ❞ ❝s ❛s✮ es un grafo (dirigido o no, según el valor de ♦), con el parde cotas ❝s y listas de aristas ❛s (cada arista es un trío formado por los dos vérticesy su peso). Por ejemplo,

• El grafo no dirigido correspondiente a

✶✷

✶ ✲✲✲✲✲✲✲✲ ✷

⑤ ❭✼✽ ✴⑤

⑤ ❭ ✸✷✴ ⑤

⑤ ❭ ✴ ⑤

✸✹⑤ ✺ ⑤✺✺

⑤ ✴ ❭ ⑤

⑤ ✴✹✹ ❭ ⑤

⑤ ✴ ✾✸❭⑤

✸ ✲✲✲✲✲✲✲✲ ✹

✻✶

302 Capítulo 14. Grafos

se define por

❡❥●r❛❢♦◆❉ ❂ ❝r❡❛●r❛❢♦ ◆❉ ✭✶✱✺✮ ❬✭✶✱✷✱✶✷✮✱✭✶✱✸✱✸✹✮✱✭✶✱✺✱✼✽✮✱

✭✷✱✹✱✺✺✮✱✭✷✱✺✱✸✷✮✱

✭✸✱✹✱✻✶✮✱✭✸✱✺✱✹✹✮✱

✭✹✱✺✱✾✸✮❪

y su valor es

❣❤❝✐❃ ❡❥●r❛❢♦◆❉

● ◆❉ ❛rr❛② ✭✭✶✱✶✮✱✭✺✱✺✮✮

❬✭✭✶✱✶✮✱◆♦t❤✐♥❣✮✱✭✭✶✱✷✮✱❏✉st ✶✷✮✱✭✭✶✱✸✮✱❏✉st ✸✹✮✱

✭✭✶✱✹✮✱◆♦t❤✐♥❣✮✱✭✭✶✱✺✮✱❏✉st ✼✽✮✱✭✭✷✱✶✮✱❏✉st ✶✷✮✱

✭✭✷✱✷✮✱◆♦t❤✐♥❣✮✱✭✭✷✱✸✮✱◆♦t❤✐♥❣✮✱✭✭✷✱✹✮✱❏✉st ✺✺✮✱

✭✭✷✱✺✮✱❏✉st ✸✷✮✱✭✭✸✱✶✮✱❏✉st ✸✹✮✱✭✭✸✱✷✮✱◆♦t❤✐♥❣✮✱

✭✭✸✱✸✮✱◆♦t❤✐♥❣✮✱✭✭✸✱✹✮✱❏✉st ✻✶✮✱✭✭✸✱✺✮✱❏✉st ✹✹✮✱

✭✭✹✱✶✮✱◆♦t❤✐♥❣✮✱✭✭✹✱✷✮✱❏✉st ✺✺✮✱✭✭✹✱✸✮✱❏✉st ✻✶✮✱

✭✭✹✱✹✮✱◆♦t❤✐♥❣✮✱✭✭✹✱✺✮✱❏✉st ✾✸✮✱✭✭✺✱✶✮✱❏✉st ✼✽✮✱

✭✭✺✱✷✮✱❏✉st ✸✷✮✱✭✭✺✱✸✮✱❏✉st ✹✹✮✱✭✭✺✱✹✮✱❏✉st ✾✸✮✱

✭✭✺✱✺✮✱◆♦t❤✐♥❣✮❪

• El grafo dirigido correspondiente a la figura anterior se define por

❡❥●r❛❢♦❉ ❂ ❝r❡❛●r❛❢♦ ❉ ✭✶✱✺✮ ❬✭✶✱✷✱✶✷✮✱✭✶✱✸✱✸✹✮✱✭✶✱✺✱✼✽✮✱

✭✷✱✹✱✺✺✮✱✭✷✱✺✱✸✷✮✱

✭✸✱✹✱✻✶✮✱✭✸✱✺✱✹✹✮✱

✭✹✱✺✱✾✸✮❪

su valor es

❣❤❝✐❃ ❡❥●r❛❢♦❉

● ❉ ✭❛rr❛② ✭✭✶✱✶✮✱✭✺✱✺✮✮

❬✭✭✶✱✶✮✱◆♦t❤✐♥❣✮✱✭✭✶✱✷✮✱❏✉st ✶✷✮✱✭✭✶✱✸✮✱❏✉st ✸✹✮✱

✭✭✶✱✹✮✱◆♦t❤✐♥❣✮✱✭✭✶✱✺✮✱❏✉st ✼✽✮✱✭✭✷✱✶✮✱◆♦t❤✐♥❣✮✱

✭✭✷✱✷✮✱◆♦t❤✐♥❣✮✱✭✭✷✱✸✮✱◆♦t❤✐♥❣✮✱✭✭✷✱✹✮✱❏✉st ✺✺✮✱

✭✭✷✱✺✮✱❏✉st ✸✷✮✱✭✭✸✱✶✮✱◆♦t❤✐♥❣✮✱✭✭✸✱✷✮✱◆♦t❤✐♥❣✮✱

✭✭✸✱✸✮✱◆♦t❤✐♥❣✮✱✭✭✸✱✹✮✱❏✉st ✻✶✮✱✭✭✸✱✺✮✱❏✉st ✹✹✮✱

✭✭✹✱✶✮✱◆♦t❤✐♥❣✮✱✭✭✹✱✷✮✱◆♦t❤✐♥❣✮✱✭✭✹✱✸✮✱◆♦t❤✐♥❣✮✱

✭✭✹✱✹✮✱◆♦t❤✐♥❣✮✱✭✭✹✱✺✮✱❏✉st ✾✸✮✱✭✭✺✱✶✮✱◆♦t❤✐♥❣✮✱

✭✭✺✱✷✮✱◆♦t❤✐♥❣✮✱✭✭✺✱✸✮✱◆♦t❤✐♥❣✮✱✭✭✺✱✹✮✱◆♦t❤✐♥❣✮✱

✭✭✺✱✺✮✱◆♦t❤✐♥❣✮❪✮

La definición de ❝r❡❛●r❛❢♦ es

❝r❡❛●r❛❢♦ ✿✿ ✭■① ✈✱ ◆✉♠ ♣✮ ❂❃ ❖r✐❡♥t❛❝✐♦♥ ✲❃ ✭✈✱✈✮ ✲❃ ❬✭✈✱✈✱♣✮❪ ✲❃ ✭●r❛❢♦ ✈ ♣✮

❝r❡❛●r❛❢♦ ♦ ❝s❅✭❧✱✉✮ ❛s

14.1. El TAD de los grafos 303

❂ ● ♦ ✭♠❛tr✐③❱❛❝✐❛ ✴✴

✭❬✭✭①✶✱①✷✮✱❏✉st ✇✮ ⑤ ✭①✶✱①✷✱✇✮ ❁✲ ❛s❪ ✰✰

✐❢ ♦ ❂❂ ❉ t❤❡♥ ❬❪

❡❧s❡ ❬✭✭①✷✱①✶✮✱❏✉st ✇✮ ⑤ ✭①✶✱①✷✱✇✮ ❁✲ ❛s✱ ①✶ ✴❂ ①✷❪✮✮

✇❤❡r❡

♠❛tr✐③❱❛❝✐❛ ❂ ❛rr❛② ✭✭❧✱❧✮✱✭✉✱✉✮✮

❬✭✭①✶✱①✷✮✱◆♦t❤✐♥❣✮ ⑤ ①✶ ❁✲ r❛♥❣❡ ❝s✱

①✷ ❁✲ r❛♥❣❡ ❝s❪

✭❞✐r✐❣✐❞♦ ❣✮ se verifica si ❣ es dirigido. Por ejemplo,

❞✐r✐❣✐❞♦ ❡❥●r❛❢♦❉ ❂❂ ❚r✉❡

❞✐r✐❣✐❞♦ ❡❥●r❛❢♦◆❉ ❂❂ ❋❛❧s❡

❞✐r✐❣✐❞♦ ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ✭●r❛❢♦ ✈ ♣✮ ✲❃ ❇♦♦❧

❞✐r✐❣✐❞♦ ✭● ♦ ❴✮ ❂ ♦ ❂❂ ❉

✭♥♦❞♦s ❣✮ es la lista de todos los nodos del grafo ❣. Por ejemplo,

♥♦❞♦s ❡❥●r❛❢♦◆❉ ❂❂ ❬✶✱✷✱✸✱✹✱✺❪

♥♦❞♦s ❡❥●r❛❢♦❉ ❂❂ ❬✶✱✷✱✸✱✹✱✺❪

♥♦❞♦s ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ✭●r❛❢♦ ✈ ♣✮ ✲❃ ❬✈❪

♥♦❞♦s ✭● ❴ ❣✮ ❂ r❛♥❣❡ ✭❧✱✉✮

✇❤❡r❡ ✭✭❧✱❴✮✱✭✉✱❴✮✮ ❂ ❜♦✉♥❞s ❣

✭❛❞②❛❝❡♥t❡s ❣ ✈✮ es la lista de los vértices adyacentes al nodo ✈ en el grafo ❣. Porejemplo,

❛❞②❛❝❡♥t❡s ❡❥●r❛❢♦◆❉ ✹ ❂❂ ❬✷✱✸✱✺❪

❛❞②❛❝❡♥t❡s ❡❥●r❛❢♦❉ ✹ ❂❂ ❬✺❪

❛❞②❛❝❡♥t❡s ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ✭●r❛❢♦ ✈ ♣✮ ✲❃ ✈ ✲❃ ❬✈❪

❛❞②❛❝❡♥t❡s ✭● ♦ ❣✮ ✈ ❂

❬✈✬ ⑤ ✈✬ ❁✲ ♥♦❞♦s ✭● ♦ ❣✮✱ ✭❣✦✭✈✱✈✬✮✮ ✴❂ ◆♦t❤✐♥❣❪

✭❛r✐st❛❊♥ ❣ ❛✮ se verifica si ❛ es una arista del grafo ❣. Por ejemplo,

❛r✐st❛❊♥ ❡❥●r❛❢♦◆❉ ✭✺✱✶✮ ❂❂ ❚r✉❡

❛r✐st❛❊♥ ❡❥●r❛❢♦◆❉ ✭✹✱✶✮ ❂❂ ❋❛❧s❡

304 Capítulo 14. Grafos

❛r✐st❛❊♥ ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ✭●r❛❢♦ ✈ ♣✮ ✲❃ ✭✈✱✈✮ ✲❃ ❇♦♦❧

❛r✐st❛❊♥ ✭● ❴♦ ❣✮ ✭①✱②✮❂ ✭❣✦✭①✱②✮✮ ✴❂ ◆♦t❤✐♥❣

✭♣❡s♦ ✈✶ ✈✷ ❣✮ es el peso de la arista que une los vértices ✈✶ y ✈✷ en el grafo ❣.Por ejemplo,

♣❡s♦ ✶ ✺ ❡❥●r❛❢♦◆❉ ❂❂ ✼✽

♣❡s♦ ✶ ✺ ❡❥●r❛❢♦❉ ❂❂ ✼✽

♣❡s♦ ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ✈ ✲❃ ✈ ✲❃ ✭●r❛❢♦ ✈ ♣✮ ✲❃ ♣

♣❡s♦ ① ② ✭● ❴ ❣✮ ❂ ✇ ✇❤❡r❡ ✭❏✉st ✇✮ ❂ ❣✦✭①✱②✮

✭❛r✐st❛s ❣✮ es la lista de las aristas del grafo ❣. Por ejemplo,

❣❤❝✐❃ ❛r✐st❛s ❡❥●r❛❢♦❉

❬✭✶✱✷✱✶✷✮✱✭✶✱✸✱✸✹✮✱✭✶✱✺✱✼✽✮✱✭✷✱✹✱✺✺✮✱✭✷✱✺✱✸✷✮✱✭✸✱✹✱✻✶✮✱

✭✸✱✺✱✹✹✮✱✭✹✱✺✱✾✸✮❪

❣❤❝✐❃ ❛r✐st❛s ❡❥●r❛❢♦◆❉

❬✭✶✱✷✱✶✷✮✱✭✶✱✸✱✸✹✮✱✭✶✱✺✱✼✽✮✱✭✷✱✶✱✶✷✮✱✭✷✱✹✱✺✺✮✱✭✷✱✺✱✸✷✮✱

✭✸✱✶✱✸✹✮✱✭✸✱✹✱✻✶✮✱✭✸✱✺✱✹✹✮✱✭✹✱✷✱✺✺✮✱✭✹✱✸✱✻✶✮✱✭✹✱✺✱✾✸✮✱

✭✺✱✶✱✼✽✮✱✭✺✱✷✱✸✷✮✱✭✺✱✸✱✹✹✮✱✭✺✱✹✱✾✸✮❪

❛r✐st❛s ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ✭●r❛❢♦ ✈ ♣✮ ✲❃ ❬✭✈✱✈✱♣✮❪

❛r✐st❛s ❣❅✭● ♦ ❡✮ ❂ ❬✭✈✶✱✈✷✱❡①tr❛❡✭❡✦✭✈✶✱✈✷✮✮✮

⑤ ✈✶ ❁✲ ♥♦❞♦s ❣✱

✈✷ ❁✲ ♥♦❞♦s ❣✱

❛r✐st❛❊♥ ❣ ✭✈✶✱✈✷✮❪

✇❤❡r❡ ❡①tr❛❡ ✭❏✉st ✇✮ ❂ ✇

14.1.4. Los grafos como listas

El objetivo de esta sección es implementar el TAD de los grafos mediante listas, demanera análoga a las implementaciones anteriores.

La cabecera del módulo es

♠♦❞✉❧❡ ●r❛❢♦❈♦♥▲✐st❛

✭❖r✐❡♥t❛❝✐♦♥ ✭✳✳✮✱

●r❛❢♦✱

❝r❡❛●r❛❢♦✱ ✲✲ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ❖r✐❡♥t❛❝✐♦♥ ✲❃ ✭✈✱✈✮ ✲❃ ❬✭✈✱✈✱♣✮❪ ✲❃

✲✲ ●r❛❢♦ ✈ ♣

14.1. El TAD de los grafos 305

❞✐r✐❣✐❞♦✱ ✲✲ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ✭●r❛❢♦ ✈ ♣✮ ✲❃ ❇♦♦❧

❛❞②❛❝❡♥t❡s✱ ✲✲ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ✭●r❛❢♦ ✈ ♣✮ ✲❃ ✈ ✲❃ ❬✈❪

♥♦❞♦s✱ ✲✲ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ✭●r❛❢♦ ✈ ♣✮ ✲❃ ❬✈❪

❛r✐st❛s✱ ✲✲ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ✭●r❛❢♦ ✈ ♣✮ ✲❃ ❬✭✈✱✈✱♣✮❪

❛r✐st❛❊♥✱ ✲✲ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ✭●r❛❢♦ ✈ ♣✮ ✲❃ ✭✈✱✈✮ ✲❃ ❇♦♦❧

♣❡s♦ ✲✲ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ✈ ✲❃ ✈ ✲❃ ✭●r❛❢♦ ✈ ♣✮ ✲❃ ♣

✮ ✇❤❡r❡

Se usan las librerías ❆rr❛② y ▲✐st:

✐♠♣♦rt ❉❛t❛✳❆rr❛②

✐♠♣♦rt ❉❛t❛✳▲✐st

❖r✐❡♥t❛❝✐♦♥ es ❉ (dirigida) ó ◆❉ (no dirigida).

❞❛t❛ ❖r✐❡♥t❛❝✐♦♥ ❂ ❉ ⑤ ◆❉

❞❡r✐✈✐♥❣ ✭❊q✱ ❙❤♦✇✮

El tipo ✭●r❛❢♦ ✈ ♣✮ representa los grafos con vértices de tipo ✈ y pesos de tipo ♣.

❞❛t❛ ●r❛❢♦ ✈ ♣ ❂ ● ❖r✐❡♥t❛❝✐♦♥ ✭❬✈❪✱❬✭✭✈✱✈✮✱♣✮❪✮

❞❡r✐✈✐♥❣ ✭❊q✱ ❙❤♦✇✮

Ejercicio 14.1.1. Definir la función

❝r❡❛●r❛❢♦ ✿✿ ✭■① ✈✱ ◆✉♠ ♣✮ ❂❃ ❇♦♦❧ ✲❃ ✭✈✱✈✮ ✲❃ ❬✭✈✱✈✱♣✮❪ ✲❃ ●r❛❢♦ ✈ ♣

tal que ✭❝r❡❛●r❛❢♦ ❞ ❝s ❛s✮ es un grafo (dirigido o no, según el valor de ♦), con el par de

cotas ❝s y listas de aristas ❛s (cada arista es un trío formado por los dos vértices y su peso). Por

ejemplo,

❣❤❝✐❃ ❝r❡❛●r❛❢♦ ◆❉ ✭✶✱✸✮ ❬✭✶✱✷✱✶✷✮✱✭✶✱✸✱✸✹✮❪

● ◆❉ ✭❬✶✱✷✱✸❪✱❬✭✭✶✱✷✮✱✶✷✮✱✭✭✶✱✸✮✱✸✹✮✱✭✭✷✱✶✮✱✶✷✮✱✭✭✸✱✶✮✱✸✹✮❪✮

❣❤❝✐❃ ❝r❡❛●r❛❢♦ ❉ ✭✶✱✸✮ ❬✭✶✱✷✱✶✷✮✱✭✶✱✸✱✸✹✮❪

● ❉ ✭❬✶✱✷✱✸❪✱❬✭✭✶✱✷✮✱✶✷✮✱✭✭✶✱✸✮✱✸✹✮❪✮

❣❤❝✐❃ ❝r❡❛●r❛❢♦ ❉ ✭✶✱✹✮ ❬✭✶✱✷✱✶✷✮✱✭✶✱✸✱✸✹✮❪

● ❉ ✭❬✶✱✷✱✸✱✹❪✱❬✭✭✶✱✷✮✱✶✷✮✱✭✭✶✱✸✮✱✸✹✮❪✮

Solución:

❝r❡❛●r❛❢♦ ✿✿ ✭■① ✈✱ ◆✉♠ ♣✮ ❂❃

❖r✐❡♥t❛❝✐♦♥ ✲❃ ✭✈✱✈✮ ✲❃ ❬✭✈✱✈✱♣✮❪ ✲❃ ●r❛❢♦ ✈ ♣

❝r❡❛●r❛❢♦ ♦ ❝s ❛s ❂

306 Capítulo 14. Grafos

● ♦ ✭r❛♥❣❡ ❝s✱ ❬✭✭①✶✱①✷✮✱✇✮ ⑤ ✭①✶✱①✷✱✇✮ ❁✲ ❛s❪ ✰✰

✐❢ ♦ ❂❂ ❉ t❤❡♥ ❬❪

❡❧s❡ ❬✭✭①✷✱①✶✮✱✇✮ ⑤ ✭①✶✱①✷✱✇✮ ❁✲ ❛s✱ ①✶ ✴❂ ①✷❪✮

Ejercicio 14.1.2. Definir, con creaGrafo, la constante

❡❥●r❛❢♦◆❉ ✿✿ ●r❛❢♦ ■♥t ■♥t

para representar el siguiente grafo no dirigido

✶✷

✶ ✲✲✲✲✲✲✲✲ ✷

⑤ ❭✼✽ ✴⑤

⑤ ❭ ✸✷✴ ⑤

⑤ ❭ ✴ ⑤

✸✹⑤ ✺ ⑤✺✺

⑤ ✴ ❭ ⑤

⑤ ✴✹✹ ❭ ⑤

⑤ ✴ ✾✸❭⑤

✸ ✲✲✲✲✲✲✲✲ ✹

✻✶

❣❤❝✐❃ ❡❥●r❛❢♦◆❉

● ◆❉ ✭❬✶✱✷✱✸✱✹✱✺❪✱

❬✭✭✶✱✷✮✱✶✷✮✱✭✭✶✱✸✮✱✸✹✮✱✭✭✶✱✺✮✱✼✽✮✱✭✭✷✱✹✮✱✺✺✮✱✭✭✷✱✺✮✱✸✷✮✱

✭✭✸✱✹✮✱✻✶✮✱✭✭✸✱✺✮✱✹✹✮✱✭✭✹✱✺✮✱✾✸✮✱✭✭✷✱✶✮✱✶✷✮✱✭✭✸✱✶✮✱✸✹✮✱

✭✭✺✱✶✮✱✼✽✮✱✭✭✹✱✷✮✱✺✺✮✱✭✭✺✱✷✮✱✸✷✮✱✭✭✹✱✸✮✱✻✶✮✱✭✭✺✱✸✮✱✹✹✮✱

✭✭✺✱✹✮✱✾✸✮❪✮

Solución:

❡❥●r❛❢♦◆❉ ✿✿ ●r❛❢♦ ■♥t ■♥t

❡❥●r❛❢♦◆❉ ❂ ❝r❡❛●r❛❢♦ ◆❉ ✭✶✱✺✮ ❬✭✶✱✷✱✶✷✮✱✭✶✱✸✱✸✹✮✱✭✶✱✺✱✼✽✮✱

✭✷✱✹✱✺✺✮✱✭✷✱✺✱✸✷✮✱

✭✸✱✹✱✻✶✮✱✭✸✱✺✱✹✹✮✱

✭✹✱✺✱✾✸✮❪

Ejercicio 14.1.3. Definir, con ❝r❡❛●r❛❢♦, la constante

❡❥●r❛❢♦❉ ✿✿ ●r❛❢♦ ■♥t ■♥t

para representar el grafo anterior donde se considera que las aristas son los pares ✭①✱②✮ con

x < y. Por ejemplo,

14.1. El TAD de los grafos 307

❣❤❝✐❃ ❡❥●r❛❢♦❉

● ❉ ✭❬✶✱✷✱✸✱✹✱✺❪✱

❬✭✭✶✱✷✮✱✶✷✮✱✭✭✶✱✸✮✱✸✹✮✱✭✭✶✱✺✮✱✼✽✮✱✭✭✷✱✹✮✱✺✺✮✱✭✭✷✱✺✮✱✸✷✮✱

✭✭✸✱✹✮✱✻✶✮✱✭✭✸✱✺✮✱✹✹✮✱✭✭✹✱✺✮✱✾✸✮❪✮

Solución:

❡❥●r❛❢♦❉ ✿✿ ●r❛❢♦ ■♥t ■♥t

❡❥●r❛❢♦❉ ❂ ❝r❡❛●r❛❢♦ ❉ ✭✶✱✺✮ ❬✭✶✱✷✱✶✷✮✱✭✶✱✸✱✸✹✮✱✭✶✱✺✱✼✽✮✱

✭✷✱✹✱✺✺✮✱✭✷✱✺✱✸✷✮✱

✭✸✱✹✱✻✶✮✱✭✸✱✺✱✹✹✮✱

✭✹✱✺✱✾✸✮❪

Ejercicio 14.1.4. Definir la función

❞✐r✐❣✐❞♦ ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ✭●r❛❢♦ ✈ ♣✮ ✲❃ ❇♦♦❧

tal que ✭❞✐r✐❣✐❞♦ ❣✮ se verifica si ❣ es dirigido. Por ejemplo,

❞✐r✐❣✐❞♦ ❡❥●r❛❢♦❉ ❂❂ ❚r✉❡

❞✐r✐❣✐❞♦ ❡❥●r❛❢♦◆❉ ❂❂ ❋❛❧s❡

Solución:

❞✐r✐❣✐❞♦ ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ✭●r❛❢♦ ✈ ♣✮ ✲❃ ❇♦♦❧

❞✐r✐❣✐❞♦ ✭● ♦ ❴✮ ❂ ♦ ❂❂ ❉

Ejercicio 14.1.5. Definir la función

♥♦❞♦s ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ✭●r❛❢♦ ✈ ♣✮ ✲❃ ❬✈❪

tal que ✭♥♦❞♦s ❣✮ es la lista de todos los nodos del grafo ❣. Por ejemplo,

♥♦❞♦s ❡❥●r❛❢♦◆❉ ❂❂ ❬✶✱✷✱✸✱✹✱✺❪

♥♦❞♦s ❡❥●r❛❢♦❉ ❂❂ ❬✶✱✷✱✸✱✹✱✺❪

Solución:

♥♦❞♦s ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ✭●r❛❢♦ ✈ ♣✮ ✲❃ ❬✈❪

♥♦❞♦s ✭● ❴ ✭♥s✱❴✮✮ ❂ ♥s

Ejercicio 14.1.6. Definir la función

❛❞②❛❝❡♥t❡s ✿✿ ✭■① ✈✱ ◆✉♠ ♣✮ ❂❃ ●r❛❢♦ ✈ ♣ ✲❃ ✈ ✲❃ ❬✈❪

tal que ✭❛❞②❛❝❡♥t❡s ❣ ✈✮ es la lista de los vértices adyacentes al nodo ✈ en el grafo ❣. Por

ejemplo,

308 Capítulo 14. Grafos

❛❞②❛❝❡♥t❡s ❡❥●r❛❢♦◆❉ ✹ ❂❂ ❬✺✱✷✱✸❪

❛❞②❛❝❡♥t❡s ❡❥●r❛❢♦❉ ✹ ❂❂ ❬✺❪

Solución:

❛❞②❛❝❡♥t❡s ✿✿ ✭■① ✈✱ ◆✉♠ ♣✮ ❂❃ ●r❛❢♦ ✈ ♣ ✲❃ ✈ ✲❃ ❬✈❪

❛❞②❛❝❡♥t❡s ✭● ❴ ✭❴✱❡✮✮ ✈ ❂ ♥✉❜ ❬✉ ⑤ ✭✭✇✱✉✮✱❴✮ ❁✲ ❡✱ ✇ ❂❂ ✈❪

Ejercicio 14.1.7. Definir la función

❛r✐st❛❊♥ ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ●r❛❢♦ ✈ ♣ ✲❃ ✭✈✱✈✮ ✲❃ ❇♦♦❧

tal que ✭❛r✐st❛❊♥ ❣ ❛✮ se verifica si ❛ es una arista del grafo ❣. Por ejemplo,

❛r✐st❛❊♥ ❡❥●r❛❢♦◆❉ ✭✺✱✶✮ ❂❂ ❚r✉❡

❛r✐st❛❊♥ ❡❥●r❛❢♦◆❉ ✭✹✱✶✮ ❂❂ ❋❛❧s❡

❛r✐st❛❊♥ ❡❥●r❛❢♦❉ ✭✺✱✶✮ ❂❂ ❋❛❧s❡

❛r✐st❛❊♥ ❡❥●r❛❢♦❉ ✭✶✱✺✮ ❂❂ ❚r✉❡

Solución:

❛r✐st❛❊♥ ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ●r❛❢♦ ✈ ♣ ✲❃ ✭✈✱✈✮ ✲❃ ❇♦♦❧

❛r✐st❛❊♥ ❣ ✭①✱②✮ ❂ ② ❵❡❧❡♠❵ ❛❞②❛❝❡♥t❡s ❣ ①

Ejercicio 14.1.8. Definir la función

♣❡s♦ ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ✈ ✲❃ ✈ ✲❃ ●r❛❢♦ ✈ ♣ ✲❃ ♣

tal que ✭♣❡s♦ ✈✶ ✈✷ ❣✮ es el peso de la arista que une los vértices ✈✶ y ✈✷ en el grafo g. Por

ejemplo,

♣❡s♦ ✶ ✺ ❡❥●r❛❢♦◆❉ ❂❂ ✼✽

♣❡s♦ ✶ ✺ ❡❥●r❛❢♦❉ ❂❂ ✼✽

Solución:

♣❡s♦ ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ✈ ✲❃ ✈ ✲❃ ●r❛❢♦ ✈ ♣ ✲❃ ♣

♣❡s♦ ① ② ✭● ❴ ✭❴✱❣s✮✮ ❂ ❤❡❛❞ ❬❝ ⑤ ✭✭①✬✱②✬✮✱❝✮ ❁✲ ❣s✱ ①❂❂①✬✱ ②❂❂②✬❪

Ejercicio 14.1.9. Definir la función

❛r✐st❛s ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ●r❛❢♦ ✈ ♣ ✲❃ ❬✭✈✱✈✱♣✮❪

tal que ✭❛r✐st❛s❉ ❣✮ es la lista de las aristas del grafo ❣. Por ejemplo,

14.2. Ejercicios sobre grafos 309

❣❤❝✐❃ ❛r✐st❛s ❡❥●r❛❢♦❉

❬✭✶✱✷✱✶✷✮✱✭✶✱✸✱✸✹✮✱✭✶✱✺✱✼✽✮✱✭✷✱✹✱✺✺✮✱✭✷✱✺✱✸✷✮✱✭✸✱✹✱✻✶✮✱

✭✸✱✺✱✹✹✮✱✭✹✱✺✱✾✸✮❪

❣❤❝✐❃ ❛r✐st❛s ❡❥●r❛❢♦◆❉

❬✭✶✱✷✱✶✷✮✱✭✶✱✸✱✸✹✮✱✭✶✱✺✱✼✽✮✱✭✷✱✶✱✶✷✮✱✭✷✱✹✱✺✺✮✱✭✷✱✺✱✸✷✮✱

✭✸✱✶✱✸✹✮✱✭✸✱✹✱✻✶✮✱✭✸✱✺✱✹✹✮✱✭✹✱✷✱✺✺✮✱✭✹✱✸✱✻✶✮✱✭✹✱✺✱✾✸✮✱

✭✺✱✶✱✼✽✮✱✭✺✱✷✱✸✷✮✱✭✺✱✸✱✹✹✮✱✭✺✱✹✱✾✸✮❪

Solución:

❛r✐st❛s ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ●r❛❢♦ ✈ ♣ ✲❃ ❬✭✈✱✈✱♣✮❪

❛r✐st❛s ✭● ❴ ✭❴✱❣✮✮ ❂ ❬✭✈✶✱✈✷✱♣✮ ⑤ ✭✭✈✶✱✈✷✮✱♣✮ ❁✲ ❣❪

14.2. Ejercicios sobre grafos

El objetivo de esta sección es definir funciones sobre el TAD de los grafos, utilizandolas implementaciones anteriores.

La cabecera del módulo es

④✲★ ▲❆◆●❯❆●❊ ❋❧❡①✐❜❧❡■♥st❛♥❝❡s✱ ❚②♣❡❙②♥♦♥②♠■♥st❛♥❝❡s ★✲⑥

✐♠♣♦rt ❉❛t❛✳❆rr❛②

✐♠♣♦rt ❉❛t❛✳▲✐st ✭♥✉❜✮

✐♠♣♦rt ❚❡st✳◗✉✐❝❦❈❤❡❝❦

✐♠♣♦rt ●r❛❢♦❈♦♥❱❡❝t♦r❉❡❆❞②❛❝❡♥❝✐❛

✲✲ ✐♠♣♦rt ●r❛❢♦❈♦♥▼❛tr✐③❉❡❆❞②❛❝❡♥❝✐❛

Obsérvese que hay que seleccionar una implementación del TAD de los grafos.Para los ejemplos se usarán los siguientes grafos.

❣✶✱ ❣✷✱ ❣✸✱ ❣✹✱ ❣✺✱ ❣✻✱ ❣✼✱ ❣✽✱ ❣✾✱ ❣✶✵✱ ❣✶✶ ✿✿ ●r❛❢♦ ■♥t ■♥t

❣✶ ❂ ❝r❡❛●r❛❢♦ ◆❉ ✭✶✱✺✮ ❬✭✶✱✷✱✶✷✮✱✭✶✱✸✱✸✹✮✱✭✶✱✺✱✼✽✮✱

✭✷✱✹✱✺✺✮✱✭✷✱✺✱✸✷✮✱

✭✸✱✹✱✻✶✮✱✭✸✱✺✱✹✹✮✱

✭✹✱✺✱✾✸✮❪

❣✷ ❂ ❝r❡❛●r❛❢♦ ❉ ✭✶✱✺✮ ❬✭✶✱✷✱✶✷✮✱✭✶✱✸✱✸✹✮✱✭✶✱✺✱✼✽✮✱

✭✷✱✹✱✺✺✮✱✭✷✱✺✱✸✷✮✱

✭✹✱✸✱✻✶✮✱✭✹✱✺✱✾✸✮❪

❣✸ ❂ ❝r❡❛●r❛❢♦ ❉ ✭✶✱✸✮ ❬✭✶✱✷✱✵✮✱✭✷✱✷✱✵✮✱✭✸✱✶✱✵✮✱✭✸✱✷✱✵✮❪

❣✹ ❂ ❝r❡❛●r❛❢♦ ❉ ✭✶✱✹✮ ❬✭✶✱✷✱✸✮✱✭✷✱✶✱✺✮❪

310 Capítulo 14. Grafos

❣✺ ❂ ❝r❡❛●r❛❢♦ ❉ ✭✶✱✶✮ ❬✭✶✱✶✱✵✮❪

❣✻ ❂ ❝r❡❛●r❛❢♦ ❉ ✭✶✱✹✮ ❬✭✶✱✸✱✵✮✱✭✸✱✶✱✵✮✱✭✸✱✸✱✵✮✱✭✹✱✷✱✵✮❪

❣✼ ❂ ❝r❡❛●r❛❢♦ ◆❉ ✭✶✱✹✮ ❬✭✶✱✸✱✵✮❪

❣✽ ❂ ❝r❡❛●r❛❢♦ ❉ ✭✶✱✺✮ ❬✭✶✱✶✱✵✮✱✭✶✱✷✱✵✮✱✭✶✱✸✱✵✮✱✭✷✱✹✱✵✮✱✭✸✱✶✱✵✮✱

✭✹✱✶✱✵✮✱✭✹✱✷✱✵✮✱✭✹✱✹✱✵✮✱✭✹✱✺✱✵✮❪

❣✾ ❂ ❝r❡❛●r❛❢♦ ❉ ✭✶✱✺✮ ❬✭✹✱✶✱✶✮✱✭✹✱✸✱✷✮✱✭✺✱✶✱✵✮❪

❣✶✵ ❂ ❝r❡❛●r❛❢♦ ◆❉ ✭✶✱✸✮ ❬✭✶✱✷✱✶✮✱✭✶✱✸✱✶✮✱✭✷✱✸✱✶✮✱✭✸✱✸✱✶✮❪

❣✶✶ ❂ ❝r❡❛●r❛❢♦ ❉ ✭✶✱✸✮ ❬✭✶✱✷✱✶✮✱✭✶✱✸✱✶✮✱✭✷✱✸✱✶✮✱✭✸✱✸✱✶✮❪

14.2.1. Generador de grafos

Para comprobar propiedades de grafos con QuickCheck se definen las siguientesfunciones:

✭❣❡♥❡r❛●◆❉ ♥ ♣s✮ es el grafo completo de orden ♥ tal que los pesos están deter-minados por ❭❜❡❣✐♥④s❡s✐♦♥⑥. Por ejemplo,

❣❤❝✐❃ ❣❡♥❡r❛●◆❉ ✸ ❬✹✱✷✱✺❪

✭◆❉✱❛rr❛② ✭✶✱✸✮ ❬✭✶✱❬✭✷✱✹✮✱✭✸✱✷✮❪✮✱

✭✷✱❬✭✶✱✹✮✱✭✸✱✺✮❪✮✱

✸✱❬✭✶✱✷✮✱✭✷✱✺✮❪✮❪✮

❣❤❝✐❃ ❣❡♥❡r❛●◆❉ ✸ ❬✹✱✲✷✱✺❪

✭◆❉✱❛rr❛② ✭✶✱✸✮ ❬✭✶✱❬✭✷✱✹✮❪✮✱✭✷✱❬✭✶✱✹✮✱✭✸✱✺✮❪✮✱✭✸✱❬✭✷✱✺✮❪✮❪✮

❣❡♥❡r❛●◆❉ ✿✿ ■♥t ✲❃ ❬■♥t❪ ✲❃ ●r❛❢♦ ■♥t ■♥t

❣❡♥❡r❛●◆❉ ♥ ♣s ❂ ❝r❡❛●r❛❢♦ ◆❉ ✭✶✱♥✮ ❧✸

✇❤❡r❡ ❧✶ ❂ ❬✭①✱②✮ ⑤ ① ❁✲ ❬✶✳✳♥❪✱ ② ❁✲ ❬✶✳✳♥❪✱ ① ❁ ②❪

❧✷ ❂ ③✐♣ ❧✶ ♣s

❧✸ ❂ ❬✭①✱②✱③✮ ⑤ ✭✭①✱②✮✱③✮ ❁✲ ❧✷✱ ③ ❃ ✵❪

✭❣❡♥❡r❛●❉ ♥ ♣s✮ es el grafo completo de orden ♥ tal que los pesos están determi-nados por ❭❜❡❣✐♥④s❡s✐♦♥⑥. Por ejemplo,

❣❤❝✐❃ ❣❡♥❡r❛●❉ ✸ ❬✹✱✷✱✺❪

✭❉✱❛rr❛② ✭✶✱✸✮ ❬✭✶✱❬✭✶✱✹✮✱✭✷✱✷✮✱✭✸✱✺✮❪✮✱

✭✷✱❬❪✮✱

✭✸✱❬❪✮❪✮

❣❤❝✐❃ ❣❡♥❡r❛●❉ ✸ ❬✹✱✷✱✺✱✸✱✼✱✾✱✽✱✻❪

✭❉✱❛rr❛② ✭✶✱✸✮ ❬✭✶✱❬✭✶✱✹✮✱✭✷✱✷✮✱✭✸✱✺✮❪✮✱

✭✷✱❬✭✶✱✸✮✱✭✷✱✼✮✱✭✸✱✾✮❪✮✱

✭✸✱❬✭✶✱✽✮✱✭✷✱✻✮❪✮❪✮

14.2. Ejercicios sobre grafos 311

❣❡♥❡r❛●❉ ✿✿ ■♥t ✲❃ ❬■♥t❪ ✲❃ ●r❛❢♦ ■♥t ■♥t

❣❡♥❡r❛●❉ ♥ ♣s ❂ ❝r❡❛●r❛❢♦ ❉ ✭✶✱♥✮ ❧✸

✇❤❡r❡ ❧✶ ❂ ❬✭①✱②✮ ⑤ ① ❁✲ ❬✶✳✳♥❪✱ ② ❁✲ ❬✶✳✳♥❪❪

❧✷ ❂ ③✐♣ ❧✶ ♣s

❧✸ ❂ ❬✭①✱②✱③✮ ⑤ ✭✭①✱②✮✱③✮ ❁✲ ❧✷✱ ③ ❃ ✵❪

❣❡♥●❉ es un generador de grafos dirigidos. Por ejemplo,

❣❤❝✐❃ s❛♠♣❧❡ ❣❡♥●❉

✭❉✱❛rr❛② ✭✶✱✹✮ ❬✭✶✱❬✭✶✱✶✮❪✮✱✭✷✱❬✭✸✱✶✮❪✮✱✭✸✱❬✭✷✱✶✮✱✭✹✱✶✮❪✮✱✭✹✱❬✭✹✱✶✮❪✮❪✮

✭❉✱❛rr❛② ✭✶✱✷✮ ❬✭✶✱❬✭✶✱✻✮❪✮✱✭✷✱❬❪✮❪✮

✳✳✳

❣❡♥●❉ ✿✿ ●❡♥ ✭●r❛❢♦ ■♥t ■♥t✮

❣❡♥●❉ ❂ ❞♦ ♥ ❁✲ ❝❤♦♦s❡ ✭✶✱✶✵✮

①s ❁✲ ✈❡❝t♦r❖❢ ✭♥✯♥✮ ❛r❜✐tr❛r②

r❡t✉r♥ ✭❣❡♥❡r❛●❉ ♥ ①s✮

❣❡♥●◆❉ es un generador de grafos dirigidos. Por ejemplo,

❣❤❝✐❃ s❛♠♣❧❡ ❣❡♥●◆❉

✭◆❉✱❛rr❛② ✭✶✱✶✮ ❬✭✶✱❬❪✮❪✮

✭◆❉✱❛rr❛② ✭✶✱✸✮ ❬✭✶✱❬✭✷✱✸✮✱✭✸✱✶✸✮❪✮✱✭✷✱❬✭✶✱✸✮❪✮✱✭✸✱❬✭✶✱✶✸✮❪✮❪✮

✳✳✳

❣❡♥●◆❉ ✿✿ ●❡♥ ✭●r❛❢♦ ■♥t ■♥t✮

❣❡♥●◆❉ ❂ ❞♦ ♥ ❁✲ ❝❤♦♦s❡ ✭✶✱✶✵✮

①s ❁✲ ✈❡❝t♦r❖❢ ✭♥✯♥✮ ❛r❜✐tr❛r②

r❡t✉r♥ ✭❣❡♥❡r❛●◆❉ ♥ ①s✮

❣❡♥● es un generador de grafos. Por ejemplo,

❣❤❝✐❃ s❛♠♣❧❡ ❣❡♥●

✭❉✱❛rr❛② ✭✶✱✸✮ ❬✭✶✱❬✭✷✱✶✮❪✮✱✭✷✱❬✭✶✱✶✮✱✭✷✱✶✮❪✮✱✭✸✱❬✭✸✱✶✮❪✮❪✮

✭◆❉✱❛rr❛② ✭✶✱✸✮ ❬✭✶✱❬✭✷✱✷✮❪✮✱✭✷✱❬✭✶✱✷✮❪✮✱✭✸✱❬❪✮❪✮

✳✳✳

❣❡♥● ✿✿ ●❡♥ ✭●r❛❢♦ ■♥t ■♥t✮

❣❡♥● ❂ ❞♦ ❞ ❁✲ ❝❤♦♦s❡ ✭❚r✉❡✱❋❛❧s❡✮

♥ ❁✲ ❝❤♦♦s❡ ✭✶✱✶✵✮

①s ❁✲ ✈❡❝t♦r❖❢ ✭♥✯♥✮ ❛r❜✐tr❛r②

312 Capítulo 14. Grafos

✐❢ ❞ t❤❡♥ r❡t✉r♥ ✭❣❡♥❡r❛●❉ ♥ ①s✮

❡❧s❡ r❡t✉r♥ ✭❣❡♥❡r❛●◆❉ ♥ ①s✮

Los grafos está contenido en la clase de los objetos generables aleatoriamente.

✐♥st❛♥❝❡ ❆r❜✐tr❛r② ✭●r❛❢♦ ■♥t ■♥t✮ ✇❤❡r❡

❛r❜✐tr❛r② ❂ ❣❡♥●

14.2.2. El grafo completo de orden n

Ejercicio 14.2.1. El grafo completo de orden n, K(n), es un grafo no dirigido cuyos conjunto

de vértices es {1, . . . , n} y tiene una arista entre par de vértices distintos. Definir la función,

❝♦♠♣❧❡t♦ ✿✿ ■♥t ✲❃ ●r❛❢♦ ■♥t ■♥t

tal que ✭❝♦♠♣❧❡t♦ ♥✮ es el grafo completo de orden ♥. Por ejemplo,

❣❤❝✐❃ ❝♦♠♣❧❡t♦ ✹

● ◆❉ ✭❛rr❛② ✭✶✱✹✮ ❬✭✶✱❬✭✷✱✵✮✱✭✸✱✵✮✱✭✹✱✵✮❪✮✱

✭✷✱❬✭✶✱✵✮✱✭✸✱✵✮✱✭✹✱✵✮❪✮✱

✭✸✱❬✭✶✱✵✮✱✭✷✱✵✮✱✭✹✱✵✮❪✮✱

✭✹✱❬✭✶✱✵✮✱✭✷✱✵✮✱✭✸✱✵✮❪✮❪✮

Solución:

❝♦♠♣❧❡t♦ ✿✿ ■♥t ✲❃ ●r❛❢♦ ■♥t ■♥t

❝♦♠♣❧❡t♦ ♥ ❂ ❝r❡❛●r❛❢♦ ◆❉ ✭✶✱♥✮ ①s

✇❤❡r❡ ①s ❂ ❬✭①✱②✱✵✮ ⑤ ① ❁✲ ❬✶✳✳♥❪✱ ② ❁✲ ❬✶✳✳♥❪✱ ① ❁ ②❪

Una definición equivalente es

❝♦♠♣❧❡t♦✬ ✿✿ ■♥t ✲❃ ●r❛❢♦ ■♥t ■♥t

❝♦♠♣❧❡t♦✬ ♥ ❂ ❝r❡❛●r❛❢♦ ◆❉ ✭✶✱♥✮ ❬✭❛✱❜✱✵✮⑤❛❁✲❬✶✳✳♥❪✱❜❁✲❬✶✳✳❛✲✶❪❪

14.2.3. El ciclo de orden n

Ejercicio 14.2.2. El ciclo de orden n, C(n), es un grafo no dirigido cuyo conjunto de vértices

es {1, . . . , n} y las aristas son (1, 2), (2, 3), . . . , (n − 1, n), (n, 1).Definir la función

❣r❛❢♦❈✐❝❧♦ ✿✿ ■♥t ✲❃ ●r❛❢♦ ■♥t ■♥t

tal que ✭❣r❛❢♦❈✐❝❧♦ ♥✮ es el grafo ciclo de orden ♥. Por ejemplo,

14.2. Ejercicios sobre grafos 313

❣❤❝✐❃ ❣r❛❢♦❈✐❝❧♦ ✸

● ◆❉ ✭❛rr❛② ✭✶✱✸✮ ❬✭✶✱❬✭✸✱✵✮✱✭✷✱✵✮❪✮✱✭✷✱❬✭✶✱✵✮✱✭✸✱✵✮❪✮✱✭✸✱❬✭✷✱✵✮✱✭✶✱✵✮❪✮❪✮

Solución:

❣r❛❢♦❈✐❝❧♦ ✿✿ ■♥t ✲❃ ●r❛❢♦ ■♥t ■♥t

❣r❛❢♦❈✐❝❧♦ ♥ ❂ ❝r❡❛●r❛❢♦ ◆❉ ✭✶✱♥✮ ①s

✇❤❡r❡ ①s ❂ ❬✭①✱①✰✶✱✵✮ ⑤ ① ❁✲ ❬✶✳✳♥✲✶❪❪ ✰✰ ❬✭♥✱✶✱✵✮❪

14.2.4. Número de vértices

Ejercicio 14.2.3. Definir la función

♥❱❡rt✐❝❡s ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ●r❛❢♦ ✈ ♣ ✲❃ ■♥t

tal que ✭♥❱❡rt✐❝❡s ❣✮ es el número de vértices del grafo ❣. Por ejemplo,

♥❱❡rt✐❝❡s ✭❝♦♠♣❧❡t♦ ✹✮ ❂❂ ✹

♥❱❡rt✐❝❡s ✭❝♦♠♣❧❡t♦ ✺✮ ❂❂ ✺

Solución:

♥❱❡rt✐❝❡s ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ●r❛❢♦ ✈ ♣ ✲❃ ■♥t

♥❱❡rt✐❝❡s ❂ ❧❡♥❣t❤ ✳ ♥♦❞♦s

14.2.5. Reconocimiento de grafos no dirigidos

Ejercicio 14.2.4. Definir la función

♥♦❉✐r✐❣✐❞♦ ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ●r❛❢♦ ✈ ♣ ✲❃ ❇♦♦❧

tal que ✭♥♦❉✐r✐❣✐❞♦ ❣✮ se verifica si el grafo ❣ es no dirigido. Por ejemplo,

♥♦❉✐r✐❣✐❞♦ ❣✶ ❂❂ ❚r✉❡

♥♦❉✐r✐❣✐❞♦ ❣✷ ❂❂ ❋❛❧s❡

♥♦❉✐r✐❣✐❞♦ ✭❝♦♠♣❧❡t♦ ✹✮ ❂❂ ❚r✉❡

Solución:

♥♦❉✐r✐❣✐❞♦ ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ●r❛❢♦ ✈ ♣ ✲❃ ❇♦♦❧

♥♦❉✐r✐❣✐❞♦ ❂ ♥♦t ✳ ❞✐r✐❣✐❞♦

314 Capítulo 14. Grafos

14.2.6. Vértices incidentes

Ejercicio 14.2.5. En un un grafo g, los incidentes de un vértice v es el conjuntos de vértices x

de g para los que hay un arco (o una arista) de x a v; es decir, que v es adyacente a x. Definir la

función

✐♥❝✐❞❡♥t❡s ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ✭●r❛❢♦ ✈ ♣✮ ✲❃ ✈ ✲❃ ❬✈❪

tal que ✭✐♥❝✐❞❡♥t❡s ❣ ✈✮ es la lista de los vértices incidentes en el vértice ✈. Por ejemplo,

✐♥❝✐❞❡♥t❡s ❣✷ ✺ ❂❂ ❬✶✱✷✱✹❪

❛❞②❛❝❡♥t❡s ❣✷ ✺ ❂❂ ❬❪

✐♥❝✐❞❡♥t❡s ❣✶ ✺ ❂❂ ❬✶✱✷✱✸✱✹❪

❛❞②❛❝❡♥t❡s ❣✶ ✺ ❂❂ ❬✶✱✷✱✸✱✹❪

Solución:

✐♥❝✐❞❡♥t❡s ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ●r❛❢♦ ✈ ♣ ✲❃ ✈ ✲❃ ❬✈❪

✐♥❝✐❞❡♥t❡s ❣ ✈ ❂ ❬① ⑤ ① ❁✲ ♥♦❞♦s ❣✱ ✈ ❵❡❧❡♠❵ ❛❞②❛❝❡♥t❡s ❣ ①❪

14.2.7. Vértices contiguos

Ejercicio 14.2.6. En un un grafo g, los contiguos de un vértice v es el conjuntos de vértices x

de g tales que x es adyacente o incidente con v. Definir la función

❝♦♥t✐❣✉♦s ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ●r❛❢♦ ✈ ♣ ✲❃ ✈ ✲❃ ❬✈❪

tal que ✭❝♦♥t✐❣✉♦s ❣ ✈✮ es el conjunto de los vértices de ❣ contiguos con el vértice ✈. Por

ejemplo,

❝♦♥t✐❣✉♦s ❣✷ ✺ ❂❂ ❬✶✱✷✱✹❪

❝♦♥t✐❣✉♦s ❣✶ ✺ ❂❂ ❬✶✱✷✱✸✱✹❪

Solución:

❝♦♥t✐❣✉♦s ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ●r❛❢♦ ✈ ♣ ✲❃ ✈ ✲❃ ❬✈❪

❝♦♥t✐❣✉♦s ❣ ✈ ❂ ♥✉❜ ✭❛❞②❛❝❡♥t❡s ❣ ✈ ✰✰ ✐♥❝✐❞❡♥t❡s ❣ ✈✮

14.2.8. Lazos

Ejercicio 14.2.7. Definir la función

❧❛③♦s ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ●r❛❢♦ ✈ ♣ ✲❃ ❬✭✈✱✈✮❪

tal que ✭❧❛③♦s ❣✮ es el conjunto de los lazos (es decir, aristas cuyos extremos son iguales) del

grafo ❣. Por ejemplo,

14.2. Ejercicios sobre grafos 315

❣❤❝✐❃ ❧❛③♦s ❣✸

❬✭✷✱✷✮❪

❣❤❝✐❃ ❧❛③♦s ❣✷

❬❪

Solución:

❧❛③♦s ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ●r❛❢♦ ✈ ♣ ✲❃ ❬✭✈✱✈✮❪

❧❛③♦s ❣ ❂ ❬✭①✱①✮ ⑤ ① ❁✲ ♥♦❞♦s ❣✱ ❛r✐st❛❊♥ ❣ ✭①✱①✮❪

14.2.9. Número de lazos

Ejercicio 14.2.8. Definir la función

♥▲❛③♦s ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ●r❛❢♦ ✈ ♣ ✲❃ ■♥t

tal que ✭♥▲❛③♦s ❣✮ es el número de lazos del grafo ❣. Por ejemplo,

♥▲❛③♦s ❣✸ ❂❂ ✶

♥▲❛③♦s ❣✷ ❂❂ ✵

Solución:

♥▲❛③♦s ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ●r❛❢♦ ✈ ♣ ✲❃ ■♥t

♥▲❛③♦s ❂ ❧❡♥❣t❤ ✳ ❧❛③♦s

14.2.10. Número de aristas

Ejercicio 14.2.9. Definir la función

♥❆r✐st❛s ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ●r❛❢♦ ✈ ♣ ✲❃ ■♥t

tal que ✭♥❆r✐st❛s ❣✮ es el número de aristas del grafo ❣. Si ❣ es no dirigido, las aristas de ✈✶ a

✈✷ y de ✈✷ a ✈✶ sólo se cuentan una vez y los lazos se cuentan dos veces. Por ejemplo,

♥❆r✐st❛s ❣✶ ❂❂ ✽

♥❆r✐st❛s ❣✷ ❂❂ ✼

♥❆r✐st❛s ❣✶✵ ❂❂ ✹

♥❆r✐st❛s ✭❝♦♠♣❧❡t♦ ✹✮ ❂❂ ✻

♥❆r✐st❛s ✭❝♦♠♣❧❡t♦ ✺✮ ❂❂ ✶✵

Solución:

316 Capítulo 14. Grafos

♥❆r✐st❛s ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ●r❛❢♦ ✈ ♣ ✲❃ ■♥t

♥❆r✐st❛s ❣

⑤ ❞✐r✐❣✐❞♦ ❣ ❂ ❧❡♥❣t❤ ✭❛r✐st❛s ❣✮

⑤ ♦t❤❡r✇✐s❡ ❂ ✭❧❡♥❣t❤ ✭❛r✐st❛s ❣✮ ❵❞✐✈❵ ✷✮ ✰ ♥▲❛③♦s ❣

Ejercicio 14.2.10. Definir la función

♣r♦♣❴♥❆r✐st❛s❈♦♠♣❧❡t♦ ✿✿ ■♥t ✲❃ ❇♦♦❧

tal que ✭♣r♦♣❴♥❆r✐st❛s❈♦♠♣❧❡t♦ ♥✮ se verifica si el número de aristas del grafo completo de

orden ♥ esn(n−1)

2 y, usando la función, comprobar que la propiedad se cumple para ♥ de 1 a 20.

Solución: La propiedad es

♣r♦♣❴♥❆r✐st❛s❈♦♠♣❧❡t♦ ✿✿ ■♥t ✲❃ ❇♦♦❧

♣r♦♣❴♥❆r✐st❛s❈♦♠♣❧❡t♦ ♥ ❂

♥❆r✐st❛s ✭❝♦♠♣❧❡t♦ ♥✮ ❂❂ ♥✯✭♥✲✶✮ ❵❞✐✈❵ ✷

La comprobación es

❣❤❝✐❃ ❛♥❞ ❬♣r♦♣❴♥❆r✐st❛s❈♦♠♣❧❡t♦ ♥ ⑤ ♥ ❁✲ ❬✶✳✳✷✵❪❪

❚r✉❡

14.2.11. Grado positivo de un vértice

Ejercicio 14.2.11. El grado positivo de un vértice v de un grafo dirigido g, es el número de

vértices de g adyacentes con v. Definir la función

❣r❛❞♦P♦s ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ●r❛❢♦ ✈ ♣ ✲❃ ✈ ✲❃ ■♥t

tal que ✭❣r❛❞♦P♦s ❣ ✈✮ es el grado positivo del vértice ✈ en el grafo ❣. Por ejemplo,

❣r❛❞♦P♦s ❣✶ ✺ ❂❂ ✹

❣r❛❞♦P♦s ❣✷ ✺ ❂❂ ✵

❣r❛❞♦P♦s ❣✷ ✶ ❂❂ ✸

Solución:

❣r❛❞♦P♦s ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ●r❛❢♦ ✈ ♣ ✲❃ ✈ ✲❃ ■♥t

❣r❛❞♦P♦s ❣ ✈ ❂ ❧❡♥❣t❤ ✭❛❞②❛❝❡♥t❡s ❣ ✈✮

14.2. Ejercicios sobre grafos 317

14.2.12. Grado negativo de un vértice

Ejercicio 14.2.12. El grado negativo de un vértice v de un grafo dirigido g, es el número de

vértices de g incidentes con v. Definir la función

❣r❛❞♦◆❡❣ ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ●r❛❢♦ ✈ ♣ ✲❃ ✈ ✲❃ ■♥t

tal que ✭❣r❛❞♦◆❡❣ ❣ ✈✮ es el grado negativo del vértice ✈ en el grafo ❣. Por ejemplo,

❣r❛❞♦◆❡❣ ❣✶ ✺ ❂❂ ✹

❣r❛❞♦◆❡❣ ❣✷ ✺ ❂❂ ✸

❣r❛❞♦◆❡❣ ❣✷ ✶ ❂❂ ✵

Solución:

❣r❛❞♦◆❡❣ ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ●r❛❢♦ ✈ ♣ ✲❃ ✈ ✲❃ ■♥t

❣r❛❞♦◆❡❣ ❣ ✈ ❂ ❧❡♥❣t❤ ✭✐♥❝✐❞❡♥t❡s ❣ ✈✮

14.2.13. Grado de un vértice

Ejercicio 14.2.13. El grado de un vértice v de un grafo dirigido g, es el número de aristas de g

que contiene a v. Si g es no dirigido, el grado de un vértice v es el número de aristas incidentes

en v, teniendo en cuenta que los lazos se cuentan dos veces. Definir la función

❣r❛❞♦ ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ●r❛❢♦ ✈ ♣ ✲❃ ✈ ✲❃ ■♥t

tal que ✭❣r❛❞♦ ❣ ✈✮ es el grado del vértice ✈ en el grafo ❣. Por ejemplo,

❣r❛❞♦ ❣✶ ✺ ❂❂ ✹

❣r❛❞♦ ❣✷ ✺ ❂❂ ✸

❣r❛❞♦ ❣✷ ✶ ❂❂ ✸

❣r❛❞♦ ❣✸ ✷ ❂❂ ✹

❣r❛❞♦ ❣✸ ✶ ❂❂ ✷

❣r❛❞♦ ❣✸ ✸ ❂❂ ✷

❣r❛❞♦ ❣✺ ✶ ❂❂ ✸

❣r❛❞♦ ❣✶✵ ✸ ❂❂ ✹

❣r❛❞♦ ❣✶✶ ✸ ❂❂ ✹

Solución:

❣r❛❞♦ ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ●r❛❢♦ ✈ ♣ ✲❃ ✈ ✲❃ ■♥t

❣r❛❞♦ ❣ ✈ ⑤ ❞✐r✐❣✐❞♦ ❣ ❂ ❣r❛❞♦◆❡❣ ❣ ✈ ✰ ❣r❛❞♦P♦s ❣ ✈

⑤ ✭✈✱✈✮ ❵❡❧❡♠❵ ❧❛③♦s ❣ ❂ ❧❡♥❣t❤ ✭✐♥❝✐❞❡♥t❡s ❣ ✈✮ ✰ ✶

⑤ ♦t❤❡r✇✐s❡ ❂ ❧❡♥❣t❤ ✭✐♥❝✐❞❡♥t❡s ❣ ✈✮

318 Capítulo 14. Grafos

Ejercicio 14.2.14. Comprobar con QuickCheck que para cualquier grafo ❣, la suma de los grados

positivos de los vértices de ❣ es igual que la suma de los grados negativos de los vértices de ❣.

Solución: La propiedad es

♣r♦♣❴s✉♠❛●r❛❞♦s✿✿ ●r❛❢♦ ■♥t ■♥t ✲❃ ❇♦♦❧

♣r♦♣❴s✉♠❛●r❛❞♦s ❣ ❂

s✉♠ ❬❣r❛❞♦P♦s ❣ ✈ ⑤ ✈ ❁✲ ✈s❪ ❂❂ s✉♠ ❬❣r❛❞♦◆❡❣ ❣ ✈ ⑤ ✈ ❁✲ ✈s❪

✇❤❡r❡ ✈s ❂ ♥♦❞♦s ❣

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴s✉♠❛●r❛❞♦s

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

Ejercicio 14.2.15. En la teoría de grafos, se conoce como Lema del apretón de manos la

siguiente propiedad: la suma de los grados de los vértices de g es el doble del número de aristas

de g. Comprobar con QuickCheck que para cualquier grafo g, se verifica dicha propiedad.

Solución: La propiedad es

♣r♦♣❴❛♣r❡t♦♥▼❛♥♦s✿✿ ●r❛❢♦ ■♥t ■♥t ✲❃ ❇♦♦❧

♣r♦♣❴❛♣r❡t♦♥▼❛♥♦s ❣ ❂

s✉♠ ❬❣r❛❞♦ ❣ ✈ ⑤ ✈ ❁✲ ♥♦❞♦s ❣❪ ❂❂ ✷ ✯ ♥❆r✐st❛s ❣

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴❛♣r❡t♦♥▼❛♥♦s

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

Ejercicio 14.2.16. Comprobar con QuickCheck que en todo grafo, el número de nodos de grado

impar es par.

Solución: La propiedad es

♣r♦♣❴♥✉♠◆♦❞♦s●r❛❞♦■♠♣❛r ✿✿ ●r❛❢♦ ■♥t ■♥t ✲❃ ❇♦♦❧

♣r♦♣❴♥✉♠◆♦❞♦s●r❛❞♦■♠♣❛r ❣ ❂ ❡✈❡♥ ♠

✇❤❡r❡ ✈s ❂ ♥♦❞♦s ❣

♠ ❂ ❧❡♥❣t❤ ❬✈ ⑤ ✈ ❁✲ ✈s✱ ♦❞❞✭❣r❛❞♦ ❣ ✈✮❪

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴♥✉♠◆♦❞♦s●r❛❞♦■♠♣❛r

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

14.2. Ejercicios sobre grafos 319

Ejercicio 14.2.17. Definir la propiedad

♣r♦♣❴●r❛❞♦❈♦♠♣❧❡t♦ ✿✿ ■♥t ✲❃ ❇♦♦❧

tal que ✭♣r♦♣❴●r❛❞♦❈♦♠♣❧❡t♦ ♥✮ se verifica si todos los vértices del grafo completo K(n) tienen

grado n − 1. Usarla para comprobar que dicha propiedad se verifica para los grafos completos de

grados 1 hasta 30.

Solución: La propiedad es

♣r♦♣❴●r❛❞♦❈♦♠♣❧❡t♦ ✿✿ ■♥t ✲❃ ❇♦♦❧

♣r♦♣❴●r❛❞♦❈♦♠♣❧❡t♦ ♥ ❂

❛♥❞ ❬❣r❛❞♦ ❣ ✈ ❂❂ ✭♥✲✶✮ ⑤ ✈ ❁✲ ♥♦❞♦s ❣❪

✇❤❡r❡ ❣ ❂ ❝♦♠♣❧❡t♦ ♥

La comprobación es

❣❤❝✐❃ ❛♥❞ ❬♣r♦♣❴●r❛❞♦❈♦♠♣❧❡t♦ ♥ ⑤ ♥ ❁✲ ❬✶✳✳✸✵❪❪

❚r✉❡

14.2.14. Grafos regulares

Ejercicio 14.2.18. Un grafo es regular si todos sus vértices tienen el mismo grado. Definir la

función

r❡❣✉❧❛r ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ●r❛❢♦ ✈ ♣ ✲❃ ❇♦♦❧

tal que ✭r❡❣✉❧❛r ❣✮ se verifica si todos los nodos de ❣ tienen el mismo grado.

r❡❣✉❧❛r ❣✶ ❂❂ ❋❛❧s❡

r❡❣✉❧❛r ❣✷ ❂❂ ❋❛❧s❡

r❡❣✉❧❛r ✭❝♦♠♣❧❡t♦ ✹✮ ❂❂ ❚r✉❡

Solución:

r❡❣✉❧❛r ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ●r❛❢♦ ✈ ♣ ✲❃ ❇♦♦❧

r❡❣✉❧❛r ❣ ❂ ❛♥❞ ❬❣r❛❞♦ ❣ ✈ ❂❂ ❦ ⑤ ✈ ❁✲ ✈s❪

✇❤❡r❡ ✈s ❂ ♥♦❞♦s ❣

❦ ❂ ❣r❛❞♦ ❣ ✭❤❡❛❞ ✈s✮

Ejercicio 14.2.19. Definir la propiedad

♣r♦♣❴❈♦♠♣❧❡t♦❘❡❣✉❧❛r ✿✿ ■♥t ✲❃ ■♥t ✲❃ ❇♦♦❧

320 Capítulo 14. Grafos

tal que ✭♣r♦♣❴❈♦♠♣❧❡t♦❘❡❣✉❧❛r ♠ ♥✮ se verifica si todos los grafos completos desde el de orden

♠ hasta el de orden ♥ son regulares y usarla para comprobar que todos los grafos completo desde

el de orden 1 hasta el de orden 30 son regulares.

Solución: La propiedad es

♣r♦♣❴❈♦♠♣❧❡t♦❘❡❣✉❧❛r ✿✿ ■♥t ✲❃ ■♥t ✲❃ ❇♦♦❧

♣r♦♣❴❈♦♠♣❧❡t♦❘❡❣✉❧❛r ♠ ♥ ❂ ❛♥❞ ❬r❡❣✉❧❛r ✭❝♦♠♣❧❡t♦ ①✮ ⑤ ① ❁✲ ❬♠✳✳♥❪❪

La comprobación es

❣❤❝✐❃ ♣r♦♣❴❈♦♠♣❧❡t♦❘❡❣✉❧❛r ✶ ✸✵

❚r✉❡

14.2.15. Grafos k–regulares

Ejercicio 14.2.20. Un grafo es k–regular si todos sus vértices son de grado k. Definir la función

r❡❣✉❧❛r✐❞❛❞ ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ●r❛❢♦ ✈ ♣ ✲❃ ▼❛②❜❡ ■♥t

tal que ✭r❡❣✉❧❛r✐❞❛❞ ❣✮ es la regularidad de ❣. Por ejemplo,

r❡❣✉❧❛r✐❞❛❞ ❣✶ ❂❂ ◆♦t❤✐♥❣

r❡❣✉❧❛r✐❞❛❞ ✭❝♦♠♣❧❡t♦ ✹✮ ❂❂ ❏✉st ✸

r❡❣✉❧❛r✐❞❛❞ ✭❝♦♠♣❧❡t♦ ✺✮ ❂❂ ❏✉st ✹

r❡❣✉❧❛r✐❞❛❞ ✭❣r❛❢♦❈✐❝❧♦ ✹✮ ❂❂ ❏✉st ✷

r❡❣✉❧❛r✐❞❛❞ ✭❣r❛❢♦❈✐❝❧♦ ✺✮ ❂❂ ❏✉st ✷

Solución:

r❡❣✉❧❛r✐❞❛❞ ✿✿ ✭■① ✈✱◆✉♠ ♣✮ ❂❃ ●r❛❢♦ ✈ ♣ ✲❃ ▼❛②❜❡ ■♥t

r❡❣✉❧❛r✐❞❛❞ ❣ ⑤ r❡❣✉❧❛r ❣ ❂ ❏✉st ✭❣r❛❞♦ ❣ ✭❤❡❛❞ ✭♥♦❞♦s ❣✮✮✮

⑤ ♦t❤❡r✇✐s❡ ❂ ◆♦t❤✐♥❣

Ejercicio 14.2.21. Definir la propiedad

♣r♦♣❴❝♦♠♣❧❡t♦❘❡❣✉❧❛r ✿✿ ■♥t ✲❃ ❇♦♦❧

tal que ✭♣r♦♣❴❝♦♠♣❧❡t♦❘❡❣✉❧❛r ♥✮ se verifica si el grafo completo de orden ♥ es (n − 1)–regular. Por ejemplo,

♣r♦♣❴❝♦♠♣❧❡t♦❘❡❣✉❧❛r ✺ ❂❂ ❚r✉❡

y usarla para comprobar que la cumplen todos los grafos completos desde orden 1 hasta 20.

Solución: La propiedad es

14.2. Ejercicios sobre grafos 321

♣r♦♣❴❝♦♠♣❧❡t♦❘❡❣✉❧❛r ✿✿ ■♥t ✲❃ ❇♦♦❧

♣r♦♣❴❝♦♠♣❧❡t♦❘❡❣✉❧❛r ♥ ❂

r❡❣✉❧❛r✐❞❛❞ ✭❝♦♠♣❧❡t♦ ♥✮ ❂❂ ❏✉st ✭♥✲✶✮

La comprobación es

❣❤❝✐❃ ❛♥❞ ❬♣r♦♣❴❝♦♠♣❧❡t♦❘❡❣✉❧❛r ♥ ⑤ ♥ ❁✲ ❬✶✳✳✷✵❪❪

❚r✉❡

Ejercicio 14.2.22. Definir la propiedad

♣r♦♣❴❝✐❝❧♦❘❡❣✉❧❛r ✿✿ ■♥t ✲❃ ❇♦♦❧

tal que ✭♣r♦♣❴❝✐❝❧♦❘❡❣✉❧❛r ♥✮ se verifica si el grafo ciclo de orden n es 2–regular. Por ejemplo,

♣r♦♣❴❝✐❝❧♦❘❡❣✉❧❛r ✷ ❂❂ ❚r✉❡

y usarla para comprobar que la cumplen todos los grafos ciclos desde orden 3 hasta 20.

Solución: La propiedad es

♣r♦♣❴❝✐❝❧♦❘❡❣✉❧❛r ✿✿ ■♥t ✲❃ ❇♦♦❧

♣r♦♣❴❝✐❝❧♦❘❡❣✉❧❛r ♥ ❂

r❡❣✉❧❛r✐❞❛❞ ✭❣r❛❢♦❈✐❝❧♦ ♥✮ ❂❂ ❏✉st ✷

La comprobación es

❣❤❝✐❃ ❛♥❞ ❬♣r♦♣❴❝✐❝❧♦❘❡❣✉❧❛r ♥ ⑤ ♥ ❁✲ ❬✸✳✳✷✵❪❪

❚r✉❡

322 Capítulo 14. Grafos

Parte III

Casos de estudio

323

Capítulo 15

El cifrado César

En el tema 5 del curso ([1]) se estudió, como aplicación de las definiciones por com-prensión, el cifrado César. En el cifrado César cada letra en el texto original es reem-plazada por otra letra que se encuentra 3 posiciones más adelante en el alfabeto. Porejemplo, la codificación de “en todo la medida” es “hq wrgr od phglgd”. Se puedegeneralizar desplazando cada letra n posiciones. Por ejemplo, la codificación con undesplazamiento 5 de “en todo la medida” es “js ytit qf rjinif”.

La descodificación de un texto codificado con un desplazamiento n se obtiene codi-ficándolo con un desplazamiento −n.

El objetivo de esta relación es modificar el programa de cifrado César para que puedautilizar también letras mayúsculas. Por ejemplo,

❣❤❝✐❃ ❞❡s❝✐❢r❛ ✧❨t✐t ❯❢✇❢ ❙❢✐❢✧

✧❚♦❞♦ P❛r❛ ◆❛❞❛✧

Para ello, se propone la modificación de las funciones correspondientes del tema 5.

Nota. Se usará librería ❉❛t❛✳❈❤❛r.

✐♠♣♦rt ❉❛t❛✳❈❤❛r

15.1. Codificación y descodificación

Ejercicio 15.1.1. Redefinir la función

♠✐♥✉s❝✉❧❛✷✐♥t ✿✿ ❈❤❛r ✲❃ ■♥t

tal que ✭♠✐♥✉s❝✉❧❛✷✐♥t ❝✮ es el entero correspondiente a la letra minúscula ❝. Por ejemplo,

♠✐♥✉s❝✉❧❛✷✐♥t ✬❛✬ ❂❂ ✵

♠✐♥✉s❝✉❧❛✷✐♥t ✬❞✬ ❂❂ ✸

♠✐♥✉s❝✉❧❛✷✐♥t ✬③✬ ❂❂ ✷✺

325

326 Capítulo 15. El cifrado César

Solución:

♠✐♥✉s❝✉❧❛✷✐♥t ✿✿ ❈❤❛r ✲❃ ■♥t

♠✐♥✉s❝✉❧❛✷✐♥t ❝ ❂ ♦r❞ ❝ ✲ ♦r❞ ✬❛✬

Ejercicio 15.1.2. Redefinir la función

♠❛②✉s❝✉❧❛✷✐♥t ✿✿ ❈❤❛r ✲❃ ■♥t

tal que ✭♠❛②✉s❝✉❧❛✷✐♥t ❝✮ es el entero correspondiente a la letra mayúscula ❝. Por ejemplo,

♠❛②✉s❝✉❧❛✷✐♥t ✬❆✬ ❂❂ ✵

♠❛②✉s❝✉❧❛✷✐♥t ✬❉✬ ❂❂ ✸

♠❛②✉s❝✉❧❛✷✐♥t ✬❩✬ ❂❂ ✷✺

Solución:

♠❛②✉s❝✉❧❛✷✐♥t ✿✿ ❈❤❛r ✲❃ ■♥t

♠❛②✉s❝✉❧❛✷✐♥t ❝ ❂ ♦r❞ ❝ ✲ ♦r❞ ✬❆✬

Ejercicio 15.1.3. Redefinir la función

✐♥t✷♠✐♥✉s❝✉❧❛ ✿✿ ■♥t ✲❃ ❈❤❛r

tal que ✭✐♥t✷♠✐♥✉s❝✉❧❛ ♥✮ es la letra minúscula correspondiente al entero ♥. Por ejemplo,

✐♥t✷♠✐♥✉s❝✉❧❛ ✵ ❂❂ ✬❛✬

✐♥t✷♠✐♥✉s❝✉❧❛ ✸ ❂❂ ✬❞✬

✐♥t✷♠✐♥✉s❝✉❧❛ ✷✺ ❂❂ ✬③✬

Solución:

✐♥t✷♠✐♥✉s❝✉❧❛ ✿✿ ■♥t ✲❃ ❈❤❛r

✐♥t✷♠✐♥✉s❝✉❧❛ ♥ ❂ ❝❤r ✭♦r❞ ✬❛✬ ✰ ♥✮

Ejercicio 15.1.4. Redefinir la función

✐♥t✷♠❛②✉s❝✉❧❛ ✿✿ ■♥t ✲❃ ❈❤❛r

tal que ✭✐♥t✷♠❛②✉s❝✉❧❛ ♥✮ es la letra minúscula correspondiente al entero ♥. Por ejemplo,

✐♥t✷♠❛②✉s❝✉❧❛ ✵ ❂❂ ✬❆✬

✐♥t✷♠❛②✉s❝✉❧❛ ✸ ❂❂ ✬❉✬

✐♥t✷♠❛②✉s❝✉❧❛ ✷✺ ❂❂ ✬❩✬

Solución:

15.1. Codificación y descodificación 327

✐♥t✷♠❛②✉s❝✉❧❛ ✿✿ ■♥t ✲❃ ❈❤❛r

✐♥t✷♠❛②✉s❝✉❧❛ ♥ ❂ ❝❤r ✭♦r❞ ✬❆✬ ✰ ♥✮

Ejercicio 15.1.5. Redefinir la función

❞❡s♣❧❛③❛ ✿✿ ■♥t ✲❃ ❈❤❛r ✲❃ ❈❤❛r

tal que ✭❞❡s♣❧❛③❛ ♥ ❝✮ es el carácter obtenido desplazando ♥ caracteres el carácter ❝. Por ejem-

plo,

❞❡s♣❧❛③❛ ✸ ✬❛✬ ❂❂ ✬❞✬

❞❡s♣❧❛③❛ ✸ ✬②✬ ❂❂ ✬❜✬

❞❡s♣❧❛③❛ ✭✲✸✮ ✬❞✬ ❂❂ ✬❛✬

❞❡s♣❧❛③❛ ✭✲✸✮ ✬❜✬ ❂❂ ✬②✬

❞❡s♣❧❛③❛ ✸ ✬❆✬ ❂❂ ✬❉✬

❞❡s♣❧❛③❛ ✸ ✬❨✬ ❂❂ ✬❇✬

❞❡s♣❧❛③❛ ✭✲✸✮ ✬❉✬ ❂❂ ✬❆✬

❞❡s♣❧❛③❛ ✭✲✸✮ ✬❇✬ ❂❂ ✬❨✬

Solución:

❞❡s♣❧❛③❛ ✿✿ ■♥t ✲❃ ❈❤❛r ✲❃ ❈❤❛r

❞❡s♣❧❛③❛ ♥ ❝

⑤ ❡❧❡♠ ❝ ❬✬❛✬✳✳✬③✬❪ ❂ ✐♥t✷♠✐♥✉s❝✉❧❛ ✭✭♠✐♥✉s❝✉❧❛✷✐♥t ❝✰♥✮ ❵♠♦❞❵ ✷✻✮

⑤ ❡❧❡♠ ❝ ❬✬❆✬✳✳✬❩✬❪ ❂ ✐♥t✷♠❛②✉s❝✉❧❛ ✭✭♠❛②✉s❝✉❧❛✷✐♥t ❝✰♥✮ ❵♠♦❞❵ ✷✻✮

⑤ ♦t❤❡r✇✐s❡ ❂ ❝

Ejercicio 15.1.6. Redefinir la función

❝♦❞✐❢✐❝❛ ✿✿ ■♥t ✲❃ ❙tr✐♥❣ ✲❃ ❙tr✐♥❣

tal que ✭❝♦❞✐❢✐❝❛ ♥ ①s✮ es el resultado de codificar el texto ①s con un desplazamiento ♥. Por

ejemplo,

❣❤❝✐❃ ❝♦❞✐❢✐❝❛ ✸ ✧❊♥ ❚♦❞♦ ▲❛ ▼❡❞✐❞❛✧

✧❍q ❲r❣r ❖❞ P❤❣❧❣❞✧

❣❤❝✐❃ ❝♦❞✐❢✐❝❛ ✭✲✸✮ ✧❍q ❲r❣r ❖❞ P❤❣❧❣❞✧

✧❊♥ ❚♦❞♦ ▲❛ ▼❡❞✐❞❛✧

Solución:

❝♦❞✐❢✐❝❛ ✿✿ ■♥t ✲❃ ❙tr✐♥❣ ✲❃ ❙tr✐♥❣

❝♦❞✐❢✐❝❛ ♥ ①s ❂ ❬❞❡s♣❧❛③❛ ♥ ① ⑤ ① ❁✲ ①s❪

328 Capítulo 15. El cifrado César

15.2. Análisis de frecuencias

Para descifrar mensajes se parte de la frecuencia de aparición de letras.

Ejercicio 15.2.1. Redefinir la constante

t❛❜❧❛ ✿✿ ❬❋❧♦❛t❪

tal que t❛❜❧❛ es la lista de la frecuencias de las letras en castellano, Por ejemplo, la frecuencia de

la ’a’ es del 12.53 %, la de la ’b’ es 1.42 %.

Solución:

t❛❜❧❛ ✿✿ ❬❋❧♦❛t❪

t❛❜❧❛ ❂ ❬✶✷✳✺✸✱ ✶✳✹✷✱ ✹✳✻✽✱ ✺✳✽✻✱ ✶✸✳✻✽✱ ✵✳✻✾✱ ✶✳✵✶✱

✵✳✼✵✱ ✻✳✷✺✱ ✵✳✹✹✱ ✵✳✵✶✱ ✹✳✾✼✱ ✸✳✶✺✱ ✻✳✼✶✱

✽✳✻✽✱ ✷✳✺✶✱ ✵✳✽✽✱ ✻✳✽✼✱ ✼✳✾✽✱ ✹✳✻✸✱ ✸✳✾✸✱

✵✳✾✵✱ ✵✳✵✷✱ ✵✳✷✷✱ ✵✳✾✵✱ ✵✳✺✷❪

Ejercicio 15.2.2. Redefinir la función

♣♦r❝❡♥t❛❥❡ ✿✿ ■♥t ✲❃ ■♥t ✲❃ ❋❧♦❛t

tal que ✭♣♦r❝❡♥t❛❥❡ ♥ ♠✮ es el porcentaje de ♥ sobre ♠. Por ejemplo,

♣♦r❝❡♥t❛❥❡ ✷ ✺ ❂❂ ✹✵✳✵

Solución:

♣♦r❝❡♥t❛❥❡ ✿✿ ■♥t ✲❃ ■♥t ✲❃ ❋❧♦❛t

♣♦r❝❡♥t❛❥❡ ♥ ♠ ❂ ✭❢r♦♠■♥t❡❣r❛❧ ♥ ✴ ❢r♦♠■♥t❡❣r❛❧ ♠✮ ✯ ✶✵✵

Ejercicio 15.2.3. Redefinir la función

❧❡tr❛s ✿✿ ❙tr✐♥❣ ✲❃ ❙tr✐♥❣

tal que ✭❧❡tr❛s ①s✮ es la cadena formada por las letras de la cadena ①s. Por ejemplo,

❧❡tr❛s ✧❊st♦ ❊s ❯♥❛ Pr✉❡❜❛✧ ❂❂ ✧❊st♦❊s❯♥❛Pr✉❡❜❛✧

Solución:

❧❡tr❛s ✿✿ ❙tr✐♥❣ ✲❃ ❙tr✐♥❣

❧❡tr❛s ①s ❂ ❬① ⑤ ① ❁✲ ①s✱ ❡❧❡♠ ① ✭❬✬❛✬✳✳✬③✬❪✰✰❬✬❆✬✳✳✬❩✬❪✮❪

Ejercicio 15.2.4. Redefinir la función

15.3. Descifrado 329

♦❝✉rr❡♥❝✐❛s ✿✿ ❈❤❛r ✲❃ ❙tr✐♥❣ ✲❃ ■♥t

tal que ✭♦❝✉rr❡♥❝✐❛s ① ①s✮ es el número de veces que ocurre el carácter ① en la cadena ①s.

Por ejemplo,

♦❝✉rr❡♥❝✐❛s ✬❛✬ ✧❙❛❧❛♠❛♥❝❛✧ ❂❂ ✹

Solución:

♦❝✉rr❡♥❝✐❛s ✿✿ ❈❤❛r ✲❃ ❙tr✐♥❣ ✲❃ ■♥t

♦❝✉rr❡♥❝✐❛s ① ①s ❂ ❧❡♥❣t❤ ❬①✬ ⑤ ①✬ ❁✲ ①s✱ ① ❂❂ ①✬❪

Ejercicio 15.2.5. Redefinir la función

❢r❡❝✉❡♥❝✐❛s ✿✿ ❙tr✐♥❣ ✲❃ ❬❋❧♦❛t❪

tal que ✭❢r❡❝✉❡♥❝✐❛s ①s✮ es la frecuencia de cada una de las letras de la cadena ①s. Por ejemplo,

❣❤❝✐❃ ❢r❡❝✉❡♥❝✐❛s ✧❊♥ ❚♦❞♦ ▲❛ ▼❡❞✐❞❛✧

❬✶✹✳✸✱✵✱✵✱✷✶✳✹✱✶✹✳✸✱✵✱✵✱✵✱✼✳✶✱✵✱✵✱✼✳✶✱

✼✳✶✱✼✳✶✱✶✹✳✸✱✵✱✵✱✵✱✵✱✼✳✶✱✵✱✵✱✵✱✵✱✵✱✵❪

Solución:

❢r❡❝✉❡♥❝✐❛s ✿✿ ❙tr✐♥❣ ✲❃ ❬❋❧♦❛t❪

❢r❡❝✉❡♥❝✐❛s ①s ❂

❬♣♦r❝❡♥t❛❥❡ ✭♦❝✉rr❡♥❝✐❛s ① ①s✬✮ ♥ ⑤ ① ❁✲ ❬✬❛✬✳✳✬③✬❪❪

✇❤❡r❡ ①s✬ ❂ ❬t♦▲♦✇❡r ① ⑤ ① ❁✲ ①s❪

♥ ❂ ❧❡♥❣t❤ ✭❧❡tr❛s ①s✮

15.3. Descifrado

Ejercicio 15.3.1. Redefinir la función

❝❤✐❈✉❛❞ ✿✿ ❬❋❧♦❛t❪ ✲❃ ❬❋❧♦❛t❪ ✲❃ ❋❧♦❛t

tal que ❝❤✐❈✉❛❞ os es) es la medida χ2 de las distribuciones ♦s y ❡s. Por ejemplo,

❝❤✐❈✉❛❞ ❬✸✱✺✱✻❪ ❬✸✱✺✱✻❪ ❂❂ ✵✳✵

❝❤✐❈✉❛❞ ❬✸✱✺✱✻❪ ❬✺✱✻✱✸❪ ❂❂ ✸✳✾✻✻✻✻✻✼

Solución:

❝❤✐❈✉❛❞ ✿✿ ❬❋❧♦❛t❪ ✲❃ ❬❋❧♦❛t❪ ✲❃ ❋❧♦❛t

❝❤✐❈✉❛❞ ♦s ❡s ❂ s✉♠ ❬✭✭♦✲❡✮❫✷✮✴❡ ⑤ ✭♦✱❡✮ ❁✲ ③✐♣ ♦s ❡s❪

330 Capítulo 15. El cifrado César

Ejercicio 15.3.2. Redefinir la función

r♦t❛ ✿✿ ■♥t ✲❃ ❬❛❪ ✲❃ ❬❛❪

tal que r♦t❛ n xs) es la lista obtenida rotando ♥ posiciones los elementos de la lista ①s. Por

ejemplo,

r♦t❛ ✷ ✧♠❛♥♦❧♦✧ ❂❂ ✧♥♦❧♦♠❛✧

Solución:

r♦t❛ ✿✿ ■♥t ✲❃ ❬❛❪ ✲❃ ❬❛❪

r♦t❛ ♥ ①s ❂ ❞r♦♣ ♥ ①s ✰✰ t❛❦❡ ♥ ①s

Ejercicio 15.3.3. Redefinir la función

❞❡s❝✐❢r❛ ✿✿ ❙tr✐♥❣ ✲❃ ❙tr✐♥❣

tal que ❞❡s❝✐❢r❛ xs) es la cadena obtenida descodificando la cadena ①s por el anti–desplazamiento

que produce una distribución de letras con la menor deviación χ2 respecto de la tabla de distri-

bución de las letras en castellano. Por ejemplo,

❣❤❝✐❃ ❝♦❞✐❢✐❝❛ ✺ ✧❚♦❞♦ P❛r❛ ◆❛❞❛✧

✧❨t✐t ❯❢✇❢ ❙❢✐❢✧

❣❤❝✐❃ ❞❡s❝✐❢r❛ ✧❨t✐t ❯❢✇❢ ❙❢✐❢✧

✧❚♦❞♦ P❛r❛ ◆❛❞❛✧

Solución:

❞❡s❝✐❢r❛ ✿✿ ❙tr✐♥❣ ✲❃ ❙tr✐♥❣

❞❡s❝✐❢r❛ ①s ❂ ❝♦❞✐❢✐❝❛ ✭✲❢❛❝t♦r✮ ①s

✇❤❡r❡

❢❛❝t♦r ❂ ❤❡❛❞ ✭♣♦s✐❝✐♦♥❡s ✭♠✐♥✐♠✉♠ t❛❜❈❤✐✮ t❛❜❈❤✐✮

t❛❜❈❤✐ ❂ ❬❝❤✐❈✉❛❞ ✭r♦t❛ ♥ t❛❜❧❛✬✮ t❛❜❧❛ ⑤ ♥ ❁✲ ❬✵✳✳✷✺❪❪

t❛❜❧❛✬ ❂ ❢r❡❝✉❡♥❝✐❛s ①s

donde ✭♣♦s✐❝✐♦♥❡s ① ①s✮ es la lista de las posiciones del elemento ① en la lista ①s

♣♦s✐❝✐♦♥❡s ✿✿ ❊q ❛ ❂❃ ❛ ✲❃ ❬❛❪ ✲❃ ❬■♥t❪

♣♦s✐❝✐♦♥❡s ① ①s ❂

❬✐ ⑤ ✭①✬✱✐✮ ❁✲ ③✐♣ ①s ❬✵✳✳❪✱ ① ❂❂ ①✬❪

Capítulo 16

Codificación y transmisión de mensajes

Contenido16.1 Cambios de bases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331

16.2 Codificación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333

16.3 Descodificación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335

16.4 Transmisión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336

En esta relación se va a modificar el programa de transmisión de cadenas, presenta-do en el capítulo 7 de [1], para detectar errores de transmisión sencillos usando bits deparidad. Es decir, cada octeto de ceros y unos generado durante la codificación se ex-tiende con un bit de paridad que será un uno si el número contiene un número impar deunos y cero en caso contrario. En la decodificación, en cada número binario de 9 cifrasdebe comprobarse que la paridad es correcta, en cuyo caso se descarta el bit de paridad.En caso contrario, debe generarse un mensaje de error en la paridad.

Esta relación es una aplicación del uso de la funciones de orden superior y de plega-dos.

Nota. Se usará la librería de caracteres.

✐♠♣♦rt ❉❛t❛✳❈❤❛r

Los bits se representán mediante enteros.

t②♣❡ ❇✐t ❂ ■♥t

16.1. Cambios de bases

Ejercicio 16.1.1. Definir, por recursión, la función

331

332 Capítulo 16. Codificación y transmisión de mensajes

❜✐♥✷✐♥t❘ ✿✿ ❬❇✐t❪ ✲❃ ■♥t

tal que ✭❜✐♥✷✐♥t❘ ①✮ es el número decimal correspondiente al número binario ①. Por ejemplo,

❜✐♥✷✐♥t❘ ❬✶✱✵✱✶✱✶❪ ❂❂ ✶✸

Solución:

❜✐♥✷✐♥t❘ ✿✿ ❬❇✐t❪ ✲❃ ■♥t

❜✐♥✷✐♥t❘ ❬❪ ❂ ✵

❜✐♥✷✐♥t❘ ✭①✿①s✮ ❂ ① ✰ ✷ ✯ ✭❜✐♥✷✐♥t❘ ①s✮

Ejercicio 16.1.2. Definir, por plegado, la función

❜✐♥✷✐♥t ✿✿ ❬❇✐t❪ ✲❃ ■♥t

tal que ✭❜✐♥✷✐♥t ①✮ es el número decimal correspondiente al número binario ①. Por ejemplo,

❜✐♥✷✐♥t ❬✶✱✵✱✶✱✶❪ ❂❂ ✶✸

Solución:

❜✐♥✷✐♥t ✿✿ ❬❇✐t❪ ✲❃ ■♥t

❜✐♥✷✐♥t ❂ ❢♦❧❞r ✭❭① ② ✲❃ ① ✰ ✷✯②✮ ✵

Ejercicio 16.1.3. Definir, por comprensión, la función

❜✐♥✷✐♥t❈ ✿✿ ❬❇✐t❪ ✲❃ ■♥t

tal que ✭❜✐♥✷✐♥t❈ ①✮ es el número decimal correspondiente al número binario ①. Por ejemplo,

❜✐♥✷✐♥t❈ ❬✶✱✵✱✶✱✶❪ ❂❂ ✶✸

Solución:

❜✐♥✷✐♥t❈ ✿✿ ❬❇✐t❪ ✲❃ ■♥t

❜✐♥✷✐♥t❈ ①s ❂ s✉♠ ❬①✯✷❫♥ ⑤ ✭①✱♥✮ ❁✲ ③✐♣ ①s ❬✵✳✳❪❪

Ejercicio 16.1.4. Definir la función

✐♥t✷❜✐♥ ✿✿ ■♥t ✲❃ ❬❇✐t❪

tal que ✭✐♥t✷❜✐♥ ①✮ es el número binario correspondiente al número decimal ①. Por ejemplo,

✐♥t✷❜✐♥ ✶✸ ❂❂ ❬✶✱✵✱✶✱✶❪

Solución:

16.2. Codificación 333

✐♥t✷❜✐♥ ✿✿ ■♥t ✲❃ ❬❇✐t❪

✐♥t✷❜✐♥ ♥ ⑤ ♥ ❁ ✷ ❂ ❬♥❪

⑤ ♦t❤❡r✇✐s❡ ❂ ♥ ❵r❡♠❵ ✷ ✿ ✐♥t✷❜✐♥ ✭♥ ❵❞✐✈❵ ✷✮

Ejercicio 16.1.5. Comprobar con QuickCheck que al pasar un número natural a binario con

✐♥t✷❜✐♥ y el resultado a decimal con ❜✐♥✷✐♥t se obtiene el número inicial.

Solución: La propiedad es

♣r♦♣❴✐♥t❴❜✐♥ ✿✿ ■♥t ✲❃ ❇♦♦❧

♣r♦♣❴✐♥t❴❜✐♥ ① ❂

❜✐♥✷✐♥t ✭✐♥t✷❜✐♥ ②✮ ❂❂ ②

✇❤❡r❡ ② ❂ ❛❜s ①

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴✐♥t❴❜✐♥

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

16.2. Codificación

Nota. Un octeto es un grupo de ocho bits.

Ejercicio 16.2.1. Definir la función

❝r❡❛❖❝t❡t♦ ✿✿ ❬❇✐t❪ ✲❃ ❬❇✐t❪

tal que ✭❝r❡❛❖❝t❡t♦ ❜s✮ es el octeto correspondiente a la lista de bits ❜s; es decir, los 8 primeros

elementos de ❜s si su longitud es mayor o igual que 8 y la lista de 8 elemento añadiendo ceros al

final de ❜s en caso contrario. Por ejemplo,

❝r❡❛❖❝t❡t♦ ❬✶✱✵✱✶✱✶✱✵✱✵✱✶✱✶✱✶✱✵✱✵✱✵❪ ❂❂ ❬✶✱✵✱✶✱✶✱✵✱✵✱✶✱✶❪

❝r❡❛❖❝t❡t♦ ❬✶✱✵✱✶✱✶❪ ❂❂ ❬✶✱✵✱✶✱✶✱✵✱✵✱✵✱✵❪

Solución:

❝r❡❛❖❝t❡t♦ ✿✿ ❬❇✐t❪ ✲❃ ❬❇✐t❪

❝r❡❛❖❝t❡t♦ ❜s ❂ t❛❦❡ ✽ ✭❜s ✰✰ r❡♣❡❛t ✵✮

La definición anterior puede simplificarse a

❝r❡❛❖❝t❡t♦✬ ✿✿ ❬❇✐t❪ ✲❃ ❬❇✐t❪

❝r❡❛❖❝t❡t♦✬ ❂ t❛❦❡ ✽ ✳ ✭✰✰ r❡♣❡❛t ✵✮

334 Capítulo 16. Codificación y transmisión de mensajes

Ejercicio 16.2.2. Definir la función

♣❛r✐❞❛❞ ✿✿ ❬❇✐t❪ ✲❃ ❇✐t

tal que ✭♣❛r✐❞❛❞ ❜s✮ es el bit de paridad de ❜s; es decir, 1 si ❜s contiene un número impar de

unos y 0 en caso contrario. Por ejemplo,

♣❛r✐❞❛❞ ❬✵✱✶✱✶❪ ❂❂ ✵

♣❛r✐❞❛❞ ❬✵✱✶✱✶✱✵✱✶❪ ❂❂ ✶

Solución:

♣❛r✐❞❛❞ ✿✿ ❬❇✐t❪ ✲❃ ❇✐t

♣❛r✐❞❛❞ ❜s ⑤ ♦❞❞ ✭s✉♠ ❜s✮ ❂ ✶

⑤ ♦t❤❡r✇✐s❡ ❂ ✵

Ejercicio 16.2.3. Definir la función

❛❣r❡❣❛P❛r✐❞❛❞ ✿✿ ❬❇✐t❪ ✲❃ ❬❇✐t❪

tal que ✭❛❣r❡❣❛P❛r✐❞❛❞ ❜s✮ es la lista obtenida añadiendo al principio de ❜s su paridad. Por

ejemplo,

❛❣r❡❣❛P❛r✐❞❛❞ ❬✵✱✶✱✶❪ ❂❂ ❬✵✱✵✱✶✱✶❪

❛❣r❡❣❛P❛r✐❞❛❞ ❬✵✱✶✱✶✱✵✱✶❪ ❂❂ ❬✶✱✵✱✶✱✶✱✵✱✶❪

Solución:

❛❣r❡❣❛P❛r✐❞❛❞ ✿✿ ❬❇✐t❪ ✲❃ ❬❇✐t❪

❛❣r❡❣❛P❛r✐❞❛❞ ❜s ❂ ✭♣❛r✐❞❛❞ ❜s✮ ✿ ❜s

Ejercicio 16.2.4. Definir la función

❝♦❞✐❢✐❝❛ ✿✿ ❙tr✐♥❣ ✲❃ ❬❇✐t❪

tal que ✭❝♦❞✐❢✐❝❛ ❝✮ es la codificación de la cadena 1c como una lista de bits obtenida con-

virtiendo cada carácter en un número Unicode, convirtiendo cada uno de dichos números en un

octeto con su paridad y concatenando los octetos con paridad para obtener una lista de bits. Por

ejemplo,

❣❤❝✐❃ ❝♦❞✐❢✐❝❛ ✧❛❜❝✧

❬✶✱✶✱✵✱✵✱✵✱✵✱✶✱✶✱✵✱✶✱✵✱✶✱✵✱✵✱✵✱✶✱✶✱✵✱✵✱✶✱✶✱✵✱✵✱✵✱✶✱✶✱✵❪

Solución:

❝♦❞✐❢✐❝❛ ✿✿ ❙tr✐♥❣ ✲❃ ❬❇✐t❪

❝♦❞✐❢✐❝❛ ❂ ❝♦♥❝❛t ✳ ♠❛♣ ✭❛❣r❡❣❛P❛r✐❞❛❞ ✳ ❝r❡❛❖❝t❡t♦ ✳ ✐♥t✷❜✐♥ ✳ ♦r❞✮

16.3. Descodificación 335

16.3. Descodificación

Ejercicio 16.3.1. Definir la función

s❡♣❛r❛✾ ✿✿ ❬❇✐t❪ ✲❃ ❬❬❇✐t❪❪

tal que ✭s❡♣❛r❛✾ ❜s✮ es la lista obtenida separando la lista de bits ❜s en listas de 9 elementos.

Por ejemplo,

❣❤❝✐❃ s❡♣❛r❛✾ ❬✶✱✶✱✵✱✵✱✵✱✵✱✶✱✶✱✵✱✶✱✵✱✶✱✵✱✵✱✵✱✶✱✶✱✵✱✵✱✶✱✶✱✵✱✵✱✵✱✶✱✶✱✵❪

❬❬✶✱✶✱✵✱✵✱✵✱✵✱✶✱✶✱✵❪✱❬✶✱✵✱✶✱✵✱✵✱✵✱✶✱✶✱✵❪✱❬✵✱✶✱✶✱✵✱✵✱✵✱✶✱✶✱✵❪❪

Solución:

s❡♣❛r❛✾ ✿✿ ❬❇✐t❪ ✲❃ ❬❬❇✐t❪❪

s❡♣❛r❛✾ ❬❪ ❂ ❬❪

s❡♣❛r❛✾ ❜s ❂ t❛❦❡ ✾ ❜s ✿ s❡♣❛r❛✾ ✭❞r♦♣ ✾ ❜s✮

Ejercicio 16.3.2. Definir la función

❝♦♠♣r✉❡❜❛P❛r✐❞❛❞ ✿✿ ❬❇✐t❪ ✲❃ ❬❇✐t ❪

tal que ✭❝♦♠♣r✉❡❜❛P❛r✐❞❛❞ ❜s✮ es el resto de ❜s si el primer elemento de ❜s es el bit de paridad

del resto de ❜s y devuelve error de paridad en caso contrario. Por ejemplo,

❣❤❝✐❃ ❝♦♠♣r✉❡❜❛P❛r✐❞❛❞ ❬✶✱✶✱✵✱✵✱✵✱✵✱✶✱✶✱✵❪

❬✶✱✵✱✵✱✵✱✵✱✶✱✶✱✵❪

❣❤❝✐❃ ❝♦♠♣r✉❡❜❛P❛r✐❞❛❞ ❬✵✱✶✱✵✱✵✱✵✱✵✱✶✱✶✱✵❪

✯✯✯ ❊①❝❡♣t✐♦♥✿ ♣❛r✐❞❛❞ ❡rr♦♥❡❛

Nota: Usar la función del preludio

❡rr♦r ✿✿ ❙tr✐♥❣ ✲❃ ❛

tal que ✭❡rr♦r ❝✮ devuelve la cadena ❝.

Solución:

❝♦♠♣r✉❡❜❛P❛r✐❞❛❞ ✿✿ ❬❇✐t❪ ✲❃ ❬❇✐t ❪

❝♦♠♣r✉❡❜❛P❛r✐❞❛❞ ✭❜✿❜s✮

⑤ ❜ ❂❂ ♣❛r✐❞❛❞ ❜s ❂ ❜s

⑤ ♦t❤❡r✇✐s❡ ❂ ❡rr♦r ✧♣❛r✐❞❛❞ ❡rr♦♥❡❛✧

Ejercicio 16.3.3. Definir la función

❞❡s❝♦❞✐❢✐❝❛ ✿✿ ❬❇✐t❪ ✲❃ ❙tr✐♥❣

336 Capítulo 16. Codificación y transmisión de mensajes

tal que ✭❞❡s❝♦❞✐❢✐❝❛ ❜s✮ es la cadena correspondiente a la lista de bits con paridad ❜s. Para

ello, en cada número binario de 9 cifras debe comprobarse que la paridad es correcta, en cuyo caso

se descarta el bit de paridad. En caso contrario, debe generarse un mensaje de error en la paridad.

Por ejemplo,

❞❡s❝♦❞✐❢✐❝❛ ❬✶✱✶✱✵✱✵✱✵✱✵✱✶✱✶✱✵✱✶✱✵✱✶✱✵✱✵✱✵✱✶✱✶✱✵✱✵✱✶✱✶✱✵✱✵✱✵✱✶✱✶✱✵❪

❂❂ ✧❛❜❝✧

❞❡s❝♦❞✐❢✐❝❛ ❬✶✱✵✱✵✱✵✱✵✱✵✱✶✱✶✱✵✱✶✱✵✱✶✱✵✱✵✱✵✱✶✱✶✱✵✱✵✱✶✱✶✱✵✱✵✱✵✱✶✱✶✱✵❪

❂❂ ✧✯✯✯ ❊①❝❡♣t✐♦♥✿ ♣❛r✐❞❛❞ ❡rr♦♥❡❛

Solución:

❞❡s❝♦❞✐❢✐❝❛ ✿✿ ❬❇✐t❪ ✲❃ ❙tr✐♥❣

❞❡s❝♦❞✐❢✐❝❛ ❂ ♠❛♣ ✭❝❤r ✳ ❜✐♥✷✐♥t ✳ ❝♦♠♣r✉❡❜❛P❛r✐❞❛❞✮ ✳ s❡♣❛r❛✾

16.4. Transmisión

Ejercicio 16.4.1. Se define la función

tr❛♥s♠✐t❡ ✿✿ ✭❬❇✐t❪ ✲❃ ❬❇✐t❪✮ ✲❃ ❙tr✐♥❣ ✲❃ ❙tr✐♥❣

tr❛♥s♠✐t❡ ❝❛♥❛❧ ❂ ❞❡s❝♦❞✐❢✐❝❛ ✳ ❝❛♥❛❧ ✳ ❝♦❞✐❢✐❝❛

tal que ✭tr❛♥s♠✐t❡ ❝ t✮ es la cadena obtenida transmitiendo la cadena t a través del canal ❝.

Calcular el reultado de trasmitir la cadena ✧❈♦♥♦❝❡t❡ ❛ t✐ ♠✐s♠♦✧ por el canal identidad (✐❞)

y del canal que olvida el primer bit (t❛✐❧).

Solución: El cálculo es

❣❤❝✐❃ tr❛♥s♠✐t❡ ✐❞ ✧❈♦♥♦❝❡t❡ ❛ t✐ ♠✐s♠♦✧

✧❈♦♥♦❝❡t❡ ❛ t✐ ♠✐s♠♦✧

❣❤❝✐❃ tr❛♥s♠✐t❡ t❛✐❧ ✧❈♦♥♦❝❡t❡ ❛ t✐ ♠✐s♠♦✧

✧✯✯✯ ❊①❝❡♣t✐♦♥✿ ♣❛r✐❞❛❞ ❡rr♦♥❡❛

Capítulo 17

Resolución de problemas matemáticos

En este capítulo se presentan ejercicios para resolver problemas matemáticos. Se co-rresponden a los 7 primeros temas de [1].

Contenido17.1 El problema de Ullman sobre la existencia de subconjunto del tamaño

dado y con su suma acotada . . . . . . . . . . . . . . . . . . . . . . . . . 338

17.2 Descomposiciones de un número como suma de dos cuadrados . . . . 339

17.3 Números reversibles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340

17.4 Grafo de una función sobre los elementos que cumplen una propiedad 341

17.5 Números semiperfectos . . . . . . . . . . . . . . . . . . . . . . . . . . . 342

17.6 Decidir el carácter funcional de una relación . . . . . . . . . . . . . . . 344

17.7 La identidad de Bézout . . . . . . . . . . . . . . . . . . . . . . . . . . . 344

17.8 Distancia entre dos conjuntos de números . . . . . . . . . . . . . . . . . 346

17.9 Expresables como suma de números consecutivos . . . . . . . . . . . . 346

17.10 Solución de una ecuación diofántica . . . . . . . . . . . . . . . . . . . . 348

Nota. En esta relación se usan las librerías ▲✐st ② ◗✉✐❝❦❈❤❡❝❦.

✐♠♣♦rt ❉❛t❛✳▲✐st

✐♠♣♦rt ❚❡st✳◗✉✐❝❦❈❤❡❝❦

337

338 Capítulo 17. Resolución de problemas matemáticos

17.1. El problema de Ullman sobre la existencia de sub-conjunto del tamaño dado y con su suma acotada

Ejercicio 17.1.1. Definir la función

✉❧❧♠❛♥ ✿✿ ✭◆✉♠ ❛✱ ❖r❞ ❛✮ ❂❃ ❛ ✲❃ ■♥t ✲❃ ❬❛❪ ✲❃ ❇♦♦❧

tal que ✭✉❧❧♠❛♥ t ❦ ①s✮ se verifica si ①s tiene un subconjunto con ❦ elementos cuya suma sea

menor que t. Por ejemplo,

✉❧❧♠❛♥ ✾ ✸ ❬✶✳✳✶✵❪ ❂❂ ❚r✉❡

✉❧❧♠❛♥ ✺ ✸ ❬✶✳✳✶✵❪ ❂❂ ❋❛❧s❡

Solución: Se presentan dos soluciones y se compara su eficiencia.1a solución (corta y eficiente)

✉❧❧♠❛♥ ✿✿ ✭❖r❞ ❛✱ ◆✉♠ ❛✮ ❂❃ ❛ ✲❃ ■♥t ✲❃ ❬❛❪ ✲❃ ❇♦♦❧

✉❧❧♠❛♥ t ❦ ①s ❂ s✉♠ ✭t❛❦❡ ❦ ✭s♦rt ①s✮✮ ❁ t

2a solución (larga e ineficiente)

✉❧❧♠❛♥✷ ✿✿ ✭◆✉♠ ❛✱ ❖r❞ ❛✮ ❂❃ ❛ ✲❃ ■♥t ✲❃ ❬❛❪ ✲❃ ❇♦♦❧

✉❧❧♠❛♥✷ t ❦ ①s ❂

❬②s ⑤ ②s ❁✲ s✉❜❝♦♥❥✉♥t♦s ①s✱ ❧❡♥❣t❤ ②s ❂❂ ❦✱ s✉♠ ②s ❁ t❪ ✴❂ ❬❪

donde ✭s✉❜❝♦♥❥✉♥t♦s ①s✮ es la lista de los subconjuntos de ①s. Por ejemplo,

s✉❜❝♦♥❥✉♥t♦s ✧❜❝✧ ❂❂ ❬✧✧✱✧❝✧✱✧❜✧✱✧❜❝✧❪

s✉❜❝♦♥❥✉♥t♦s ✧❛❜❝✧ ❂❂ ❬✧✧✱✧❝✧✱✧❜✧✱✧❜❝✧✱✧❛✧✱✧❛❝✧✱✧❛❜✧✱✧❛❜❝✧❪

s✉❜❝♦♥❥✉♥t♦s ✿✿ ❬❛❪ ✲❃ ❬❬❛❪❪

s✉❜❝♦♥❥✉♥t♦s ❬❪ ❂ ❬❬❪❪

s✉❜❝♦♥❥✉♥t♦s ✭①✿①s✮ ❂ ③ss✰✰❬①✿②s ⑤ ②s ❁✲ ③ss❪

✇❤❡r❡ ③ss ❂ s✉❜❝♦♥❥✉♥t♦s ①s

Los siguientes ejemplos muestran la diferencia en la eficencia:

✯▼❛✐♥❃ ✉❧❧♠❛♥ ✾ ✸ ❬✶✳✳✷✵❪

❚r✉❡

✭✵✳✵✷ s❡❝s✱ ✺✷✽✸✽✵ ❜②t❡s✮

✯▼❛✐♥❃ ✉❧❧♠❛♥✷ ✾ ✸ ❬✶✳✳✷✵❪

❚r✉❡

✭✹✳✵✽ s❡❝s✱ ✶✸✺✷✻✼✾✵✹ ❜②t❡s✮

17.2. Descomposiciones de un número como suma de dos cuadrados 339

✯▼❛✐♥❃ ✉❧❧♠❛♥ ✾ ✸ ❬✶✳✳✶✵✵❪

❚r✉❡

✭✵✳✵✷ s❡❝s✱ ✺✷✻✸✻✵ ❜②t❡s✮

✯▼❛✐♥❃ ✉❧❧♠❛♥✷ ✾ ✸ ❬✶✳✳✶✵✵❪

❈✲❝ ❈✲❝■♥t❡rr✉♣t❡❞✳

❆❣♦t❛❞♦

17.2. Descomposiciones de un número como suma de doscuadrados

Ejercicio 17.2.1. Definir la función

s✉♠❛s❉❡✷❈✉❛❞r❛❞♦s ✿✿ ■♥t❡❣❡r ✲❃ ❬✭■♥t❡❣❡r✱ ■♥t❡❣❡r✮❪

tal que ✭s✉♠❛s❉❡✷❈✉❛❞r❛❞♦s ♥✮ es la lista de los pares de números tales que la suma de sus

cuadrados es ♥ y el primer elemento del par es mayor o igual que el segundo. Por ejemplo,

s✉♠❛s❉❡✷❈✉❛❞r❛❞♦s ✷✺ ❂❂ ❬✭✺✱✵✮✱✭✹✱✸✮❪

Solución: Se consideran 3 soluciones y se compara su eficiencia.Primera definición:

s✉♠❛s❉❡✷❈✉❛❞r❛❞♦s❴✶ ✿✿ ■♥t❡❣❡r ✲❃ ❬✭■♥t❡❣❡r✱ ■♥t❡❣❡r✮❪

s✉♠❛s❉❡✷❈✉❛❞r❛❞♦s❴✶ ♥ ❂

❬✭①✱②✮ ⑤ ① ❁✲ ❬♥✱♥✲✶✳✳✵❪✱

② ❁✲ ❬✵✳✳①❪✱

①✯①✰②✯② ❂❂ ♥❪

Segunda definición:

s✉♠❛s❉❡✷❈✉❛❞r❛❞♦s❴✷ ✿✿ ■♥t❡❣❡r ✲❃ ❬✭■♥t❡❣❡r✱ ■♥t❡❣❡r✮❪

s✉♠❛s❉❡✷❈✉❛❞r❛❞♦s❴✷ ♥ ❂

❬✭①✱②✮ ⑤ ① ❁✲ ❬❛✱❛✲✶✳✳✵❪✱

② ❁✲ ❬✵✳✳①❪✱

①✯①✰②✯② ❂❂ ♥❪

✇❤❡r❡ ❛ ❂ ❝❡✐❧✐♥❣ ✭sqrt ✭❢r♦♠■♥t❡❣r❛❧ ♥✮✮

Tercera definición:

s✉♠❛s❉❡✷❈✉❛❞r❛❞♦s❴✸ ✿✿ ■♥t❡❣❡r ✲❃ ❬✭■♥t❡❣❡r✱ ■♥t❡❣❡r✮❪

s✉♠❛s❉❡✷❈✉❛❞r❛❞♦s❴✸ ♥ ❂ ❛✉① ✭❝❡✐❧✐♥❣ ✭sqrt ✭❢r♦♠■♥t❡❣r❛❧ ♥✮✮✮ ✵

✇❤❡r❡ ❛✉① ① ② ⑤ ① ❁ ② ❂ ❬❪

340 Capítulo 17. Resolución de problemas matemáticos

⑤ ①✯① ✰ ②✯② ❁ ♥ ❂ ❛✉① ① ✭②✰✶✮

⑤ ①✯① ✰ ②✯② ❂❂ ♥ ❂ ✭①✱②✮ ✿ ❛✉① ✭①✲✶✮ ✭②✰✶✮

⑤ ♦t❤❡r✇✐s❡ ❂ ❛✉① ✭①✲✶✮ ②

La comparación de las tres definiciones esn 1a definición 2a definición 3a definición

999 2.17 segs 0.02 segs 0.01 segs48612265 140.38 segs 0.13 segs

17.3. Números reversibles

Ejercicio 17.3.1 (Basado en el problema 145 del Proyecto Euler1). Se dice que un número

n es reversible si su última cifra es distinta de 0 y la suma de n y el número obtenido escri-

biendo las cifras de n en orden inverso es un número que tiene todas sus cifras impares. Por

ejemplo, 36 es reversible porque 36+63=99 tiene todas sus cifras impares, 409 es reversible por-

que 409+904=1313 tiene todas sus cifras impares, 243 no es reversible porque 243+342=585 no

tiene todas sus cifras impares.

Definir la función

r❡✈❡rs✐❜❧❡s▼❡♥♦r❡s ✿✿ ■♥t ✲❃ ■♥t

tal que ✭r❡✈❡rs✐❜❧❡s▼❡♥♦r❡s ♥✮ es la cantidad de números reversibles menores que ♥. Por

ejemplo,

r❡✈❡rs✐❜❧❡s▼❡♥♦r❡s ✶✵ ❂❂ ✵

r❡✈❡rs✐❜❧❡s▼❡♥♦r❡s ✶✵✵ ❂❂ ✷✵

r❡✈❡rs✐❜❧❡s▼❡♥♦r❡s ✶✵✵✵ ❂❂ ✶✷✵

Solución:

r❡✈❡rs✐❜❧❡s▼❡♥♦r❡s ✿✿ ■♥t ✲❃ ■♥t

r❡✈❡rs✐❜❧❡s▼❡♥♦r❡s ♥ ❂ ❧❡♥❣t❤ ❬① ⑤ ① ❁✲ ❬✶✳✳♥✲✶❪✱ ❡s❘❡✈❡rs✐❜❧❡ ①❪

En la definición se usan las siguientes funciones auxiliares:

✭❡s❘❡✈❡rs✐❜❧❡ ♥✮ se verifica si ♥ es reversible; es decir, si su última cifra es distintade 0 y la suma de ♥ y el número obtenido escribiendo las cifras de n en ordeninverso es un número que tiene todas sus cifras impares. Por ejemplo,

❡s❘❡✈❡rs✐❜❧❡ ✸✻ ❂❂ ❚r✉❡

❡s❘❡✈❡rs✐❜❧❡ ✹✵✾ ❂❂ ❚r✉❡

1❤tt♣✿✴✴♣r♦❥❡❝t❡✉❧❡r✳♥❡t✴♣r♦❜❧❡♠❂✶✹✺

17.4. Grafo de una función sobre los elementos que cumplen una propiedad 341

❡s❘❡✈❡rs✐❜❧❡ ✿✿ ■♥t ✲❃ ❇♦♦❧

❡s❘❡✈❡rs✐❜❧❡ ♥ ❂ r❡♠ ♥ ✶✵ ✴❂ ✵ ✫✫ ✐♠♣❛r❡s ✭❝✐❢r❛s ✭♥ ✰ ✭✐♥✈❡rs♦ ♥✮✮✮

✭✐♠♣❛r❡s ①s✮ se verifica si ①s es una lista de números impares. Por ejemplo,

✐♠♣❛r❡s ❬✸✱✺✱✶❪ ❂❂ ❚r✉❡

✐♠♣❛r❡s ❬✸✱✹✱✶❪ ❂❂ ❋❛❧s❡

✐♠♣❛r❡s ✿✿ ❬■♥t❪ ✲❃ ❇♦♦❧

✐♠♣❛r❡s ①s ❂ ❛♥❞ ❬♦❞❞ ① ⑤ ① ❁✲ ①s❪

✭✐♥✈❡rs♦ ♥✮ es el número obtenido escribiendo las cifras de ♥ en orden inverso.Por ejemplo,

✐♥✈❡rs♦ ✸✵✸✹ ❂❂ ✹✸✵✸

✐♥✈❡rs♦ ✿✿ ■♥t ✲❃ ■♥t

✐♥✈❡rs♦ ♥ ❂ r❡❛❞ ✭r❡✈❡rs❡ ✭s❤♦✇ ♥✮✮

✭❝✐❢r❛s ♥✮ es la lista de las cifras del número ♥. Por ejemplo,

❝✐❢r❛s ✸✵✸✹ ❂❂ ❬✸✱✵✱✸✱✹❪

❝✐❢r❛s ✿✿ ■♥t ✲❃ ❬■♥t❪

❝✐❢r❛s ♥ ❂ ❬r❡❛❞ ❬①❪ ⑤ ① ❁✲ s❤♦✇ ♥❪

17.4. Grafo de una función sobre los elementos que cum-plen una propiedad

Ejercicio 17.4.1. Definir, usando funciones de orden superior, la función

❣r❛❢♦❘❡❞✉❝✐❞♦ ✿✿ ❊q ❛ ❂❃ ✭❛ ✲❃ ❜✮ ✲❃ ✭❛ ✲❃ ❇♦♦❧✮ ✲❃ ❬❛❪ ✲❃ ❬✭❛✱❜✮❪

tal que ✭❣r❛❢♦❘❡❞✉❝✐❞♦ ❢ ♣ ①s✮ es la lista (sin repeticiones) de los pares formados por los

elementos de ①s que verifican el predicado ♣ y sus imágenes. Por ejemplo,

❣r❛❢♦❘❡❞✉❝✐❞♦ ✭❫✷✮ ❡✈❡♥ ❬✶✳✳✾❪ ❂❂ ❬✭✷✱✹✮✱✭✹✱✶✻✮✱✭✻✱✸✻✮✱✭✽✱✻✹✮❪

❣r❛❢♦❘❡❞✉❝✐❞♦ ✭✰✹✮ ❡✈❡♥ ✭r❡♣❧✐❝❛t❡ ✹✵ ✶✮ ❂❂ ❬❪

❣r❛❢♦❘❡❞✉❝✐❞♦ ✭✯✺✮ ❡✈❡♥ ✭r❡♣❧✐❝❛t❡ ✹✵ ✷✮ ❂❂ ❬✭✷✱✶✵✮❪

342 Capítulo 17. Resolución de problemas matemáticos

Solución:

❣r❛❢♦❘❡❞✉❝✐❞♦ ✿✿ ❊q ❛ ❂❃ ✭❛ ✲❃ ❜✮ ✲❃ ✭❛ ✲❃ ❇♦♦❧✮ ✲❃ ❬❛❪ ✲❃ ❬✭❛✱❜✮❪

❣r❛❢♦❘❡❞✉❝✐❞♦ ❢ ♣ ①s ❂ ❬✭①✱❢ ①✮ ⑤ ① ❁✲ ♥✉❜ ①s✱ ♣ ①❪

17.5. Números semiperfectos

Ejercicio 17.5.1. Un número natural ♥ se denomina semiperfecto si es la suma de algunos de

sus divisores propios. Por ejemplo, 18 es semiperfecto ya que sus divisores son 1, 2, 3, 6, 9 y se

cumple que 3+6+9=18.

Definir la función

❡s❙❡♠✐P❡r❢❡❝t♦ ✿✿ ■♥t ✲❃ ❇♦♦❧

tal que ✭❡s❙❡♠✐P❡r❢❡❝t♦ ♥✮ se verifica si ♥ es semiperfecto. Por ejemplo,

❡s❙❡♠✐P❡r❢❡❝t♦ ✶✽ ❂❂ ❚r✉❡

❡s❙❡♠✐P❡r❢❡❝t♦ ✾ ❂❂ ❋❛❧s❡

❡s❙❡♠✐P❡r❢❡❝t♦ ✷✹ ❂❂ ❚r✉❡

Solución:

❡s❙❡♠✐P❡r❢❡❝t♦ ✿✿ ■♥t ✲❃ ❇♦♦❧

❡s❙❡♠✐P❡r❢❡❝t♦ ♥ ❂

♦r ❬s✉♠ ②s ❂❂ ♥ ⑤ ②s ❁✲ s✉❜❝♦♥❥✉♥t♦s ✭❞✐✈✐s♦r❡s ♥✮❪

donde se usan las siguientes funciones auxiliares.

✭s✉❜❝♦♥❥✉♥t♦s ①s✮ es la lista de los subconjuntos de ①s. Por ejemplo,

s✉❜❝♦♥❥✉♥t♦s ✧❜❝✧ ❂❂ ❬✧✧✱✧❝✧✱✧❜✧✱✧❜❝✧❪

s✉❜❝♦♥❥✉♥t♦s ✧❛❜❝✧ ❂❂ ❬✧✧✱✧❝✧✱✧❜✧✱✧❜❝✧✱✧❛✧✱✧❛❝✧✱✧❛❜✧✱✧❛❜❝✧❪

s✉❜❝♦♥❥✉♥t♦s ✿✿ ❬❛❪ ✲❃ ❬❬❛❪❪

s✉❜❝♦♥❥✉♥t♦s ❬❪ ❂ ❬❬❪❪

s✉❜❝♦♥❥✉♥t♦s ✭①✿①s✮ ❂ ③ss✰✰❬①✿②s ⑤ ②s ❁✲ ③ss❪

✇❤❡r❡ ③ss ❂ s✉❜❝♦♥❥✉♥t♦s ①s

✭❞✐✈✐s♦r❡s ♥✮ es la lista de los divisores propios de ♥. Por ejemplo,

❞✐✈✐s♦r❡s ✶✽ ❂❂ ❬✶✱✷✱✸✱✻✱✾❪

17.5. Números semiperfectos 343

❞✐✈✐s♦r❡s ✿✿ ■♥t ✲❃ ❬■♥t❪

❞✐✈✐s♦r❡s ♥ ❂ ❬① ⑤ ① ❁✲ ❬✶✳✳♥✲✶❪✱ ♠♦❞ ♥ ① ❂❂ ✵❪

Ejercicio 17.5.2. Definir la constante ♣r✐♠❡r❙❡♠✐P❡r❢❡❝t♦ tal que su valor es el primer nú-

mero semiperfecto.

Solución:

♣r✐♠❡r❙❡♠✐P❡r❢❡❝t♦ ✿✿ ■♥t

♣r✐♠❡r❙❡♠✐P❡r❢❡❝t♦ ❂ ❤❡❛❞ ❬♥ ⑤ ♥ ❁✲ ❬✶✳✳❪✱ ❡s❙❡♠✐P❡r❢❡❝t♦ ♥❪

La evaluación es

❣❤❝✐❃ ♣r✐♠❡r❙❡♠✐P❡r❢❡❝t♦

Ejercicio 17.5.3. Definir la función

s❡♠✐P❡r❢❡❝t♦ ✿✿ ■♥t ✲❃ ■♥t

tal que ✭s❡♠✐P❡r❢❡❝t♦ ♥✮ es el ♥–ésimo número semiperfecto. Por ejemplo,

s❡♠✐P❡r❢❡❝t♦ ✶ ❂❂ ✻

s❡♠✐P❡r❢❡❝t♦ ✹ ❂❂ ✷✵

s❡♠✐P❡r❢❡❝t♦ ✶✵✵ ❂❂ ✹✶✹

Solución:

s❡♠✐P❡r❢❡❝t♦ ✿✿ ■♥t ✲❃ ■♥t

s❡♠✐P❡r❢❡❝t♦ ♥ ❂ s❡♠✐P❡r❢❡❝t♦s ✦✦ ♥

donde s❡♠✐P❡r❢❡❝t♦s es la lista de los números semiPerfectos. Por ejemplo,

t❛❦❡ ✹ s❡♠✐P❡r❢❡❝t♦s ❂❂ ❬✻✱✶✷✱✶✽✱✷✵❪

s❡♠✐P❡r❢❡❝t♦s ✿✿ ❬■♥t❪

s❡♠✐P❡r❢❡❝t♦s ❂ ❬♥ ⑤ ♥ ❁✲ ❬✶✳✳❪✱ ❡s❙❡♠✐P❡r❢❡❝t♦ ♥❪

344 Capítulo 17. Resolución de problemas matemáticos

17.6. Decidir el carácter funcional de una relación

Ejercicio 17.6.1. Las relaciones finitas se pueden representar mediante listas de pares. Por ejem-

plo,

r✶✱ r✷✱ r✸ ✿✿ ❬✭■♥t✱ ■♥t✮❪

r✶ ❂ ❬✭✶✱✸✮✱ ✭✷✱✻✮✱ ✭✽✱✾✮✱ ✭✷✱✼✮❪

r✷ ❂ ❬✭✶✱✸✮✱ ✭✷✱✻✮✱ ✭✽✱✾✮✱ ✭✸✱✼✮❪

r✸ ❂ ❬✭✶✱✸✮✱ ✭✷✱✻✮✱ ✭✽✱✾✮✱ ✭✸✱✻✮❪

Definir la función

❡s❋✉♥❝✐♦♥ ✿✿ ✭❊q ❛✱ ❊q ❜✮ ❂❃ ❬✭❛✱❜✮❪ ✲❃ ❇♦♦❧

tal que ✭❡s❋✉♥❝✐♦♥ r✮ se verifica si la relación r es una función (es decir, a cada elemento del

dominio de la relación r le corresponde un único elemento). Por ejemplo,

❡s❋✉♥❝✐♦♥ r✶ ❂❂ ❋❛❧s❡

❡s❋✉♥❝✐♦♥ r✷ ❂❂ ❚r✉❡

❡s❋✉♥❝✐♦♥ r✸ ❂❂ ❚r✉❡

Solución:

❡s❋✉♥❝✐♦♥ ✿✿ ✭❊q ❛✱ ❊q ❜✮ ❂❃ ❬✭❛✱❜✮❪ ✲❃ ❇♦♦❧

❡s❋✉♥❝✐♦♥ ❬❪ ❂ ❚r✉❡

❡s❋✉♥❝✐♦♥ ✭✭①✱②✮✿r✮ ❂

♥✉❧❧ ❬②✬ ⑤ ✭①✬✱②✬✮ ❁✲ r✱ ① ❂❂ ①✬✱ ② ✴❂ ②✬❪ ✫✫ ❡s❋✉♥❝✐♦♥ r

17.7. La identidad de Bézout

Ejercicio 17.7.1. Definir la función

❜❡③♦✉t ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r ✲❃ ✭■♥t❡❣❡r✱ ■♥t❡❣❡r✮

tal que ✭❜❡③♦✉t ❛ ❜✮ es un par de números ① e ② tal que ❛✯①✰❜✯② es el máximo común divisor

de ❛ y ❜. Por ejemplo,

❜❡③♦✉t ✷✶ ✶✺ ❂❂ ✭✲✷✱✸✮

Indicación: Se puede usar la función q✉♦t❘❡♠ tal que ✭q✉♦t❘❡♠ ① ②✮ es el par formado por el

cociente y el resto de dividir ① entre ②.

17.7. La identidad de Bézout 345

Solución: Un ejemplo del cálculo es el siguientea b q r

36 21 1 15 (1)21 15 1 6 (2)15 6 2 3 (3)6 3 2 03 0

Por tanto,3 = 15 − 6 ∗ 2 [por (3)]

= 15 − (21 − 15 ∗ 1) ∗ 2 [por (2)]= 21 ∗ (−2) + 15 ∗ 3= 21 ∗ (−2) + (36 − 21 ∗ 1) ∗ 3 [por (1)]= 36 ∗ 3 + 21 ∗ (−5)

Sean q y r el cociente y el resto de a entre b, d el máximo común múltiplo de a y b y(x, y) el valor de ✭❜❡③♦✉t ❜ r✮. Entonces,

a = bp + r

d = bx + ryPor tanto,

d = bx + (a − bp)y= ay + b(x − qy)

Luego,bezout(a, b) = (y, x − qy)

La definición de ❜❡③♦✉t es

❜❡③♦✉t ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r ✲❃ ✭■♥t❡❣❡r✱ ■♥t❡❣❡r✮

❜❡③♦✉t ❴ ✵ ❂ ✭✶✱✵✮

❜❡③♦✉t ❴ ✶ ❂ ✭✵✱✶✮

❜❡③♦✉t ❛ ❜ ❂ ✭②✱ ①✲q✯②✮

✇❤❡r❡ ✭①✱②✮ ❂ ❜❡③♦✉t ❜ r

✭q✱r✮ ❂ q✉♦t❘❡♠ ❛ ❜

Ejercicio 17.7.2. Comprobar con QuickCheck que si ❛ y ❜ son positivos y ✭①✱②✮ es el valor de

✭❜❡③♦✉t ❛ ❜✮, entonces ❛✯①✰❜✯② es igual al máximo común divisor de ❛ y ❜.

Solución: La propiedad es

♣r♦♣❴❇❡③♦✉t ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r ✲❃ Pr♦♣❡rt②

♣r♦♣❴❇❡③♦✉t ❛ ❜ ❂ ❛❃✵ ✫✫ ❜❃✵ ❂❂❃ ❛✯①✰❜✯② ❂❂ ❣❝❞ ❛ ❜

✇❤❡r❡ ✭①✱②✮ ❂ ❜❡③♦✉t ❛ ❜

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴❇❡③♦✉t

❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

346 Capítulo 17. Resolución de problemas matemáticos

17.8. Distancia entre dos conjuntos de números

Ejercicio 17.8.1. El enunciado del problema 1 de la Olimpiada Iberoamericana de Matemática

Universitaria del 2006 es el siguiente:

Sean m y n números enteros mayores que 1. Se definen los conjuntos P(m) ={ 1

m , 2m , . . . , m−1

m } y P(n) = { 1n , 2

n , . . . , n−1n }. Encontrar la distancia entre P(m) y

P(n), que se define como mı́n{|a − b| : a ∈ P(m), b ∈ P(n)}.

Definir la función

❞✐st❛♥❝✐❛ ✿✿ ❋❧♦❛t ✲❃ ❋❧♦❛t ✲❃ ❋❧♦❛t

tal que ✭❞✐st❛♥❝✐❛ ♠ ♥✮ es la distancia entre P(m) y P(n). Por ejemplo,

❞✐st❛♥❝✐❛ ✷ ✼ ❂❂ ✼✳✶✹✷✽✺✼❡✲✷

❞✐st❛♥❝✐❛ ✷ ✽ ❂❂ ✵✳✵

Solución:

❞✐st❛♥❝✐❛ ✿✿ ❋❧♦❛t ✲❃ ❋❧♦❛t ✲❃ ❋❧♦❛t

❞✐st❛♥❝✐❛ ♠ ♥ ❂

♠✐♥✐♠✉♠ ❬❛❜s ✭✐✴♠ ✲ ❥✴♥✮ ⑤ ✐ ❁✲ ❬✶✳✳♠✲✶❪✱ ❥ ❁✲ ❬✶✳✳♥✲✶❪❪

17.9. Expresables como suma de números consecutivos

El enunciado del problema 5802 de “Números y algo más...” es el siguiente:

¿Cuál es el menor número que puede expresarse como la suma de 9, 10 y 11números consecutivos?

A lo largo de los distintos apartados de este ejercicio se resolverá el problema.

Ejercicio 17.9.1. Definir la función

❝♦♥s❡❝✉t✐✈♦s❈♦♥❙✉♠❛ ✿✿ ■♥t ✲❃ ■♥t ✲❃ ❬❬■♥t❪❪

tal que ✭❝♦♥s❡❝✉t✐✈♦s❈♦♥❙✉♠❛ ① ♥✮ es la lista de listas de ♥ números consecutivos cuya suma

es ①. Por ejemplo,

❝♦♥s❡❝✉t✐✈♦s❈♦♥❙✉♠❛ ✶✷ ✸ ❂❂ ❬❬✸✱✹✱✺❪❪

❝♦♥s❡❝✉t✐✈♦s❈♦♥❙✉♠❛ ✶✵ ✸ ❂❂ ❬❪

Solución:2❤tt♣✿✴✴❣♦♦✳❣❧✴✶❑✸t✼

17.9. Expresables como suma de números consecutivos 347

❝♦♥s❡❝✉t✐✈♦s❈♦♥❙✉♠❛ ✿✿ ■♥t ✲❃ ■♥t ✲❃ ❬❬■♥t❪❪

❝♦♥s❡❝✉t✐✈♦s❈♦♥❙✉♠❛ ① ♥ ❂

❬❬②✳✳②✰♥✲✶❪ ⑤ ② ❁✲ ❬✶✳✳①❪✱ s✉♠ ❬②✳✳②✰♥✲✶❪ ❂❂ ①❪

Se puede hacer una definición sin búsqueda, ya que por la fórmula de la suma deprogresiones aritméticas, la expresión s✉♠ ❬②✳✳②✰♥✲✶❪ ❂❂ ① se reduce a

(y + (y + n − 1))n2

= x

De donde se puede despejar la y, ya que

2yn + n2 − n = 2x

y = 2x−n2+n2n

De la anterior anterior se obtiene la siguiente definición de ❝♦♥s❡❝✉t✐✈♦s❈♦♥❙✉♠❛ queno utiliza búsqueda.

❝♦♥s❡❝✉t✐✈♦s❈♦♥❙✉♠❛✬ ✿✿ ■♥t ✲❃ ■♥t ✲❃ ❬❬■♥t❪❪

❝♦♥s❡❝✉t✐✈♦s❈♦♥❙✉♠❛✬ ① ♥

⑤ ③ ❃❂ ✵ ✫✫ ♠♦❞ ③ ✭✷✯♥✮ ❂❂ ✵ ❂ ❬❬②✳✳②✰♥✲✶❪❪

⑤ ♦t❤❡r✇✐s❡ ❂ ❬❪

✇❤❡r❡ ③ ❂ ✷✯①✲♥❫✷✰♥

② ❂ ❞✐✈ ③ ✭✷✯♥✮

Ejercicio 17.9.2. Definir la función

❡s❙✉♠❛ ✿✿ ■♥t ✲❃ ■♥t ✲❃ ❇♦♦❧

tal que ✭❡s❙✉♠❛ ① ♥✮ se verifica si ① es la suma de ♥ números naturales consecutivos. Por

ejemplo,

❡s❙✉♠❛ ✶✷ ✸ ❂❂ ❚r✉❡

❡s❙✉♠❛ ✶✵ ✸ ❂❂ ❋❛❧s❡

Solución:

❡s❙✉♠❛ ✿✿ ■♥t ✲❃ ■♥t ✲❃ ❇♦♦❧

❡s❙✉♠❛ ① ♥ ❂ ❝♦♥s❡❝✉t✐✈♦s❈♦♥❙✉♠❛ ① ♥ ✴❂ ❬❪

También puede definirse directamente sin necesidad de ❝♦♥s❡❝✉t✐✈♦s❈♦♥❙✉♠❛ comose muestra a continuación.

348 Capítulo 17. Resolución de problemas matemáticos

❡s❙✉♠❛✬ ✿✿ ■♥t ✲❃ ■♥t ✲❃ ❇♦♦❧

❡s❙✉♠❛✬ ① ♥ ❂ ♦r ❬s✉♠ ❬②✳✳②✰♥✲✶❪ ❂❂ ① ⑤ ② ❁✲ ❬✶✳✳①❪❪

Ejercicio 17.9.3. Definir la función

♠❡♥♦r◗✉❡❊s❙✉♠❛ ✿✿ ❬■♥t❪ ✲❃ ■♥t

tal que ✭♠❡♥♦r◗✉❡❊s❙✉♠❛ ♥s✮ es el menor número que puede expresarse como suma de tantos

números consecutivos como indica ♥s. Por ejemplo,

♠❡♥♦r◗✉❡❊s❙✉♠❛ ❬✸✱✹❪ ❂❂ ✶✽

Lo que indica que 18 es el menor número se puede escribir como suma de 3 y de 4 números

consecutivos. En este caso, las sumas son 18 = 5+6+7 y 18 = 3+4+5+6.

Solución:

♠❡♥♦r◗✉❡❊s❙✉♠❛ ✿✿ ❬■♥t❪ ✲❃ ■♥t

♠❡♥♦r◗✉❡❊s❙✉♠❛ ♥s ❂

❤❡❛❞ ❬① ⑤ ① ❁✲ ❬✶✳✳❪✱ ❛♥❞ ❬❡s❙✉♠❛ ① ♥ ⑤ ♥ ❁✲ ♥s❪❪

Ejercicio 17.9.4. Usando la función menorQueEsSuma calcular el menor número que puede

expresarse como la suma de 9, 10 y 11 números consecutivos.

Solución: La solución es

❣❤❝✐❃ ♠❡♥♦r◗✉❡❊s❙✉♠❛ ❬✾✱✶✵✱✶✶❪

✹✾✺

17.10. Solución de una ecuación diofántica

Ejercicio 17.10.1. En este ejercicio vamos a comprobar que la ecuación diofántica

1x1

+1x2

+ · · ·+1xn

= 1

tiene solución; es decir, que para todo n ≥ 1 se puede construir una lista de números enteros de

longitud n tal que la suma de sus inversos es 1. Para ello, basta observar que si [x1, x2, . . . , xn]es una solución, entonces [2, 2x1, 2x2, . . . .., 2xn] también lo es. Definir la función s♦❧✉❝✐♦♥ tal

que ✭s♦❧✉❝✐♦♥ ♥✮ es la solución de longitud ♥ construida mediante el método anterior. Por

ejemplo,

17.10. Solución de una ecuación diofántica 349

s♦❧✉❝✐♦♥ ✶ ❂❂ ❬✶❪

s♦❧✉❝✐♦♥ ✷ ❂❂ ❬✷✱✷❪

s♦❧✉❝✐♦♥ ✸ ❂❂ ❬✷✱✹✱✹❪

s♦❧✉❝✐♦♥ ✹ ❂❂ ❬✷✱✹✱✽✱✽❪

s♦❧✉❝✐♦♥ ✺ ❂❂ ❬✷✱✹✱✽✱✶✻✱✶✻❪

Solución:

s♦❧✉❝✐♦♥ ✶ ❂ ❬✶❪

s♦❧✉❝✐♦♥ ♥ ❂ ✷ ✿ ❬✷✯① ⑤ ① ❁✲ s♦❧✉❝✐♦♥ ✭♥✲✶✮❪

Ejercicio 17.10.2. Definir la función ❡s❙♦❧✉❝✐♦♥ tal que ✭❡s❙♦❧✉❝✐♦♥ ①s✮ se verifica si la

suma de los inversos de ①s es 1. Por ejemplo,

❡s❙♦❧✉❝✐♦♥ ❬✹✱✷✱✹❪ ❂❂ ❚r✉❡

❡s❙♦❧✉❝✐♦♥ ❬✷✱✸✱✹❪ ❂❂ ❋❛❧s❡

❡s❙♦❧✉❝✐♦♥ ✭s♦❧✉❝✐♦♥ ✺✮ ❂❂ ❚r✉❡

Solución:

❡s❙♦❧✉❝✐♦♥ ①s ❂ s✉♠ ❬✶✴① ⑤ ① ❁✲ ①s❪ ❂❂ ✶

350 Capítulo 17. Resolución de problemas matemáticos

Capítulo 18

El 2011 y los números primos

Cada comienzo de año se suelen buscar propiedades numéricas del número del año.En el 2011 se han buscado propiedades que relacionan el 2011 y los números primos. Eneste ejercicio vamos a realizar la búsqueda de dichas propiedades con Haskell.

Nota. Se usará la librería de ▲✐st❛s

✐♠♣♦rt ❉❛t❛✳▲✐st ✭s♦rt✮

18.1. La criba de Eratótenes

La criba de Eratótenes es un método para calcular números primos. Se comienzaescribiendo todos los números desde 2 hasta (supongamos) 100. El primer número (el2) es primo. Ahora eliminamos todos los múltiplos de 2. El primero de los númerosrestantes (el 3) también es primo. Ahora eliminamos todos los múltiplos de 3. El primerode los números restantes (el 5) también es primo . . . y así sucesivamente. Cuando noquedan números, se han encontrado todos los números primos en el rango fijado.

Ejercicio 18.1.1. Definir, por comprensión, la función

❡❧✐♠✐♥❛ ✿✿ ■♥t ✲❃ ❬■♥t❪ ✲❃ ❬■♥t❪

tal que ✭❡❧✐♠✐♥❛ ♥ ①s✮ es la lista obtenida eliminando en la lista ①s los múltiplos de ♥. Por

ejemplo,

❡❧✐♠✐♥❛ ✸ ❬✷✱✸✱✽✱✾✱✺✱✻✱✼❪ ❂❂ ❬✷✱✽✱✺✱✼❪

Solución:

❡❧✐♠✐♥❛ ✿✿ ■♥t ✲❃ ❬■♥t❪ ✲❃ ❬■♥t❪

❡❧✐♠✐♥❛ ♥ ①s ❂ ❬ ① ⑤ ① ❁✲ ①s✱ ① ❵r❡♠❵ ♥ ✴❂ ✵ ❪

351

352 Capítulo 18. El 2011 y los números primos

Ejercicio 18.1.2. Definir, por recursión, la función

❡❧✐♠✐♥❛❘ ✿✿ ■♥t ✲❃ ❬■♥t❪ ✲❃ ❬■♥t❪

tal que ✭❡❧✐♠✐♥❛❘ ♥ ①s✮ es la lista obtenida eliminando en la lista ①s los múltiplos de ♥. Por

ejemplo,

❡❧✐♠✐♥❛❘ ✸ ❬✷✱✸✱✽✱✾✱✺✱✻✱✼❪ ❂❂ ❬✷✱✽✱✺✱✼❪

Solución:

❡❧✐♠✐♥❛❘ ✿✿ ■♥t ✲❃ ❬■♥t❪ ✲❃ ❬■♥t❪

❡❧✐♠✐♥❛❘ ♥ ❬❪ ❂ ❬❪

❡❧✐♠✐♥❛❘ ♥ ✭①✿①s✮ ⑤ r❡♠ ① ♥ ❂❂ ✵ ❂ ❡❧✐♠✐♥❛❘ ♥ ①s

⑤ ♦t❤❡r✇✐s❡ ❂ ① ✿ ❡❧✐♠✐♥❛❘ ♥ ①s

Ejercicio 18.1.3. Definir, por plegado, la función

❡❧✐♠✐♥❛P ✿✿ ■♥t ✲❃ ❬■♥t❪ ✲❃ ❬■♥t❪

tal que ✭❡❧✐♠✐♥❛P ♥ ①s✮ es la lista obtenida eliminando en la lista ①s los múltiplos de ♥. Por

ejemplo,

❡❧✐♠✐♥❛P ✸ ❬✷✱✸✱✽✱✾✱✺✱✻✱✼❪ ❂❂ ❬✷✱✽✱✺✱✼❪

Solución:

❡❧✐♠✐♥❛P ✿✿ ■♥t ✲❃ ❬■♥t❪ ✲❃ ❬■♥t❪

❡❧✐♠✐♥❛P ♥ ❂ ❢♦❧❞r ❢ ❬❪

✇❤❡r❡ ❢ ① ② ⑤ r❡♠ ① ♥ ❂❂ ✵ ❂ ②

⑤ ♦t❤❡r✇✐s❡ ❂ ①✿②

Ejercicio 18.1.4. Definir la función

❝r✐❜❛ ✿✿ ❬■♥t❪ ✲❃ ❬■♥t❪

tal que ✭❝r✐❜❛ ①s✮ es la lista obtenida cribando la lista ①s con el método descrito anteriormente.

Por ejemplo,

❝r✐❜❛ ❬✷✳✳✷✵❪ ❂❂ ❬✷✱✸✱✺✱✼✱✶✶✱✶✸✱✶✼✱✶✾❪

t❛❦❡ ✶✵ ✭❝r✐❜❛ ❬✷✳✳❪✮ ❂❂ ❬✷✱✸✱✺✱✼✱✶✶✱✶✸✱✶✼✱✶✾✱✷✸✱✷✾❪

Solución:

❝r✐❜❛ ✿✿ ❬■♥t❪ ✲❃ ❬■♥t❪

❝r✐❜❛ ❬❪ ❂ ❬❪

❝r✐❜❛ ✭♥✿♥s✮ ❂ ♥ ✿ ❝r✐❜❛ ✭❡❧✐♠✐♥❛ ♥ ♥s✮

18.2. 2011 es primo 353

Ejercicio 18.1.5. Definir la función

♣r✐♠♦s ✿✿ ❬■♥t❪

cuyo valor es la lista de los números primos. Por ejemplo,

t❛❦❡ ✶✵ ♣r✐♠♦s ❂❂ ❬✷✱✸✱✺✱✼✱✶✶✱✶✸✱✶✼✱✶✾✱✷✸✱✷✾❪

Solución:

♣r✐♠♦s ✿✿ ❬■♥t❪

♣r✐♠♦s ❂ ❝r✐❜❛ ❬✷✳✳❪

Ejercicio 18.1.6. Definir la función

❡sPr✐♠♦ ✿✿ ■♥t ✲❃ ❇♦♦❧

tal que ✭❡sPr✐♠♦ ♥✮ se verifica si ♥ es primo. Por ejemplo,

❡sPr✐♠♦ ✼ ❂❂ ❚r✉❡

❡sPr✐♠♦ ✾ ❂❂ ❋❛❧s❡

Solución:

❡sPr✐♠♦ ✿✿ ■♥t ✲❃ ❇♦♦❧

❡sPr✐♠♦ ♥ ❂ ❤❡❛❞ ✭❞r♦♣❲❤✐❧❡ ✭❁♥✮ ♣r✐♠♦s✮ ❂❂ ♥

18.2. 2011 es primo

Ejercicio 18.2.1. Comprobar que 2011 es primo.

Solución: La comprobación es

❣❤❝✐❃ ❡sPr✐♠♦ ✷✵✶✶

❚r✉❡

18.3. Primera propiedad del 2011

Ejercicio 18.3.1. Definir la función

♣r❡❢✐❥♦s❈♦♥❙✉♠❛ ✿✿ ❬■♥t❪ ✲❃ ■♥t ✲❃ ❬❬■♥t❪❪

tal que ✭♣r❡❢✐❥♦s❈♦♥❙✉♠❛ ①s ♥✮ es la lista de los prefijos de ①s cuya suma es ♥. Por ejemplo,

354 Capítulo 18. El 2011 y los números primos

♣r❡❢✐❥♦s❈♦♥❙✉♠❛ ❬✶✳✳✶✵❪ ✸ ❂❂ ❬❬✶✱✷❪❪

♣r❡❢✐❥♦s❈♦♥❙✉♠❛ ❬✶✳✳✶✵❪ ✹ ❂❂ ❬❪

Solución:

♣r❡❢✐❥♦s❈♦♥❙✉♠❛ ✿✿ ❬■♥t❪ ✲❃ ■♥t ✲❃ ❬❬■♥t❪❪

♣r❡❢✐❥♦s❈♦♥❙✉♠❛ ❬❪ ✵ ❂ ❬❬❪❪

♣r❡❢✐❥♦s❈♦♥❙✉♠❛ ❬❪ ♥ ❂ ❬❪

♣r❡❢✐❥♦s❈♦♥❙✉♠❛ ✭①✿①s✮ ♥

⑤ ① ❁ ♥ ❂ ❬①✿②s ⑤ ②s ❁✲ ♣r❡❢✐❥♦s❈♦♥❙✉♠❛ ①s ✭♥✲①✮❪

⑤ ① ❂❂ ♥ ❂ ❬❬①❪❪

⑤ ① ❃ ♥ ❂ ❬❪

Ejercicio 18.3.2. Definir la función

❝♦♥s❡❝✉t✐✈♦s❈♦♥❙✉♠❛ ✿✿ ❬■♥t❪ ✲❃ ■♥t ✲❃ ❬❬■♥t❪❪

tal que ✭❝♦♥s❡❝✉t✐✈♦s❈♦♥❙✉♠❛ ①s ♥✮ es la lista de los elementos consecutivos de ①s cuya

suma es ♥. Por ejemplo,

❝♦♥s❡❝✉t✐✈♦s❈♦♥❙✉♠❛ ❬✶✳✳✶✵❪ ✾ ❂❂ ❬❬✷✱✸✱✹❪✱❬✹✱✺❪✱❬✾❪❪

Solución:

❝♦♥s❡❝✉t✐✈♦s❈♦♥❙✉♠❛ ✿✿ ❬■♥t❪ ✲❃ ■♥t ✲❃ ❬❬■♥t❪❪

❝♦♥s❡❝✉t✐✈♦s❈♦♥❙✉♠❛ ❬❪ ✵ ❂ ❬❬❪❪

❝♦♥s❡❝✉t✐✈♦s❈♦♥❙✉♠❛ ❬❪ ♥ ❂ ❬❪

❝♦♥s❡❝✉t✐✈♦s❈♦♥❙✉♠❛ ✭①✿①s✮ ♥ ❂

✭♣r❡❢✐❥♦s❈♦♥❙✉♠❛ ✭①✿①s✮ ♥✮ ✰✰ ✭❝♦♥s❡❝✉t✐✈♦s❈♦♥❙✉♠❛ ①s ♥✮

Ejercicio 18.3.3. Definir la función

♣r✐♠♦s❈♦♥s❡❝✉t✐✈♦s❈♦♥❙✉♠❛ ✿✿ ■♥t ✲❃ ❬❬■♥t❪❪

tal que ✭♣r✐♠♦s❈♦♥s❡❝✉t✐✈♦s❈♦♥❙✉♠❛ ♥✮ es la lista de los números primos consecutivos cuya

suma es ♥. Por ejemplo,

❣❤❝✐❃ ♣r✐♠♦s❈♦♥s❡❝✉t✐✈♦s❈♦♥❙✉♠❛ ✹✶

❬❬✷✱✸✱✺✱✼✱✶✶✱✶✸❪✱❬✶✶✱✶✸✱✶✼❪✱❬✹✶❪❪

Solución:

♣r✐♠♦s❈♦♥s❡❝✉t✐✈♦s❈♦♥❙✉♠❛ ✿✿ ■♥t ✲❃ ❬❬■♥t❪❪

♣r✐♠♦s❈♦♥s❡❝✉t✐✈♦s❈♦♥❙✉♠❛ ♥ ❂

❝♦♥s❡❝✉t✐✈♦s❈♦♥❙✉♠❛ ✭t❛❦❡❲❤✐❧❡ ✭❁❂♥✮ ♣r✐♠♦s✮ ♥

18.4. Segunda propiedad del 2011 355

Ejercicio 18.3.4. Calcular las descomposiciones de 2011 como sumas de primos consecutivos.

Solución: El cálculo es

❣❤❝✐❃ ♣r✐♠♦s❈♦♥s❡❝✉t✐✈♦s❈♦♥❙✉♠❛ ✷✵✶✶

❬❬✶✺✼✱✶✻✸✱✶✻✼✱✶✼✸✱✶✼✾✱✶✽✶✱✶✾✶✱✶✾✸✱✶✾✼✱✶✾✾✱✷✶✶❪✱❬✻✻✶✱✻✼✸✱✻✼✼❪✱❬✷✵✶✶❪❪

Ejercicio 18.3.5. Definir la función

♣r♦♣✐❡❞❛❞✶ ✿✿ ■♥t ✲❃ ❇♦♦❧

tal que ✭♣r♦♣✐❡❞❛❞✶ ♥✮ se verifica si ♥ sólo se puede expresar como sumas de 1, 3 y 11 primos

consecutivos. Por ejemplo,

♣r♦♣✐❡❞❛❞✶ ✷✵✶✶ ❂❂ ❚r✉❡

♣r♦♣✐❡❞❛❞✶ ✷✵✶✵ ❂❂ ❋❛❧s❡

Solución:

♣r♦♣✐❡❞❛❞✶ ✿✿ ■♥t ✲❃ ❇♦♦❧

♣r♦♣✐❡❞❛❞✶ ♥ ❂

s♦rt ✭♠❛♣ ❧❡♥❣t❤ ✭♣r✐♠♦s❈♦♥s❡❝✉t✐✈♦s❈♦♥❙✉♠❛ ♥✮✮ ❂❂ ❬✶✱✸✱✶✶❪

Ejercicio 18.3.6. Calcular los años hasta el 3000 que cumplen la propiedad1.

Solución: El cálculo es

❣❤❝✐❃ ❬♥ ⑤ ♥ ❁✲ ❬✶✳✳✸✵✵✵❪✱ ♣r♦♣✐❡❞❛❞✶ ♥❪

❬✽✽✸✱✷✵✶✶❪

18.4. Segunda propiedad del 2011

Ejercicio 18.4.1. Definir la función

s✉♠❛❈✐❢r❛s ✿✿ ■♥t ✲❃ ■♥t

tal que ✭s✉♠❛❈✐❢r❛s ①✮ es la suma de las cifras del número ①. Por ejemplo,

s✉♠❛❈✐❢r❛s ✷✺✹ ❂❂ ✶✶

Solución:

s✉♠❛❈✐❢r❛s ✿✿ ■♥t ✲❃ ■♥t

s✉♠❛❈✐❢r❛s ① ❂ s✉♠ ❬r❡❛❞ ❬②❪ ⑤ ② ❁✲ s❤♦✇ ①❪

Ejercicio 18.4.2. Definir, por comprensión, la función

356 Capítulo 18. El 2011 y los números primos

s✉♠❛❈✐❢r❛s▲✐st❛ ✿✿ ❬■♥t❪ ✲❃ ■♥t

tal que ✭s✉♠❛❈✐❢r❛s▲✐st❛ ①s✮ es la suma de las cifras de la lista de números ①s. Por ejemplo,

s✉♠❛❈✐❢r❛s▲✐st❛ ❬✷✺✹✱ ✻✶❪ ❂❂ ✶✽

Solución:

s✉♠❛❈✐❢r❛s▲✐st❛ ✿✿ ❬■♥t❪ ✲❃ ■♥t

s✉♠❛❈✐❢r❛s▲✐st❛ ①s ❂ s✉♠ ❬s✉♠❛❈✐❢r❛s ② ⑤ ② ❁✲ ①s❪

Ejercicio 18.4.3. Definir, por recursión, la función

s✉♠❛❈✐❢r❛s▲✐st❛❘ ✿✿ ❬■♥t❪ ✲❃ ■♥t

tal que ✭s✉♠❛❈✐❢r❛s▲✐st❛❘ ①s✮ es la suma de las cifras de la lista de números ①s. Por ejemplo,

s✉♠❛❈✐❢r❛s▲✐st❛❘ ❬✷✺✹✱ ✻✶❪ ❂❂ ✶✽

Solución:

s✉♠❛❈✐❢r❛s▲✐st❛❘ ✿✿ ❬■♥t❪ ✲❃ ■♥t

s✉♠❛❈✐❢r❛s▲✐st❛❘ ❬❪ ❂ ✵

s✉♠❛❈✐❢r❛s▲✐st❛❘ ✭①✿①s✮ ❂ s✉♠❛❈✐❢r❛s ① ✰ s✉♠❛❈✐❢r❛s▲✐st❛❘ ①s

Ejercicio 18.4.4. Definir, por plegado, la función

s✉♠❛❈✐❢r❛s▲✐st❛P ✿✿ ❬■♥t❪ ✲❃ ■♥t

tal que ✭s✉♠❛❈✐❢r❛s▲✐st❛P ①s✮ es la suma de las cifras de la lista de números ①s. Por ejemplo,

s✉♠❛❈✐❢r❛s▲✐st❛P ❬✷✺✹✱ ✻✶❪ ❂❂ ✶✽

Solución:

s✉♠❛❈✐❢r❛s▲✐st❛P ✿✿ ❬■♥t❪ ✲❃ ■♥t

s✉♠❛❈✐❢r❛s▲✐st❛P ❂ ❢♦❧❞r ❢ ✵

✇❤❡r❡ ❢ ① ② ❂ s✉♠❛❈✐❢r❛s ① ✰ ②

Ejercicio 18.4.5. Definir la función

♣r♦♣✐❡❞❛❞✷ ✿✿ ■♥t ✲❃ ❇♦♦❧

tal que ✭♣r♦♣✐❡❞❛❞✷ ♥✮ se verifica si ♥ puede expresarse como suma de 11 primos consecutivos

y la suma de las cifras de los 11 sumandos es un número primo. Por ejemplo,

♣r♦♣✐❡❞❛❞✷ ✷✵✶✶ ❂❂ ❚r✉❡

♣r♦♣✐❡❞❛❞✷ ✷✵✵✵ ❂❂ ❋❛❧s❡

18.5. Tercera propiedad del 2011 357

Solución:

♣r♦♣✐❡❞❛❞✷ ✿✿ ■♥t ✲❃ ❇♦♦❧

♣r♦♣✐❡❞❛❞✷ ♥ ❂ ❬①s ⑤ ①s ❁✲ ♣r✐♠♦s❈♦♥s❡❝✉t✐✈♦s❈♦♥❙✉♠❛ ♥✱

❧❡♥❣t❤ ①s ❂❂ ✶✶✱

❡sPr✐♠♦ ✭s✉♠❛❈✐❢r❛s▲✐st❛ ①s✮❪

✴❂ ❬❪

Ejercicio 18.4.6. Calcular el primer año que cumple la ♣r♦♣✐❡❞❛❞✶ y la ♣r♦♣✐❡❞❛❞✷.

Solución: El cálculo es

❣❤❝✐❃ ❤❡❛❞ ❬♥ ⑤ ♥ ❁✲ ❬✶✳✳❪✱ ♣r♦♣✐❡❞❛❞✶ ♥✱ ♣r♦♣✐❡❞❛❞✷ ♥❪

✷✵✶✶

18.5. Tercera propiedad del 2011

Ejercicio 18.5.1. Definir la función

♣r♦♣✐❡❞❛❞✸ ✿✿ ■♥t ✲❃ ❇♦♦❧

tal que ✭♣r♦♣✐❡❞❛❞✸ ♥✮ se verifica si ♥ puede expresarse como suma de tantos números primos

consecutivos como indican sus dos últimas cifras. Por ejemplo,

♣r♦♣✐❡❞❛❞✸ ✷✵✶✶ ❂❂ ❚r✉❡

♣r♦♣✐❡❞❛❞✸ ✷✵✵✵ ❂❂ ❋❛❧s❡

Solución:

♣r♦♣✐❡❞❛❞✸ ✿✿ ■♥t ✲❃ ❇♦♦❧

♣r♦♣✐❡❞❛❞✸ ♥ ❂ ❬①s ⑤ ①s ❁✲ ♣r✐♠♦s❈♦♥s❡❝✉t✐✈♦s❈♦♥❙✉♠❛ ♥✱

❧❡♥❣t❤ ①s ❂❂ ♠♦❞ ♥ ✶✵✵❪

✴❂ ❬❪

Ejercicio 18.5.2. Calcular el primer año que cumple la ♣r♦♣✐❡❞❛❞✶ y la ♣r♦♣✐❡❞❛❞✸.

Solución: El cálculo es

❣❤❝✐❃ ❤❡❛❞ ❬♥ ⑤ ♥ ❁✲ ❬✶✳✳❪✱ ♣r♦♣✐❡❞❛❞✶ ♥✱ ♣r♦♣✐❡❞❛❞✸ ♥❪

✷✵✶✶

Nota. Hemos comprobado que 2011 es el menor número que cumple las propiedades 1y 2 y también es el menor número que cumple las propiedades 1 y 3.

358 Capítulo 18. El 2011 y los números primos

Capítulo 19

Combinatoria

El objetivo de este capítulo es estudiar la generación y el número de las principalesoperaciones de la combinatoria.

Contenido19.1 Reconocimiento y generación de subconjuntos . . . . . . . . . . . . . . 359

19.2 Permutaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361

19.3 Combinaciones sin repetición . . . . . . . . . . . . . . . . . . . . . . . . 364

19.4 Combinaciones con repetición . . . . . . . . . . . . . . . . . . . . . . . 367

19.5 Variaciones sin repetición . . . . . . . . . . . . . . . . . . . . . . . . . . 369

19.6 Variaciones con repetición . . . . . . . . . . . . . . . . . . . . . . . . . . 370

19.7 El triángulo de Pascal . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372

19.1. Reconocimiento y generación de subconjuntos

Ejercicio 19.1.1. Definir, por recursión, la función

s✉❜❝♦♥❥✉♥t♦ ✿✿ ❊q ❛ ❂❃ ❬❛❪ ✲❃ ❬❛❪ ✲❃ ❇♦♦❧

tal que ✭s✉❜❝♦♥❥✉♥t♦ ①s ②s✮ se verifica si ①s es un subconjunto de ②s. Por ejemplo,

s✉❜❝♦♥❥✉♥t♦ ❬✶✱✸✱✷✱✸❪ ❬✶✱✷✱✸❪ ❂❂ ❚r✉❡

s✉❜❝♦♥❥✉♥t♦ ❬✶✱✸✱✹✱✸❪ ❬✶✱✷✱✸❪ ❂❂ ❋❛❧s❡

Solución:

359

360 Capítulo 19. Combinatoria

s✉❜❝♦♥❥✉♥t♦ ✿✿ ❊q ❛ ❂❃ ❬❛❪ ✲❃ ❬❛❪ ✲❃ ❇♦♦❧

s✉❜❝♦♥❥✉♥t♦ ❬❪ ❴ ❂ ❚r✉❡

s✉❜❝♦♥❥✉♥t♦ ✭①✿①s✮ ②s ❂ ❡❧❡♠ ① ②s ✫✫ s✉❜❝♦♥❥✉♥t♦ ①s ②s

Ejercicio 19.1.2. Definir, mediante ❛❧❧, la función

s✉❜❝♦♥❥✉♥t♦✬ ✿✿ ❊q ❛ ❂❃ ❬❛❪ ✲❃ ❬❛❪ ✲❃ ❇♦♦❧

tal que ✭s✉❜❝♦♥❥✉♥t♦✬ ①s ②s✮ se verifica si ①s es un subconjunto de ②s. Por ejemplo,

s✉❜❝♦♥❥✉♥t♦✬ ❬✶✱✸✱✷✱✸❪ ❬✶✱✷✱✸❪ ❂❂ ❚r✉❡

s✉❜❝♦♥❥✉♥t♦✬ ❬✶✱✸✱✹✱✸❪ ❬✶✱✷✱✸❪ ❂❂ ❋❛❧s❡

Solución:

s✉❜❝♦♥❥✉♥t♦✬ ✿✿ ❊q ❛ ❂❃ ❬❛❪ ✲❃ ❬❛❪ ✲❃ ❇♦♦❧

s✉❜❝♦♥❥✉♥t♦✬ ①s ②s ❂ ❛❧❧ ✭❵❡❧❡♠❵ ②s✮ ①s

Ejercicio 19.1.3. Comprobar con QuickCheck que las funciones s✉❜❝♦♥❥✉♥t♦ y s✉❜❝♦♥❥✉♥t♦✬

son equivalentes.

Solución: La propiedad es

♣r♦♣❴❡q✉✐✈❛❧❡♥❝✐❛ ✿✿ ❬■♥t❪ ✲❃ ❬■♥t❪ ✲❃ ❇♦♦❧

♣r♦♣❴❡q✉✐✈❛❧❡♥❝✐❛ ①s ②s ❂

s✉❜❝♦♥❥✉♥t♦ ①s ②s ❂❂ s✉❜❝♦♥❥✉♥t♦✬ ①s ②s

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴❡q✉✐✈❛❧❡♥❝✐❛

❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

Ejercicio 19.1.4. Definir la función

✐❣✉❛❧❈♦♥❥✉♥t♦ ✿✿ ❊q ❛ ❂❃ ❬❛❪ ✲❃ ❬❛❪ ✲❃ ❇♦♦❧

tal que ✭✐❣✉❛❧❈♦♥❥✉♥t♦ ①s ②s✮ se verifica si las listas ①s e ②s, vistas como conjuntos, son

iguales. Por ejemplo,

✐❣✉❛❧❈♦♥❥✉♥t♦ ❬✶✳✳✶✵❪ ❬✶✵✱✾✳✳✶❪ ❂❂ ❚r✉❡

✐❣✉❛❧❈♦♥❥✉♥t♦ ❬✶✳✳✶✵❪ ❬✶✶✱✶✵✳✳✶❪ ❂❂ ❋❛❧s❡

Solución:

19.2. Permutaciones 361

✐❣✉❛❧❈♦♥❥✉♥t♦ ✿✿ ❊q ❛ ❂❃ ❬❛❪ ✲❃ ❬❛❪ ✲❃ ❇♦♦❧

✐❣✉❛❧❈♦♥❥✉♥t♦ ①s ②s ❂ s✉❜❝♦♥❥✉♥t♦ ①s ②s ✫✫ s✉❜❝♦♥❥✉♥t♦ ②s ①s

Ejercicio 19.1.5. Definir la función

s✉❜❝♦♥❥✉♥t♦s ✿✿ ❬❛❪ ✲❃ ❬❬❛❪❪

tal que ✭s✉❜❝♦♥❥✉♥t♦s ①s✮ es la lista de las subconjuntos de la lista ①s. Por ejemplo,

❣❤❝✐❃ s✉❜❝♦♥❥✉♥t♦s ❬✷✱✸✱✹❪

❬❬✷✱✸✱✹❪✱❬✷✱✸❪✱❬✷✱✹❪✱❬✷❪✱❬✸✱✹❪✱❬✸❪✱❬✹❪✱❬❪❪

❣❤❝✐❃ s✉❜❝♦♥❥✉♥t♦s ❬✶✱✷✱✸✱✹❪

❬❬✶✱✷✱✸✱✹❪✱❬✶✱✷✱✸❪✱❬✶✱✷✱✹❪✱❬✶✱✷❪✱❬✶✱✸✱✹❪✱❬✶✱✸❪✱❬✶✱✹❪✱❬✶❪✱

❬✷✱✸✱✹❪✱ ❬✷✱✸❪✱ ❬✷✱✹❪✱ ❬✷❪✱ ❬✸✱✹❪✱ ❬✸❪✱ ❬✹❪✱ ❬❪❪

Solución:

s✉❜❝♦♥❥✉♥t♦s ✿✿ ❬❛❪ ✲❃ ❬❬❛❪❪

s✉❜❝♦♥❥✉♥t♦s ❬❪ ❂ ❬❬❪❪

s✉❜❝♦♥❥✉♥t♦s ✭①✿①s✮ ❂ ❬①✿②s ⑤ ②s ❁✲ s✉❜❪ ✰✰ s✉❜

✇❤❡r❡ s✉❜ ❂ s✉❜❝♦♥❥✉♥t♦s ①s

Cambiando la comprensión por ♠❛♣ se obtiene

s✉❜❝♦♥❥✉♥t♦s✬ ✿✿ ❬❛❪ ✲❃ ❬❬❛❪❪

s✉❜❝♦♥❥✉♥t♦s✬ ❬❪ ❂ ❬❬❪❪

s✉❜❝♦♥❥✉♥t♦s✬ ✭①✿①s✮ ❂ s✉❜ ✰✰ ♠❛♣ ✭①✿✮ s✉❜

✇❤❡r❡ s✉❜ ❂ s✉❜❝♦♥❥✉♥t♦s✬ ①s

19.2. Permutaciones

Ejercicio 19.2.1. Definir la función

✐♥t❡r❝❛❧❛ ✿✿ ❛ ✲❃ ❬❛❪ ✲❃ ❬❬❛❪❪

tal que ✭✐♥t❡r❝❛❧❛ ① ②s✮ es la lista de las listas obtenidas intercalando ① entre los elementos

de ②s. Por ejemplo,

✐♥t❡r❝❛❧❛ ✶ ❬✷✱✸❪ ❂❂ ❬❬✶✱✷✱✸❪✱❬✷✱✶✱✸❪✱❬✷✱✸✱✶❪❪

Solución:

362 Capítulo 19. Combinatoria

✐♥t❡r❝❛❧❛ ✿✿ ❛ ✲❃ ❬❛❪ ✲❃ ❬❬❛❪❪

✐♥t❡r❝❛❧❛ ① ❬❪ ❂ ❬❬①❪❪

✐♥t❡r❝❛❧❛ ① ✭②✿②s✮ ❂ ✭①✿②✿②s✮ ✿ ❬②✿③s ⑤ ③s ❁✲ ✐♥t❡r❝❛❧❛ ① ②s❪

Ejercicio 19.2.2. Definir la función

♣❡r♠✉t❛❝✐♦♥❡s ✿✿ ❬❛❪ ✲❃ ❬❬❛❪❪

tal que ✭♣❡r♠✉t❛❝✐♦♥❡s ①s✮ es la lista de las permutaciones de la lista ①s. Por ejemplo,

♣❡r♠✉t❛❝✐♦♥❡s ✧❜❝✧ ❂❂ ❬✧❜❝✧✱✧❝❜✧❪

♣❡r♠✉t❛❝✐♦♥❡s ✧❛❜❝✧ ❂❂ ❬✧❛❜❝✧✱✧❜❛❝✧✱✧❜❝❛✧✱✧❛❝❜✧✱✧❝❛❜✧✱✧❝❜❛✧❪

Solución:

♣❡r♠✉t❛❝✐♦♥❡s ✿✿ ❬❛❪ ✲❃ ❬❬❛❪❪

♣❡r♠✉t❛❝✐♦♥❡s ❬❪ ❂ ❬❬❪❪

♣❡r♠✉t❛❝✐♦♥❡s ✭①✿①s✮ ❂

❝♦♥❝❛t ❬✐♥t❡r❝❛❧❛ ① ②s ⑤ ②s ❁✲ ♣❡r♠✉t❛❝✐♦♥❡s ①s❪

Ejercicio 19.2.3. Definir la función

♣❡r♠✉t❛❝✐♦♥❡s◆ ✿✿ ■♥t ✲❃ ❬❬■♥t❪❪

tal que ✭♣❡r♠✉t❛❝✐♦♥❡s◆ ♥✮ es la lista de las permutaciones de los ♥ primeros números. Por

ejemplo,

❣❤❝✐❃ ♣❡r♠✉t❛❝✐♦♥❡s◆ ✸

❬❬✶✱✷✱✸❪✱❬✶✱✸✱✷❪✱❬✷✱✶✱✸❪✱❬✷✱✸✱✶❪✱❬✸✱✶✱✷❪✱❬✸✱✷✱✶❪❪

Solución:

♣❡r♠✉t❛❝✐♦♥❡s◆ ✿✿ ■♥t ✲❃ ❬❬■♥t❪❪

♣❡r♠✉t❛❝✐♦♥❡s◆ ♥ ❂ ♣❡r♠✉t❛❝✐♦♥❡s ❬✶✳✳♥❪

Ejercicio 19.2.4. Definir, usando permutacionesN, la función

♥✉♠❡r♦P❡r♠✉t❛❝✐♦♥❡s◆ ✿✿ ■♥t ✲❃ ■♥t

tal que ✭♥✉♠❡r♦P❡r♠✉t❛❝✐♦♥❡s◆ ♥✮ es el número de permutaciones de un conjunto con ♥ ele-

mentos. Por ejemplo,

♥✉♠❡r♦P❡r♠✉t❛❝✐♦♥❡s◆ ✸ ❂❂ ✻

♥✉♠❡r♦P❡r♠✉t❛❝✐♦♥❡s◆ ✹ ❂❂ ✷✹

19.2. Permutaciones 363

Solución:

♥✉♠❡r♦P❡r♠✉t❛❝✐♦♥❡s◆ ✿✿ ■♥t ✲❃ ■♥t

♥✉♠❡r♦P❡r♠✉t❛❝✐♦♥❡s◆ ❂ ❧❡♥❣t❤ ✳ ♣❡r♠✉t❛❝✐♦♥❡s◆

Ejercicio 19.2.5. Definir la función

❢❛❝t ✿✿ ■♥t ✲❃ ■♥t

tal que ✭❢❛❝t ♥✮ es el factorial de ♥. Por ejemplo,

❢❛❝t ✸ ❂❂ ✻

Solución:

❢❛❝t ✿✿ ■♥t ✲❃ ■♥t

❢❛❝t ♥ ❂ ♣r♦❞✉❝t ❬✶✳✳♥❪

Ejercicio 19.2.6. Definir, usando ❢❛❝t, la función

♥✉♠❡r♦P❡r♠✉t❛❝✐♦♥❡s◆✬ ✿✿ ■♥t ✲❃ ■♥t

tal que ✭♥✉♠❡r♦P❡r♠✉t❛❝✐♦♥❡s◆✬ ♥✮ es el número de permutaciones de un conjunto con ♥

elementos. Por ejemplo,

♥✉♠❡r♦P❡r♠✉t❛❝✐♦♥❡s◆✬ ✸ ❂❂ ✻

♥✉♠❡r♦P❡r♠✉t❛❝✐♦♥❡s◆✬ ✹ ❂❂ ✷✹

Solución:

♥✉♠❡r♦P❡r♠✉t❛❝✐♦♥❡s◆✬ ✿✿ ■♥t ✲❃ ■♥t

♥✉♠❡r♦P❡r♠✉t❛❝✐♦♥❡s◆✬ ❂ ❢❛❝t

Ejercicio 19.2.7. Definir la función

♣r♦♣❴♥✉♠❡r♦P❡r♠✉t❛❝✐♦♥❡s◆ ✿✿ ■♥t ✲❃ ❇♦♦❧

tal que ✭♣r♦♣❴♥✉♠❡r♦P❡r♠✉t❛❝✐♦♥❡s◆ ♥✮ se verifica si las funciones ♥✉♠❡r♦P❡r♠✉t❛❝✐♦♥❡s◆

y ♥✉♠❡r♦P❡r♠✉t❛❝✐♦♥❡s◆✬ son equivalentes para los ♥ primeros números. Por ejemplo,

♣r♦♣❴♥✉♠❡r♦P❡r♠✉t❛❝✐♦♥❡s◆ ✺ ❂❂ ❚r✉❡

Solución:

♣r♦♣❴♥✉♠❡r♦P❡r♠✉t❛❝✐♦♥❡s◆ ✿✿ ■♥t ✲❃ ❇♦♦❧

♣r♦♣❴♥✉♠❡r♦P❡r♠✉t❛❝✐♦♥❡s◆ ♥ ❂

❛♥❞ ❬♥✉♠❡r♦P❡r♠✉t❛❝✐♦♥❡s◆ ① ❂❂ ♥✉♠❡r♦P❡r♠✉t❛❝✐♦♥❡s◆✬ ① ⑤ ① ❁✲ ❬✶✳✳♥❪❪

364 Capítulo 19. Combinatoria

19.3. Combinaciones sin repetición

Ejercicio 19.3.1. Definir, por recursión, la función

❝♦♠❜✐♥❛❝✐♦♥❡s ✿✿ ■♥t ✲❃ ❬❛❪ ✲❃ ❬❬❛❪❪

tal que ✭❝♦♠❜✐♥❛❝✐♦♥❡s ❦ ①s✮ es la lista de las combinaciones de orden ❦ de los elementos de

la lista ①s. Por ejemplo,

❣❤❝✐❃ ❝♦♠❜✐♥❛❝✐♦♥❡s ✷ ✧❜❝❞❡✧

❬✧❜❝✧✱✧❜❞✧✱✧❜❡✧✱✧❝❞✧✱✧❝❡✧✱✧❞❡✧❪

❣❤❝✐❃ ❝♦♠❜✐♥❛❝✐♦♥❡s ✸ ✧❜❝❞❡✧

❬✧❜❝❞✧✱✧❜❝❡✧✱✧❜❞❡✧✱✧❝❞❡✧❪

❣❤❝✐❃ ❝♦♠❜✐♥❛❝✐♦♥❡s ✸ ✧❛❜❝❞❡✧

❬✧❛❜❝✧✱✧❛❜❞✧✱✧❛❜❡✧✱✧❛❝❞✧✱✧❛❝❡✧✱✧❛❞❡✧✱✧❜❝❞✧✱✧❜❝❡✧✱✧❜❞❡✧✱✧❝❞❡✧❪

Solución:

❝♦♠❜✐♥❛❝✐♦♥❡s ✿✿ ■♥t ✲❃ ❬❛❪ ✲❃ ❬❬❛❪❪

❝♦♠❜✐♥❛❝✐♦♥❡s ✵ ❴ ❂ ❬❬❪❪

❝♦♠❜✐♥❛❝✐♦♥❡s ❴ ❬❪ ❂ ❬❪

❝♦♠❜✐♥❛❝✐♦♥❡s ❦ ✭①✿①s✮ ❂

❬①✿②s ⑤ ②s ❁✲ ❝♦♠❜✐♥❛❝✐♦♥❡s ✭❦✲✶✮ ①s❪ ✰✰ ❝♦♠❜✐♥❛❝✐♦♥❡s ❦ ①s

Ejercicio 19.3.2. Definir, usando s✉❜❝♦♥❥✉♥t♦s, la función

❝♦♠❜✐♥❛❝✐♦♥❡s✬ ✿✿ ■♥t ✲❃ ❬❛❪ ✲❃ ❬❬❛❪❪

tal que ❝♦♠❜✐♥❛❝✐♦♥❡s✬ sea equivalente a ❝♦♠❜✐♥❛❝✐♦♥❡s.

Solución:

❝♦♠❜✐♥❛❝✐♦♥❡s✬ ✿✿ ■♥t ✲❃ ❬❛❪ ✲❃ ❬❬❛❪❪

❝♦♠❜✐♥❛❝✐♦♥❡s✬ ♥ ①s ❂

❬②s ⑤ ②s ❁✲ s✉❜❝♦♥❥✉♥t♦s ①s✱ ❧❡♥❣t❤ ②s ❂❂ ♥❪

Ejercicio 19.3.3. Comparar la eficiencia de ❝♦♠❜✐♥❛❝✐♦♥❡s y ❝♦♠❜✐♥❛❝✐♦♥❡s✬ y decidir cuál

es la más eficiente.

Solución: La segunda definición es más eficiente como se comprueba en la siguientesesión

❣❤❝✐❃ ✿s❡t ✰s

❣❤❝✐❃ ❧❡♥❣t❤ ✭❝♦♠❜✐♥❛❝✐♦♥❡s❴✶ ✷ ❬✶✳✳✶✺❪✮

✶✵✺

19.3. Combinaciones sin repetición 365

✭✵✳✶✾ s❡❝s✱ ✻✸✼✸✽✹✽ ❜②t❡s✮

❣❤❝✐❃ ❧❡♥❣t❤ ✭❝♦♠❜✐♥❛❝✐♦♥❡s❴✷ ✷ ❬✶✳✳✶✺❪✮

✶✵✺

✭✵✳✵✶ s❡❝s✱ ✺✷✺✸✻✵ ❜②t❡s✮

❣❤❝✐❃ ❧❡♥❣t❤ ✭❝♦♠❜✐♥❛❝✐♦♥❡s❴✸ ✷ ❬✶✳✳✶✺❪✮

✶✵✺

✭✵✳✵✷ s❡❝s✱ ✺✷✽✽✵✽ ❜②t❡s✮

Ejercicio 19.3.4. Definir la función

❝♦♠❜✐♥❛❝✐♦♥❡s◆ ✿✿ ■♥t ✲❃ ■♥t ✲❃ ❬❬■♥t❪❪

tal que ✭❝♦♠❜✐♥❛❝✐♦♥❡s◆ ♥ ❦✮ es la lista de las combinaciones de orden ❦ de los ♥ primeros

números. Por ejemplo,

❣❤❝✐❃ ❝♦♠❜✐♥❛❝✐♦♥❡s◆ ✹ ✷

❬❬✶✱✷❪✱❬✶✱✸❪✱❬✶✱✹❪✱❬✷✱✸❪✱❬✷✱✹❪✱❬✸✱✹❪❪

❣❤❝✐❃ ❝♦♠❜✐♥❛❝✐♦♥❡s◆ ✹ ✸

❬❬✶✱✷✱✸❪✱❬✶✱✷✱✹❪✱❬✶✱✸✱✹❪✱❬✷✱✸✱✹❪❪

Solución:

❝♦♠❜✐♥❛❝✐♦♥❡s◆ ✿✿ ■♥t ✲❃ ■♥t ✲❃ ❬❬■♥t❪❪

❝♦♠❜✐♥❛❝✐♦♥❡s◆ ♥ ❦ ❂ ❝♦♠❜✐♥❛❝✐♦♥❡s ❦ ❬✶✳✳♥❪

Ejercicio 19.3.5. Definir, usando ❝♦♠❜✐♥❛❝✐♦♥❡s◆, la función

♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s ✿✿ ■♥t ✲❃ ■♥t ✲❃ ■♥t

tal que ✭♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s ♥ ❦✮ es el número de combinaciones de orden ❦ de un conjunto

con ♥ elementos. Por ejemplo,

♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s ✹ ✷ ❂❂ ✻

♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s ✹ ✸ ❂❂ ✹

Solución:

♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s ✿✿ ■♥t ✲❃ ■♥t ✲❃ ■♥t

♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s ♥ ❦ ❂ ❧❡♥❣t❤ ✭❝♦♠❜✐♥❛❝✐♦♥❡s◆ ♥ ❦✮

Puede definirse por composición

♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s❴✷ ✿✿ ■♥t ✲❃ ■♥t ✲❃ ■♥t

♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s❴✷ ❂ ✭❧❡♥❣t❤ ✳✮ ✳ ❝♦♠❜✐♥❛❝✐♦♥❡s◆

366 Capítulo 19. Combinatoria

Para facilitar la escritura de las definiciones por composición de funciones con dosargumentos, se puede definir

✭✳✿✮ ✿✿ ✭❝ ✲❃ ❞✮ ✲❃ ✭❛ ✲❃ ❜ ✲❃ ❝✮ ✲❃ ❛ ✲❃ ❜ ✲❃ ❞

✭✳✿✮ ❂ ✭✳✮ ✳ ✭✳✮

con lo que la definición anterior se simplifica a

♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s❴✸ ✿✿ ■♥t ✲❃ ■♥t ✲❃ ■♥t

♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s❴✸ ❂ ❧❡♥❣t❤ ✳✿ ❝♦♠❜✐♥❛❝✐♦♥❡s◆

Ejercicio 19.3.6. Definir la función

❝♦♠❜ ✿✿ ■♥t ✲❃ ■♥t ✲❃ ■♥t

tal que ✭❝♦♠❜ ♥ ❦✮ es el número combinatorio ♥ sobre ❦; es decir, ✭❝♦♠❜ ♥ ❦✮ = n!k!(n−k)! . Por

ejemplo,

❝♦♠❜ ✹ ✷ ❂❂ ✻

❝♦♠❜ ✹ ✸ ❂❂ ✹

Solución:

❝♦♠❜ ✿✿ ■♥t ✲❃ ■♥t ✲❃ ■♥t

❝♦♠❜ ♥ ❦ ❂ ✭❢❛❝t ♥✮ ❵❞✐✈❵ ✭✭❢❛❝t ❦✮ ✯ ✭❢❛❝t ✭♥✲❦✮✮✮

Ejercicio 19.3.7. Definir, usando ❝♦♠❜, la función

♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s✬ ✿✿ ■♥t ✲❃ ■♥t ✲❃ ■♥t

tal que ✭♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s✬ ♥ ❦✮ es el número de combinaciones de orden ❦ de un con-

junto con ♥ elementos. Por ejemplo,

♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s✬ ✹ ✷ ❂❂ ✻

♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s✬ ✹ ✸ ❂❂ ✹

Solución:

♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s✬ ✿✿ ■♥t ✲❃ ■♥t ✲❃ ■♥t

♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s✬ ❂ ❝♦♠❜

Ejercicio 19.3.8. Definir la función

♣r♦♣❴♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s ✿✿ ■♥t ✲❃ ❇♦♦❧

19.4. Combinaciones con repetición 367

tal que ✭♣r♦♣❴♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s ♥✮ se verifica si las funciones ♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s

y ♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s✬ son equivalentes para los ♥ primeros números y todo ❦ entre ✶ y ♥.

Por ejemplo,

♣r♦♣❴♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s ✺ ❂❂ ❚r✉❡

Solución:

♣r♦♣❴♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s ✿✿ ■♥t ✲❃ ❇♦♦❧

♣r♦♣❴♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s ♥ ❂

❛♥❞ ❬♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s ♥ ❦ ❂❂ ♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s✬ ♥ ❦ ⑤ ❦ ❁✲ ❬✶✳✳♥❪❪

19.4. Combinaciones con repetición

Ejercicio 19.4.1. Definir la función

❝♦♠❜✐♥❛❝✐♦♥❡s❘ ✿✿ ■♥t ✲❃ ❬❛❪ ✲❃ ❬❬❛❪❪

tal que ✭❝♦♠❜✐♥❛❝✐♦♥❡s❘ ❦ ①s✮ es la lista de las combinaciones orden ❦ de los elementos de ①s

con repeticiones. Por ejemplo,

❣❤❝✐❃ ❝♦♠❜✐♥❛❝✐♦♥❡s❘ ✷ ✧❛❜❝✧

❬✧❛❛✧✱✧❛❜✧✱✧❛❝✧✱✧❜❜✧✱✧❜❝✧✱✧❝❝✧❪

❣❤❝✐❃ ❝♦♠❜✐♥❛❝✐♦♥❡s❘ ✸ ✧❜❝✧

❬✧❜❜❜✧✱✧❜❜❝✧✱✧❜❝❝✧✱✧❝❝❝✧❪

❣❤❝✐❃ ❝♦♠❜✐♥❛❝✐♦♥❡s❘ ✸ ✧❛❜❝✧

❬✧❛❛❛✧✱✧❛❛❜✧✱✧❛❛❝✧✱✧❛❜❜✧✱✧❛❜❝✧✱✧❛❝❝✧✱✧❜❜❜✧✱✧❜❜❝✧✱✧❜❝❝✧✱✧❝❝❝✧❪

Solución:

❝♦♠❜✐♥❛❝✐♦♥❡s❘ ✿✿ ■♥t ✲❃ ❬❛❪ ✲❃ ❬❬❛❪❪

❝♦♠❜✐♥❛❝✐♦♥❡s❘ ❴ ❬❪ ❂ ❬❪

❝♦♠❜✐♥❛❝✐♦♥❡s❘ ✵ ❴ ❂ ❬❬❪❪

❝♦♠❜✐♥❛❝✐♦♥❡s❘ ❦ ✭①✿①s✮ ❂

❬①✿②s ⑤ ②s ❁✲ ❝♦♠❜✐♥❛❝✐♦♥❡s❘ ✭❦✲✶✮ ✭①✿①s✮❪ ✰✰ ❝♦♠❜✐♥❛❝✐♦♥❡s❘ ❦ ①s

Ejercicio 19.4.2. Definir la función

❝♦♠❜✐♥❛❝✐♦♥❡s❘◆ ✿✿ ■♥t ✲❃ ■♥t ✲❃ ❬❬■♥t❪❪

tal que ✭❝♦♠❜✐♥❛❝✐♦♥❡s❘◆ ♥ ❦✮ es la lista de las combinaciones orden ❦ de los primeros ♥

números naturales. Por ejemplo,

368 Capítulo 19. Combinatoria

❣❤❝✐❃ ❝♦♠❜✐♥❛❝✐♦♥❡s❘◆ ✸ ✷

❬❬✶✱✶❪✱❬✶✱✷❪✱❬✶✱✸❪✱❬✷✱✷❪✱❬✷✱✸❪✱❬✸✱✸❪❪

❣❤❝✐❃ ❝♦♠❜✐♥❛❝✐♦♥❡s❘◆ ✷ ✸

❬❬✶✱✶✱✶❪✱❬✶✱✶✱✷❪✱❬✶✱✷✱✷❪✱❬✷✱✷✱✷❪❪

Solución:

❝♦♠❜✐♥❛❝✐♦♥❡s❘◆ ✿✿ ■♥t ✲❃ ■♥t ✲❃ ❬❬■♥t❪❪

❝♦♠❜✐♥❛❝✐♦♥❡s❘◆ ♥ ❦ ❂ ❝♦♠❜✐♥❛❝✐♦♥❡s❘ ❦ ❬✶✳✳♥❪

Ejercicio 19.4.3. Definir, usando combinacionesRN, la función

♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s❘ ✿✿ ■♥t ✲❃ ■♥t ✲❃ ■♥t

tal que ✭♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s❘ ♥ ❦✮ es el número de combinaciones con repetición de orden

❦ de un conjunto con ♥ elementos. Por ejemplo,

♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s❘ ✸ ✷ ❂❂ ✻

♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s❘ ✷ ✸ ❂❂ ✹

Solución:

♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s❘ ✿✿ ■♥t ✲❃ ■♥t ✲❃ ■♥t

♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s❘ ♥ ❦ ❂ ❧❡♥❣t❤ ✭❝♦♠❜✐♥❛❝✐♦♥❡s❘◆ ♥ ❦✮

Ejercicio 19.4.4. Definir, usando ❝♦♠❜, la función

♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s❘✬ ✿✿ ■♥t ✲❃ ■♥t ✲❃ ■♥t

tal que ✭♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s❘✬ ♥ ❦✮ es el número de combinaciones con repetición de orden

❦ de un conjunto con ♥ elementos. Por ejemplo,

♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s❘✬ ✸ ✷ ❂❂ ✻

♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s❘✬ ✷ ✸ ❂❂ ✹

Solución:

♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s❘✬ ✿✿ ■♥t ✲❃ ■♥t ✲❃ ■♥t

♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s❘✬ ♥ ❦ ❂ ❝♦♠❜ ✭♥✰❦✲✶✮ ❦

Ejercicio 19.4.5. Definir la función

♣r♦♣❴♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s❘ ✿✿ ■♥t ✲❃ ❇♦♦❧

tal que ✭♣r♦♣❴♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s❘ ♥✮ se verifica si las funciones ♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s❘

y ♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s❘✬ son equivalentes para los ♥ primeros números y todo ❦ entre ✶ y ♥.

Por ejemplo,

19.5. Variaciones sin repetición 369

♣r♦♣❴♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s❘ ✺ ❂❂ ❚r✉❡

Solución:

♣r♦♣❴♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s❘ ✿✿ ■♥t ✲❃ ❇♦♦❧

♣r♦♣❴♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s❘ ♥ ❂

❛♥❞ ❬♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s❘ ♥ ❦ ❂❂ ♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s❘✬ ♥ ❦ ⑤

❦ ❁✲ ❬✶✳✳♥❪❪

19.5. Variaciones sin repetición

Ejercicio 19.5.1. Definir la función

✈❛r✐❛❝✐♦♥❡s ✿✿ ■♥t ✲❃ ❬❛❪ ✲❃ ❬❬❛❪❪

tal que ✭✈❛r✐❛❝✐♦♥❡s ♥ ①s✮ es la lista de las variaciones ♥–arias de la lista ①s. Por ejemplo,

✈❛r✐❛❝✐♦♥❡s ✷ ✧❛❜❝✧ ❂❂ ❬✧❛❜✧✱✧❜❛✧✱✧❛❝✧✱✧❝❛✧✱✧❜❝✧✱✧❝❜✧❪

Solución:

✈❛r✐❛❝✐♦♥❡s ✿✿ ■♥t ✲❃ ❬❛❪ ✲❃ ❬❬❛❪❪

✈❛r✐❛❝✐♦♥❡s ❦ ①s ❂

❝♦♥❝❛t ✭♠❛♣ ♣❡r♠✉t❛❝✐♦♥❡s ✭❝♦♠❜✐♥❛❝✐♦♥❡s ❦ ①s✮✮

Ejercicio 19.5.2. Definir la función

✈❛r✐❛❝✐♦♥❡s◆ ✿✿ ■♥t ✲❃ ■♥t ✲❃ ❬❬■♥t❪❪

tal que ✭✈❛r✐❛❝✐♦♥❡s◆ ♥ ❦✮ es la lista de las variaciones de orden ❦ de los ♥ primeros números.

Por ejemplo,

✈❛r✐❛❝✐♦♥❡s◆ ✸ ✷ ❂❂ ❬❬✶✱✷❪✱❬✷✱✶❪✱❬✶✱✸❪✱❬✸✱✶❪✱❬✷✱✸❪✱❬✸✱✷❪❪

Solución:

✈❛r✐❛❝✐♦♥❡s◆ ✿✿ ■♥t ✲❃ ■♥t ✲❃ ❬❬■♥t❪❪

✈❛r✐❛❝✐♦♥❡s◆ ♥ ❦ ❂ ✈❛r✐❛❝✐♦♥❡s ❦ ❬✶✳✳♥❪

Ejercicio 19.5.3. Definir, usando ✈❛r✐❛❝✐♦♥❡s◆, la función

♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s ✿✿ ■♥t ✲❃ ■♥t ✲❃ ■♥t

tal que ✭♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s ♥ ❦✮ es el número de variaciones de orden ❦ de un conjunto con

♥ elementos. Por ejemplo,

370 Capítulo 19. Combinatoria

♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s ✹ ✷ ❂❂ ✶✷

♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s ✹ ✸ ❂❂ ✷✹

Solución:

♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s ✿✿ ■♥t ✲❃ ■♥t ✲❃ ■♥t

♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s ♥ ❦ ❂ ❧❡♥❣t❤ ✭✈❛r✐❛❝✐♦♥❡s◆ ♥ ❦✮

Ejercicio 19.5.4. Definir, usando ♣r♦❞✉❝t, la función

♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s✬ ✿✿ ■♥t ✲❃ ■♥t ✲❃ ■♥t

tal que ✭♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s✬ ♥ ❦✮ es el número de variaciones de orden ❦ de un conjunto

con ♥ elementos. Por ejemplo,

♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s✬ ✹ ✷ ❂❂ ✶✷

♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s✬ ✹ ✸ ❂❂ ✷✹

Solución:

♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s✬ ✿✿ ■♥t ✲❃ ■♥t ✲❃ ■♥t

♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s✬ ♥ ❦ ❂ ♣r♦❞✉❝t ❬✭♥✲❦✰✶✮✳✳♥❪

Ejercicio 19.5.5. Definir la función

♣r♦♣❴♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s ✿✿ ■♥t ✲❃ ❇♦♦❧

tal que ✭♣r♦♣❴♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s ♥✮ se verifica si las funciones ♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s y ♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s✬

son equivalentes para los ♥ primeros números y todo ❦ entre ✶ y ♥. Por ejemplo,

♣r♦♣❴♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s ✺ ❂❂ ❚r✉❡

Solución:

♣r♦♣❴♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s ✿✿ ■♥t ✲❃ ❇♦♦❧

♣r♦♣❴♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s ♥ ❂

❛♥❞ ❬♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s ♥ ❦ ❂❂ ♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s✬ ♥ ❦ ⑤ ❦ ❁✲ ❬✶✳✳♥❪❪

19.6. Variaciones con repetición

Ejercicio 19.6.1. Definir la función

✈❛r✐❛❝✐♦♥❡s❘ ✿✿ ■♥t ✲❃ ❬❛❪ ✲❃ ❬❬❛❪❪

tal que ✭✈❛r✐❛❝✐♦♥❡s❘ ❦ ①s✮ es la lista de las variaciones de orden ❦ de los elementos de ①s

con repeticiones. Por ejemplo,

19.6. Variaciones con repetición 371

❣❤❝✐❃ ✈❛r✐❛❝✐♦♥❡s❘ ✶ ✧❛❜✧

❬✧❛✧✱✧❜✧❪

❣❤❝✐❃ ✈❛r✐❛❝✐♦♥❡s❘ ✷ ✧❛❜✧

❬✧❛❛✧✱✧❛❜✧✱✧❜❛✧✱✧❜❜✧❪

❣❤❝✐❃ ✈❛r✐❛❝✐♦♥❡s❘ ✸ ✧❛❜✧

❬✧❛❛❛✧✱✧❛❛❜✧✱✧❛❜❛✧✱✧❛❜❜✧✱✧❜❛❛✧✱✧❜❛❜✧✱✧❜❜❛✧✱✧❜❜❜✧❪

Solución:

✈❛r✐❛❝✐♦♥❡s❘ ✿✿ ■♥t ✲❃ ❬❛❪ ✲❃ ❬❬❛❪❪

✈❛r✐❛❝✐♦♥❡s❘ ❴ ❬❪ ❂ ❬❬❪❪

✈❛r✐❛❝✐♦♥❡s❘ ✵ ❴ ❂ ❬❬❪❪

✈❛r✐❛❝✐♦♥❡s❘ ❦ ①s ❂

❬③✿②s ⑤ ③ ❁✲ ①s✱ ②s ❁✲ ✈❛r✐❛❝✐♦♥❡s❘ ✭❦✲✶✮ ①s❪

Ejercicio 19.6.2. Definir la función

✈❛r✐❛❝✐♦♥❡s❘◆ ✿✿ ■♥t ✲❃ ■♥t ✲❃ ❬❬■♥t❪❪

tal que ✭✈❛r✐❛❝✐♦♥❡s❘◆ ♥ ❦✮ es la lista de las variaciones orden ❦ de los primeros ♥ números

naturales. Por ejemplo,

❣❤❝✐❃ ✈❛r✐❛❝✐♦♥❡s❘◆ ✸ ✷

❬❬✶✱✶❪✱❬✶✱✷❪✱❬✶✱✸❪✱❬✷✱✶❪✱❬✷✱✷❪✱❬✷✱✸❪✱❬✸✱✶❪✱❬✸✱✷❪✱❬✸✱✸❪❪

❣❤❝✐❃ ✈❛r✐❛❝✐♦♥❡s❘◆ ✷ ✸

❬❬✶✱✶✱✶❪✱❬✶✱✶✱✷❪✱❬✶✱✷✱✶❪✱❬✶✱✷✱✷❪✱❬✷✱✶✱✶❪✱❬✷✱✶✱✷❪✱❬✷✱✷✱✶❪✱❬✷✱✷✱✷❪❪

Solución:

✈❛r✐❛❝✐♦♥❡s❘◆ ✿✿ ■♥t ✲❃ ■♥t ✲❃ ❬❬■♥t❪❪

✈❛r✐❛❝✐♦♥❡s❘◆ ♥ ❦ ❂ ✈❛r✐❛❝✐♦♥❡s❘ ❦ ❬✶✳✳♥❪

Ejercicio 19.6.3. Definir, usando ✈❛r✐❛❝✐♦♥❡s❘, la función

♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s❘ ✿✿ ■♥t ✲❃ ■♥t ✲❃ ■♥t

tal que ✭♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s❘ ♥ ❦✮ es el número de variaciones con repetición de orden ❦ de

un conjunto con ♥ elementos. Por ejemplo,

♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s❘ ✸ ✷ ❂❂ ✾

♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s❘ ✷ ✸ ❂❂ ✽

Solución:

♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s❘ ✿✿ ■♥t ✲❃ ■♥t ✲❃ ■♥t

♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s❘ ♥ ❦ ❂ ❧❡♥❣t❤ ✭✈❛r✐❛❝✐♦♥❡s❘◆ ♥ ❦✮

372 Capítulo 19. Combinatoria

Ejercicio 19.6.4. Definir, usando ✭❫✮, la función

♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s❘✬ ✿✿ ■♥t ✲❃ ■♥t ✲❃ ■♥t

tal que ✭♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s❘✬ ♥ ❦✮ es el número de variaciones con repetición de orden ❦ de

un conjunto con ♥ elementos. Por ejemplo,

♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s❘✬ ✸ ✷ ❂❂ ✾

♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s❘✬ ✷ ✸ ❂❂ ✽

Solución:

♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s❘✬ ✿✿ ■♥t ✲❃ ■♥t ✲❃ ■♥t

♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s❘✬ ♥ ❦ ❂ ♥❫❦

Ejercicio 19.6.5. Definir la función

♣r♦♣❴♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s❘ ✿✿ ■♥t ✲❃ ❇♦♦❧

tal que ✭♣r♦♣❴♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s❘ ♥✮ se verifica si las funciones ♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s❘ y

♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s❘✬ son equivalentes para los ♥ primeros números y todo ❦ entre ✶ y ♥. Por

ejemplo,

♣r♦♣❴♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s❘ ✺ ❂❂ ❚r✉❡

Solución:

♣r♦♣❴♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s❘ ✿✿ ■♥t ✲❃ ❇♦♦❧

♣r♦♣❴♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s❘ ♥ ❂

❛♥❞ ❬♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s❘ ♥ ❦ ❂❂ ♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s❘✬ ♥ ❦ ⑤

❦ ❁✲ ❬✶✳✳♥❪❪

19.7. El triángulo de Pascal

Ejercicio 19.7.1. El triángulo de Pascal es un triángulo de números

✶ ✶

✶ ✷ ✶

✶ ✸ ✸ ✶

✶ ✹ ✻ ✹ ✶

✶ ✺ ✶✵ ✶✵ ✺ ✶

✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳

19.7. El triángulo de Pascal 373

construido de la siguiente forma

la primera fila está formada por el número 1;

las filas siguientes se construyen sumando los números adyacentes de la fila superior y

añadiendo un 1 al principio y al final de la fila.

Definir la función

♣❛s❝❛❧ ✿✿ ■♥t ✲❃ ❬■♥t❪

tal que ✭♣❛s❝❛❧ ♥✮ es la ♥–ésima fila del triángulo de Pascal. Por ejemplo,

♣❛s❝❛❧ ✻ ❂❂ ❬✶✱✺✱✶✵✱✶✵✱✺✱✶❪

Solución:

♣❛s❝❛❧ ✿✿ ■♥t ✲❃ ❬■♥t❪

♣❛s❝❛❧ ✶ ❂ ❬✶❪

♣❛s❝❛❧ ♥ ❂ ❬✶❪ ✰✰ ❬①✰② ⑤ ✭①✱②✮ ❁✲ ♣❛r❡s ✭♣❛s❝❛❧ ✭♥✲✶✮✮❪ ✰✰ ❬✶❪

donde ✭♣❛r❡s ①s✮ es la lista formada por los pares de elementos adyacentes de la lista①s. Por ejemplo,

♣❛r❡s ❬✶✱✹✱✻✱✹✱✶❪ ❂❂ ❬✭✶✱✹✮✱✭✹✱✻✮✱✭✻✱✹✮✱✭✹✱✶✮❪

♣❛r❡s ✿✿ ❬❛❪ ✲❃ ❬✭❛✱❛✮❪

♣❛r❡s ✭①✿②✿①s✮ ❂ ✭①✱②✮ ✿ ♣❛r❡s ✭②✿①s✮

♣❛r❡s ❴ ❂ ❬❪

otra definición de ♣❛r❡s, usando ③✐♣, es

♣❛r❡s✬ ✿✿ ❬❛❪ ✲❃ ❬✭❛✱❛✮❪

♣❛r❡s✬ ①s ❂ ③✐♣ ①s ✭t❛✐❧ ①s✮

Las definiciones son equivalentes como se expresa en

♣r♦♣❴♣❛r❡s ✿✿ ❬■♥t❪ ✲❃ ❇♦♦❧

♣r♦♣❴♣❛r❡s ①s ❂

♣❛r❡s ①s ❂❂ ♣❛r❡s✬ ①s

y se comprueba con

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴♣❛r❡s

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

374 Capítulo 19. Combinatoria

Ejercicio 19.7.2. Comprobar con QuickCheck, que la fila n-ésima del triángulo de Pascal tiene

n elementos.

Solución: La propiedad es

♣r♦♣❴P❛s❝❛❧ ✿✿ ■♥t ✲❃ Pr♦♣❡rt②

♣r♦♣❴P❛s❝❛❧ ♥ ❂

♥ ❃❂ ✶ ❂❂❃ ❧❡♥❣t❤ ✭♣❛s❝❛❧ ♥✮ ❂❂ ♥

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴P❛s❝❛❧

❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

Ejercicio 19.7.3. Comprobar con QuickCheck, que la suma de los elementos de la fila n–ésima

del triángulo de Pascal es igual a 2n−1.

Solución: La propiedad es

♣r♦♣❴s✉♠❛P❛s❝❛❧ ✿✿ ■♥t ✲❃ Pr♦♣❡rt②

♣r♦♣❴s✉♠❛P❛s❝❛❧ ♥ ❂

♥ ❃❂ ✶ ❂❂❃ s✉♠ ✭♣❛s❝❛❧ ♥✮ ❂❂ ✷❫✭♥✲✶✮

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴s✉♠❛P❛s❝❛❧

❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

Ejercicio 19.7.4. Comprobar con QuickCheck, que el m–ésimo elemento de la fila (n+ 1)–ésima

del triángulo de Pascal es el número combinatorio ✭❝♦♠❜ ♥ ♠✮.

Solución: La propiedad es

♣r♦♣❴❈♦♠❜✐♥❛❝✐♦♥❡s ✿✿ ■♥t ✲❃ Pr♦♣❡rt②

♣r♦♣❴❈♦♠❜✐♥❛❝✐♦♥❡s ♥ ❂

♥ ❃❂ ✶ ❂❂❃ ♣❛s❝❛❧ ♥ ❂❂ ❬❝♦♠❜ ✭♥✲✶✮ ♠ ⑤ ♠ ❁✲ ❬✵✳✳♥✲✶❪❪

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴❈♦♠❜✐♥❛❝✐♦♥❡s

❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

Capítulo 20

Cálculo numérico

Contenido20.1 Diferenciación numérica . . . . . . . . . . . . . . . . . . . . . . . . . . . 375

20.2 Cálculo de la raíz cuadrada mediante el método de Herón . . . . . . . 377

20.3 Cálculo de los ceros de una función por el método de Newton . . . . . 379

20.4 Cálculo de funciones inversas . . . . . . . . . . . . . . . . . . . . . . . . 380

Nota. En este capítulo se usa la librería ◗✉✐❝❦❈❤❡❝❦.

✐♠♣♦rt ❚❡st✳◗✉✐❝❦❈❤❡❝❦

20.1. Diferenciación numérica

Ejercicio 20.1.1. Definir la función

❞❡r✐✈❛❞❛ ✿✿ ❉♦✉❜❧❡ ✲❃ ✭❉♦✉❜❧❡ ✲❃ ❉♦✉❜❧❡✮ ✲❃ ❉♦✉❜❧❡ ✲❃ ❉♦✉❜❧❡

tal que ✭❞❡r✐✈❛❞❛ ❛ ❢ ①✮ es el valor de la derivada de la función ❢ en el punto ① con aproxi-

mación ❛. Por ejemplo,

❞❡r✐✈❛❞❛ ✵✳✵✵✶ s✐♥ ♣✐ ❂❂ ✲✵✳✾✾✾✾✾✾✽✸✸✸✸✸✷✸✶✺

❞❡r✐✈❛❞❛ ✵✳✵✵✶ ❝♦s ♣✐ ❂❂ ✹✳✾✾✾✾✾✾✺✽✸✷✺✺✵✸✸❡✲✹

Solución:

❞❡r✐✈❛❞❛ ✿✿ ❉♦✉❜❧❡ ✲❃ ✭❉♦✉❜❧❡ ✲❃ ❉♦✉❜❧❡✮ ✲❃ ❉♦✉❜❧❡ ✲❃ ❉♦✉❜❧❡

❞❡r✐✈❛❞❛ ❛ ❢ ① ❂ ✭❢✭①✰❛✮✲❢✭①✮✮✴❛

Ejercicio 20.1.2. Definir las funciones

375

376 Capítulo 20. Cálculo numérico

❞❡r✐✈❛❞❛❇✉r❞❛ ✿✿ ✭❉♦✉❜❧❡ ✲❃ ❉♦✉❜❧❡✮ ✲❃ ❉♦✉❜❧❡ ✲❃ ❉♦✉❜❧❡

❞❡r✐✈❛❞❛❋✐♥❛ ✿✿ ✭❉♦✉❜❧❡ ✲❃ ❉♦✉❜❧❡✮ ✲❃ ❉♦✉❜❧❡ ✲❃ ❉♦✉❜❧❡

❞❡r✐✈❛❞❛❙✉♣❡r ✿✿ ✭❉♦✉❜❧❡ ✲❃ ❉♦✉❜❧❡✮ ✲❃ ❉♦✉❜❧❡ ✲❃ ❉♦✉❜❧❡

tales que

✭❞❡r✐✈❛❞❛❇✉r❞❛ ❢ ①✮ es el valor de la derivada de la función ❢ en el punto ① con apro-

ximación 0.01,

✭❞❡r✐✈❛❞❛❋✐♥❛ ❢ ①✮ es el valor de la derivada de la función ❢ en el punto ① con aproxi-

mación 0.0001.

✭❞❡r✐✈❛❞❛✉♣❡r❇✉r❞❛ ❢ ①✮ es el valor de la derivada de la función ❢ en el punto ① con

aproximación 0.000001.

Por ejemplo,

❞❡r✐✈❛❞❛❇✉r❞❛ ❝♦s ♣✐ ❂❂ ✹✳✾✾✾✾✺✽✸✸✸✹✼✸✻✻✹❡✲✸

❞❡r✐✈❛❞❛❋✐♥❛ ❝♦s ♣✐ ❂❂ ✹✳✾✾✾✾✾✾✾✻✾✻✶✷✻✹✺❡✲✺

❞❡r✐✈❛❞❛❙✉♣❡r ❝♦s ♣✐ ❂❂ ✺✳✵✵✵✹✹✹✺✵✷✾✶✶✼✵✺❡✲✼

Solución:

❞❡r✐✈❛❞❛❇✉r❞❛ ✿✿ ✭❉♦✉❜❧❡ ✲❃ ❉♦✉❜❧❡✮ ✲❃ ❉♦✉❜❧❡ ✲❃ ❉♦✉❜❧❡

❞❡r✐✈❛❞❛❇✉r❞❛ ❂ ❞❡r✐✈❛❞❛ ✵✳✵✶

❞❡r✐✈❛❞❛❋✐♥❛ ✿✿ ✭❉♦✉❜❧❡ ✲❃ ❉♦✉❜❧❡✮ ✲❃ ❉♦✉❜❧❡ ✲❃ ❉♦✉❜❧❡

❞❡r✐✈❛❞❛❋✐♥❛ ❂ ❞❡r✐✈❛❞❛ ✵✳✵✵✵✶

❞❡r✐✈❛❞❛❙✉♣❡r ✿✿ ✭❉♦✉❜❧❡ ✲❃ ❉♦✉❜❧❡✮ ✲❃ ❉♦✉❜❧❡ ✲❃ ❉♦✉❜❧❡

❞❡r✐✈❛❞❛❙✉♣❡r ❂ ❞❡r✐✈❛❞❛ ✵✳✵✵✵✵✵✶

Ejercicio 20.1.3. Definir la función

❞❡r✐✈❛❞❛❋✐♥❛❉❡❧❙❡♥♦ ✿✿ ❉♦✉❜❧❡ ✲❃ ❉♦✉❜❧❡

tal que ✭❞❡r✐✈❛❞❛❋✐♥❛❉❡❧❙❡♥♦ ①✮ es el valor de la derivada fina del seno en ①. Por ejemplo,

❞❡r✐✈❛❞❛❋✐♥❛❉❡❧❙❡♥♦ ♣✐ ❂❂ ✲✵✳✾✾✾✾✾✾✾✾✽✸✸✺✹✹✸✻

Solución:

❞❡r✐✈❛❞❛❋✐♥❛❉❡❧❙❡♥♦ ✿✿ ❉♦✉❜❧❡ ✲❃ ❉♦✉❜❧❡

❞❡r✐✈❛❞❛❋✐♥❛❉❡❧❙❡♥♦ ❂ ❞❡r✐✈❛❞❛❋✐♥❛ s✐♥

20.2. Cálculo de la raíz cuadrada mediante el método de Herón 377

20.2. Cálculo de la raíz cuadrada mediante el método deHerón

En los ejercicios de esta sección se va a calcular la raíz cuadrada de un número ba-sándose en las siguientes propiedades:

Si y es una aproximación de la raíz cuadrada de x, entoncesy+ x

y

2 es una aproxima-ción mejor.

El límite de la sucesión definida por x0 = 1, xn+1 =xn+

xxn

2 es la raíz cuadrada dex.

Ejercicio 20.2.1. Definir, por iteración con ✉♥t✐❧, la función

r❛✐③ ✿✿ ❉♦✉❜❧❡ ✲❃ ❉♦✉❜❧❡

tal que ✭r❛✐③ ①✮ es la raíz cuadrada de ① calculada usando la propiedad anterior con una apro-

ximación de 0.00001. Por ejemplo,

r❛✐③ ✾ ❂❂ ✸✳✵✵✵✵✵✵✵✵✶✸✾✻✾✽✹

Solución:

r❛✐③ ✿✿ ❉♦✉❜❧❡ ✲❃ ❉♦✉❜❧❡

r❛✐③ ① ❂ r❛✐③✬ ✶

✇❤❡r❡ r❛✐③✬ ② ⑤ ❛❝❡♣t❛❜❧❡ ② ❂ ②

⑤ ♦t❤❡r✇✐s❡ ❂ r❛✐③✬ ✭♠❡❥♦r❛ ②✮

♠❡❥♦r❛ ② ❂ ✵✳✺✯✭②✰①✴②✮

❛❝❡♣t❛❜❧❡ ② ❂ ❛❜s✭②✯②✲①✮ ❁ ✵✳✵✵✵✵✶

Ejercicio 20.2.2. Definir el operador

✭⑦❂✮ ✿✿ ❉♦✉❜❧❡ ✲❃ ❉♦✉❜❧❡ ✲❃ ❇♦♦❧

tal que ✭① ⑦❂ ②✮ si |x − y| < 0,001. Por ejemplo,

✸✳✵✺ ⑦❂ ✸✳✵✼ ❂❂ ❋❛❧s❡

✸✳✵✵✵✵✺ ⑦❂ ✸✳✵✵✵✵✼ ❂❂ ❚r✉❡

Solución:

✐♥❢✐① ✺ ⑦❂

✭⑦❂✮ ✿✿ ❉♦✉❜❧❡ ✲❃ ❉♦✉❜❧❡ ✲❃ ❇♦♦❧

① ⑦❂ ② ❂ ❛❜s✭①✲②✮ ❁ ✵✳✵✵✶

378 Capítulo 20. Cálculo numérico

Ejercicio 20.2.3. Comprobar con QuickCheck que si ① es positivo, entonces

✭r❛✐③ ①✮❫✷ ⑦❂ ①.

Solución: La propiedad es

♣r♦♣❴r❛✐③ ✿✿ ❉♦✉❜❧❡ ✲❃ ❇♦♦❧

♣r♦♣❴r❛✐③ ① ❂

✭r❛✐③ ①✬✮❫✷ ⑦❂ ①✬

✇❤❡r❡ ①✬ ❂ ❛❜s ①

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴r❛✐③

❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

Ejercicio 20.2.4. Definir por recursión la función

✉♥t✐❧✬ ✿✿ ✭❛ ✲❃ ❇♦♦❧✮ ✲❃ ✭❛ ✲❃ ❛✮ ✲❃ ❛ ✲❃ ❛

tal que ✭✉♥t✐❧✬ ♣ ❢ ①✮ es el resultado de aplicar la función ❢ a ① el menor número posible de

veces, hasta alcanzar un valor que satisface el predicado ♣. Por ejemplo,

✉♥t✐❧✬ ✭❃✶✵✵✵✮ ✭✷✯✮ ✶ ❂❂ ✶✵✷✹

Nota: La función ✉♥t✐❧✬ es equivalente a la predefinida ✉♥t✐❧.

Solución:

✉♥t✐❧✬ ✿✿ ✭❛ ✲❃ ❇♦♦❧✮ ✲❃ ✭❛ ✲❃ ❛✮ ✲❃ ❛ ✲❃ ❛

✉♥t✐❧✬ ♣ ❢ ① ⑤ ♣ ① ❂ ①

⑤ ♦t❤❡r✇✐s❡ ❂ ✉♥t✐❧✬ ♣ ❢ ✭❢ ①✮

Ejercicio 20.2.5. Definir, por iteración con ✉♥t✐❧, la función

r❛✐③■ ✿✿ ❉♦✉❜❧❡ ✲❃ ❉♦✉❜❧❡

tal que ✭r❛✐③■ ①✮ es la raíz cuadrada de ① calculada usando la propiedad anterior. Por ejemplo,

r❛✐③■ ✾ ❂❂ ✸✳✵✵✵✵✵✵✵✵✶✸✾✻✾✽✹

Solución:

r❛✐③■ ✿✿ ❉♦✉❜❧❡ ✲❃ ❉♦✉❜❧❡

r❛✐③■ ① ❂ ✉♥t✐❧ ❛❝❡♣t❛❜❧❡ ♠❡❥♦r❛ ✶

✇❤❡r❡ ♠❡❥♦r❛ ② ❂ ✵✳✺✯✭②✰①✴②✮

❛❝❡♣t❛❜❧❡ ② ❂ ❛❜s✭②✯②✲①✮ ❁ ✵✳✵✵✵✵✶

20.3. Cálculo de los ceros de una función por el método de Newton 379

Ejercicio 20.2.6. Comprobar con QuickCheck que si ① es positivo, entonces

✭r❛✐③■ ①✮❫✷ ⑦❂ ①.

Solución: La propiedad es

♣r♦♣❴r❛✐③■ ✿✿ ❉♦✉❜❧❡ ✲❃ ❇♦♦❧

♣r♦♣❴r❛✐③■ ① ❂

✭r❛✐③■ ①✬✮❫✷ ⑦❂ ①✬

✇❤❡r❡ ①✬ ❂ ❛❜s ①

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴r❛✐③■

❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

20.3. Cálculo de los ceros de una función por el métodode Newton

Los ceros de una función pueden calcularse mediante el método de Newton basán-dose en las siguientes propiedades:

Si b es una aproximación para el punto cero de f , entonces b − f (b)f ′(b)

es una mejoraproximación.

el límite de la sucesión xn definida por x0 = 1, xn+1 = xn −f (xn)f ′(xn)

es un cero de f .

Ejercicio 20.3.1. Definir por recursión la función

♣✉♥t♦❈❡r♦ ✿✿ ✭❉♦✉❜❧❡ ✲❃ ❉♦✉❜❧❡✮ ✲❃ ❉♦✉❜❧❡

tal que ✭♣✉♥t♦❈❡r♦ ❢✮ es un cero de la función ❢ calculado usando la propiedad anterior. Por

ejemplo,

♣✉♥t♦❈❡r♦ ❝♦s ❂❂ ✶✳✺✼✵✼✾✻✸✷✻✼✾✹✾✺✼✻

Solución:

♣✉♥t♦❈❡r♦ ✿✿ ✭❉♦✉❜❧❡ ✲❃ ❉♦✉❜❧❡✮ ✲❃ ❉♦✉❜❧❡

♣✉♥t♦❈❡r♦ ❢ ❂ ♣✉♥t♦❈❡r♦✬ ❢ ✶

✇❤❡r❡ ♣✉♥t♦❈❡r♦✬ ❢ ① ⑤ ❛❝❡♣t❛❜❧❡ ① ❂ ①

⑤ ♦t❤❡r✇✐s❡ ❂ ♣✉♥t♦❈❡r♦✬ ❢ ✭♠❡❥♦r❛ ①✮

♠❡❥♦r❛ ❜ ❂ ❜ ✲ ❢ ❜ ✴ ❞❡r✐✈❛❞❛❋✐♥❛ ❢ ❜

❛❝❡♣t❛❜❧❡ ❜ ❂ ❛❜s ✭❢ ❜✮ ❁ ✵✳✵✵✵✵✶

380 Capítulo 20. Cálculo numérico

Ejercicio 20.3.2. Definir, por iteración con ✉♥t✐❧, la función

♣✉♥t♦❈❡r♦■ ✿✿ ✭❉♦✉❜❧❡ ✲❃ ❉♦✉❜❧❡✮ ✲❃ ❉♦✉❜❧❡

tal que ✭♣✉♥t♦❈❡r♦■ ❢✮ es un cero de la función ❢ calculado usando la propiedad anterior. Por

ejemplo,

♣✉♥t♦❈❡r♦■ ❝♦s ❂❂ ✶✳✺✼✵✼✾✻✸✷✻✼✾✹✾✺✼✻

Solución:

♣✉♥t♦❈❡r♦■ ✿✿ ✭❉♦✉❜❧❡ ✲❃ ❉♦✉❜❧❡✮ ✲❃ ❉♦✉❜❧❡

♣✉♥t♦❈❡r♦■ ❢ ❂ ✉♥t✐❧ ❛❝❡♣t❛❜❧❡ ♠❡❥♦r❛ ✶

✇❤❡r❡ ♠❡❥♦r❛ ❜ ❂ ❜ ✲ ❢ ❜ ✴ ❞❡r✐✈❛❞❛❋✐♥❛ ❢ ❜

❛❝❡♣t❛❜❧❡ ❜ ❂ ❛❜s ✭❢ ❜✮ ❁ ✵✳✵✵✵✵✶

20.4. Cálculo de funciones inversas

En esta sección se usará la función ♣✉♥t♦❈❡r♦ para definir la inversa de distintasfunciones.

Ejercicio 20.4.1. Definir, usando ♣✉♥t♦❈❡r♦, la función

r❛✐③❈✉❛❞r❛❞❛ ✿✿ ❉♦✉❜❧❡ ✲❃ ❉♦✉❜❧❡

tal que ✭r❛✐③❈✉❛❞r❛❞❛ ①✮ es la raíz cuadrada de ①. Por ejemplo,

r❛✐③❈✉❛❞r❛❞❛ ✾ ❂❂ ✸✳✵✵✵✵✵✵✵✵✷✾✹✶✶✽✹

Solución:

r❛✐③❈✉❛❞r❛❞❛ ✿✿ ❉♦✉❜❧❡ ✲❃ ❉♦✉❜❧❡

r❛✐③❈✉❛❞r❛❞❛ ❛ ❂ ♣✉♥t♦❈❡r♦ ❢

✇❤❡r❡ ❢ ① ❂ ①✯①✲❛

Ejercicio 20.4.2. Comprobar con QuickCheck que si ① es positivo, entonces

✭r❛✐③❈✉❛❞r❛❞❛ ①✮❫✷ ⑦❂ ①.

Solución: La propiedad es

♣r♦♣❴r❛✐③❈✉❛❞r❛❞❛ ✿✿ ❉♦✉❜❧❡ ✲❃ ❇♦♦❧

♣r♦♣❴r❛✐③❈✉❛❞r❛❞❛ ① ❂

✭r❛✐③❈✉❛❞r❛❞❛ ①✬✮❫✷ ⑦❂ ①✬

✇❤❡r❡ ①✬ ❂ ❛❜s ①

20.4. Cálculo de funciones inversas 381

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴r❛✐③❈✉❛❞r❛❞❛

❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

Ejercicio 20.4.3. Definir, usando ♣✉♥t♦❈❡r♦, la función

r❛✐③❈✉❜✐❝❛ ✿✿ ❉♦✉❜❧❡ ✲❃ ❉♦✉❜❧❡

tal que ✭r❛✐③❈✉❜✐❝❛ ①✮ es la raíz cuadrada de ①. Por ejemplo,

r❛✐③❈✉❜✐❝❛ ✷✼ ❂❂ ✸✳✵✵✵✵✵✵✵✵✵✵✶✾✻✵✹✽

Solución:

r❛✐③❈✉❜✐❝❛ ✿✿ ❉♦✉❜❧❡ ✲❃ ❉♦✉❜❧❡

r❛✐③❈✉❜✐❝❛ ❛ ❂ ♣✉♥t♦❈❡r♦ ❢

✇❤❡r❡ ❢ ① ❂ ①✯①✯①✲❛

Ejercicio 20.4.4. Comprobar con QuickCheck que si ① es positivo, entonces

✭r❛✐③❈✉❜✐❝❛ ①✮❫✸ ⑦❂ ①.

Solución: La propiedad es

♣r♦♣❴r❛✐③❈✉❜✐❝❛ ✿✿ ❉♦✉❜❧❡ ✲❃ ❇♦♦❧

♣r♦♣❴r❛✐③❈✉❜✐❝❛ ① ❂

✭r❛✐③❈✉❜✐❝❛ ①✮❫✸ ⑦❂ ①

✇❤❡r❡ ①✬ ❂ ❛❜s ①

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴r❛✐③❈✉❜✐❝❛

❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

Ejercicio 20.4.5. Definir, usando ♣✉♥t♦❈❡r♦, la función

❛r❝♦s❡♥♦ ✿✿ ❉♦✉❜❧❡ ✲❃ ❉♦✉❜❧❡

tal que ✭❛r❝♦s❡♥♦ ①✮ es el arcoseno de ①. Por ejemplo,

❛r❝♦s❡♥♦ ✶ ❂❂ ✶✳✺✻✻✺✹✽✾✹✷✽✸✵✻✺✼✹

Solución:

❛r❝♦s❡♥♦ ✿✿ ❉♦✉❜❧❡ ✲❃ ❉♦✉❜❧❡

❛r❝♦s❡♥♦ ❛ ❂ ♣✉♥t♦❈❡r♦ ❢

✇❤❡r❡ ❢ ① ❂ s✐♥ ① ✲ ❛

382 Capítulo 20. Cálculo numérico

Ejercicio 20.4.6. Comprobar con QuickCheck que si ① está entre 0 y 1, entonces

s✐♥ ✭❛r❝♦s❡♥♦ ①✮ ⑦❂ ①.

Solución: La propiedad es

♣r♦♣❴❛r❝♦s❡♥♦ ✿✿ ❉♦✉❜❧❡ ✲❃ ❇♦♦❧

♣r♦♣❴❛r❝♦s❡♥♦ ① ❂

s✐♥ ✭❛r❝♦s❡♥♦ ①✬✮ ⑦❂ ①✬

✇❤❡r❡ ①✬ ❂ ❛❜s ✭① ✲ ❢r♦♠■♥t❡❣r❛❧ ✭tr✉♥❝❛t❡ ①✮✮

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴❛r❝♦s❡♥♦

❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

Ejercicio 20.4.7. Definir, usando ♣✉♥t♦❈❡r♦, la función

❛r❝♦❝♦s❡♥♦ ✿✿ ❉♦✉❜❧❡ ✲❃ ❉♦✉❜❧❡

tal que ✭❛r❝♦s❡♥♦ ①✮ es el arcoseno de ①. Por ejemplo,

❛r❝♦❝♦s❡♥♦ ✵ ❂❂ ✶✳✺✼✵✼✾✻✸✷✻✼✾✹✾✺✼✻

Solución:

❛r❝♦❝♦s❡♥♦ ✿✿ ❉♦✉❜❧❡ ✲❃ ❉♦✉❜❧❡

❛r❝♦❝♦s❡♥♦ ❛ ❂ ♣✉♥t♦❈❡r♦ ❢

✇❤❡r❡ ❢ ① ❂ ❝♦s ① ✲ ❛

Ejercicio 20.4.8. Comprobar con QuickCheck que si ① está entre 0 y 1, entonces

❝♦s ✭❛r❝♦❝♦s❡♥♦ ①✮ ⑦❂ ①.

Solución: La propiedad es

♣r♦♣❴❛r❝♦❝♦s❡♥♦ ✿✿ ❉♦✉❜❧❡ ✲❃ ❇♦♦❧

♣r♦♣❴❛r❝♦❝♦s❡♥♦ ① ❂

❝♦s ✭❛r❝♦❝♦s❡♥♦ ①✬✮ ⑦❂ ①✬

✇❤❡r❡ ①✬ ❂ ❛❜s ✭① ✲ ❢r♦♠■♥t❡❣r❛❧ ✭tr✉♥❝❛t❡ ①✮✮

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴❛r❝♦❝♦s❡♥♦

❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

Ejercicio 20.4.9. Definir, usando ♣✉♥t♦❈❡r♦, la función

20.4. Cálculo de funciones inversas 383

✐♥✈❡rs❛ ✿✿ ✭❉♦✉❜❧❡ ✲❃ ❉♦✉❜❧❡✮ ✲❃ ❉♦✉❜❧❡ ✲❃ ❉♦✉❜❧❡

tal que ✭✐♥✈❡rs❛ ❣ ①✮ es el valor de la inversa de ❣ en ①. Por ejemplo,

✐♥✈❡rs❛ ✭❫✷✮ ✾ ❂❂ ✸✳✵✵✵✵✵✵✵✵✷✾✹✶✶✽✹

Solución:

✐♥✈❡rs❛ ✿✿ ✭❉♦✉❜❧❡ ✲❃ ❉♦✉❜❧❡✮ ✲❃ ❉♦✉❜❧❡ ✲❃ ❉♦✉❜❧❡

✐♥✈❡rs❛ ❣ ❛ ❂ ♣✉♥t♦❈❡r♦ ❢

✇❤❡r❡ ❢ ① ❂ ❣ ① ✲ ❛

Ejercicio 20.4.10. Redefinir, usando ✐♥✈❡rs❛, las funciones r❛✐③❈✉❛❞r❛❞❛, r❛✐③❈✉❜✐❝❛, ❛r❝♦s❡♥♦

y ❛r❝♦❝♦s❡♥♦.

Solución:

r❛✐③❈✉❛❞r❛❞❛✬ ❂ ✐♥✈❡rs❛ ✭❫✷✮

r❛✐③❈✉❜✐❝❛✬ ❂ ✐♥✈❡rs❛ ✭❫✸✮

❛r❝♦s❡♥♦✬ ❂ ✐♥✈❡rs❛ s✐♥

❛r❝♦❝♦s❡♥♦✬ ❂ ✐♥✈❡rs❛ ❝♦s

384 Capítulo 20. Cálculo numérico

Capítulo 21

Ecuación con factoriales

Contenido21.1 Cálculo de factoriales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385

21.2 Decisión de si un número es un factorial . . . . . . . . . . . . . . . . . . 386

21.3 Inversa del factorial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386

21.4 Enumeración de los pares de números naturales . . . . . . . . . . . . . 387

21.5 Solución de la ecuación con factoriales . . . . . . . . . . . . . . . . . . . 388

El objetivo de esta relación de ejercicios es resolver la ecuación

a! × b! = a! + b! + c!

donde a, b y c son números naturales.

Nota. Se usará la librería ◗✉✐❝❦❈❤❡❝❦:

✐♠♣♦rt ❚❡st✳◗✉✐❝❦❈❤❡❝❦

21.1. Cálculo de factoriales

Ejercicio 21.1.1. Definir la función

❢❛❝t♦r✐❛❧ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

tal que ✭❢❛❝t♦r✐❛❧ ♥✮ es el factorial de ♥. Por ejemplo,

❢❛❝t♦r✐❛❧ ✺ ❂❂ ✶✷✵

Solución:

385

386 Capítulo 21. Ecuación con factoriales

❢❛❝t♦r✐❛❧ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

❢❛❝t♦r✐❛❧ ♥ ❂ ♣r♦❞✉❝t ❬✶✳✳♥❪

Ejercicio 21.1.2. Definir la constante

❢❛❝t♦r✐❛❧❡s ✿✿ ❬■♥t❡❣❡r❪

tal que ❢❛❝t♦r✐❛❧❡s es la lista de los factoriales de los números naturales. Por ejemplo,

t❛❦❡ ✼ ❢❛❝t♦r✐❛❧❡s ❂❂ ❬✶✱✶✱✷✱✻✱✷✹✱✶✷✵✱✼✷✵❪

Solución:

❢❛❝t♦r✐❛❧❡s ✿✿ ❬■♥t❡❣❡r❪

❢❛❝t♦r✐❛❧❡s ❂ ❬❢❛❝t♦r✐❛❧ ♥ ⑤ ♥ ❁✲ ❬✵✳✳❪❪

21.2. Decisión de si un número es un factorial

Ejercicio 21.2.1. Definir, usando factoriales, la función

❡s❋❛❝t♦r✐❛❧ ✿✿ ■♥t❡❣❡r ✲❃ ❇♦♦❧

tal que ✭❡s❋❛❝t♦r✐❛❧ ♥✮ se verifica si existe un número natural ♠ tal que ♥ es ♠✦. Por ejemplo,

❡s❋❛❝t♦r✐❛❧ ✶✷✵ ❂❂ ❚r✉❡

❡s❋❛❝t♦r✐❛❧ ✷✵ ❂❂ ❋❛❧s❡

Solución:

❡s❋❛❝t♦r✐❛❧ ✿✿ ■♥t❡❣❡r ✲❃ ❇♦♦❧

❡s❋❛❝t♦r✐❛❧ ♥ ❂ ♥ ❂❂ ❤❡❛❞ ✭❞r♦♣❲❤✐❧❡ ✭❁♥✮ ❢❛❝t♦r✐❛❧❡s✮

21.3. Inversa del factorial

Ejercicio 21.3.1. Definir la constante

♣♦s✐❝✐♦♥❡s❋❛❝t♦r✐❛❧❡s ✿✿ ❬✭■♥t❡❣❡r✱■♥t❡❣❡r✮❪

tal que ♣♦s✐❝✐♦♥❡s❋❛❝t♦r✐❛❧❡s es la lista de los factoriales con su posición. Por ejemplo,

❣❤❝✐❃ t❛❦❡ ✼ ♣♦s✐❝✐♦♥❡s❋❛❝t♦r✐❛❧❡s

❬✭✵✱✶✮✱✭✶✱✶✮✱✭✷✱✷✮✱✭✸✱✻✮✱✭✹✱✷✹✮✱✭✺✱✶✷✵✮✱✭✻✱✼✷✵✮❪

21.4. Enumeración de los pares de números naturales 387

Solución:

♣♦s✐❝✐♦♥❡s❋❛❝t♦r✐❛❧❡s ✿✿ ❬✭■♥t❡❣❡r✱■♥t❡❣❡r✮❪

♣♦s✐❝✐♦♥❡s❋❛❝t♦r✐❛❧❡s ❂ ③✐♣ ❬✵✳✳❪ ❢❛❝t♦r✐❛❧❡s

Ejercicio 21.3.2. Definir la función

✐♥✈❋❛❝t♦r✐❛❧ ✿✿ ■♥t❡❣❡r ✲❃ ▼❛②❜❡ ■♥t❡❣❡r

tal que ✭✐♥✈❋❛❝t♦r✐❛❧ ①✮ es ✭❏✉st ♥✮ si el factorial de ♥ es ① y es ◆♦t❤✐♥❣, en caso contrario.

Por ejemplo,

✐♥✈❋❛❝t♦r✐❛❧ ✶✷✵ ❂❂ ❏✉st ✺

✐♥✈❋❛❝t♦r✐❛❧ ✷✵ ❂❂ ◆♦t❤✐♥❣

Solución:

✐♥✈❋❛❝t♦r✐❛❧ ✿✿ ■♥t❡❣❡r ✲❃ ▼❛②❜❡ ■♥t❡❣❡r

✐♥✈❋❛❝t♦r✐❛❧ ①

⑤ ❡s❋❛❝t♦r✐❛❧ ① ❂ ❏✉st ✭❤❡❛❞ ❬♥ ⑤ ✭♥✱②✮ ❁✲ ♣♦s✐❝✐♦♥❡s❋❛❝t♦r✐❛❧❡s✱ ②❂❂①❪✮

⑤ ♦t❤❡r✇✐s❡ ❂ ◆♦t❤✐♥❣

21.4. Enumeración de los pares de números naturales

Ejercicio 21.4.1. Definir la constante

♣❛r❡s ✿✿ ❬✭■♥t❡❣❡r✱■♥t❡❣❡r✮❪

tal que ♣❛r❡s es la lista de todos los pares de números naturales. Por ejemplo,

❣❤❝✐❃ t❛❦❡ ✶✶ ♣❛r❡s

❬✭✵✱✵✮✱✭✵✱✶✮✱✭✶✱✶✮✱✭✵✱✷✮✱✭✶✱✷✮✱✭✷✱✷✮✱✭✵✱✸✮✱✭✶✱✸✮✱✭✷✱✸✮✱✭✸✱✸✮✱✭✵✱✹✮❪

Solución:

♣❛r❡s ✿✿ ❬✭■♥t❡❣❡r✱■♥t❡❣❡r✮❪

♣❛r❡s ❂ ❬✭①✱②✮ ⑤ ② ❁✲ ❬✵✳✳❪✱ ① ❁✲ ❬✵✳✳②❪❪

388 Capítulo 21. Ecuación con factoriales

21.5. Solución de la ecuación con factoriales

Ejercicio 21.5.1. Definir la constante

s♦❧✉❝✐♦♥❋❛❝t♦r✐❛❧❡s ✿✿ ✭■♥t❡❣❡r✱■♥t❡❣❡r✱■♥t❡❣❡r✮

tal que s♦❧✉❝✐♦♥❋❛❝t♦r✐❛❧❡s es una terna ✭❛✱❜✱❝✮ que es una solución de la ecuación

❛✦ ✯ ❜✦ ❂ ❛✦ ✰ ❜✦ ✰ ❝✦

Calcular el valor de s♦❧✉❝✐♦♥❋❛❝t♦r✐❛❧❡s.

Solución:

s♦❧✉❝✐♦♥❋❛❝t♦r✐❛❧❡s ✿✿ ✭■♥t❡❣❡r✱■♥t❡❣❡r✱■♥t❡❣❡r✮

s♦❧✉❝✐♦♥❋❛❝t♦r✐❛❧❡s ❂ ✭❛✱❜✱❝✮

✇❤❡r❡ ✭❛✱❜✮ ❂ ❤❡❛❞ ❬✭①✱②✮ ⑤ ✭①✱②✮ ❁✲ ♣❛r❡s✱

❡s❋❛❝t♦r✐❛❧ ✭❢ ① ✯ ❢ ② ✲ ❢ ① ✲ ❢ ②✮❪

❢ ❂ ❢❛❝t♦r✐❛❧

❏✉st ❝ ❂ ✐♥✈❋❛❝t♦r✐❛❧ ✭❢ ❛ ✯ ❢ ❜ ✲ ❢ ❛ ✲ ❢ ❜✮

El cálculo es

❣❤❝✐❃ s♦❧✉❝✐♦♥❋❛❝t♦r✐❛❧❡s

✭✸✱✸✱✹✮

Ejercicio 21.5.2. Comprobar con QuickCheck que s♦❧✉❝✐♦♥❋❛❝t♦r✐❛❧❡s es la única solución

de la ecuación

a! × b! = a! + b! + c!

con a, b y c números naturales

Solución: La propiedad es

♣r♦♣❴s♦❧✉❝✐♦♥❋❛❝t♦r✐❛❧❡s ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r ✲❃ Pr♦♣❡rt②

♣r♦♣❴s♦❧✉❝✐♦♥❋❛❝t♦r✐❛❧❡s ① ② ③ ❂

① ❃❂ ✵ ✫✫ ② ❃❂ ✵ ✫✫ ③ ❃❂ ✵ ✫✫ ✭①✱②✱③✮ ✴❂ s♦❧✉❝✐♦♥❋❛❝t♦r✐❛❧❡s

❂❂❃ ♥♦t ✭❢ ① ✯ ❢ ② ❂❂ ❢ ① ✰ ❢ ② ✰ ❢ ③✮

✇❤❡r❡ ❢ ❂ ❢❛❝t♦r✐❛❧

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴s♦❧✉❝✐♦♥❋❛❝t♦r✐❛❧❡s

✯✯✯ ●❛✈❡ ✉♣✦ P❛ss❡❞ ♦♥❧② ✽✻ t❡sts✳

También se puede expresar como

21.5. Solución de la ecuación con factoriales 389

♣r♦♣❴s♦❧✉❝✐♦♥❋❛❝t♦r✐❛❧❡s✬ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r ✲❃ Pr♦♣❡rt②

♣r♦♣❴s♦❧✉❝✐♦♥❋❛❝t♦r✐❛❧❡s✬ ① ② ③ ❂

① ❃❂ ✵ ✫✫ ② ❃❂ ✵ ✫✫ ③ ❃❂ ✵ ✫✫

❢ ① ✯ ❢ ② ❂❂ ❢ ① ✰ ❢ ② ✰ ❢ ③

❂❂❃ ✭①✱②✱③✮ ❂❂ s♦❧✉❝✐♦♥❋❛❝t♦r✐❛❧❡s

✇❤❡r❡ ❢ ❂ ❢❛❝t♦r✐❛❧

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴s♦❧✉❝✐♦♥❋❛❝t♦r✐❛❧❡s

✯✯✯ ●❛✈❡ ✉♣✦ P❛ss❡❞ ♦♥❧② ✵ t❡sts✳

Nota. El ejercicio se basa en el artículo Ecuación con factoriales1 del blog Gaussianos.

1❤tt♣✿✴✴❣❛✉ss✐❛♥♦s✳❝♦♠✴❡❝✉❛❝✐♦♥✲❝♦♥✲❢❛❝t♦r✐❛❧❡s

390 Capítulo 21. Ecuación con factoriales

Capítulo 22

Cuadrados mágicos

Contenido22.1 Reconocimiento de los cuadrados mágicos . . . . . . . . . . . . . . . . 392

22.1.1 Traspuesta de una matriz . . . . . . . . . . . . . . . . . . . . . . 392

22.1.2 Suma de las filas de una matriz . . . . . . . . . . . . . . . . . . 393

22.1.3 Suma de las columnas de una matriz . . . . . . . . . . . . . . . 393

22.1.4 Diagonal principal de una matriz . . . . . . . . . . . . . . . . . 393

22.1.5 Diagonal secundaria de una matriz . . . . . . . . . . . . . . . . 394

22.1.6 Lista con todos los elementos iguales . . . . . . . . . . . . . . . 394

22.1.7 Reconocimiento de matrices cuadradas . . . . . . . . . . . . . . 394

22.1.8 Elementos de una lista de listas . . . . . . . . . . . . . . . . . . 395

22.1.9 Eliminación de la primera ocurrencia de un elemento . . . . . 395

22.1.10 Reconocimiento de permutaciones . . . . . . . . . . . . . . . . 395

22.1.11 Reconocimiento de cuadrados mágicos . . . . . . . . . . . . . . 396

22.2 Cálculo de los cuadrados mágicos . . . . . . . . . . . . . . . . . . . . . 396

22.2.1 Matriz cuadrada correspondiente a una lista de elementos . . . 396

22.2.2 Cálculo de cuadrados mágicos por permutaciones . . . . . . . 397

22.2.3 Cálculo de los cuadradros mágicos mediante generación y poda397

Una matriz cuadrada representa un cuadrado mágico de orden n si el conjunto desus elementos es {1, 2, . . . , n2} y las sumas de cada una de sus filas, columnas y dosdiagonales principales coinciden. Por ejemplo,

2 9 47 5 36 1 8

391

392 Capítulo 22. Cuadrados mágicos

es un cuadrado mágico de orden 3, ya que el conjunto de sus elementos es {1, 2, . . . , 9}y todas sus filas, columnas y diagonales principales suman 15.

Representaremos una matriz numérica como una lista cuyos elementos son las filasdel cuadrado, en forma de listas. Por ejemplo, el cuadrado anterior vendría representa-do por la siguiente lista:

❬❬✷✱ ✾✱ ✹❪✱ ❬✼✱ ✺✱ ✸❪✱ ❬✻✱ ✶✱ ✽❪❪

En los distintos apartados de este capítulo se definirán funciones cuyo objetivo esdecidir si una matriz representa un cuadrado mágico y construirlos.

Nota. Se usan la siguiente librería

✐♠♣♦rt ❉❛t❛✳▲✐st

22.1. Reconocimiento de los cuadrados mágicos

22.1.1. Traspuesta de una matriz

Ejercicio 22.1.1. Definir la función

tr❛s♣✉❡st❛ ✿✿ ❬❬❛❪❪ ✲❃ ❬❬❛❪❪

tal que ✭tr❛s♣✉❡st❛ ♠✮ es la traspuesta de la matriz ♠. Por ejemplo,

tr❛s♣✉❡st❛ ❬❬✶✱✷✱✸❪✱❬✹✱✺✱✻❪❪ ❂❂ ❬❬✶✱✹❪✱❬✷✱✺❪✱❬✸✱✻❪❪

tr❛s♣✉❡st❛ ❬❬✶✱✹❪✱❬✷✱✺❪✱❬✸✱✻❪❪ ❂❂ ❬❬✶✱✷✱✸❪✱❬✹✱✺✱✻❪❪

Solución:

tr❛s♣✉❡st❛ ✿✿ ❬❬❛❪❪ ✲❃ ❬❬❛❪❪

tr❛s♣✉❡st❛ ❬❪ ❂ ❬❪

tr❛s♣✉❡st❛ ✭❬❪✿①ss✮ ❂ tr❛s♣✉❡st❛ ①ss

tr❛s♣✉❡st❛ ✭✭①✿①s✮✿①ss✮ ❂

✭①✿❬❤ ⑤ ✭❤✿❴✮ ❁✲ ①ss❪✮ ✿ tr❛s♣✉❡st❛ ✭①s ✿ ❬t ⑤ ✭❴✿t✮ ❁✲ ①ss❪✮

Una definición equivalente es

tr❛s♣✉❡st❛✬ ✿✿ ❬❬❛❪❪ ✲❃ ❬❬❛❪❪

tr❛s♣✉❡st❛✬ ❂ tr❛♥s♣♦s❡

22.1. Reconocimiento de los cuadrados mágicos 393

22.1.2. Suma de las filas de una matriz

Ejercicio 22.1.2. Definir la función

s✉♠❛s❉❡❋✐❧❛s ✿✿ ◆✉♠ ❛ ❂❃ ❬❬❛❪❪ ✲❃ ❬❛❪

tal que ✭s✉♠❛s❉❡❋✐❧❛s ①ss✮ es la lista de las sumas de las filas de la matriz ①ss. Por ejemplo,

s✉♠❛s❉❡❋✐❧❛s ❬❬✷✱✹✱✵❪✱❬✼✱✶✱✸❪✱❬✻✱✶✱✽❪❪ ❂❂ ❬✻✱✶✶✱✶✺❪

Solución:

s✉♠❛s❉❡❋✐❧❛s ✿✿ ◆✉♠ ❛ ❂❃ ❬❬❛❪❪ ✲❃ ❬❛❪

s✉♠❛s❉❡❋✐❧❛s ❂ ♠❛♣ s✉♠

22.1.3. Suma de las columnas de una matriz

Ejercicio 22.1.3. Definir la función

s✉♠❛s❉❡❈♦❧✉♠♥❛s ✿✿ ◆✉♠ ❛ ❂❃ ❬❬❛❪❪ ✲❃ ❬❛❪

tal que ✭s✉♠❛s❉❡❈♦❧✉♠♥❛s ①ss✮ es la lista de las sumas de las columnas de la matriz ①ss. Por

ejemplo,

s✉♠❛s❉❡❋✐❧❛s ❬❬✷✱✹✱✵❪✱❬✼✱✶✱✸❪✱❬✻✱✶✱✽❪❪ ❂❂ ❬✻✱✶✶✱✶✺❪

Solución:

s✉♠❛s❉❡❈♦❧✉♠♥❛s ✿✿ ◆✉♠ ❛ ❂❃ ❬❬❛❪❪ ✲❃ ❬❛❪

s✉♠❛s❉❡❈♦❧✉♠♥❛s ❂ s✉♠❛s❉❡❋✐❧❛s ✳ tr❛s♣✉❡st❛

22.1.4. Diagonal principal de una matriz

Ejercicio 22.1.4. Definir la función

❞✐❛❣♦♥❛❧Pr❛❧ ✿✿ ❬❬❛❪❪ ✲❃ ❬❛❪

tal que ✭❞✐❛❣♦♥❛❧Pr❛❧ ♠✮ es la diagonal principal de la matriz ♠. Por ejemplo,

❞✐❛❣♦♥❛❧Pr❛❧ ❬❬✸✱✺✱✷❪✱❬✹✱✼✱✶❪✱❬✻✱✾✱✵❪❪ ❂❂ ❬✸✱✼✱✵❪

❞✐❛❣♦♥❛❧Pr❛❧ ❬❬✸✱✺✱✷❪✱❬✹✱✼✱✶❪❪ ❂❂ ❬✸✱✼❪

Solución:

❞✐❛❣♦♥❛❧Pr❛❧ ✿✿ ❬❬❛❪❪ ✲❃ ❬❛❪

❞✐❛❣♦♥❛❧Pr❛❧ ✭✭①✶✿❴✮✿①s✮ ❂ ①✶ ✿ ❞✐❛❣♦♥❛❧Pr❛❧ ❬t❛✐❧ ① ⑤ ① ❁✲ ①s❪

❞✐❛❣♦♥❛❧Pr❛❧ ❴ ❂ ❬❪

394 Capítulo 22. Cuadrados mágicos

22.1.5. Diagonal secundaria de una matriz

Ejercicio 22.1.5. Definir la función

❞✐❛❣♦♥❛❧❙❡❝ ✿✿ ❬❬❛❪❪ ✲❃ ❬❛❪

tal que ✭❞✐❛❣♦♥❛❧❙❡❝ ♠✮ es la diagonal secundaria de la matriz ♠ Por ejemplo,

❞✐❛❣♦♥❛❧❙❡❝ ❬❬✸✱✺✱✷❪✱❬✹✱✼✱✶❪✱❬✻✱✾✱✵❪❪ ❂❂ ❬✻✱✼✱✷❪

❞✐❛❣♦♥❛❧❙❡❝ ❬❬✸✱✺✱✷❪✱❬✹✱✼✱✶❪❪ ❂❂ ❬✹✱✺❪

Solución:

❞✐❛❣♦♥❛❧❙❡❝ ✿✿ ❬❬❛❪❪ ✲❃ ❬❛❪

❞✐❛❣♦♥❛❧❙❡❝ ❂ ❞✐❛❣♦♥❛❧Pr❛❧ ✳ r❡✈❡rs❡

22.1.6. Lista con todos los elementos iguales

Ejercicio 22.1.6. Definir la función

t♦❞♦s■❣✉❛❧❡s ✿✿ ❊q ❛ ❂❃ ❬❛❪ ✲❃ ❇♦♦❧

tal que ✭t♦❞♦s■❣✉❛❧❡s ①s✮ se verifica si todos los elementos de ①s son iguales. Por ejemplo,

t♦❞♦s■❣✉❛❧❡s ❬✷✱✷✱✷❪ ❂❂ ❚r✉❡

t♦❞♦s■❣✉❛❧❡s ❬✷✱✸✱✷❪ ❂❂ ❋❛❧s❡

Solución:

t♦❞♦s■❣✉❛❧❡s ✿✿ ❊q ❛ ❂❃ ❬❛❪ ✲❃ ❇♦♦❧

t♦❞♦s■❣✉❛❧❡s ✭①✿②✿②s✮ ❂ ① ❂❂ ② ✫✫ t♦❞♦s■❣✉❛❧❡s ✭②✿②s✮

t♦❞♦s■❣✉❛❧❡s ❴ ❂ ❚r✉❡

22.1.7. Reconocimiento de matrices cuadradas

Ejercicio 22.1.7. Definir la función

♠❛tr✐③❈✉❛❞r❛❞❛ ✿✿ ❬❬■♥t❪❪ ✲❃ ❇♦♦❧

tal que ✭♠❛tr✐③❈✉❛❞r❛❞❛ ①ss✮ se verifica si ①ss es una matriz cuadrada; es decir, ①ss es una

lista de ♥ elementos y cada elemento de ①ss es una lista de ♥ elementos. Por ejemplo,

♠❛tr✐③❈✉❛❞r❛❞❛ ❬❬✼✱✸❪✱❬✶✱✺❪❪ ❂❂ ❚r✉❡

♠❛tr✐③❈✉❛❞r❛❞❛ ❬❬✼✱✸✱✶❪✱❬✶✱✺✱✷❪❪ ❂❂ ❋❛❧s❡

Solución:

♠❛tr✐③❈✉❛❞r❛❞❛ ✿✿ ❬❬■♥t❪❪ ✲❃ ❇♦♦❧

♠❛tr✐③❈✉❛❞r❛❞❛ ①ss ❂

❛♥❞ ❬❧❡♥❣t❤ ①s ❂❂ ♥ ⑤ ①s ❁✲ ①ss❪

✇❤❡r❡ ♥ ❂ ❧❡♥❣t❤ ①ss

22.1. Reconocimiento de los cuadrados mágicos 395

22.1.8. Elementos de una lista de listas

Ejercicio 22.1.8. Definir la función

❡❧❡♠❡♥t♦s ✿✿ ❬❬❛❪❪ ✲❃ ❬❛❪

tal que ✭❡❧❡♠❡♥t♦s ①ss✮ es la lista de los elementos de ①ss. Por ejemplo,

❡❧❡♠❡♥t♦s ❬❬✼✱✸❪✱❬✶✱✺❪✱❬✸✱✺❪❪ ❂❂ ❬✼✱✸✱✶✱✺✱✸✱✺❪

Solución:

❡❧❡♠❡♥t♦s ✿✿ ❬❬❛❪❪ ✲❃ ❬❛❪

❡❧❡♠❡♥t♦s ❂ ❝♦♥❝❛t

22.1.9. Eliminación de la primera ocurrencia de un elemento

Ejercicio 22.1.9. Definir por recursión la función

❜♦rr❛ ✿✿ ❊q ❛ ❂❃ ❛ ✲❃ ❬❛❪ ✲❃ ❬❛❪

tal que ✭❜♦rr❛ ① ①s✮ es la lista obtenida borrando la primera ocurrencia de ① en la lista ①s. Por

ejemplo,

❜♦rr❛ ✶ ❬✶✱✷✱✶❪ ❂❂ ❬✷✱✶❪

❜♦rr❛ ✸ ❬✶✱✷✱✶❪ ❂❂ ❬✶✱✷✱✶❪

Solución:

❜♦rr❛ ✿✿ ❊q ❛ ❂❃ ❛ ✲❃ ❬❛❪ ✲❃ ❬❛❪

❜♦rr❛ ① ❬❪ ❂ ❬❪

❜♦rr❛ ① ✭②✿②s✮ ⑤ ① ❂❂ ② ❂ ②s

⑤ ♦t❤❡r✇✐s❡ ❂ ② ✿ ❜♦rr❛ ① ②s

22.1.10. Reconocimiento de permutaciones

Ejercicio 22.1.10. Definir por recursión la función

❡sP❡r♠✉t❛❝✐♦♥ ✿✿ ❊q ❛ ❂❃ ❬❛❪ ✲❃ ❬❛❪ ✲❃ ❇♦♦❧

tal que ✭❡sP❡r♠✉t❛❝✐♦♥ ①s ②s✮ se verifica si ①s es una permutación de ②s. Por ejemplo,

❡sP❡r♠✉t❛❝✐♦♥ ❬✶✱✷✱✶❪ ❬✷✱✶✱✶❪ ❂❂ ❚r✉❡

❡sP❡r♠✉t❛❝✐♦♥ ❬✶✱✷✱✶❪ ❬✶✱✷✱✷❪ ❂❂ ❋❛❧s❡

Solución:

❡sP❡r♠✉t❛❝✐♦♥ ✿✿ ❊q ❛ ❂❃ ❬❛❪ ✲❃ ❬❛❪ ✲❃ ❇♦♦❧

❡sP❡r♠✉t❛❝✐♦♥ ❬❪ ❬❪ ❂ ❚r✉❡

❡sP❡r♠✉t❛❝✐♦♥ ❬❪ ✭②✿②s✮ ❂ ❋❛❧s❡

❡sP❡r♠✉t❛❝✐♦♥ ✭①✿①s✮ ②s ❂ ❡❧❡♠ ① ②s ✫✫ ❡sP❡r♠✉t❛❝✐♦♥ ①s ✭❜♦rr❛ ① ②s✮

396 Capítulo 22. Cuadrados mágicos

22.1.11. Reconocimiento de cuadrados mágicos

Ejercicio 22.1.11. Definir la función

❝✉❛❞r❛❞♦▼❛❣✐❝♦ ✿✿ ◆✉♠ ❛ ❂❃ ❬❬❛❪❪ ✲❃ ❇♦♦❧

tal que ✭❝✉❛❞r❛❞♦▼❛❣✐❝♦ ①ss✮ se verifica si ①ss es un cuadrado mágico. Por ejemplo,

❣❤❝✐❃ ❝✉❛❞r❛❞♦▼❛❣✐❝♦ ❬❬✷✱✾✱✹❪✱❬✼✱✺✱✸❪✱❬✻✱✶✱✽❪❪

❚r✉❡

❣❤❝✐❃ ❝✉❛❞r❛❞♦▼❛❣✐❝♦ ❬❬✶✱✷✱✸❪✱❬✹✱✺✱✻❪✱❬✼✱✽✱✾❪❪

❋❛❧s❡

❣❤❝✐❃ ❝✉❛❞r❛❞♦▼❛❣✐❝♦ ❬❬✶✱✶❪✱❬✶✱✶❪❪

❋❛❧s❡

❣❤❝✐❃ ❝✉❛❞r❛❞♦▼❛❣✐❝♦ ❬❬✺✱✽✱✶✷✱✾❪✱❬✶✻✱✶✸✱✶✱✹❪✱❬✷✱✶✵✱✼✱✶✺❪✱❬✶✶✱✸✱✶✹✱✻❪❪

❋❛❧s❡

Solución:

❝✉❛❞r❛❞♦▼❛❣✐❝♦ ①ss ❂

♠❛tr✐③❈✉❛❞r❛❞❛ ①ss ✫✫

❡sP❡r♠✉t❛❝✐♦♥ ✭❡❧❡♠❡♥t♦s ①ss✮ ❬✶✳✳✭❧❡♥❣t❤ ①ss✮❫✷❪ ✫✫

t♦❞♦s■❣✉❛❧❡s ✭s✉♠❛s❉❡❋✐❧❛s ①ss ✰✰

s✉♠❛s❉❡❈♦❧✉♠♥❛s ①ss ✰✰

❬s✉♠ ✭❞✐❛❣♦♥❛❧Pr❛❧ ①ss✮✱

s✉♠ ✭❞✐❛❣♦♥❛❧❙❡❝ ①ss✮❪✮

22.2. Cálculo de los cuadrados mágicos

22.2.1. Matriz cuadrada correspondiente a una lista de elementos

Ejercicio 22.2.1. Definir la función

♠❛tr✐③ ✿✿ ■♥t✲❃ ❬❛❪ ✲❃ ❬❬❛❪❪

tal que ✭♠❛tr✐③ ♥ ①s✮ es la matriz cuadrada de orden n× n cuyos elementos son ①s (se supone

que la longitud de ①s es n2). Por ejemplo,

♠❛tr✐③ ✸ ❬✶✳✳✾❪ ❂❂ ❬❬✶✱✷✱✸❪✱❬✹✱✺✱✻❪✱❬✼✱✽✱✾❪❪

Solución:

♠❛tr✐③ ✿✿ ■♥t ✲❃ ❬❛❪ ✲❃ ❬❬❛❪❪

♠❛tr✐③ ❴ ❬❪ ❂ ❬❪

♠❛tr✐③ ♥ ①s ❂ t❛❦❡ ♥ ①s ✿ ♠❛tr✐③ ♥ ✭❞r♦♣ ♥ ①s✮

22.2. Cálculo de los cuadrados mágicos 397

22.2.2. Cálculo de cuadrados mágicos por permutaciones

Ejercicio 22.2.2. Definir la función

❝✉❛❞r❛❞♦s▼❛❣✐❝♦s ✿✿ ■♥t ✲❃ ❬❬❬■♥t❪❪❪

tal que ✭❝✉❛❞r❛❞♦s▼❛❣✐❝♦s ♥✮ es la lista de los cuadrados mágicos de orden n×n. Por ejemplo,

❣❤❝✐❃ t❛❦❡ ✷ ✭❝✉❛❞r❛❞♦s▼❛❣✐❝♦s ✸✮

❬❬❬✷✱✾✱✹❪✱❬✼✱✺✱✸❪✱❬✻✱✶✱✽❪❪✱ ❬❬✷✱✼✱✻❪✱❬✾✱✺✱✶❪✱❬✹✱✸✱✽❪❪❪

Solución:

❝✉❛❞r❛❞♦s▼❛❣✐❝♦s ✿✿ ■♥t ✲❃ ❬❬❬■♥t❪❪❪

❝✉❛❞r❛❞♦s▼❛❣✐❝♦s ♥ ❂

❬♠ ⑤ ①s ❁✲ ♣❡r♠✉t❛t✐♦♥s ❬✶✳✳♥❫✷❪✱

❧❡t ♠ ❂ ♠❛tr✐③ ♥ ①s✱

❝✉❛❞r❛❞♦▼❛❣✐❝♦ ♠❪

22.2.3. Cálculo de los cuadradros mágicos mediante generación y po-da

Ejercicio 22.2.3. Los cuadrados mágicos de orden 3 tienen la forma

✰✲✲✲✰✲✲✲✰✲✲✲✰

⑤ ❛ ⑤ ❜ ⑤ ❝ ⑤

✰✲✲✲✰✲✲✲✰✲✲✲✰

⑤ ❞ ⑤ ❡ ⑤ ❢ ⑤

✰✲✲✲✰✲✲✲✰✲✲✲✰

⑤ ❣ ⑤ ❤ ⑤ ✐ ⑤

✰✲✲✲✰✲✲✲✰✲✲✲✰

y se pueden construir como sigue:

❛ es un elemento de ❬✶✳✳✾❪,

❜ es un elemento de los restantes (es decir, de ❬✶✳✳✾❪ ❭❭ ❬❛❪),

❝ es un elemento de los restantes,

❛✰❜✰❝ tiene que ser igual a 15,

❞ es un elemento de los restantes,

❣ es un elemento de los restantes,

398 Capítulo 22. Cuadrados mágicos

❛✰❞✰❣ tiene que ser igual a 15,

y así sucesivamente.

Definir la función

❝✉❛❞r❛❞♦s▼❛❣✐❝♦s✸ ✿✿ ❬❬❬■♥t❪❪❪

tal que ❝✉❛❞r❛❞♦s▼❛❣✐❝♦s✸ es la lista de los cuadrados mágicos de orden 3 construidos usando

el proceso anterior. Por ejemplo,

❣❤❝✐❃ t❛❦❡ ✷ ❝✉❛❞r❛❞♦s▼❛❣✐❝♦s✸

❬❬❬✷✱✼✱✻❪✱❬✾✱✺✱✶❪✱❬✹✱✸✱✽❪❪✱❬❬✷✱✾✱✹❪✱❬✼✱✺✱✸❪✱❬✻✱✶✱✽❪❪❪

Solución:

❝✉❛❞r❛❞♦s▼❛❣✐❝♦s✸ ✿✿ ❬❬❬■♥t❪❪❪

❝✉❛❞r❛❞♦s▼❛❣✐❝♦s✸ ❂

❬❬❬❛✱❜✱❝❪✱❬❞✱❡✱❢❪✱❬❣✱❤✱✐❪❪ ⑤

❛ ❁✲ ❬✶✳✳✾❪✱

❜ ❁✲ ❬✶✳✳✾❪ ❭❭ ❬❛❪✱

❝ ❁✲ ❬✶✳✳✾❪ ❭❭ ❬❛✱❜❪✱

❛✰❜✰❝ ❂❂ ✶✺✱

❞ ❁✲ ❬✶✳✳✾❪ ❭❭ ❬❛✱❜✱❝❪✱

❣ ❁✲ ❬✶✳✳✾❪ ❭❭ ❬❛✱❜✱❝✱❞❪✱

❛✰❞✰❣ ❂❂ ✶✺✱

❡ ❁✲ ❬✶✳✳✾❪ ❭❭ ❬❛✱❜✱❝✱❞✱❣❪✱

❝✰❡✰❣ ❂❂ ✶✺✱

✐ ❁✲ ❬✶✳✳✾❪ ❭❭ ❬❛✱❜✱❝✱❞✱❣✱❡❪✱

❛✰❡✰✐ ❂❂ ✶✺✱

❢ ❁✲ ❬✶✳✳✾❪ ❭❭ ❬❛✱❜✱❝✱❞✱❣✱❡✱✐❪✱

❤ ❁✲ ❬✶✳✳✾❪ ❭❭ ❬❛✱❜✱❝✱❞✱❣✱❡✱✐✱❢❪✱

❝✰❢✰✐ ❂❂ ✶✺✱

❞✰❡✰❢ ❂❂ ✶✺❪

Ejercicio 22.2.4. Comprobar que ❝✉❛❞r❛❞♦s▼❛❣✐❝♦s✸ es el mismo conjunto que ✭❝✉❛❞r❛❞♦s▼❛❣✐❝♦s ✸✮.

Solución: La comprobación es

❣❤❝✐❃ ❡sP❡r♠✉t❛❝✐♦♥ ❝✉❛❞r❛❞♦s▼❛❣✐❝♦s✸ ✭❝✉❛❞r❛❞♦s▼❛❣✐❝♦s ✸✮

❚r✉❡

Ejercicio 22.2.5. Comparar los tiempos utilizados en calcular ❝✉❛❞r❛❞♦s▼❛❣✐❝♦s✸ y ✭❝✉❛❞r❛❞♦s▼❛❣✐❝♦s ✸✮

Solución: La comparación es

22.2. Cálculo de los cuadrados mágicos 399

❣❤❝✐❃ ✿s❡t ✰s

❣❤❝✐❃ ❝✉❛❞r❛❞♦s▼❛❣✐❝♦s✸

❬❬❬✷✱✼✱✻❪✱❬✾✱✺✱✶❪✱❬✹✱✸✱✽❪❪✱❬❬✷✱✾✱✹❪✱❬✼✱✺✱✸❪✱❬✻✱✶✱✽❪❪✱ ✳✳✳

✭✵✳✵✷ s❡❝s✱ ✺✸✷✸✹✽ ❜②t❡s✮

❣❤❝✐❃ ✭❝✉❛❞r❛❞♦s▼❛❣✐❝♦s ✸✮

❬❬❬✷✱✾✱✹❪✱❬✼✱✺✱✸❪✱❬✻✱✶✱✽❪❪✱❬❬✷✱✼✱✻❪✱❬✾✱✺✱✶❪✱❬✹✱✸✱✽❪❪✱ ✳✳✳

✭✺✵✳✸✷ s❡❝s✱ ✷✻✶✻✸✺✶✶✷✹ ❜②t❡s✮

400 Capítulo 22. Cuadrados mágicos

Capítulo 23

Enumeraciones de los númerosracionales

Contenido23.1 Numeración de los racionales mediante representaciones hiperbinarias 402

23.1.1 Lista de potencias de dos . . . . . . . . . . . . . . . . . . . . . . 402

23.1.2 Determinación si los dos primeros elementos son iguales auno dado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402

23.1.3 Lista de las representaciones hiperbinarias de n . . . . . . . . . 403

23.1.4 Número de representaciones hiperbinarias de n . . . . . . . . . 403

23.1.5 Sucesiones hiperbinarias . . . . . . . . . . . . . . . . . . . . . . 404

23.2 Numeraciones mediante árboles de Calkin–Wilf . . . . . . . . . . . . . 406

23.2.1 Hijos de un nodo en el árbol de Calvin–Wilf . . . . . . . . . . . 406

23.2.2 Niveles del árbol de Calvin–Wilf . . . . . . . . . . . . . . . . . 407

23.2.3 Sucesión de Calvin–Wilf . . . . . . . . . . . . . . . . . . . . . . 408

23.3 Número de representaciones hiperbinarias mediante la función ❢✉s❝ . 408

23.3.1 La función ❢✉s❝ . . . . . . . . . . . . . . . . . . . . . . . . . . . 408

El objetivo de este caítulo es construir dos enumeraciones de los números racionales.Concretamente,

una enumeración basada en las representaciones hiperbinarias y

una enumeración basada en los los árboles de Calkin–Wilf.

También se incluye la comprobación de la igualdad de las dos sucesiones y una formaalternativa de calcular el número de representaciones hiperbinarias mediante la funciónfucs.

401

402 Capítulo 23. Enumeraciones de los números racionales

Esta relación se basa en los siguientes artículos:

Gaussianos “Sorpresa sumando potencias de 2”1

N. Calkin y H.S. Wilf “Recounting the rationals”2

Wikipedia “Calkin–Wilf tree”3

Nota. Se usan las librerías ▲✐st y ◗✉✐❝❦❈❤❡❝❦:

✐♠♣♦rt ❉❛t❛✳▲✐st

✐♠♣♦rt ❚❡st✳◗✉✐❝❦❈❤❡❝❦

23.1. Numeración de los racionales mediante representa-ciones hiperbinarias

23.1.1. Lista de potencias de dos

Ejercicio 23.1.1. Definir la constante

♣♦t❡♥❝✐❛s❉❡❉♦s ✿✿ ❬■♥t❡❣❡r❪

tal que ♣♦t❡♥❝✐❛s❉❡❉♦s es la lista de las potencias de 2. Por ejemplo,

t❛❦❡ ✶✵ ♣♦t❡♥❝✐❛s❉❡❉♦s ❂❂ ❬✶✱✷✱✹✱✽✱✶✻✱✸✷✱✻✹✱✶✷✽✱✷✺✻✱✺✶✷❪

Solución:

♣♦t❡♥❝✐❛s❉❡❉♦s ✿✿ ❬■♥t❡❣❡r❪

♣♦t❡♥❝✐❛s❉❡❉♦s ❂ ❬✷❫♥ ⑤ ♥ ❁✲ ❬✵✳✳❪❪

23.1.2. Determinación si los dos primeros elementos son iguales a unodado

Ejercicio 23.1.2. Definir la función

❡♠♣✐❡③❛❈♦♥❉♦s ✿✿ ❊q ❛ ❂❃ ❛ ✲❃ ❬❛❪ ✲❃ ❇♦♦❧

tal que ✭❡♠♣✐❡③❛❈♦♥❉♦s ① ②s✮ se verifica si los dos primeros elementos de ②s son iguales a ①.

Por ejemplo,

1❤tt♣✿✴✴❣❛✉ss✐❛♥♦s✳❝♦♠✴s♦r♣r❡s❛✲s✉♠❛♥❞♦✲♣♦t❡♥❝✐❛s✲❞❡✲✷2❤tt♣✿✴✴✇✇✇✳♠❛t❤✳❝❧❡♠s♦♥✳❡❞✉✴⑦❝❛❧❦✐♥✴P❛♣❡rs✴❝❛❧❦✐♥❴✇✐❧❢❴r❡❝♦✉♥t✐♥❣❴r❛t✐♦♥❛❧s✳♣❞❢3❤tt♣✿✴✴❡♥✳✇✐❦✐♣❡❞✐❛✳♦r❣✴✇✐❦✐✴❈❛❧❦✐♥✲❲✐❧❢❴tr❡❡

23.1. Numeración de los racionales mediante representaciones hiperbinarias 403

❡♠♣✐❡③❛❈♦♥❉♦s ✺ ❬✺✱✺✱✸✱✼❪ ❂❂ ❚r✉❡

❡♠♣✐❡③❛❈♦♥❉♦s ✺ ❬✺✱✸✱✺✱✼❪ ❂❂ ❋❛❧s❡

❡♠♣✐❡③❛❈♦♥❉♦s ✺ ❬✺✱✺✱✺✱✼❪ ❂❂ ❚r✉❡

Solución:

❡♠♣✐❡③❛❈♦♥❉♦s ① ✭②✶✿②✷✿②s✮ ❂ ②✶ ❂❂ ① ✫✫ ②✷ ❂❂ ①

❡♠♣✐❡③❛❈♦♥❉♦s ① ❴ ❂ ❋❛❧s❡

23.1.3. Lista de las representaciones hiperbinarias de n

Ejercicio 23.1.3. Definir la función

r❡♣r❡s❡♥t❛❝✐♦♥❡s❍❇ ✿✿ ■♥t❡❣❡r ✲❃ ❬❬■♥t❡❣❡r❪❪

tal que ✭r❡♣r❡s❡♥t❛❝✐♦♥❡s❍❇ ♥✮ es la lista de las representaciones hiperbinarias del número

♥ como suma de potencias de 2 donde cada sumando aparece como máximo 2 veces. Por ejemplo

r❡♣r❡s❡♥t❛❝✐♦♥❡s❍❇ ✺ ❂❂ ❬❬✶✱✷✱✷❪✱❬✶✱✹❪❪

r❡♣r❡s❡♥t❛❝✐♦♥❡s❍❇ ✻ ❂❂ ❬❬✶✱✶✱✷✱✷❪✱❬✶✱✶✱✹❪✱❬✷✱✹❪❪

Solución:

r❡♣r❡s❡♥t❛❝✐♦♥❡s❍❇ ✿✿ ■♥t❡❣❡r ✲❃ ❬❬■♥t❡❣❡r❪❪

r❡♣r❡s❡♥t❛❝✐♦♥❡s❍❇ ♥ ❂ r❡♣r❡s❡♥t❛❝✐♦♥❡s❍❇✬ ♥ ♣♦t❡♥❝✐❛s❉❡❉♦s

r❡♣r❡s❡♥t❛❝✐♦♥❡s❍❇✬ ♥ ✭①✿①s✮

⑤ ♥ ❂❂ ✵ ❂ ❬❬❪❪

⑤ ① ❂❂ ♥ ❂ ❬❬①❪❪

⑤ ① ❁ ♥ ❂ ❬①✿②s ⑤ ②s ❁✲ r❡♣r❡s❡♥t❛❝✐♦♥❡s❍❇✬ ✭♥✲①✮ ✭①✿①s✮✱

♥♦t ✭❡♠♣✐❡③❛❈♦♥❉♦s ① ②s✮❪ ✰✰

r❡♣r❡s❡♥t❛❝✐♦♥❡s❍❇✬ ♥ ①s

⑤ ♦t❤❡r✇✐s❡ ❂ ❬❪

23.1.4. Número de representaciones hiperbinarias de n

Ejercicio 23.1.4. Definir la función

♥❘❡♣r❡s❡♥t❛❝✐♦♥❡s❍❇ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

tal que ✭♥❘❡♣r❡s❡♥t❛❝✐♦♥❡s❍❇ ♥✮ es el número de las representaciones hiperbinarias del nú-

mero ♥ como suma de potencias de 2 donde cada sumando aparece como máximo 2 veces. Por

ejemplo,

404 Capítulo 23. Enumeraciones de los números racionales

❣❤❝✐❃ ❬♥❘❡♣r❡s❡♥t❛❝✐♦♥❡s❍❇ ♥ ⑤ ♥ ❁✲ ❬✵✳✳✷✵❪❪

❬✶✱✶✱✷✱✶✱✸✱✷✱✸✱✶✱✹✱✸✱✺✱✷✱✺✱✸✱✹✱✶✱✺✱✹✱✼✱✸✱✽❪

Solución:

♥❘❡♣r❡s❡♥t❛❝✐♦♥❡s❍❇ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

♥❘❡♣r❡s❡♥t❛❝✐♦♥❡s❍❇ ❂ ❣❡♥❡r✐❝▲❡♥❣t❤ ✳ r❡♣r❡s❡♥t❛❝✐♦♥❡s❍❇

23.1.5. Sucesiones hiperbinarias

Ejercicio 23.1.5. Definir la función

t❡r♠✐♥♦ ✿✿ ■♥t❡❣❡r ✲❃ ✭■♥t❡❣❡r✱■♥t❡❣❡r✮

tal que ✭t❡r♠✐♥♦ ♥✮ es el par formado por el número de representaciones hiperbinarias de ♥ y

de ♥✰✶ (que se interpreta como su cociente). Por ejemplo,

t❡r♠✐♥♦ ✹ ❂❂ ✭✸✱✷✮

Solución:

t❡r♠✐♥♦ ✿✿ ■♥t❡❣❡r ✲❃ ✭■♥t❡❣❡r✱■♥t❡❣❡r✮

t❡r♠✐♥♦ ♥ ❂ ✭♥❘❡♣r❡s❡♥t❛❝✐♦♥❡s❍❇ ♥✱ ♥❘❡♣r❡s❡♥t❛❝✐♦♥❡s❍❇ ✭♥✰✶✮✮

Ejercicio 23.1.6. Definir la función

s✉❝❡s✐♦♥❍❇ ✿✿ ❬✭■♥t❡❣❡r✱■♥t❡❣❡r✮❪

s✉❝❡s✐♦♥❍❇ es la la sucesión cuyo témino ♥–ésimo es ✭t❡r♠✐♥♦ ♥✮; es decir, el par formado por

el número de representaciones hiperbinarias de ♥ y de ♥✰✶. Por ejemplo,

❣❤❝✐❃ t❛❦❡ ✶✵ s✉❝❡s✐♦♥❍❇

❬✭✶✱✶✮✱✭✶✱✷✮✱✭✷✱✶✮✱✭✶✱✸✮✱✭✸✱✷✮✱✭✷✱✸✮✱✭✸✱✶✮✱✭✶✱✹✮✱✭✹✱✸✮✱✭✸✱✺✮❪

Solución:

s✉❝❡s✐♦♥❍❇ ✿✿ ❬✭■♥t❡❣❡r✱■♥t❡❣❡r✮❪

s✉❝❡s✐♦♥❍❇ ❂ ❬t❡r♠✐♥♦ ♥ ⑤ ♥ ❁✲ ❬✵✳✳❪❪

Ejercicio 23.1.7. Comprobar con QuickCheck que, para todo ♥, ✭♥❘❡♣r❡s❡♥t❛❝✐♦♥❡s❍❇ ♥✮ y

✭♥❘❡♣r❡s❡♥t❛❝✐♦♥❡s❍❇ ✭♥✰✶✮✮ son primos entre sí.

Solución: La propiedad es

23.1. Numeración de los racionales mediante representaciones hiperbinarias 405

♣r♦♣❴✐rr❡❞✉❝✐❜❧❡s ✿✿ ■♥t❡❣❡r ✲❃ Pr♦♣❡rt②

♣r♦♣❴✐rr❡❞✉❝✐❜❧❡s ♥ ❂

♥ ❃❂ ✵ ❂❂❃

❣❝❞ ✭♥❘❡♣r❡s❡♥t❛❝✐♦♥❡s❍❇ ♥✮ ✭♥❘❡♣r❡s❡♥t❛❝✐♦♥❡s❍❇ ✭♥✰✶✮✮ ❂❂ ✶

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴✐rr❡❞✉❝✐❜❧❡s

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

Ejercicio 23.1.8. Comprobar con QuickCheck que todos los elementos de la s✉❝❡s✐♦♥❍❇ son

distintos.

Solución: La propiedad es

♣r♦♣❴❞✐st✐♥t♦s ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r ✲❃ ❇♦♦❧

♣r♦♣❴❞✐st✐♥t♦s ♥ ♠ ❂

t❡r♠✐♥♦ ♥✬ ✴❂ t❡r♠✐♥♦ ♠✬

✇❤❡r❡ ♥✬ ❂ ❛❜s ♥

♠✬ ❂ ♥✬ ✰ ❛❜s ♠ ✰ ✶

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴❞✐st✐♥t♦s

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

Ejercicio 23.1.9. Definir la función

❝♦♥t❡♥✐❞♦ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r ✲❃ ❇♦♦❧

tal que ✭❝♦♥t❡♥✐❞♦ ♥✮ se verifica si la expresiones reducidas de todas las fracciones ①✴②, con ①

e ② entre ✶ y ♥, pertenecen a la s✉❝❡s✐♦♥❍❇. Por ejemplo,

❝♦♥t❡♥✐❞♦s ✺ ❂❂ ❚r✉❡

Solución:

❝♦♥t❡♥✐❞♦ ✿✿ ■♥t❡❣❡r ✲❃ ❇♦♦❧

❝♦♥t❡♥✐❞♦ ♥ ❂

❛♥❞ ❬♣❡rt❡♥❡❝❡ ✭r❡❞✉❝✐❞❛ ✭①✱②✮✮ s✉❝❡s✐♦♥❍❇ ⑤

① ❁✲ ❬✶✳✳♥❪✱ ② ❁✲ ❬✶✳✳♥❪❪

✇❤❡r❡ ♣❡rt❡♥❡❝❡ ① ✭②✿②s✮ ❂ ① ❂❂ ② ⑤⑤ ♣❡rt❡♥❡❝❡ ① ②s

r❡❞✉❝✐❞❛ ✭①✱②✮ ❂ ✭① ❵❞✐✈❵ ③✱ ② ❵❞✐✈❵ ③✮

✇❤❡r❡ ③ ❂ ❣❝❞ ① ②

406 Capítulo 23. Enumeraciones de los números racionales

Ejercicio 23.1.10. Definir la función

✐♥❞✐❝❡ ✿✿ ✭■♥t❡❣❡r✱■♥t❡❣❡r✮ ✲❃ ■♥t❡❣❡r

tal que ✭✐♥❞✐❝❡ ✭❛✱❜✮✮ es el índice del par ✭❛✱❜✮ en la sucesión de los racionales. Por ejemplo,

✐♥❞✐❝❡ ✭✸✱✷✮ ❂❂ ✹

Solución:

✐♥❞✐❝❡ ✿✿ ✭■♥t❡❣❡r✱■♥t❡❣❡r✮ ✲❃ ■♥t❡❣❡r

✐♥❞✐❝❡ ✭❛✱❜✮ ❂ ❤❡❛❞ ❬♥ ⑤ ✭♥✱✭①✱②✮✮ ❁✲ ③✐♣ ❬✵✳✳❪ s✉❝❡s✐♦♥❍❇✱

✭①✱②✮ ❂❂ ✭❛✱❜✮❪

23.2. Numeraciones mediante árboles de Calkin–Wilf

El árbol de Calkin–Wilf es el árbol definido por las siguientes reglas:

El nodo raíz es el (1, 1)

Los hijos del nodo (x, y) son (x, x + y) y (x + y, y)

Por ejemplo, los 4 primeros niveles del árbol de Calkin-Wilf son

✭✶✱✶✮

✰✲✲✲✲✲✲✲✲✲✲✲✰✲✲✲✲✲✲✲✲✲✲✲✰

⑤ ⑤

✭✶✱✷✮ ✭✷✱✶✮

⑤ ⑤

✰✲✲✲✲✲✰✲✲✲✲✲✰ ✰✲✲✲✲✲✰✲✲✲✲✲✰

⑤ ⑤ ⑤ ⑤

✭✶✱✸✮ ✭✸✱✷✮ ✭✷✱✸✮ ✭✸✱✶✮

⑤ ⑤ ⑤ ⑤

✰✲✲✰✲✲✰ ✰✲✲✰✲✲✰ ✰✲✲✰✲✲✰ ✰✲✲✰✲✲✰

⑤ ⑤ ⑤ ⑤ ⑤ ⑤ ⑤ ⑤

✭✶✱✹✮ ✭✹✱✸✮ ✭✸✱✺✮ ✭✺✱✷✮ ✭✷✱✺✮ ✭✺✱✸✮ ✭✸✱✹✮ ✭✹✱✶✮

23.2.1. Hijos de un nodo en el árbol de Calvin–Wilf

Ejercicio 23.2.1. Definir la función

s✉❝❡s♦r❡s ✿✿ ✭■♥t❡❣❡r✱■♥t❡❣❡r✮ ✲❃ ❬✭■♥t❡❣❡r✱■♥t❡❣❡r✮❪

23.2. Numeraciones mediante árboles de Calkin–Wilf 407

tal que ✭s✉❝❡s♦r❡s ✭①✱②✮✮ es la lista de los hijos del par ✭①✱②✮ en el árbol de Calkin–Wilf. Por

ejemplo,

s✉❝❡s♦r❡s ✭✸✱✷✮ ❂❂ ❬✭✸✱✺✮✱✭✺✱✷✮❪

Solución:

s✉❝❡s♦r❡s ✿✿ ✭■♥t❡❣❡r✱■♥t❡❣❡r✮ ✲❃ ❬✭■♥t❡❣❡r✱■♥t❡❣❡r✮❪

s✉❝❡s♦r❡s ✭①✱②✮ ❂ ❬✭①✱①✰②✮✱✭①✰②✱②✮❪

Ejercicio 23.2.2. Definir la función

s✐❣✉✐❡♥t❡ ✿✿ ❬✭■♥t❡❣❡r✱■♥t❡❣❡r✮❪ ✲❃ ❬✭■♥t❡❣❡r✱■♥t❡❣❡r✮❪

tal que ✭s✐❣✉✐❡♥t❡ ①s✮ es la lista formada por los hijos de los elementos de ①s en el árbol de

Calkin–Wilf. Por ejemplo,

❣❤❝✐❃ s✐❣✉✐❡♥t❡ ❬✭✶✱✸✮✱✭✸✱✷✮✱✭✷✱✸✮✱✭✸✱✶✮❪

❬✭✶✱✹✮✱✭✹✱✸✮✱✭✸✱✺✮✱✭✺✱✷✮✱✭✷✱✺✮✱✭✺✱✸✮✱✭✸✱✹✮✱✭✹✱✶✮❪

Solución:

s✐❣✉✐❡♥t❡ ✿✿ ❬✭■♥t❡❣❡r✱■♥t❡❣❡r✮❪ ✲❃ ❬✭■♥t❡❣❡r✱■♥t❡❣❡r✮❪

s✐❣✉✐❡♥t❡ ①s ❂ ❬♣ ⑤ ① ❁✲ ①s✱ ♣ ❁✲ s✉❝❡s♦r❡s ①❪

23.2.2. Niveles del árbol de Calvin–Wilf

Ejercicio 23.2.3. Definir la constante

♥✐✈❡❧❡s❈❛❧❦✐♥❲✐❧❢ ✿✿ ❬❬✭■♥t❡❣❡r✱■♥t❡❣❡r✮❪❪

tal que ♥✐✈❡❧❡s❈❛❧❦✐♥❲✐❧❢ es la lista de los niveles del árbol de Calkin–Wilf. Por ejemplo,

❣❤❝✐❃ t❛❦❡ ✹ ♥✐✈❡❧❡s❈❛❧❦✐♥❲✐❧❢

❬❬✭✶✱✶✮❪✱

❬✭✶✱✷✮✱✭✷✱✶✮❪✱

❬✭✶✱✸✮✱✭✸✱✷✮✱✭✷✱✸✮✱✭✸✱✶✮❪✱

❬✭✶✱✹✮✱✭✹✱✸✮✱✭✸✱✺✮✱✭✺✱✷✮✱✭✷✱✺✮✱✭✺✱✸✮✱✭✸✱✹✮✱✭✹✱✶✮❪❪

Solución:

♥✐✈❡❧❡s❈❛❧❦✐♥❲✐❧❢ ✿✿ ❬❬✭■♥t❡❣❡r✱■♥t❡❣❡r✮❪❪

♥✐✈❡❧❡s❈❛❧❦✐♥❲✐❧❢ ❂ ✐t❡r❛t❡ s✐❣✉✐❡♥t❡ ❬✭✶✱✶✮❪

408 Capítulo 23. Enumeraciones de los números racionales

23.2.3. Sucesión de Calvin–Wilf

Ejercicio 23.2.4. Definir la constante

s✉❝❡s✐♦♥❈❛❧❦✐♥❲✐❧❢ ✿✿ ❬✭■♥t❡❣❡r✱■♥t❡❣❡r✮❪

tal que s✉❝❡s✐♦♥❈❛❧❦✐♥❲✐❧❢ es la lista correspondiente al recorrido en anchura del árbol de

Calkin–Wilf. Por ejemplo,

❣❤❝✐❃ t❛❦❡ ✶✵ s✉❝❡s✐♦♥❈❛❧❦✐♥❲✐❧❢

❬✭✶✱✶✮✱✭✶✱✷✮✱✭✷✱✶✮✱✭✶✱✸✮✱✭✸✱✷✮✱✭✷✱✸✮✱✭✸✱✶✮✱✭✶✱✹✮✱✭✹✱✸✮✱✭✸✱✺✮❪

Solución:

s✉❝❡s✐♦♥❈❛❧❦✐♥❲✐❧❢ ✿✿ ❬✭■♥t❡❣❡r✱■♥t❡❣❡r✮❪

s✉❝❡s✐♦♥❈❛❧❦✐♥❲✐❧❢ ❂ ❝♦♥❝❛t ♥✐✈❡❧❡s❈❛❧❦✐♥❲✐❧❢

Ejercicio 23.2.5. Definir la función

✐❣✉❛❧❴s✉❝❡s✐♦♥❴❍❇❴❈❛❧❦✐♥❲✐❧❢ ✿✿ ■♥t ✲❃ ❇♦♦❧

tal que ✭✐❣✉❛❧❴s✉❝❡s✐♦♥❴❍❇❴❈❛❧❦✐♥❲✐❧❢ ♥✮ se verifica si los ♥ primeros términos de la su-

cesión HB son iguales que los de la sucesión de Calkin–Wilf. Por ejemplo,

✐❣✉❛❧❴s✉❝❡s✐♦♥❴❍❇❴❈❛❧❦✐♥❲✐❧❢ ✷✵ ❂❂ ❚r✉❡

Solución:

✐❣✉❛❧❴s✉❝❡s✐♦♥❴❍❇❴❈❛❧❦✐♥❲✐❧❢ ✿✿ ■♥t ✲❃ ❇♦♦❧

✐❣✉❛❧❴s✉❝❡s✐♦♥❴❍❇❴❈❛❧❦✐♥❲✐❧❢ ♥ ❂

t❛❦❡ ♥ s✉❝❡s✐♦♥❈❛❧❦✐♥❲✐❧❢ ❂❂ t❛❦❡ ♥ s✉❝❡s✐♦♥❍❇

23.3. Número de representaciones hiperbinarias median-te la función ❢✉s❝

23.3.1. La función ❢✉s❝

Ejercicio 23.3.1. Definir la función

❢✉s❝ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

tal que

❢✉s❝✭✵✮ ❂ ✶

❢✉s❝✭✷♥✰✶✮ ❂ ❢✉s❝✭♥✮

❢✉s❝✭✷♥✰✷✮ ❂ ❢✉s❝✭♥✰✶✮✰❢✉s❝✭♥✮

23.3. Número de representaciones hiperbinarias mediante la función ❢✉s❝ 409

Por ejemplo,

❢✉s❝ ✹ ❂❂ ✸

Solución:

❢✉s❝ ✿✿ ■♥t❡❣❡r ✲❃ ■♥t❡❣❡r

❢✉s❝ ✵ ❂ ✶

❢✉s❝ ♥ ⑤ ♦❞❞ ♥ ❂ ❢✉s❝ ✭✭♥✲✶✮ ❵❞✐✈❵ ✷✮

⑤ ♦t❤❡r✇✐s❡ ❂ ❢✉s❝✭♠✰✶✮ ✰ ❢✉s❝ ♠

✇❤❡r❡ ♠ ❂ ✭♥✲✷✮ ❵❞✐✈❵ ✷

Ejercicio 23.3.2. Comprobar con QuickCheck que, para todo ♥, ✭❢✉s❝ ♥✮ es el número de las

representaciones hiperbinarias del número ♥ como suma de potencias de 2 donde cada sumando

aparece como máximo 2 veces; es decir, que las funciones ❢✉s❝ y ♥❘❡♣r❡s❡♥t❛❝✐♦♥❡s❍❇ son

equivalentes.

Solución: La propiedad es

♣r♦♣❴❢✉s❝ ✿✿ ■♥t❡❣❡r ✲❃ ❇♦♦❧

♣r♦♣❴❢✉s❝ ♥ ❂ ♥❘❡♣r❡s❡♥t❛❝✐♦♥❡s❍❇ ♥✬ ❂❂ ❢✉s❝ ♥✬

✇❤❡r❡ ♥✬ ❂ ❛❜s ♥

La comprobación es

❣❤❝✐❃ q✉✐❝❦❈❤❡❝❦ ♣r♦♣❴❢✉s❝

✰✰✰ ❖❑✱ ♣❛ss❡❞ ✶✵✵ t❡sts✳

410 Capítulo 23. Enumeraciones de los números racionales

Parte IV

Apéndices

411

Apéndice A

Resumen de funciones predefinidas deHaskell

1. ① ✰ ② es la suma de ① e ②.

2. ① ✲ ② es la resta de ① e ②.

3. ① ✴ ② es el cociente de ① entre ②.

4. ① ✂ ② es ① elevado a ②.

5. ① ❂❂ ② se verifica si ① es igual a ②.

6. ① ✴❂ ② se verifica si ① es distinto de ②.

7. ① ❁ ② se verifica si ① es menor que ②.

8. ① ❁❂ ② se verifica si ① es menor o igual que ②.

9. ① ❃ ② se verifica si ① es mayor que ②.

10. ① ❃❂ ② se verifica si ① es mayor o igual que ②.

11. ① ✫✫ ② es la conjunción de ① e ②.

12. ① ⑤⑤ ② es la disyunción de ① e ②.

13. ①✿②s es la lista obtenida añadiendo ① al principio de ②s.

14. ①s ✰✰ ②s es la concatenación de ①s e ②s.

15. ①s ✦✦ ♥ es el elemento ♥–ésimo de ①s.16. ❢ ✳ ❣ es la composición de ❢ y ❣.

17. ❛❜s ① es el valor absoluto de ①.18. ❛♥❞ ①s es la conjunción de la lista de booleanos ①s.19. ❝❡✐❧✐♥❣ ① es el menor entero no menor que ①.

20. ❝❤r ♥ es el carácter cuyo código ASCII es ♥.21. ❝♦♥❝❛t ①ss es la concatenación de la lista de listas ①ss.22. ❝♦♥st ① ② es ①.

413

414 Apéndice A. Resumen de funciones predefinidas de Haskell

23. ❝✉rr② ❢ es la versión curryficada de la función ❢.

24. ❞✐✈ ① ② es la división entera de ① entre ②.

25. ❞r♦♣ ♥ ①s borra los ♥ primeros elementos de ①s.

26. ❞r♦♣❲❤✐❧❡ ♣ ①s borra el mayor prefijo de ①s cuyos elementos satisfacen el pre-dicado ♣.

27. ❡❧❡♠ ① ②s se verifica si ① pertenece a ②s.

28. ❡✈❡♥ ① se verifica si ① es par.29. ❢✐❧t❡r ♣ ①s es la lista de elementos de la lista ①s que verifican el predicado ♣.

30. ❢❧✐♣ ❢ ① ② es ❢ ② ①.

31. ❢❧♦♦r ① es el mayor entero no mayor que ①.32. ❢♦❧❞❧ ❢ ❡ ①s pliega ①s de izquierda a derecha usando el operador f y el valor

inicial ❡.33. ❢♦❧❞r ❢ ❡ ①s pliega ①s de derecha a izquierda usando el operador f y el valor

inicial ❡.34. ❢r♦♠■♥t❡❣r❛❧ ① transforma el número entero ① al tipo numérico correspon-

diente.35. ❢st ♣ es el primer elemento del par ♣.

36. ❣❝❞ ① ② es el máximo común divisor de de ① e ②.

37. ❤❡❛❞ ①s es el primer elemento de la lista ①s.38. ✐♥✐t ①s es la lista obtenida eliminando el último elemento de ①s.39. ✐s❙♣❛❝❡ ① se verifica si ① es un espacio.

40. ✐s❯♣♣❡r ① se verifica si ① está en mayúscula.

41. ✐s▲♦✇❡r ① se verifica si ① está en minúscula.42. ✐s❆❧♣❤❛ ① se verifica si ① es un carácter alfabético.

43. ✐s❉✐❣✐t ① se verifica si ① es un dígito.

44. ✐s❆❧♣❤❛◆✉♠ ① se verifica si ① es un carácter alfanumérico.

45. ✐t❡r❛t❡ ❢ ① es la lista ❬①✱ ❢✭①✮✱ ❢✭❢✭①✮✮✱ ✳✳✳❪.46. ❧❛st ①s es el último elemento de la lista ①s.47. ❧❡♥❣t❤ ①s es el número de elementos de la lista ①s.

48. ♠❛♣ ❢ ①s es la lista obtenida aplicado ❢ a cada elemento de ①s.

49. ♠❛① ① ② es el máximo de ① e ②.

50. ♠❛①✐♠✉♠ ①s es el máximo elemento de la lista ①s.51. ♠✐♥ ① ② es el mínimo de ① e ②.

52. ♠✐♥✐♠✉♠ ①s es el mínimo elemento de la lista ①s.53. ♠♦❞ ① ② es el resto de ① entre ②.

54. ♥♦t ① es la negación lógica del booleano ①.

415

55. ♥♦❊❧❡♠ ① ②s se verifica si ① no pertenece a ②s.

56. ♥✉❧❧ ①s se verifica si ①s es la lista vacía.57. ♦❞❞ ① se verifica si ① es impar.58. ♦r ①s es la disyunción de la lista de booleanos ①s.59. ♦r❞ ❝ es el código ASCII del carácter ❝.60. ♣r♦❞✉❝t ①s es el producto de la lista de números ①s.

61. r❡♠ ① ② es el resto de ① entre ②.

62. r❡♣❡❛t ① es la lista infinita ❬①✱ ①✱ ①✱ ✳✳✳❪.

63. r❡♣❧✐❝❛t❡ ♥ ① es la lista formada por ♥ veces el elemento ①.

64. r❡✈❡rs❡ ①s es la inversa de la lista ①s.65. r♦✉♥❞ ① es el redondeo de ① al entero más cercano.66. s❝❛♥r ❢ ❡ ①s es la lista de los resultados de plegar ①s por la derecha con ❢ y ❡.67. s❤♦✇ ① es la represantación de ① como cadena.68. s✐❣♥✉♠ ① es 1 si ① es positivo, 0 si ① es cero y -1 si ① es negativo.

69. s♥❞ ♣ es el segundo elemento del par ♣.

70. s♣❧✐t❆t ♥ ①s es ✭t❛❦❡ ♥ ①s✱ ❞r♦♣ ♥ ①s✮.

71. sqrt ① es la raíz cuadrada de ①.

72. s✉♠ ①s es la suma de la lista numérica ①s.73. t❛✐❧ ①s es la lista obtenida eliminando el primer elemento de ①s.74. t❛❦❡ ♥ ①s es la lista de los ♥ primeros elementos de ①s.75. t❛❦❡❲❤✐❧❡ ♣ ①s es el mayor prefijo de ①s cuyos elementos satisfacen el predi-

cado ♣.76. ✉♥❝✉rr② ❢ es la versión cartesiana de la función ❢.

77. ✉♥t✐❧ ♣ ❢ ① aplica ❢ a ① hasta que se verifique ♣.

78. ③✐♣ ①s ②s es la lista de pares formado por los correspondientes elementos de①s e ②s.

79. ③✐♣❲✐t❤ ❢ ①s ②s se obtiene aplicando ❢ a los correspondientes elementos de①s e ②s.

416 Apéndice A. Resumen de funciones predefinidas de Haskell

Apéndice B

Método de Pólya para la resolución deproblemas

B.1. Método de Pólya para la resolución de problemas ma-temáticos

Para resolver un problema se necesita:

Paso 1: Entender el problema

¿Cuál es la incógnita?, ¿Cuáles son los datos?

¿Cuál es la condición? ¿Es la condición suficiente para determinar la incógnita?¿Es insuficiente? ¿Redundante? ¿Contradictoria?

Paso 2: Configurar un plan

¿Te has encontrado con un problema semejante? ¿O has visto el mismo problemaplanteado en forma ligeramente diferente?

¿Conoces algún problema relacionado con éste? ¿Conoces algún teorema que tepueda ser útil? Mira atentamente la incógnita y trata de recordar un problema quesea familiar y que tenga la misma incógnita o una incógnita similar.

He aquí un problema relacionado al tuyo y que ya has resuelto ya. ¿Puedes utili-zarlo? ¿Puedes utilizar su resultado? ¿Puedes emplear su método? ¿Te hace faltaintroducir algún elemento auxiliar a fin de poder utilizarlo?

¿Puedes enunciar al problema de otra forma? ¿Puedes plantearlo en forma dife-rente nuevamente? Recurre a las definiciones.

417

418 Apéndice B. Método de Pólya para la resolución de problemas

Si no puedes resolver el problema propuesto, trata de resolver primero algún pro-blema similar. ¿Puedes imaginarte un problema análogo un tanto más accesible?¿Un problema más general? ¿Un problema más particular? ¿Un problema análo-go? ¿Puede resolver una parte del problema? Considera sólo una parte de la con-dición; descarta la otra parte; ¿en qué medida la incógnita queda ahora determi-nada? ¿En qué forma puede variar? ¿Puedes deducir algún elemento útil de losdatos? ¿Puedes pensar en algunos otros datos apropiados para determinar la in-cógnita? ¿Puedes cambiar la incógnita? ¿Puedes cambiar la incógnita o los datos,o ambos si es necesario, de tal forma que estén más cercanos entre sí?

¿Has empleado todos los datos? ¿Has empleado toda la condición? ¿Has conside-rado todas las nociones esenciales concernientes al problema?

Paso 3: Ejecutar el plan

Al ejercutar tu plan de la solución, comprueba cada uno de los pasos

¿Puedes ver claramente que el paso es correcto? ¿Puedes demostrarlo?

Paso 4: Examinar la solución obtenida

¿Puedes verificar el resultado? ¿Puedes el razonamiento?

¿Puedes obtener el resultado en forma diferente? ¿Puedes verlo de golpe? ¿Puedesemplear el resultado o el método en algún otro problema?

G. Polya “Cómo plantear y resolver problemas” (Ed. Trillas, 1978) p. 19

B.2. Método de Pólya para resolver problemas de progra-mación

Para resolver un problema se necesita:

Paso 1: Entender el problema

¿Cuáles son las argumentos? ¿Cuál es el resultado? ¿Cuál es nombre de la función?¿Cuál es su tipo?

¿Cuál es la especificación del problema? ¿Puede satisfacerse la especificación? ¿Esinsuficiente? ¿Redundante? ¿Contradictoria? ¿Qué restricciones se suponen sobrelos argumentos y el resultado?

B.2. Método de Pólya para resolver problemas de programación 419

¿Puedes descomponer el problema en partes? Puede ser útil dibujar diagramascon ejemplos de argumentos y resultados.

Paso 2: Diseñar el programa

¿Te has encontrado con un problema semejante? ¿O has visto el mismo problemaplanteado en forma ligeramente diferente?

¿Conoces algún problema relacionado con éste? ¿Conoces alguna función que tepueda ser útil? Mira atentamente el tipo y trata de recordar un problema que seafamiliar y que tenga el mismo tipo o un tipo similar.

¿Conoces algún problema familiar con una especificación similar?

He aquí un problema relacionado al tuyo y que ya has resuelto. ¿Puedes utilizarlo?¿Puedes utilizar su resultado? ¿Puedes emplear su método? ¿Te hace falta intro-ducir alguna función auxiliar a fin de poder utilizarlo?

Si no puedes resolver el problema propuesto, trata de resolver primero algún pro-blema similar. ¿Puedes imaginarte un problema análogo un tanto más accesible?¿Un problema más general? ¿Un problema más particular? ¿Un problema análogo?

¿Puede resolver una parte del problema? ¿Puedes deducir algún elemento útil delos datos? ¿Puedes pensar en algunos otros datos apropiados para determinar laincógnita? ¿Puedes cambiar la incógnita? ¿Puedes cambiar la incógnita o los datos,o ambos si es necesario, de tal forma que estén más cercanos entre sí?

¿Has empleado todos los datos? ¿Has empleado todas las restricciones sobre losdatos? ¿Has considerado todas los requisitos de la especificación?

Paso 3: Escribir el programa

Al escribir el programa, comprueba cada uno de los pasos y funciones auxiliares.

¿Puedes ver claramente que cada paso o función auxiliar es correcta?

Puedes escribir el programa en etapas. Piensas en los diferentes casos en los quese divide el problema; en particular, piensas en los diferentes casos para los da-tos. Puedes pensar en el cálculo de los casos independientemente y unirlos paraobtener el resultado final

Puedes pensar en la solución del problema descomponiéndolo en problemas condatos más simples y uniendo las soluciones parciales para obtener la solución delproblema; esto es, por recursión.

420 Apéndice B. Método de Pólya para la resolución de problemas

En su diseño se puede usar problemas más generales o más particulares. Escribelas soluciones de estos problemas; ellas puede servir como guía para la solucióndel problema original, o se pueden usar en su solución.

¿Puedes apoyarte en otros problemas que has resuelto? ¿Pueden usarse? ¿Puedenmodificarse? ¿Pueden guiar la solución del problema original?

Paso 4: Examinar la solución obtenida

¿Puedes comprobar el funcionamiento del programa sobre una colección de argu-mentos?

¿Puedes comprobar propiedades del programa?

¿Puedes escribir el programa en una forma diferente?

¿Puedes emplear el programa o el método en algún otro programa?

Simon Thompson How to program it, basado en G. Polya Cómo plantear y resolver proble-

mas.

Bibliografía

[1] J. A. Alonso. Temas de programación funcional. Technical report, Univ. de Sevilla,2011.

[2] R. Bird. Introducción a la programación funcional con Haskell. Prentice–Hall, 1999.

[3] H. C. Cunningham. Notes on functional programming with Haskell. Technicalreport, University of Mississippi, 2010.

[4] H. Daumé. Yet another Haskell tutorial. Technical report, University of Utah, 2006.

[5] A. Davie. An introduction to functional programming systems using Haskell. Cambrid-ge University Press, 1992.

[6] K. Doets and J. van Eijck. The Haskell road to logic, maths and programming. King’sCollege Publications, 2004.

[7] J. Fokker. Programación funcional. Technical report, Universidad de Utrech, 1996.

[8] P. Hudak. The Haskell school of expression: Learning functional programming through

multimedia. Cambridge University Press, 2000.

[9] P. Hudak. The Haskell school of music (From signals to symphonies). Technicalreport, Yale University, 2012.

[10] G. Hutton. Programming in Haskell. Cambridge University Press, 2007.

[11] B. O’Sullivan, D. Stewart, and J. Goerzen. Real world Haskell. O’Reilly, 2008.

[12] G. Pólya. Cómo plantear y resolver problemas. Editorial Trillas, 1965.

[13] F. Rabhi and G. Lapalme. Algorithms: A functional programming approach. Addison–Wesley, 1999.

[14] B. C. Ruiz, F. Gutiérrez, P. Guerrero, and J. Gallardo. Razonando con Haskell (Un

curso sobre programación funcional). Thompson, 2004.

[15] S. Thompson. Haskell: The craft of functional programming. Addison–Wesley, thirdedition, 2011.

421

Índice alfabético

❈❛rt❛, 192❈♦❧♦r, 189▼❛♥♦, 194P❛❧♦, 189❱❛❧♦r, 190❛❞②❛❝❡♥t❡s, 308❛❣❛rr❛❞♦❈, 91❛❣❛rr❛❞♦❘, 92❛❣r❡❣❛P❛r✐❞❛❞, 334❛❣r✉♣❛✬, 147❛❣r✉♣❛, 114, 123, 146❛♥❞✬, 60❛♥t✐s✐♠❡tr✐❝❛, 270❛♥✉❧❛❈♦❧✉♠♥❛❉❡s❞❡, 257❛♥✉❧❛❊❧t♦❈♦❧✉♠♥❛❉❡s❞❡, 257❛♥✉❧❛❞❛❈♦❧✉♠♥❛❉❡s❞❡, 256❛♣r♦①❊✬, 45❛♣r♦①❊, 44❛♣r♦①▲✐♠❙❡♥♦, 46❛♣r♦①✐♠❛P✐❈, 90❛♣r♦①✐♠❛P✐❘, 90❛r❜♦❧❇❛❧❛♥❝❡❛❞♦, 177❛r❝♦❝♦s❡♥♦✬, 383❛r❝♦❝♦s❡♥♦, 382❛r❝♦s❡♥♦✬, 383❛r❝♦s❡♥♦, 381❛r❡❛❉❡❈♦r♦♥❛❈✐r❝✉❧❛r, 24❛r❡❛, 36❛r✐st❛❊♥, 308❛r✐st❛s, 309❜❛❧❛♥❝❡❛❞♦, 176❜❡③♦✉t, 345❜✐♥✷✐♥t❈, 332

❜✐♥✷✐♥t❘, 332❜✐♥✷✐♥t, 332❜♦rr❛P, 135❜♦rr❛❘, 135❜♦rr❛, 64, 395❜✉s❝❛❈r✉❝✐❣r❛♠❛❘, 108❜✉s❝❛❈r✉❝✐❣r❛♠❛, 107❜✉s❝❛■♥❞✐❝❡❉❡s❞❡, 255❜✉s❝❛P✐✈♦t❡❉❡s❞❡, 256❜✉s❝❛, 50, 187❝❛❜❡③❛sP, 139❝❛❜❡③❛s❙, 139❝❛❜❡③❛s, 138❝❛❧❝✉❧❛P✐, 46❝❛♥t✐❞❛❞❍❛♠♠✐♥❣▼❡♥♦r❡s, 159❝❛♣✐❝✉❛, 79❝❛r❞✐♥❛❧, 281❝❡r❝❛♥♦s, 172❝❡r♦s, 115❝❤✐❈✉❛❞, 329❝✐❝❧♦, 34❝✐r❝✉❧♦, 44❝❧❛✉s✉r❛❘❡❢❧❡①✐✈❛, 271❝❧❛✉s✉r❛❙✐♠❡tr✐❝❛, 272❝❧❛✉s✉r❛❚r❛♥s✐t✐✈❛, 273❝❧❛✈❡, 115❝♦❝✐❡♥t❡❘✉❢❢✐♥✐, 239❝♦❝✐❡♥t❡, 236❝♦❞✐❢✐❝❛, 327, 334❝♦❡❢✐❝✐❡♥t❡s, 232❝♦❡❢✐❝✐❡♥t❡, 232❝♦❧❛s, 138❝♦❧❧❛t③✬, 149

422

Índice alfabético 423

❝♦❧❧❛t③, 149❝♦❧♦r, 190❝♦❧✉♠♥❛▼❛t, 248❝♦♠❜✐♥❛❝✐♦♥❡s◆, 365❝♦♠❜✐♥❛❝✐♦♥❡s❘◆, 368❝♦♠❜✐♥❛❝✐♦♥❡s❘, 367❝♦♠❜✐♥❛❝✐♦♥❡s, 364❝♦♠❜, 366❝♦♠♣❧❡t♦, 312❝♦♠♣♦s✐❝✐♦♥, 268❝♦♠♣r✉❡❜❛P❛r✐❞❛❞, 335❝♦♥❝❛t✬, 61❝♦♥❝❛tP, 119❝♦♥❝❛t❘, 119❝♦♥❥❡t✉r❛, 48❝♦♥❥✉❣❛❞♦, 33❝♦♥s❡❝✉t✐✈♦s❈♦♥❙✉♠❛, 346, 354❝♦♥t❡♥✐❞♦, 405❝♦♥t✐❡♥❡❘, 110❝♦♥t✐❡♥❡, 110❝♦♥t✐❣✉♦s, 314❝♦♣✐❛, 203❝r❡❛●r❛❢♦, 305❝r❡❛❖❝t❡t♦, 333❝r❡❛P♦❧❉❡♥s❛, 230❝r❡❛P♦❧❉✐s♣❡rs❛, 230❝r✐❜❛, 352❝✉❛❞r❛❞♦▼❛❣✐❝♦, 396❝✉❛❞r❛❞♦s❈, 82❝✉❛❞r❛❞♦s▼❛❣✐❝♦s✸, 398❝✉❛❞r❛❞♦s▼❛❣✐❝♦s, 397❝✉❛❞r❛❞♦s❘, 82❝✉❛❞r❛♥t❡, 31❝✉❛tr♦■❣✉❛❧❡s, 29❞❡❝✷❡♥tP, 130❞❡❝✷❡♥t❘, 130❞❡♥s❛❆❞✐s♣❡rs❛, 231❞❡♥s❛, 51, 231❞❡r✐✈❛❞❛❇✉r❞❛, 376❞❡r✐✈❛❞❛❋✐♥❛❉❡❧❙❡♥♦, 376

❞❡r✐✈❛❞❛❋✐♥❛, 376❞❡r✐✈❛❞❛❙✉♣❡r, 376❞❡r✐✈❛❞❛, 375❞❡s❝✐❢r❛, 330❞❡s❝♦❞✐❢✐❝❛, 336❞❡s♣❧❛③❛, 327❞❡t❡r♠✐♥❛♥t❡, 261❞✐❛❣♦♥❛❧Pr❛❧, 251, 393❞✐❛❣♦♥❛❧❙❡❝, 252, 394❞✐❢❡r❡♥❝✐❛P, 136❞✐❢❡r❡♥❝✐❛❘, 135❞✐❢❡r❡♥❝✐❛❙✐♠❡tr✐❝❛, 285❞✐❢❡r❡♥❝✐❛, 285❞✐❣✐t♦s❈, 72❞✐❣✐t♦s❉❡❋❛❝t♦r✐③❛❝✐♦♥, 96❞✐❣✐t♦s❘, 72❞✐♠❡♥s✐♦♥, 246❞✐r✐❣✐❞♦, 307❞✐s❥✉♥t♦s, 284❞✐s♣❡rs❛, 231❞✐st❛♥❝✐❛❈, 99❞✐st❛♥❝✐❛❘, 100❞✐st❛♥❝✐❛, 32, 346❞✐✈✐❞❡▼❡❞✐❛, 119❞✐✈✐❞❡, 112, 286❞✐✈✐s✐❜❧❡P♦❧, 237❞✐✈✐s✐♦♥❙❡❣✉r❛, 29❞✐✈✐s♦r❡s❊♥, 158❞✐✈✐s♦r❡s, 42, 162, 238, 342❞♦❜❧❡❋❛❝t♦r✐❛❧, 57❞r♦♣❲❤✐❧❡✬, 118❡❝♦❈, 144❡❝♦❘, 144❡❥●r❛❢♦❉, 307❡❥●r❛❢♦◆❉, 306❡❧❡♠✬, 60❡❧❡♠❡♥t♦s◆♦◆✉❧♦s❈♦❧❉❡s❞❡, 258❡❧❡♠❡♥t♦s, 395❡❧✐❣❡❈❛rt❛, 195❡❧✐♠✐♥❛P, 352

424 Índice alfabético

❡❧✐♠✐♥❛❘, 352❡❧✐♠✐♥❛, 351❡♠♣✐❡③❛❈♦♥❉♦s, 403❡♥❘❛♥❣♦❈, 88❡♥❘❛♥❣♦❘, 88❡♥t❡r♦s✬, 156❡♥t❡r♦s, 155❡♥tr❡▲, 86❡♥tr❡❘, 86❡q✉✐✈❛❧❡♥t❡s, 81❡rr♦r❆♣r♦①❊, 45❡rr♦r❊✬, 45❡rr♦r▲✐♠❙❡♥♦, 46❡rr♦rP✐, 47❡s❈✉❛❞r❛❞❛, 250❡s❉✐❣✐t♦, 74❡s❊q✉✐✈❛❧❡♥❝✐❛, 269❡s❋❛❝t♦r✐❛❧, 386❡s❋✉♥❝✐♦♥, 344❡s▼✉②❈♦♠♣✉❡st♦, 152❡sP❡r♠✉t❛❝✐♦♥, 65, 395❡sPr✐♠♦, 353❡sPr♦❞✉❝t♦❉❡❉♦sPr✐♠♦s, 152❡s❘❛✐③❘✉❢❢✐♥✐, 241❡s❙❡♠✐P❡r❢❡❝t♦, 342❡s❙✐♠❡tr✐❝❛, 251❡s❙♦❧✉❝✐♦♥, 349❡s❙✉♠❛, 347❡s❚❛✉t♦❧♦❣✐❛, 187❡s❧❛❜♦♥❡s, 167❡s♣❡❝✐❛❧, 81, 98❡s♣❡❥♦, 181❡✉❧❡r✶✷, 161❡✉❧❡r✶✻, 79❡✉❧❡r✶, 43❡✉❧❡r✺, 58❡✉❧❡r✾, 49❡✈❡r②❈, 287❡①✐st❡❈♦❧◆♦◆✉❧❛❉❡s❞❡, 258❡①♣❛♥s✐♦♥❈, 95

❡①♣❛♥s✐♦♥❘, 95❡①tr❡♠♦s, 27❡, 45❢❛❝t♦r❡sPr✐♠♦s, 93❢❛❝t♦r❡s, 42, 92❢❛❝t♦r✐❛❧❡s, 386❢❛❝t♦r✐❛❧, 385❢❛❝t♦r✐③❛❝✐♦♥, 94, 242❢❛❝t, 363❢✐❧❛▼❛t, 248❢✐❧t❡rP, 133❢✐❧t❡r❘, 132❢✐❧tr❛❆♣❧✐❝❛, 125❢✐❧tr❛, 285❢✐♥❛❧❡s, 27❢♦r♠❛❘❡❞✉❝✐❞❛, 36❢r❛s❡, 114❢r❡❝✉❡♥❝✐❛s, 329❢✉s❝, 409❣❛♥❛❈❛rt❛, 193❣❛♥❛▼❛♥♦, 194❣❛✉ss❆✉①, 259❣❛✉ss, 260❣♦❧♦♠❜, 168❣r❛❞♦◆❡❣, 317❣r❛❞♦P♦s, 316❣r❛❞♦, 317❣r❛❢♦❈✐❝❧♦, 313❣r❛❢♦❘❡❞✉❝✐❞♦, 342❣r❛❢♦❙✉♠❛■♠♣❛r❡s, 200❣r❛❢♦, 267❤❛♠♠✐♥❣✬, 159❤❛♠♠✐♥❣, 157❤♦r♥❡r, 237❤✉❡❝♦❍❛♠♠✐♥❣, 160✐❣✉❛❧❈♦♥❥✉♥t♦, 360✐❣✉❛❧❴s✉❝❡s✐♦♥❴❍❇❴❈❛❧❦✐♥❲✐❧❢, 408✐❣✉❛❧❞❛❞❘❛❝✐♦♥❛❧, 37✐♠♣❛r❡s❈✉❛❞r❛❞♦s❈, 84✐♠♣❛r❡s❈✉❛❞r❛❞♦s❘, 84

Índice alfabético 425

✐♠♣❛r❡s❈, 83✐♠♣❛r❡s❘, 83✐♥❝✐❞❡♥t❡s, 314✐♥❞✐❝❡, 406✐♥t✷❜✐♥, 332✐♥t✷♠❛②✉s❝✉❧❛, 326✐♥t✷♠✐♥✉s❝✉❧❛, 326✐♥t❡❣r❛❧❉❡❢, 235✐♥t❡❣r❛❧, 234✐♥t❡r❝❛❧❛, 34, 361✐♥t❡r❝❛♠❜✐❛❈♦❧✉♠♥❛s, 253✐♥t❡r❝❛♠❜✐❛❋✐❧❛s, 253✐♥t❡r❝❛♠❜✐❛, 32✐♥t❡r✐♦r, 26✐♥t❡r♣r❡t❛❝✐♦♥❡s✬, 189✐♥t❡r♣r❡t❛❝✐♦♥❡s❱❛r✬, 188✐♥t❡r♣r❡t❛❝✐♦♥❡s❱❛r, 187✐♥t❡r♣r❡t❛❝✐♦♥❡s, 187✐♥t❡rs❡❝❝✐♦♥●, 284✐♥t❡rs❡❝❝✐♦♥, 283✐♥✈❋❛❝t♦r✐❛❧, 387✐♥✈❡rs❛P✬, 129✐♥✈❡rs❛P, 128✐♥✈❡rs❛❘✬, 128✐♥✈❡rs❛❘, 128✐♥✈❡rs❛s, 114✐♥✈❡rs❛, 383✐♥✈❡rs♦✬, 78✐♥✈❡rs♦, 78✐rr❡❢❧❡①✐✈❛, 269✐t❡r❛, 146❧❛st✬, 60❧❛③♦s, 315❧❡tr❛s, 328❧✐♥❡❛, 41❧✐st❛▼❛tr✐③, 245❧✐st❛◆✉♠❡r♦❈, 75❧✐st❛◆✉♠❡r♦❘, 75❧✐st❛❱❡❝t♦r, 245❧♦♥❣✐t✉❞❡s, 113

♠❛♣❈, 286♠❛♣P, 132♠❛♣❘, 132♠❛tr✐③❈✉❛❞r❛❞❛, 394♠❛tr✐③▲✐st❛, 247♠❛tr✐③, 396♠❛①❚r❡s, 24♠❛①✐♠❛❙✉♠❛, 262♠❛①✐♠✉♠P, 127♠❛①✐♠✉♠❘, 126♠❛②♦r❊①♣♦♥❡♥t❡❈, 94♠❛②♦r❊①♣♦♥❡♥t❡❘, 94♠❛②♦r❘❡❝t❛♥❣❧♦, 31♠❛②♦r, 191♠❛②✉s❝✉❧❛✷✐♥t, 326♠❛②✉s❝✉❧❛■♥✐❝✐❛❧❘, 105♠❛②✉s❝✉❧❛■♥✐❝✐❛❧, 105♠❝❞, 58♠❡❞✐❛✸, 23♠❡❞✐❛♥♦✬, 28♠❡❞✐❛♥♦, 28♠❡♥♦r❈♦❧❧❛t③▼❛②♦r, 149♠❡♥♦r❈♦❧❧❛t③❙✉♣❡r❛, 150♠❡♥♦r❉✐✈✐s✐❜❧❡, 58♠❡♥♦r■♥❞✐❝❡❈♦❧◆♦◆✉❧❛❉❡s❞❡, 259♠❡♥♦r◗✉❡❊s❙✉♠❛, 348♠❡③❝❧❛, 62♠✐♥✐♠✉♠P, 127♠✐♥✉s❝✉❧❛✷✐♥t, 326♠✐t❛❞P❛r❡s❈, 87♠✐t❛❞P❛r❡s❘, 87♠✐t❛❞❡s, 63, 177♠♦❞✉❧♦, 30♠✉❧t❊s❝❛❧❛r, 235♠✉❧t❋✐❧❛P♦r, 254♠✉❧t✐♣❧♦s❘❡str✐♥❣✐❞♦s, 145♠✉s✐❝♦s✬, 53♠✉s✐❝♦s, 52♠✉②❈♦♠♣✉❡st♦, 153♥❆r✐st❛s, 315

426 Índice alfabético

♥❉✐✈✐s♦r❡s, 162♥❍♦❥❛s, 176, 178♥▲❛③♦s, 315♥◆♦❞♦s, 178♥❘❡♣r❡s❡♥t❛❝✐♦♥❡s❍❇, 404♥❱❡rt✐❝❡s, 313♥✐✈❡❧❡s❈❛❧❦✐♥❲✐❧❢, 407♥♦❉✐r✐❣✐❞♦, 313♥♦❞♦s, 307♥♦♠❜r❡s, 52♥✉♠❈♦❧✉♠♥❛s, 246♥✉♠❋✐❧❛s, 245♥✉♠P❛s♦s❍❛♥♦✐, 59♥✉♠❱❛rs, 197♥✉♠❡r♦❆❜✉♥❞❛♥t❡, 42♥✉♠❡r♦❇❧♦q✉❡s❈, 70♥✉♠❡r♦❇❧♦q✉❡s❘, 70♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s❘✬, 368♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s❘, 368♥✉♠❡r♦❈♦♠❜✐♥❛❝✐♦♥❡s, 365♥✉♠❡r♦❉❡❉✐❣✐t♦s, 74♥✉♠❡r♦❉❡P❛r❡s, 48♥✉♠❡r♦❉❡❘❛✐❝❡s, 35♥✉♠❡r♦▼❛②♦r, 34♥✉♠❡r♦P❡r♠✉t❛❝✐♦♥❡s◆, 363♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s✬, 370♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s❘✬, 372♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s❘, 371♥✉♠❡r♦❱❛r✐❛❝✐♦♥❡s, 370♥✉♠❡r♦❱✉❡❧t❛s, 167♥✉♠❡r♦s❆❜✉♥❞❛♥t❡s▼❡♥♦r❡s, 42♦❝✉rr❡♥❝✐❛s, 329♦❝✉rr❡, 174♦r❞▼❡③❝❧❛, 63♦r❞❡♥❛❞❛, 64♣❘✉❢❢✐♥✐, 239♣❛❧❛❜r❛s, 112♣❛❧✐♥❞r♦♠♦, 26♣❛❧♦, 192♣❛r❡s✬, 51

♣❛r❡s❖r❞❡♥❛❞♦s, 164♣❛r❡s, 387♣❛r✐❞❛❞, 334♣❛rt✐❝✐♦♥, 286♣❛s❝❛❧, 373♣❡❣❛◆✉♠❡r♦s◆❘, 76♣❡❣❛◆✉♠❡r♦s❘, 76♣❡r❢❡❝t♦s, 42♣❡r♠✉t❛❝✐♦♥❡s◆, 362♣❡r♠✉t❛❝✐♦♥❡s, 362♣❡rt❡♥❡❝❡❘❛♥❣♦, 163♣❡s♦, 308♣✐t❛❣♦r✐❝❛s, 47♣♦r❝❡♥t❛❥❡, 328♣♦s✐❝✐♦♥❡s✬, 50♣♦s✐❝✐♦♥❡s❋❛❝t♦r✐❛❧❡s, 387♣♦s✐❝✐♦♥❡s❘, 109♣♦s✐❝✐♦♥❡s, 50, 108, 244♣♦s✐❝✐♦♥, 156♣♦st♦r❞❡♥, 180♣♦t❡♥❝✐❛❋✉♥❝, 165♣♦t❡♥❝✐❛▼, 234♣♦t❡♥❝✐❛s❉❡❉♦s, 402♣♦t❡♥❝✐❛s▼❡♥♦r❡s, 145♣♦t❡♥❝✐❛, 56, 233, 288♣r❡❢✐❥♦s❈♦♥❙✉♠❛, 354♣r❡♦r❞❡♥■t, 180♣r❡♦r❞❡♥, 179♣r✐♠❡r❆❜✉♥❞❛♥t❡■♠♣❛r, 43♣r✐♠❡r❉✐❣✐t♦◆❘, 77♣r✐♠❡r❉✐❣✐t♦❘, 77♣r✐♠❡r❙❡♠✐P❡r❢❡❝t♦, 343♣r✐♠✐t✐✈♦, 80♣r✐♠♦P❡r♠✉t❛❜❧❡, 155♣r✐♠♦❚r✉♥❝❛❜❧❡, 154♣r✐♠♦s❈♦♥s❡❝✉t✐✈♦s❈♦♥❙✉♠❛, 354♣r✐♠♦s❊q✉✐✈❛❧❡♥t❡s, 163♣r✐♠♦s, 150, 353♣r✐♠♦, 93, 151♣r♦❞❊s❝❛❧❛r, 249

Índice alfabético 427

♣r♦❞▼❛tr✐❝❡s, 249♣r♦❞✉❝t♦❈♦♠♣❧❡❥♦s, 33♣r♦❞✉❝t♦❈, 287♣r♦❞✉❝t♦❊s❝❛❧❛r, 49♣r♦❞✉❝t♦P♦s, 137♣r♦❞✉❝t♦Pr❡❞, 137♣r♦❞✉❝t♦❘❛❝✐♦♥❛❧, 37♣r♦❞✉❝t♦, 80, 137, 173♣r♦❢✉♥❞✐❞❛❞, 179♣r♦♣✐❡❞❛❞✶, 355♣r♦♣✐❡❞❛❞✷, 357♣r♦♣✐❡❞❛❞✸, 357♣✉♥t♦❈❡r♦■, 380♣✉♥t♦❈❡r♦, 379♣✉♥t♦▼❡❞✐♦, 32r❛✐❝❡s❘✉❢❢✐♥✐, 241r❛✐❝❡s❴✶, 35r❛✐❝❡s❴✷, 35r❛✐③❈✉❛❞r❛❞❛✬, 383r❛✐③❈✉❛❞r❛❞❛, 380r❛✐③❈✉❜✐❝❛✬, 383r❛✐③❈✉❜✐❝❛, 381r❛✐③■, 378r❛✐③, 377r❛♠❛■③q✉✐❡r❞❛, 183r❛♥❣♦, 26r❡❛❣r✉♣❛, 113r❡❢✐♥❛❞❛, 62r❡❢❧❡①✐✈❛, 267r❡❣✉❧❛r✐❞❛❞, 320r❡❣✉❧❛r, 319r❡❧❛❝✐♦♥❛❞♦s, 122r❡♣❡❛t❆r❜♦❧, 182r❡♣✐t❡❈, 142r❡♣✐t❡❋✐♥✐t❛✬, 143r❡♣✐t❡❋✐♥✐t❛❈, 143r❡♣✐t❡❋✐♥✐t❛, 143r❡♣✐t❡, 142r❡♣❧✐❝❛t❡✬, 56r❡♣❧✐❝❛t❡❆r❜♦❧, 183

r❡♣❧✐❝❛, 40r❡♣r❡s❡♥t❛❝✐♦♥❡s❍❇, 403r❡st♦❘✉❢❢✐♥✐, 240r❡st♦, 236r❡✈❡rs✐❜❧❡s▼❡♥♦r❡s, 340r♦t❛✶, 25r♦t❛, 25, 330s❡❣♠❡♥t♦s, 122s❡❣♠❡♥t♦, 27s❡❧❡❝❝✐♦♥❛, 61s❡❧❡❝❝✐♦♥, 53s❡♠✐P❡r❢❡❝t♦, 343s❡♣❛r❛✾, 335s❡♣❛r❛, 246s✐❣✉✐❡♥t❡❍❛♠♠✐♥❣, 160s✐❣✉✐❡♥t❡, 149, 407s✐♠❡tr✐❝❛, 267s✐♠❡tr✐❝♦❍, 32s♦❧✉❝✐♦♥❋❛❝t♦r✐❛❧❡s, 388s♦❧✉❝✐♦♥, 349s♦♠❡❈, 287s✉❜❙✉❝●♦❧♦♠❜, 168s✉❜❝♦♥❥✉♥t♦Pr♦♣✐♦, 280s✉❜❝♦♥❥✉♥t♦s, 342, 361s✉❜❝♦♥❥✉♥t♦, 268, 279, 359s✉❜♠❛tr✐③, 252s✉❝●♦❧♦♠❜, 168s✉❝❡s✐♦♥❈❛❧❦✐♥❲✐❧❢, 408s✉❝❡s✐♦♥❍❇, 404s✉❝❡s♦r❡s, 407s✉♠❛✬, 41s✉♠❛❈✐❢r❛s▲✐st❛P, 356s✉♠❛❈✐❢r❛s▲✐st❛❘, 356s✉♠❛❈✐❢r❛s▲✐st❛, 356s✉♠❛❈✐❢r❛s, 355s✉♠❛❈♦♠♣❧❡❥♦s, 33s✉♠❛❈♦♥s❡❝✉t✐✈♦s, 50s✉♠❛❈✉❛❞r❛❞♦s❈, 69s✉♠❛❈✉❛❞r❛❞♦s■♠♣❛r❡s❈, 71, 85s✉♠❛❈✉❛❞r❛❞♦s■♠♣❛r❡s❘, 71, 85

428 Índice alfabético

s✉♠❛❈✉❛❞r❛❞♦s❘, 69s✉♠❛❉❡❈✉❛❞r❛❞♦s, 40s✉♠❛❉❡❉♦sPr✐♠♦s, 151s✉♠❛❉❡❉♦s, 165s✉♠❛❉✐❣✐t♦s❈, 104s✉♠❛❉✐❣✐t♦s◆❘, 73s✉♠❛❉✐❣✐t♦s❘, 73, 104s✉♠❛❊s♣❡❝✐❛❧❡s❘, 99s✉♠❛❊s♣❡❝✐❛❧❡s, 99s✉♠❛❋✐❧❛❋✐❧❛, 254s✉♠❛❋✐❧❛P♦r, 255s✉♠❛■♠♣❛r❡s✬, 200s✉♠❛■♠♣❛r❡s■❣✉❛❧❡s, 200s✉♠❛■♠♣❛r❡s, 199s✉♠❛▼❛tr✐❝❡s, 247s✉♠❛▼♦♥❡❞❛s, 23s✉♠❛P♦s✐t✐✈♦s❈, 89s✉♠❛P♦s✐t✐✈♦s❘, 89s✉♠❛P♦t❡♥❝✐❛s❉❡❉♦s▼❛s❯♥♦✬, 202s✉♠❛P♦t❡♥❝✐❛s❉❡❉♦s▼❛s❯♥♦, 201s✉♠❛Pr✐♠♦▼❡♥♦r❡s, 161s✉♠❛Pr✐♠♦s❚r✉♥❝❛❜❧❡s, 154s✉♠❛P, 131s✉♠❛❘❛❝✐♦♥❛❧, 36s✉♠❛❘, 131s✉♠❛s❉❡✷❈✉❛❞r❛❞♦s, 339s✉♠❛s❉❡❈♦❧✉♠♥❛s, 393s✉♠❛s❉❡❋✐❧❛s, 393s✉♠❛s, 101s✉♠❛, 41, 173s✉♠❧❧❆P, 134s✉♠❧❧❆, 134s✉♠❧❧P, 133s✉♠❧❧❘, 133s✉♣❡r♣❛r, 123s✉st✐t✉❝✐♦♥, 198s✉st✐t✉②❡■♠♣❛r, 91t❛❜❧❛, 328t❛❦❡✬, 61t❛❦❡❆r❜♦❧, 182

t❛❦❡❲❤✐❧❡✬, 118t❡r♠✐♥♦■♥❞❡♣, 238t❡r♠✐♥♦, 404t❡r♥❛sP✐t❛❣♦r✐❝❛s, 49t✐t✉❧♦❘, 107t✐t✉❧♦, 106t♦❞♦s✬, 204t♦❞♦s■❣✉❛❧❡s, 394t♦❞♦sP❛r❡s, 43t♦❞♦s, 203t♦t❛❧, 271tr❛♥s✐t✐✈❛, 268tr❛s♣✉❡st❛, 101, 250, 392tr❡s❉✐❢❡r❡♥t❡s, 28tr❡s■❣✉❛❧❡s, 28tr✐❛♥❣✉❧❛r❡s, 162tr✐❛♥❣✉❧❛r, 29tr✐❛♥❣✉❧♦, 41✉❧❧♠❛♥, 338✉❧t✐♠❛❈✐❢r❛, 24✉❧t✐♠♦❉✐❣✐t♦, 77✉♥❡, 113✉♥✐♦♥●, 282✉♥✐♦♥, 281✉♥✐t❛r✐♦, 281✉♥✐✈❡rs♦, 266✉♥t✐❧✬, 378✈❛❧♦r, 187, 192, 197✈❛r✐❛❜❧❡s, 187✈❛r✐❛❝✐♦♥❡s◆, 369✈❛r✐❛❝✐♦♥❡s❘◆, 371✈❛r✐❛❝✐♦♥❡s❘, 371✈❛r✐❛❝✐♦♥❡s, 369✈❡❝t♦r▲✐st❛, 247✈✐✈❛s, 53✈♦❧✉♠❡♥❊s❢❡r❛, 23①♦r✶, 24, 30①♦r✷, 25, 30①♦r✸, 25, 30①♦r✹, 25, 30