Manos a la obra: Recursión, división y listas

Tamaño: px
Comenzar la demostración a partir de la página:

Download "Manos a la obra: Recursión, división y listas"

Transcripción

1 Manos a la obra: Recursión, división y listas Taller de Álgebra I Cuatrimestre de verano de 2015

2 Calentando motores La clase pasada vimos ejemplos de definiciones recursivas. Hoy vamos a continuar con el tema. Recordemos un ejemplo: reverso :: [ Integer ] -> [ Integer ] reverso [] = [] reverso xs = ( reverso ( tail xs)) ++ [ head xs] Truco, cómo pensar recursivamente con listas Dada una lista cualquiera: [1,2,3,4,5] Si ya tengo el resultado recursivo sobre la cola de la lista, es decir el reverso de [2,3,4,5], cómo puedo combinarlo con la cabeza de la lista (1) para obtener el resultado que quiero? Implementar la siguiente función potencia :: Float -> Integer -> Float que calcule la potencia: potencia a n a n (n 0). Debe utilizarse el producto y no ** ni ^ ni ^ ^

3 Algoritmo de división Teorema: Dados a, d Z, d 0, existen únicos q, r Z tales que a = qd + r, 0 r < d. Demostración: (caso a 0, d > 0). Por inducción en a. Si 0 a < d, tomamos q = 0, r = a. Si no, dividimos a d por d. Eso da un cociente q y un resto r. Tomamos r = r, q = q + 1. Implementar la siguiente función division :: Integer -> Integer -> (Integer, Integer) division a d (q, r) Debe funcionar para a 0, d > 0 y no se pueden usar div, mod ni /.

4 Algoritmo de división division :: Integer -> Integer -> ( Integer, Integer ) division a d a < d = (0, a) otherwise = ( fst ( division (a- d) d) + 1, snd ( division (a-d) d)) Se puede no poner dos veces division (a-d) d? Sí: division :: Integer -> Integer -> ( Integer, Integer ) division a d a < d = (0, a) otherwise = ( fst qr + 1, snd qr ) where qr = division (a- d) d

5 Primos Un número p Z es primo si tiene 4 divisores. Un entero p > 1 es primo si ningún natural k tal que 1 < k < p divide a p. Se puede hacer una función esprimo :: Integer -> Bool que diga si un número es primo o no? Una posibilidad sería buscar todos los divisores. Algo como divisores(n) = {k Z 1 k n y k n} Esto se puede hacer en Haskell de forma directa, aunque todavía no vimos cómo. Podemos sin embargo definir una lista parcial de divisores: divparcial(n, m) = {k Z 1 k m y k n} Implementar las siguientes funciones divparcial :: Integer -> Integer -> [Integer] Tiene que funcionar bien divparcial n m cuando m n. Utilizando divparcial, programar divisores :: Integer -> [Integer] Utilizando divisores, programar esprimo :: Integer -> Bool

6 Primos divparcial :: Integer -> Integer -> [ Integer ] divparcial n 1 = [1] divparcial n m mod n m == 0 = m : divparcial n (m -1) otherwise = divparcial n (m -1) divisores :: Integer -> [ Integer ] divisores n = divparcial n n esprimo :: Integer -> Bool esprimo n = length ( divisores n) == 2

7 Ejercicios Implementar mult, que sirve para multiplicar matrices de 2 2; mult :: ( Float, Float, Float, Float ) -> ( Float, Float, Float, Float ) -> ( Float, Float, Float, Float ) Usando mult, implementar una función que sirva para calcular potencias de matrices de 2 2. Adaptar esprimo para todo p Z. Adaptar division para a < 0 y/o d < 0. Observación: las funciones div y mod de Haskell no coinciden con el algoritmo de división cuando d < 0. Ver también quot y rem. Implementar notienedivisoreshasta :: Integer -> Integer -> Bool notienedivisoreshasta m n da True sii ningún número entre 2 y m divide a n. Utilizando notienedivisoreshasta, programar esprimo :: Integer -> Bool

8 Algoritmo de Euclides El Algoritmo de Euclides calcula el máximo común divisor entre dos números a, b Z +. Se basa en que si a, b Z y q Z es un número cualquiera, entonces (a : b) = (a + qb : b). Si q y r son el cociente y el resto de la división de a por b, tenemos a = qb + r, entonces a qb = r. Por lo tanto, (a : b) = (a qb : b) = (r : b) = (b : r) Por ejemplo, para calcular (108 : 30), se hace: 1 = (108 : 30) -- Dividimos 108 por 30, q = 3, r = 18 2 = (30 : 18) -- Dividimos 30 por 18, q = 1, r = 12 3 = (18 : 12) -- q = 1, r = 6 4 = (12 : 6) -- q = 2, r = 0 5 = (6 : 0) 6 = 6

9 Algoritmo de Euclides Para hacer Programar en Haskell mcd :: Integer -> Integer -> Integer que dé el mcd. El peor caso del algoritmo se obtiene cuando a y b son dos números consecutivos de la sucesión de Fibonacci (Lamé, 1844). El número de divisiones que realiza el algoritmo nunca supera 5 veces el número de dígitos de a y b, con lo cual la cantidad de llamadas recursivas está acotada por 5 log 10 (max{ a, b }).

10 Ejercicios sobre Listas Implementar las siguientes funciones pertenece :: Integer -> [Integer] -> Bool que indica si un elemento aparece en la lista. Implementar la función hayrepetidos :: [Integer] -> Bool que indica si una lista tiene elementos repetidos. menores :: Integer -> [Integer] -> [Integer] que calcula los elementos de la lista que son menores al primer parámetro. Últimas quitar :: Integer -> [Integer] -> [Integer] elimina la primera aparición del elemento en la lista. maximo :: [Integer] -> Integer que dada una lista no vacía calcula el mayor elemento de la misma.

11 Cambio de base en Haskell Problema: Dados a, b Z + con b > 1, escribir el número a en base b. Por ejemplo... 1 Si a = 10 y b = 2, entonces la respuesta es Si a = 17 y b = 3, entonces la respuesta es Si a = 145 y b = 10, entonces la respuesta es Implementar en Haskell La función enbase :: Integer -> Integer -> [Integer] Esta función toma un número y lo transforma a la base pasada como segundo parámetro. Para ello devuelve una lista representando al número. Ejemplo: enbase 3 17 [1,2,2]. La función debase :: Integer -> [Integer] -> Integer que toma una base y un número en forma de la lista de sus dígitos y devuelve el número. debase 3 [1,2,2] 17.

12 Ejercicios Parte 1: La conjetura del 196 Los números de Lychrel ( Tomemos un número natural cualquiera, por ejemplo el 180 Si damos vuelta sus cifras (081) y lo sumamos al original nos queda = 261 Ahora repetimos el proceso con el 261: = 423 Lo mismo con el 423: = 747. Un número capicúa! Será verdad que para cualquier natural, siempre llegamos a un número capicúa? Los llamados números de Lychrel son los números naturales en base 10 que no llegan a dar un número capicúa como resultado del proceso. Implementar La función capicuapara :: [Integer] -> [Integer] Que toma un número y realiza el proceso hasta que se consiga su número capicua asociado. Ejemplo: capicuapara [1,8,0] [7,4,7]. Preparar el ctrl+c y ejecutar capicuapara [1,9,6], qué ocurre?

13 Ejercicios Parte 2 1 Consideremos la sucesión t 1, t 2,..., tal que t n es la cantidad de llamadas recursivas del Algoritmo de Euclides cuando se ejecuta con a = F n y b = F n 1 (donde F n representa el n-ésimo número de Fibonacci). Escribir una función que tome como parámetro un entero n y que retorne t n. Como función preliminar, analizar cómo cambia la función mcd si uno quiere contar la cantidad veces que se llama a la recursión. 2 Escribir una función que cambie de base un número. Debe tomar dos enteros b1 y b2 y un entero a representado en base b1 (expresado como una lista de enteros) y retornar a en base b2 (también como una lista de enteros). 3 Escribir una función similar a maximo pero que retorne el mínimo. 4 (*) Escribir una función que indique si una lista está ordenada. 5 Escribir una función que elimine los repetidos, dejando sólo la última aparición de cada uno. 6 (*) Idem anterior pero dejando la primera aparición de cada uno. 7 Escribir una función que reciba dos listas ordenadas en forma no-decreciente, y que retorne una lista que contenga la unión de los elementos de las dos listas recibidas, y que también esté ordenada en forma no-decreciente. Por ejemplo, al pasarle [2, 3, 7] y [1, 3, 3, 9], debería reducir a [1, 2, 3, 3, 3, 7, 9]. 8 (difícil) Escribir una función que, dada una lista, retorne la misma pero ordenada de menor a mayor.

Aritmética en Haskell

Aritmética en Haskell Aritmética en Haskell Taller de Álgebra I Primer cuatrimestre de 2014 Algoritmo de división Para obtener el cociente y resto entre dos números enteros, tenemos las funciones div y mod, respectivamente.

Más detalles

Divisibilidad y congruencia

Divisibilidad y congruencia Divisibilidad y congruencia Taller de Álgebra I Verano 2017 Algoritmo de la división Teorema Dados a, d Z, d 0, existen únicos q, r Z tales que a = qd + r, 0 r < d. Idea de la demostración: (caso a 0,

Más detalles

Listas y Recursión. Taller de Álgebra I. Primer Cuatrimestre de 2015

Listas y Recursión. Taller de Álgebra I. Primer Cuatrimestre de 2015 Listas y Recursión Taller de Álgebra I Primer Cuatrimestre de 2015 Un nuevo tipo: Listas Tipo Lista Las listas pueden contener elementos de cualquier tipo (incluso listas) [1] :: [Integer] [1, 2] :: [Integer]

Más detalles

Algoritmo de Euclides y ecuaciones de congruencia

Algoritmo de Euclides y ecuaciones de congruencia Algoritmo de Euclides y ecuaciones de congruencia Taller de Álgebra I Primer cuatrimestre de 2017 Algoritmo de Euclides El algoritmo de Euclides calcula el máximo común divisor entre dos números a, b Z.

Más detalles

Divisibilidad y congruencia

Divisibilidad y congruencia de los ejercicios de la clase 8 Divisibilidad y congruencia Taller de Álgebra I Segundo cuatrimestre de 2016 Introducción A continuación les presentamos algunas soluciones para los ejercicios de la clase

Más detalles

Tipos paramétricos y recursivos

Tipos paramétricos y recursivos Tipos paramétricos y recursivos Taller de Álgebra I Verano 2017 Tipos paramétricos Tipos paramétricos Podemos hacer que los constructores de un tipo de datos reciban parámetros. A los tipos construidos

Más detalles

Números primos y criterios de divisibilidad

Números primos y criterios de divisibilidad Números primos y criterios de divisibilidad Taller de Álgebra I 1er cuatrimestre de 2014 Verificando si un número es primo Ejercicio: ( para hacer ahora!) Escribir una función que determine si un número

Más detalles

Tipos de datos y clases de tipos

Tipos de datos y clases de tipos Tipos de datos y clases de tipos Taller de Álgebra I Verano 2017 Tipos de datos Tipo de dato Un conjunto de valores a los que se les puede aplicar un conjunto de funciones. Ejemplos 1 Integer = (Z, {+,,,

Más detalles

Euclides Extendido y Teorema Chino del Resto

Euclides Extendido y Teorema Chino del Resto Euclides Extendido y Teorema Chino del Resto Taller de Álgebra I Segundo cuatrimestre de 2013 Lema de Bézout Recordemos este lema: Lema (Étienne Bézout) Sean a, b Z, alguno distinto de 0. Entonces existen

Más detalles

Guardas y Tipos de datos

Guardas y Tipos de datos Guardas y Tipos de datos Taller de Álgebra I 1er Cuatrimestre 2017 Definiciones de funciones por casos Podemos usar guardas para definir funciones por casos: f (n) = { 1 si n = 0 0 si no f n n == 0 = 1

Más detalles

Tipos de datos algebraicos

Tipos de datos algebraicos Tipos de datos algebraicos Taller de Álgebra I Segundo cuatrimestre de 2013 Programación funcional Recordemos que un tipo de datos es un conjunto dotado con una serie de operaciones sobre los elementos

Más detalles

Test de primalidad probabiĺıstico

Test de primalidad probabiĺıstico Test de primalidad probabiĺıstico Taller de Álgebra I Segundo cuatrimestre de 2013 Pequeño Teorema de Fermat Teorema (Pierre de Fermat, 1640) Sea p N primo, y a Z, tal que p a. Entonces a p 1 1 (mod p).

Más detalles

Programación Funcional

Programación Funcional Alberto Pardo Marcos Viera Instituto de Computación, Facultad de Ingeniería Universidad de la República, Uruguay Operaciones sobre listas Listas El tipo de las listas es uno de los más usados en PF Su

Más detalles

Conjuntos y combinatoria

Conjuntos y combinatoria Conjuntos y combinatoria Taller de Álgebra I 2do Cuatrimestre 2017 Conjuntos type Definamos un renombre de tipos para conjuntos: type Set a = [a] Otra forma de escribir lo mismo pero más descriptivo. Podemos

Más detalles

Programación Declarativa Haskell Informática Sistemas Curso Pepe Gallardo Universidad de Málaga. Tema 8. Listas

Programación Declarativa Haskell Informática Sistemas Curso Pepe Gallardo Universidad de Málaga. Tema 8. Listas Programación Declarativa Haskell Informática Sistemas Curso 2003-2004 Pepe Gallardo Universidad de Málaga Tema 8. Listas 8.1 Secuencias aritméticas 8.2 Algunas funciones predefinidas 8.3 Listas por comprensión

Más detalles

Números primos en Haskell

Números primos en Haskell Números primos en Haskell Taller de Álgebra I Segundo cuatrimestre de 2014 Logo data Direccion = Norte Sur Este Oeste deriving Show type Tortuga = ( Pos, Direccion ) type Pos = (Int, Int ) Ejercicios 1

Más detalles

El Algoritmo de Euclides

El Algoritmo de Euclides El Algoritmo de Euclides Pablo L. De Nápoli Departamento de Matemática Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires 25 de abril de 2014 Pablo L. De Nápoli (Departamento de Matemática

Más detalles

Para entender la recursividad primero tenemos que entender la recursividad

Para entender la recursividad primero tenemos que entender la recursividad Para entender la recursividad primero tenemos que entender la recursividad Funcional Clase 1 Matias Reparaz, Agustín Nieto Departamento de Computación, FCEyN,Universidad de Buenos Aires. 20 de Septiembre

Más detalles

Informática Haskell Matemáticas Curso Pepe Gallardo Universidad de Málaga. Tema 8. Listas

Informática Haskell Matemáticas Curso Pepe Gallardo Universidad de Málaga. Tema 8. Listas Informática Haskell Matemáticas Curso 2004-2005 Pepe Gallardo Universidad de Málaga Tema 8. Listas 8.1 Secuencias aritméticas 8.2 Algunas funciones predefinidas 8.3 Listas por comprensión Ejemplo: QuickSort

Más detalles

1.1 Define un operador ( ) que devuelva True si y solo si tan solo uno de sus argumentos es True. Por ejemplo:? (3 > 2) (2 > 5)

1.1 Define un operador ( ) que devuelva True si y solo si tan solo uno de sus argumentos es True. Por ejemplo:? (3 > 2) (2 > 5) 1 Informática Haskell Matemáticas Curso 2004-2005 Pepe Gallardo Universidad de Málaga Práctica 1 1.1 Define un operador ( ) que devuelva True si y solo si tan solo uno de sus argumentos es True. Por ejemplo:?

Más detalles

Informática de 1 o de Matemáticas. Ejercicios de Introducción a Haskell. Ejercicio 1 Consideremos la siguiente definición:

Informática de 1 o de Matemáticas. Ejercicios de Introducción a Haskell. Ejercicio 1 Consideremos la siguiente definición: Ejercicios de Introducción a Haskell Informática de 1 o de Matemáticas Ejercicio 1 Consideremos la siguiente definición: doble x = x + x El valor de doble(doble 3) se puede calcular usando distintos métodos

Más detalles

Algoritmos y Estructuras de Datos: Introducción a la Recursión de Programas. Guillermo Román Díez

Algoritmos y Estructuras de Datos: Introducción a la Recursión de Programas. Guillermo Román Díez Algoritmos y Estructuras de Datos: Introducción a la Recursión de Programas Guillermo Román Díez groman@fi.upm.es Universidad Politécnica de Madrid Curso 2015-2016 Guillermo Román, UPM AED: Introducción

Más detalles

Mecanismo de Reducción

Mecanismo de Reducción Mecanismo de Reducción Taller de Álgebra I 1er Cuatrimestre 2017 Repaso: Qué vimos hasta ahora? Programar para qué? Implementar algoritmos que solucionen problemas. Pensamiento algorítmico Ver los problemas

Más detalles

Álgebra y Matemática Discreta

Álgebra y Matemática Discreta Álgebra y Matemática Discreta Sesión de Teoría 1 (c) 2013 Leandro Marín, Francisco J. Vera, Gema M. Díaz 16 Sep 2013-22 Sep 2013 Los Números Enteros El Conjunto Z Vamos a empezar por la aritmética más

Más detalles

Polinomios. Taller de Álgebra I. Segundo cuatrimestre de 2013

Polinomios. Taller de Álgebra I. Segundo cuatrimestre de 2013 Polinomios Taller de Álgebra I Segundo cuatrimestre de 2013 Polinomios Vamos a pensar en un polinomio como una serie de coeficientes. Para hacerlo más fácil, vamos a pensar específicamente en Z[X ]. Es

Más detalles

n! = 1 2 n 0! = 1 (n+1)! = (n + 1) n!

n! = 1 2 n 0! = 1 (n+1)! = (n + 1) n! Capítulo 3 Recursión La recursión es un estilo autoreferencial de definición usado tanto en matemática como en informática. Es una herramienta de programación fundamental, particularmente importante para

Más detalles

Tema 6: Funciones recursivas

Tema 6: Funciones recursivas Tema 6: Funciones recursivas Programación declarativa (2009 10) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla Tema 6: Funciones

Más detalles

Complejidad de algoritmos recursivos

Complejidad de algoritmos recursivos Tema 3. Complejidad de algoritmos recursivos 1. INTRODUCCIÓN... 1 CLASIFICACIÓN DE FUNCIONES RECURSIVAS... 1 DISEÑO DE FUNCIONES RECURSIVAS... 2 2. VENTAJAS E INCONVENIENTES DE LA RECURSIVIDAD... 4 3.

Más detalles

3er Encuentro de Educación en

3er Encuentro de Educación en 3er Encuentro de Educación en Cienciadela 3er Encuentro de Educación en Cienciadela Formación de Profesores de Ciencia i de la 3er Encuentro de Educación en Cienciadela Formación de Profesores Vinculo

Más detalles

Pattern matching + Tipos enumerados

Pattern matching + Tipos enumerados Pattern matching + Tipos enumerados Taller de Álgebra I Verano 2017 Pattern matching Pattern matching El pattern matching es un mecanismo que nos permite asociar una definición de una función solo a ciertos

Más detalles

Polinomios. Taller de Álgebra I. Verano 2017

Polinomios. Taller de Álgebra I. Verano 2017 Polinomios Taller de Álgebra I Verano 2017 Polinomios En esta clase vamos a trabajar con polinomios. Para hacer las cosas fáciles, trabajaremos en R[x]. Es decir, en Float[x]. Hay muchas maneras de representar

Más detalles

Práctica N o 1 - Programación Funcional

Práctica N o 1 - Programación Funcional Práctica N o 1 - Programación Funcional Para resolver esta práctica, recomendamos usar el Hugs 98, de distribución gratuita, que puede bajarse de http://www.haskell.org/hugs/. Ejercicio 1 Dado el siguiente

Más detalles

Algoritmos y programas. Algoritmos y Estructuras de Datos I

Algoritmos y programas. Algoritmos y Estructuras de Datos I Algoritmos y programas Algoritmos y Estructuras de Datos I Primer cuatrimestre de 2012 Departamento de Computación - FCEyN - UBA Programación funcional - clase 1 Funciones Simples - Recursión - Tipos de

Más detalles

Introducción a la Teoría de Números

Introducción a la Teoría de Números Introducción a la Teoría de Números Elaborado por: Jeff Maynard Guillén Eliminatoria II Julio, 2011 Introducción a la Teoría de Números A manera de repaso vamos a recordar algunos conjuntos N = {1, 2,

Más detalles

Tema 3: Tipos y clases

Tema 3: Tipos y clases Tema 3: Tipos y clases Informática (2016 17) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla 2 / 32 IM Tema 3: Tipos y clases

Más detalles

Tema 3: Tipos y clases

Tema 3: Tipos y clases Tema 3: Tipos y clases Informática (2017 18) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla 2 / 32 IM Tema 3: Tipos y clases

Más detalles

Tema 3: Tipos y clases

Tema 3: Tipos y clases Tema 3: Tipos y clases Programación declarativa (2010 11) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla Tema 3: Tipos y clases

Más detalles

Práctica 5.- Recursividad

Práctica 5.- Recursividad Benemérita Universidad Autónoma de Puebla Facultad de Ciencias de la Computación Programación Avanzada en Java Prim. 2009 Práctica 5.- Recursividad Datos de la práctica Fecha 6 de marzo de 2009 Conceptos

Más detalles

Tema 3. Patrones y Definiciones de Funciones

Tema 3. Patrones y Definiciones de Funciones Informática Haskell Matemáticas Curso 2004-2005 Pepe Gallardo Universidad de Málaga Tema 3. Patrones y Definiciones de Funciones 3.1 Comparación de Patrones Patrones constantes Patrones para listas Patrones

Más detalles

Capitulo 4. Introducción a Haskell. Instalación de Haskell. Primeros pasos con Haskell.

Capitulo 4. Introducción a Haskell. Instalación de Haskell. Primeros pasos con Haskell. Capitulo 4 Introducción a Haskell Es un software libre, fácil de obtener y de instalar, y que además tiene muchísimo material de lectura para descarga gratuita en Internet. Es por estos motivos que fue

Más detalles

Tema 1 Aritmética entera

Tema 1 Aritmética entera Tema 1 Aritmética entera Tema 1 Aritmética entera 1.1 Los números enteros 1.1.1 Relaciones de orden Una relación en un conjunto A es un subconjunto R del producto cartesiano AxA. Se dice que dos elementos

Más detalles

Tema 3: Tipos y clases

Tema 3: Tipos y clases Tema 3: Tipos y clases Programación declarativa (2009 10) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla Tema 3: Tipos y clases

Más detalles

ALGEBRA I - Práctica N 4 (Primera parte) - Primer cuatrimestre de Números enteros

ALGEBRA I - Práctica N 4 (Primera parte) - Primer cuatrimestre de Números enteros ALGEBRA I - Práctica N 4 (Primera parte) - Primer cuatrimestre de 2002 Números enteros Ejercicio. Dados a, b y c números enteros, decidir cuáles de las siguientes afirmaciones son verdaderas y cuáles son

Más detalles

Bloque 1. Conceptos y técnicas básicas en programación

Bloque 1. Conceptos y técnicas básicas en programación Bloque 1. Conceptos y técnicas básicas en programación 1. Introducción 2. Datos y expresiones. Especificación de algoritmos 3. Estructuras algorítmicas básicas 4. Iteración y recursión 5. Iteración y recursión

Más detalles

Enteros Primera parte.

Enteros Primera parte. Capítulo 3 Enteros Primera parte. Die ganzen Zahlen hat der liebe Gott gemacht, alles andere ist Menschenwerk. (Dios hizo los números enteros, todo lo demás es obra del hombre.) Leopold Kronecker (1823-1891),

Más detalles

Práctica 8 Programación Funcional - Tipos Compuestos

Práctica 8 Programación Funcional - Tipos Compuestos Práctica 8 Programación Funcional - Tipos Compuestos Algoritmos y Estructura de Datos I Segundo Cuatrimestre 2010 1 Tipos Compuestos En los ejercicios de tipos compuestos NO TIENEN que definir los tipos

Más detalles

Estructura de datos y de la información Boletín de problemas - Tema 9

Estructura de datos y de la información Boletín de problemas - Tema 9 Estructura de datos y de la información Boletín de problemas - Tema 9 1. Dada la siguiente función recursiva: void F(char c) { if (( A

Más detalles

La recursividad forma parte del repertorio para resolver problemas en Computación y es de los métodos más poderosos y usados.

La recursividad forma parte del repertorio para resolver problemas en Computación y es de los métodos más poderosos y usados. RECURSIVIDAD La recursividad forma parte del repertorio para resolver problemas en Computación y es de los métodos más poderosos y usados. Los algoritmos recursivos ofrecen soluciones estructuradas, modulares

Más detalles

Euclides extendido y Test de primalidad probabiĺıstico

Euclides extendido y Test de primalidad probabiĺıstico Euclides extendido y Test de primalidad probabiĺıstico Taller de Álgebra I Verano de 2014 Lema de Bézout Recordemos este lema: Lema (Étienne Bézout) Sean a, b Z, alguno distinto de 0. Entonces existen

Más detalles

Guía 2: Listas, recursión e inducción

Guía 2: Listas, recursión e inducción Introducción a los Algoritmos - 2do cuatrimestre 2014 Guía 2: Listas, recursión e inducción Docentes: Walter Alini, Luciana Benotti En esta guía comenzaremos a trabajar con listas Para familiarizarnos

Más detalles

Tipos algebraicos y abstractos. Algoritmos y Estructuras de Datos I. Tipos algebraicos

Tipos algebraicos y abstractos. Algoritmos y Estructuras de Datos I. Tipos algebraicos Algoritmos y Estructuras de Datos I 1 cuatrimestre de 009 Departamento de Computación - FCEyN - UBA Programación funcional - clase Tipos algebraicos Tipos algebraicos y abstractos ya vimos los tipos básicos

Más detalles

ESCUELA PREPARATORIA OFICIAL NO.16 MATERÍA: PENSAMIENTO NUMÉRICO Y ALGEBRAICO I

ESCUELA PREPARATORIA OFICIAL NO.16 MATERÍA: PENSAMIENTO NUMÉRICO Y ALGEBRAICO I ARITMÉTICA 1. Números naturales 2. Divisibilidad 3. Números enteros 4. Números decimales 5. Fracciones y números racionales 6. Proporcionalidad 7. Sistema métrico decimal 8. Sistema sexagesimal 9. Números

Más detalles

Tipos de datos en S. Lógica y Computabilidad. Codificación de variables y etiquetas de S. Codificación de programas en S

Tipos de datos en S. Lógica y Computabilidad. Codificación de variables y etiquetas de S. Codificación de programas en S Tipos de datos en S Lógica y Computabilidad Verano 2011 Departamento de Computación - FCEyN - UBA Computabilidad - clase 5 Codificación de programas, Halting problem, diagonalización, tesis de Church,

Más detalles

Introducción a la Matemática Discreta

Introducción a la Matemática Discreta Introducción a la Matemática Discreta Aritmética Entera Luisa María Camacho Camacho Introd. a la Matemática Discreta 1 / 36 Introducción a la Matemática Discreta Temario Tema 1. Teoría de Conjuntos. Tema

Más detalles

TEORÍA DE DIVISIBILIDAD

TEORÍA DE DIVISIBILIDAD TEORÍA DE DIVISIBILIDAD MÚLTIPLOS Y DIVISORES.- Dados dos números naturales a y b, con a b, se dice que a es divisible por b o que a es múltiplo de b o que b es divisor de a, si la división de a : b es

Más detalles

Algoritmos en teoría de números

Algoritmos en teoría de números Algoritmos en teoría de números IIC2283 IIC2283 Algoritmos en teoría de números 1 / 92 Para recordar: aritmética modular Dados dos números a, b Z, si b > 0 entonces existen α, β Z tales que 0 β < b y a

Más detalles

Divide & Conquer. Herman Schinca. Clase de Junio de 2011

Divide & Conquer. Herman Schinca. Clase de Junio de 2011 Divide & Conquer Herman Schinca Clase 20 7 de Junio de 2011 Divide y vencerás Idea aplicable a muchas situaciones de la vida. Origen histórico atribuído a Julio César en relación a sus estrategias militares.

Más detalles

Secuencias Calculadas

Secuencias Calculadas Secuencias Calculadas Estructuras de Iteración y Recursividad Prof. Hilda Contreras Programación 1 hildac.programacion1@gmail.com Secuencias Calculadas Se aplican a los problemas donde los elementos de

Más detalles

Enteros Primera parte.

Enteros Primera parte. Capítulo 3 Enteros Primera parte. Die ganzen Zahlen hat der liebe Gott gemacht, alles andere ist Menschenwerk. (Dios hizo los números enteros, todo lo demás es obra del hombre.) Leopold Kronecker (1823-1891),

Más detalles

1. Escribir un algoritmo que resuelva A-B*((B+C) / (C-C 2 ). Considerar que no es posible la división por 0, detectar este caso y salvar el error.

1. Escribir un algoritmo que resuelva A-B*((B+C) / (C-C 2 ). Considerar que no es posible la división por 0, detectar este caso y salvar el error. T.P ALGORITMOS 1. Escribir un algoritmo que resuelva A-B*((B+C) / (C-C 2 ). Considerar que no es posible la división por 0, detectar este caso y salvar el error. 2. Escribir un algoritmo que lea tres números

Más detalles

Trabajo Práctico 6 Funciones, Procedimientos y División de Problemas

Trabajo Práctico 6 Funciones, Procedimientos y División de Problemas Trabajo Práctico 6 Funciones, Procedimientos y División de Problemas Ejercicio 1: Considere definida la función Invertir. function Invertir( num: integer ):integer; {Objetivo: Invierte el orden de los

Más detalles

Algoritmo de Euclides

Algoritmo de Euclides Algoritmo de Euclides Melanie Sclar Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires AED III Melanie Sclar (UBA) Algoritmo de Euclides AED III 1 / 21 Ejercicio 2.8 de la práctica Ejercicio

Más detalles

Recursión. Capítulo 4

Recursión. Capítulo 4 Recursión Capítulo 4 Introducción La recursión o recursividad es un concepto amplio, con muchas variantes, y difícil de precisar con pocas palabras.. Actividades Cotidianas; fotografía donde se observa

Más detalles

Álgebra I Práctica 3 - Números enteros (Parte 1)

Álgebra I Práctica 3 - Números enteros (Parte 1) Divisibilidad Álgebra I Práctica 3 - Números enteros (Parte 1 1. Decidir cuáles de las siguientes afirmaciones son verdaderas para todo a, b, c Z i a b c a c y b c, ii 4 a a, iii a b a ó b, iv 9 a b 9

Más detalles

Guía 2: Funciones, listas, recursión e inducción

Guía 2: Funciones, listas, recursión e inducción Introducción a los Algoritmos - 1er cuatrimestre 2013 Guía 2: Funciones, listas, recursión e inducción El objetivo de los siguientes ejercicios es introducirnos en la programación funcional, es decir,

Más detalles

Exámenes de Programación funcional con Haskell ( )

Exámenes de Programación funcional con Haskell ( ) Exámenes de Programación funcional con Haskell (2009 2014) José A. Alonso (coord.) y Gonzalo Aranda, Antonia M. Chávez, Andrés Cordón, María J. Hidalgo, Francisco J. Martín Miguel A. Martínez, Ignacio

Más detalles

Tema 3. Patrones y Definiciones de Funciones

Tema 3. Patrones y Definiciones de Funciones Programación Declarativa Haskell Informática Sistemas Curso 2003-2004 Pepe Gallardo Universidad de Málaga Tema 3. Patrones y Definiciones de Funciones 3.1 Comparación de Patrones Patrones constantes Patrones

Más detalles

Abstracción de procedimientos

Abstracción de procedimientos Abstracción de procedimientos 1.- Consideremos ABN (árboles binarios numéricos) sin nodos repetidos. Denimos los siguientes conceptos: Se pide: Dados dos ABN, A y B, decimos que B es SUBARBOL PRINCIPAL

Más detalles

El algoritmo de Euclides con residuos de menor valor absoluto

El algoritmo de Euclides con residuos de menor valor absoluto Miscelánea Matemática 6 05) -9 SMM El algoritmo de Euclides con residuos de menor valor absoluto Jesús Efrén Pérez Terrazas, Luis Felipe Solís Sansores, Emmanuel Vázquez Cetina Facultad de Matemáticas

Más detalles

Prácticas de Programación Declarativa ( )

Prácticas de Programación Declarativa ( ) Prácticas de Programación Declarativa (2007 08) José A. Alonso Jiménez Grupo de Lógica Computacional Dpto. de Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla Sevilla, 16 de

Más detalles

Aritmética entera. AMD Grado en Ingeniería Informática. AMD Grado en Ingeniería Informática (UM) Aritmética entera 1 / 15

Aritmética entera. AMD Grado en Ingeniería Informática. AMD Grado en Ingeniería Informática (UM) Aritmética entera 1 / 15 Aritmética entera AMD Grado en Ingeniería Informática AMD Grado en Ingeniería Informática (UM) Aritmética entera 1 / 15 Objetivos Al finalizar este tema tendréis que: Calcular el máximo común divisor de

Más detalles

Álgebra Lineal y Estructuras Matemáticas. J. C. Rosales y P. A. García Sánchez. Departamento de Álgebra, Universidad de Granada

Álgebra Lineal y Estructuras Matemáticas. J. C. Rosales y P. A. García Sánchez. Departamento de Álgebra, Universidad de Granada Álgebra Lineal y Estructuras Matemáticas J. C. Rosales y P. A. García Sánchez Departamento de Álgebra, Universidad de Granada Capítulo 2 Aritmética entera y modular 1. Los números enteros Dado un entero

Más detalles

Guia para el exámen parcial 1 - unas soluciones

Guia para el exámen parcial 1 - unas soluciones Matemáticas elementales, Demat-UG, ago-dic, 2017 Guia para el exámen parcial 1 - unas soluciones Fecha del exámen: miercoles, 4 oct, 2017. Profesor: Gil Bor, CIMAT. Definiciones: La representación de a

Más detalles

Divisibilidad (en N = N {0})

Divisibilidad (en N = N {0}) Divisibilidad (en N = N {0}) Dados dos números naturales a y c, se dice que c es un divisor de a si existe q N tal que a = q c (es decir, si en la división a c el resto es 0). c a significa que c es divisor

Más detalles

Especificación de Problemas

Especificación de Problemas Especificación de Problemas Eduardo Bonelli Departamento de Ciencia y Tecnología, UNQ ebonelli@unq.edu.ar 12 de septiembre de 2007 Especificación de Problemas Ejemplos Ejemplo de Problema ordenar, en orden

Más detalles

Tema 11. Listas infinitas

Tema 11. Listas infinitas Programación Declarativa Haskell Informática Sistemas Curso 2003-2004 Pepe Gallardo Universidad de Málaga Tema 11. Listas infinitas 11.1 Listas infinitas 11.2 La criba de Eratóstenes 11.3 Redes de procesos

Más detalles

Estructuras de Datos y de la Información Ingeniería Técnica en Informática de Gestión. Curso 2007/2008 Ejercicios del Tema 2

Estructuras de Datos y de la Información Ingeniería Técnica en Informática de Gestión. Curso 2007/2008 Ejercicios del Tema 2 Estructuras de Datos y de la Información Ingeniería Técnica en Informática de Gestión. Curso 2007/2008 Ejercicios del Tema 2 Diseño de algoritmos recursivos 1. Dado un vector de enteros de longitud N,

Más detalles

Árboles generales. Un árbol es una estructura no lineal acíclica utilizada para organizar información de forma eficiente. La definición es recursiva:

Árboles generales. Un árbol es una estructura no lineal acíclica utilizada para organizar información de forma eficiente. La definición es recursiva: Capítulo 9. Programación con Árboles 107 Árboles Árboles generales Un árbol es una estructura no lineal acíclica utilizada para organizar información de forma eficiente. La definición es recursiva: Un

Más detalles

Temario. Tipos de recursión. Eficiencia y recursión

Temario. Tipos de recursión. Eficiencia y recursión RECURSION Temario Tipos de recursión Eficiencia y recursión Tipos de RECURSION Según desde donde se realice el llamado recursivo: Directa: la función se llama a sí misma. Indirecta: la función A llama

Más detalles

Introducción a Haskell. Cecilia Manzino

Introducción a Haskell. Cecilia Manzino Paradigmas de programación Un paradigma de programación representa un estilo particular o filosofía para la construcción del software. Los más comunes dan lugar a los siguientes tipos de programación:

Más detalles

DIVISIBILIDAD NÚMEROS NATURALES

DIVISIBILIDAD NÚMEROS NATURALES DIVISIBILIDAD NÚMEROS NATURALES MÚLTIPLOS Un número a es múltiplo de otro b cuando es el resultado de multiplicarlo por otro número c. a = b c Ejemplo: 12 es múltiplo de 2, ya que resulta de multiplicar

Más detalles

1. NUMEROS REALES a. Los Números Reales

1. NUMEROS REALES a. Los Números Reales 1. NUMEROS REALES a. Los Números Reales Los números reales comprenden todo el campo de números que utilizamos en las matemáticas, a excepción de los números complejos que veremos en capítulos superiores.

Más detalles

FUNDAMENTOS DE PROGRAMACIÓN TALLER No. 1 Profesor: Alvaro Ospina Sanjuan

FUNDAMENTOS DE PROGRAMACIÓN TALLER No. 1 Profesor: Alvaro Ospina Sanjuan FUNDAMENTOS DE PROGRAMACIÓN TALLER No. 1 Profesor: Alvaro Ospina Sanjuan 1. Escriba un programa que cambie cualquier suma de dinero hasta de 99 ctvs usando las monedas de denominación de 1 ctvs, 5 ctvs,

Más detalles

11 Secuencias, Series y Probabilidad

11 Secuencias, Series y Probabilidad Programa Inmersión, Verano 06 Notas escritas por Dr. M Notas del cursos. Basadas en los prontuarios de MATE 300 y MATE 303 Clase #0: lunes, 7 de junio de 06. Secuencias, Series y Probabilidad. Continuación:

Más detalles

ANÁLISIS Y DISEÑO DE ALGORITMOS. PRACTICAS

ANÁLISIS Y DISEÑO DE ALGORITMOS. PRACTICAS ANÁLISIS Y DISEÑO DE ALGORITMOS. PRACTICAS 2004-2005 PRACTICA 1: MEDICIÓN DEL TIEMPO. ALGORITMOS DE ORDENACIÓN Crear un conjunto de funciones que permitan la medición del tiempo de ejecución de los programas,

Más detalles

#include <stdio.h> float cubica(float numero) { float cubica; cubica = numero * numero * numero; return cubica; }

#include <stdio.h> float cubica(float numero) { float cubica; cubica = numero * numero * numero; return cubica; } /*1. Crear una función que calcule el cubo de un número real (float). El resultado deberá ser otro número real. Probar esta función para calcular el cubo de 3.2 y el de 5. */ float cubica(float numero)

Más detalles

Valentín Moreno Programación en FORTRAN ESQUEMA DE SELECCIÓN

Valentín Moreno Programación en FORTRAN ESQUEMA DE SELECCIÓN ESQUEMA DE SELECCIÓN EJERCICIO 1 Escribir un programa en Fortran que permita introducir dos enteros, A y B, por teclado, y calcule y muestre en pantalla su suma y su producto, con un texto explicativo.

Más detalles

RECORDAR TIPOS DE DATOS

RECORDAR TIPOS DE DATOS RECORDAR TIPOS DE DATOS VARIABLES: OBJETO CUYO valor cambia: A510 nombres NOTAS Int A=0; float B=1; CONSTANTES: OBJETO cuyo valor no cambia PI= 3.14159 LAS COMAS NO SE PERMITEN Int PI=3.1415 EXPRESIONES:

Más detalles

Números primos y compuestos

Números primos y compuestos Números primos y compuestos Jorge Tipe Villanueva Sabemos que cualquier entero positivo n tiene como divisores a 1 y n. Si asumimos que n > 1 entonces n tendrá al menos dos divisores pues 1 y n son diferentes.

Más detalles

Semana 14. Carlos Hernandez. Helena de Oteyza. Alfredo.

Semana 14. Carlos Hernandez. Helena de Oteyza. Alfredo. Semana 4 Carlos Hernandez Los apuntes los encuentran en: http://wwwcimatmx/especialidadseg/documentos/algoritmospdf Helena de Oteyza http://wwwcimatmx/especialidadseg/documentos/desigualdadespdf Alfredo

Más detalles

Capítulo 2: Inducción y recursión Clase 3: Definiciones recursivas e Inducción estructural

Capítulo 2: Inducción y recursión Clase 3: Definiciones recursivas e Inducción estructural Capítulo 2: Inducción y recursión Clase 3: Definiciones recursivas e Inducción estructural Matemática Discreta - CC3101 Profesor: Pablo Barceló P. Barceló Matemática Discreta - Cap. 2: Inducción y Recursión

Más detalles

Aritmética Entera MATEMÁTICA DISCRETA I. F. Informática. UPM. MATEMÁTICA DISCRETA I () Aritmética Entera F. Informática.

Aritmética Entera MATEMÁTICA DISCRETA I. F. Informática. UPM. MATEMÁTICA DISCRETA I () Aritmética Entera F. Informática. Aritmética Entera MATEMÁTICA DISCRETA I F. Informática. UPM MATEMÁTICA DISCRETA I () Aritmética Entera F. Informática. UPM 1 / 18 Estructura de los números enteros Estructura de los números enteros Definición

Más detalles

COMPLEMENTO DEL TEÓRICO

COMPLEMENTO DEL TEÓRICO ÁLGEBRA I PRIMER CUATRIMESTRE - AÑO 2016 COMPLEMENTO DEL TEÓRICO El material de estas notas fue dictado en las clases teóricas pero no se encuentra en el texto que seguimos en las mismas ( Álgebra I -

Más detalles

Capítulo IV. Divisibilidad y Primalidad. Algoritmo de la División

Capítulo IV. Divisibilidad y Primalidad. Algoritmo de la División Capítulo IV Divisibilidad y Primalidad IV.1. Algoritmo de la División (Aquí se enuncia con la posibilidad de divisor negativo y la prueba incluye el caso de dividendo negativo.) Teorema 1 Dados m, d Z,

Más detalles

ARITMÉTICA ENTERA LOS NÚMEROS ENTEROS. = {..., n,..., 3, 2, 1, 0, 1, 2, 3,..., n,...} (Zahlen, en alemán, números)

ARITMÉTICA ENTERA LOS NÚMEROS ENTEROS. = {..., n,..., 3, 2, 1, 0, 1, 2, 3,..., n,...} (Zahlen, en alemán, números) LOS NÚMEROS ENTEROS ARITMÉTICA ENTERA = {..., n,..., 3, 2, 1, 0, 1, 2, 3,..., n,...} (Zahlen, en alemán, números) Recordamos la estructura de sus propiedades aritméticas la relación de orden usual, compatible

Más detalles

Tipos en Haskell. Cecilia Manzino

Tipos en Haskell. Cecilia Manzino Tipos Tipo: conjunto de valores asociados a operaciones. Ejemplos: enteros, caracteres, booleanos, funciones de enteros a enteros. Sirven para: detectar errores antes de la evaluación especificar programas

Más detalles

Guía 1: Funciones, precedencia y tipado

Guía 1: Funciones, precedencia y tipado Introducción a los Algoritmos - do. cuatrimestre 014 Guía 1: Funciones, precedencia y tipado Docentes: Walter Alini, Luciana Benotti El objetivo de los siguientes ejercicios es introducirnos en la programación

Más detalles

Tema 4: Definición de funciones

Tema 4: Definición de funciones Programación declarativa (2009 10) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla Constantes como patrones Variables como

Más detalles