Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera...

48
UNSA. Sede Orán. Año 2016 Asignatura: Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs ) Clases Prácticas: C.U. Daniela Alvarez (Martes y Jueves de 10 a 13hs ) Lugar: Aula de Seminario Sitio web: www.algoritmossedeoran.wordpress.com Cronograma – parciales y recup Crono clases 2016 ALGORITMOS Y ED.xls Programa analítico RESCD-EXA 179-2011-Algoritmos-estr-datos.PDF 1

Transcript of Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera...

Page 1: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

UNSA. Sede Orán. Año 2016

Asignatura:

Algoritmos y Estructuras de Datos – Carrera T.U.P

Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

Clases Prácticas: C.U. Daniela Alvarez (Martes y Jueves de 10 a 13hs )

Lugar: Aula de Seminario

Sitio web: www.algoritmossedeoran.wordpress.com

Cronograma – parciales y recup Crono clases 2016 ALGORITMOS Y ED.xls

Programa analítico RESCD-EXA 179-2011-Algoritmos-estr-datos.PDF

1

Page 2: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

TEMA:

NOTACION ALGORITMICA MATEMATICA

RECURSION

(APUNTES DE APOYO A CLASES TEÓRICAS)

(TIEMPO DE EXPOSICIÓN 2:30 HS)

.

2

Page 3: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

Bibliografía:

6. Knuth D. El Arte de programar ordenadores. Vol 1: Algoritmos Fundamentales.

Ed Reverté SA. Edición en Español 1995.

3. Galvé Javier y otros. Diseño y Análisis de Algoritmos Funcionales e

Imperativos. Ed. Rama. 1993.

4. Lipschutz. Estructuras de Datos. Ed. Mc Graw Hill. 1996.

5. Brassard G. Fundamentos de Algoritmia. Ed. Prentice Hall. 1997.

1. T. Hibbard. Apuntes de Cátedra Algorítmica U.Nsa Sede Salta. Año

2000.

2. J. Yazlle. Apuntes de Cátedra: Aritmética Elemental. U.N.Sa. Marzo 2006.

3

Page 4: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

Objetivos:

1. Proponer la notación algorítmica que se utilizará en la materia.

2. Conceptualizar a un algoritmo como una función

3. Definir la recursión como una técnica de resolución de problemas

computacionales

4. Definir función recursiva.

5. Identificar los casos base y general o recursivo en toda fc. recursiva.

6. Identificar las distintas etapas en el proceso de diseño de algoritmos

recursivos.

7. Desarrollar ejemplos de aplicación.

8. Sugerir criterios para usar o no recursión

4

Page 5: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

Campo de aplicación:

La técnica de la recursión es ampliamente utilizada en Ciencias de la

Computación, principalmente en el diseño de algoritmos y

lenguajes de programación.

5

Page 6: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

Repasemos algunos conceptos:

Algoritmo:

Conjunto finito y no ambiguo de pasos expresados en cierto orden que

permiten resolver un problema en un tiempo finito.

Características de un algoritmo:

1. Finitud:

El algoritmo debe finalizar luego de un n° finito de pasos.

2. Definibilidad:

Cada paso del algoritmo debe definirse de modo preciso. Las acciones deben

estar especificadas rigurosamente y sin ambigüedad.

6

Page 7: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

Repasemos algunos conceptos…

Características de un algoritmo …

3. Entrada:

Un algoritmo tiene entradas, que son cantidades dadas al iniciar el

algoritmo.

4. Salida:

Un algoritmo tiene siempre 1 o más salidas.

5. Efectividad:

Todas las acciones del algoritmo deben ser lo bastante básicas para

efectuarse de un modo exacto y en un tiempo finito.

7

Page 8: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

La notación algorítmica:

Las acciones que realiza un algoritmo son especificadas mediante: notación algorítmica: La notación algorítmica: Conjunto de convenciones que describen de forma no ambigua un algoritmo. a) Comentarios: dos barras inclinadas y porción de texto. No tiene ningún

efecto Ejemplo: // Caso base b) Identificadores: nombre que se da a un objeto que aparece en la

especificación. Puede ser simbólico, ej signo +, ó alfanumérico: ej: buscar1. c) Tipos de datos: naturales, enteros, reales, caracteres, cadenas, vectores,

tuplas (pares, ternas, etc.), conjuntos, funciones.

8

Page 9: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

La notación algorítmica…

d) Instrucciones de asignación: Sea vble = expresión ó vble := expresión Ejemplo: Sea a = a div 10 ó a := a div 10 No debe interpretarse como ecuación e) Instrucciones de retorno: es lo que devuelve un algoritmo . contestar(identificador) ó luego (identificador) contestar(expresión) ó luego(expresión) Ejemplo: contestar(x) ó contestar(Verdadero)

f) Instrucciones condicionales: Si (condición) luego lista1_de_acciones Sino lista2_de_acciones Ejemplo: Si (a > b) luego contestar(a) Sino contestar(b)

9

Page 10: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

La notación algorítmica matemática… 10

g) Estructuras de control repetitivas:

g.1) Ciclo Para Escribimos: Para vble: = valor_inicial hasta valor_final Hacer lista_de_Instrucciones Fin_Para g.2) Ciclo Mientras: Escribimos: Mientras (Condición=Verdadera) Hacer Lista_de_Instrucciones Fin_Mientras

Page 11: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

La notación algorítmica…

En notación algorítmica:

nombre_funcion ( argumentos ) = expresión

donde : expresión = formada por instrucciones, una de las cuales debe ser “de retorno” Ejemplo:

cubo(x) = contestar( x * x * x)

11

x f f(x)

Función: Podemos pensar en una función como un algoritmo, el cual provee un

esquema para obtener un valor.

Page 12: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

La notación matemática y la notación algorítmica

Ejemplo 1: f(x) = x

12

x =

En notación matemática:

-x si x < 0

x si x 0

En notación algorítmica:

abs(x) = si (x < 0) luego contestar(-x)

sino contestar (x)

Ejemplo 2: menor(x, y)

menor(x,y)=

En notación matemática:

x si x < y

y si x y

En notación algorítmica:

menor(x, y) = Si (x < y) luego contestar(x)

Sino contestar (y)

Page 13: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

La notación algorítmica…

Aplicación de la función: es la evaluación de la función en el valor del argumento. nombre_funcion ( valor_argumentos )

Ejemplos de aplicación de fc:

1) En la fc: cubo(x) = contestar(x * x* x)

la evaluación de cubo(2) retorna 8

2) En la fc: menor(x,y) = si (x < y) luego contestar(x) sino contestar(y) La evaluación de menor(2, 5) retorna 2

13

Page 14: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

La notación algorítmica…

Invocación de funciones en el cuerpo de una función: a) Una función puede invocar a otra función: Ej. Redefinimos cubo(x):

cubo(x) = contestar(x * cuadrado(x))

donde // inicio de definición de cuadrado

cuadrado(x) = contestar(x * x)

b) Una función puede invocarse a sí misma: Llamamos a esta función, función recursiva

14

Page 15: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

Recursión:

Definición:

Es una técnica de diseño de algoritmos, mediante la cual una función se define

en términos de sí misma.

En el cuerpo de función aparece alguna aplicación suya.

15

f(x) = …………

………...

..f(x-1) ..

…………

Esquemáticamente:

Page 16: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

Recursión:

Ejemplo: Queremos calcular x n , x 0 y n 0

x n =

1 Si n = 0

x * x (n-1) Si n > 0

En notación algorítmica:

Ej: 2 4 = 2 * 2 3

2 3 = 2 * 2 2

2 2 = 2 * 2 1

2 1= 2 * 2 0

2 0= 1

= 2 * 1 = 2

= 2 * 2 = 4

= 2 * 4 = 8

= 2 * 8 = 16 Resultado

La definición de potencia en notación matemática es:

potencia(x, n) = Si (n >0) luego contestar (x * potencia(x,n-1) )

Sino contestar (1)

16

Page 17: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

Recursión …

potencia(x, n) = Si (n >0) luego contestar (x * potencia(x, n-1))

Sino contestar (1)

Ejemplo:

Potencia(2, 4) = contestar (2 * potencia(2, 3))

Potencia(2, 3) = contestar (2 * potencia(2, 2))

Potencia(2, 2) = contestar (2 * potencia(2, 1))

Potencia(2, 1) = contestar (2 * potencia(2, 0))

Potencia(2, 0) = contestar (1)

2 * 1 = 2

2 * 2 = 4

2 * 4 = 8

2 * 8 = 16 Retorna 16

Caso base:

La función

no recurre

Caso general o

recursivo: con

parámetros más

pequeños 17

Page 18: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

Recursión:

Etapas en el diseño de algoritmos recursivos

1) Dado un problema, entenderlo:

Ejemplificarlo, distinguir datos de entrada y de salida

2) Expresar el problema mediante un modelo (matemático cuando sea

posible):

Identificar: Caso base ( la función no recurre)

Caso general o recursivo: la función se invoca con

argumentos más pequeños

3) Traducir el modelo a un algoritmo en notación algorítmica

4) Diseñar casos de prueba

5) Realizar la traza de ejecución

6) Traducir el algoritmo a un programa en un lenguaje de programación

funcional (clase práctica)

7) Probar el programa (clase práctica)

18

Page 19: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

Ejemplo: cociente(a, b), algoritmo muy utilizado en la materia

Dados a y b números naturales positivos, escribir un algoritmo recursivo que devuelva el cociente natural entre a y b utilizando sumas y restas solamente.

19

Ejemplificamos con caramelos y alumnos:

Repartir (10 caramelos, 4 alumnos) =

como 10 caramelos es mayor o igual a 4 entonces doy 1 caramelo a cada alumno y

vuelvo a Repartir((10-4) caramelos, 4 alumnos)

Repartir (6 caramelos, 4 alumnos) =

como 6 caramelos es mayor o igual a 4 entonces doy 1 caramelo más a cada alumno y

vuelvo a Repartir((6-4) caramelos, 4 alumnos)

Repartir (2 caramelos, 4 alumnos) =

como 2 caramelos NO es mayor o igual a 4 entonces doy 0 caramelo a cada alumno y

No vuelvo a Repartir

Cuántas veces pude repartir? 2 , ese es el cociente (10, 4) , las veces que pude repartir

Veremos en forma general: cociente (a, b) …

Page 20: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

Ejemplo: cociente(a, b), algoritmo muy utilizado en la materia

Generalizamos:

Dados a y b números naturales positivos, escribir un algoritmo recursivo que devuelva el cociente natural entre a y b utilizando sumas y restas solamente. Etapa 1) Entender el problema:

Ejemplo: si a = 15 y b = 4 las entradas son 15 y 4 ; la salida será 3

Etapa 2) Proceso de calcular el cociente natural entre a y b, es contar las veces

que puedo restar b de a; es decir mientras a sea b.

15 - 4 = 11 ; contaremos 1 vez. (1)

11 - 4 = 7, aumentaremos el contador de veces (2)

7 – 4 = 3, aumentaremos el contador de veces (3)

3 – 4 no lo hacemos ya que 3 es menor que 4, lo que indica la finalización del proceso y no contamos. Luego el contador (contiene 3) es el resultado buscado

20

Page 21: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

Ejemplo: cociente(a, b)

Etapa 3) Obtener un algoritmo:

- Versión iterativa (sin recursión):

cociente(a, b) =

c := 0; // contador

Mientras (a b) Hacer

a := a - b;

c := c + 1;

Fin_Mientras

contestar(c)

Etapa 3) Obtener un algoritmo:

- Versión recursiva

cociente(a, b) =

Si (a b) luego

contestar( 1 + cociente(a-b, b) )

sino contestar (0)

Caso base: no se puede restar

b de a

Caso general: argumento más

pequeño

21

Page 22: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

Etapa 4) Diseñar casos de prueba: Caso 1: a = 3, b= 4; Caso 2: a = 15, b = 4

Etapa 5) Realizar la traza de ejecución:

cociente(3,4) = contestar (0) Retorna 0 ; cociente(3,4) = 0

cociente(15,4) = contestar (1 + cociente(15 - 4, 4))

cociente(11,4) = contestar (1 + cociente(11-4, 4))

Retorna 3

cociente(7, 4) = contestar (1 + cociente(7-4, 4))

cociente(3, 4) = contestar (0)

0

1

2

cociente(a, b) = Si (a b) luego contestar( 1 + cociente(a-b, b) ) sino contestar (0)

cociente(15,4) = 3

22

Caso 1: a = 3, b= 4

Caso 2: a = 15, b= 4

1 + 0 = 1

1 + 1 = 2

1 + 2 = 3

Page 23: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

Pruebas con los alumnos:

• Cociente (13, 4)

• Cociente (21, 7)

cociente(a, b) = Si (a b) luego contestar( 1 + cociente(a-b, b) ) sino contestar (0)

23

cociente(a, b) = c := 0; // contador Mientras (a b) Hacer a := a - b; c := c + 1; Fin_Mientras contestar(c)

cociente(a, b) Versión iterativa y recursiva

Page 24: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

Otro ejemplo: Búsqueda Secuencial

Dado un vector v de n números, realizar la búsqueda de un elemento t.

Etapa 1) Entender el problema: Buscar un elemento que esté en el vector: Ejemplo: si v=[12,25,7,19,23] , n = 5, t =7 la salida será Verdadero

12 25 7 19 23 v t = 7

i=1

24

¿ t = v[i] ? ¿ 7 = v[1]= 12 => => NO

12 25 7 19 23 v

i=2

¿ t = v[i] ? ¿ 7 = v[2]= 25 => => NO Incrementar i

12 25 7 19 23 v

i=3

¿ t = v[i] ? ¿ 7 = v[3]= 7 => SI Verdadero

Incrementar i

Page 25: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

Ejemplo: Búsqueda Secuencial

Etapa 1) Entender el problema … Buscar un elemento que NO esté en el vector: Ejemplo: si v=[12,25,7,19,23] , n = 5, t =1 la salida será Falso

12 25 7 19 23 v

i=1

25

¿ t = v[i] ? ¿ 1 = v[1]= 12 => => NO,

Incrementar i

12 25 7 19 23 v

i=2

¿ t = v[i] ? ¿ 1 = v[2]= 25 => => NO,

Incrementar i

12 25 7 19 23 v

i=3

¿ t = v[i] ? ¿ 1 = v[3]= 7 => No,

Incrementar i

12 25 7 19 23 v

i=4

¿ t = v[i] ? ¿ 1 = v[4]=19 => No,

Incrementar i

12 25 7 19 23 v

i=5

¿ t = v[i] ? ¿ 1 = v[5]=23 => No,

Incrementar i i = 6 > n => Falso

Page 26: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

Ejemplo: Búsqueda Secuencial

Versión iterativa: Recordar cómo lo hacíamos en Programación

26

Inicializar variables: i =1

Mientras ((i n) y t v[i]) Hacer i=i+1

Buscar(v,n,t) =

Fin-Mientras

Si (i> n) Contestar (Falso) Sino contestar(Verdadero)

Page 27: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

Ejemplo: Búsqueda Secuencial

Etapa 2) Expresar el problema mediante un modelo, para ello debemos Identificar:

27

Caso base: 1. NO Encontrado 2. Encontrado

i > n

v[i] = t

Si (i n) y t v[i] entonces buscar(v, i+1, n) Caso general o recursivo:

buscar(v, n, t) =

Si (n=0) luego contestar(“V Vacío”)

Sino buscar1(v, 1, n, t)

donde

buscar1(v, i, n, t) =

Si (i n) luego

Si (v[i] = t) luego contestar (Verdadero)

Sino buscar1(v, i+1, n, t)

Sino contestar(Falso)

Caso General

Caso Base

Etapa 3) Obtener un algoritmo:

- Versión recursiva

Page 28: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

Ejemplo: Búsqueda Secuencial

Etapa 4) Diseñar casos de prueba: Caso1: t = 7 (Verdadero) , Caso 2: t =1 (Falso)

Etapa5) Realizar la traza de ejecución: Caso 1 ( t = 7)

buscar([12, 25, 7, 19, 23], 5, 7) = buscar1([12, 25, 7, 19, 23], 1, 5, 7) buscar1([12, 25, 7, 19, 23], 1, 5, 7) // i= 1; i 5; 12 7 => buscar1([12, 25, 7, 19, 23], 2, 5, 7) // i= 2; i 5; 25 7 => buscar1([12, 25, 7, 19, 23], 3, 5, 7) = // i= 3; i 5; 7 = 7 => Verdadero

28

buscar(v, n, t) = Si (n=0) luego contestar(“V Vacío”) Sino buscar1(v, 1, n, t) donde buscar1(v, i, n, t) = Si (i n) luego Si (v[i] = t) luego contestar (Verdadero) Sino buscar1(v, i+1, n, t) Sino contestar(Falso)

Page 29: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

Ejemplo: Búsqueda Secuencial

Etapa5) Realizar la traza de ejecución: Caso 2 ( t = 1)

buscar([12, 25, 7, 19, 23], 5, 1) = buscar1([12, 25, 7, 19, 23], 1, 5, 1) buscar1([12, 25, 7, 19, 23], 1, 5, 1) = // i= 1; i 5; 12 1 => buscar1([12, 25, 7, 19, 23], 2, 5, 1)= // i= 2; i 5; 25 1 => buscar1([12, 25, 7, 19, 23], 3, 5, 1) = // i= 3; i 5; 7 1 => buscar1([12, 25, 7, 19, 23], 4, 5, 1) = // i= 4; i 5; 19 1 => buscar1([12, 25, 7, 19, 23], 5, 5, 1) = // i= 5; i 5; 23 1 => buscar1([12, 25, 7, 19, 23], 6, 5, 1) = // i= 6; i > n => Falso

29

buscar(v, n, t) = Si (n=0) luego contestar(“V Vacío”) Sino buscar1(v, 1, n, t) donde buscar1(v, i, n, t) = Si (i n) luego Si (v[i] = t) luego contestar (Verdadero) Sino buscar1(v, i+1, n, t) Sino contestar(Falso)

Page 30: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

Ejemplo: Búsqueda Secuencial

Prueba con los alumnos: buscar([12, 25, 7, 19, 23], 5, 12)

buscar([12, 25, 7, 19, 23], 5, 23) buscar([12, 25, 7, 19, 23], 5, 15)

30

buscar(v, n, t) = Si (n=0) luego contestar(“V Vacío”) Sino buscar1(v, 1, n, t) donde buscar1(v, i, n, t) = Si (i n) luego Si (v[i] = t) luego contestar (Verdadero) Sino buscar1(v, i+1, n, t) Sino contestar(Falso)

Page 31: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

Ejemplo: Búsqueda Secuencial

Prueba con los alumnos: buscar([12, 25, 7, 19, 23], 5, 12)

buscar([12, 25, 7, 19, 23], 5, 23) buscar([12, 25, 7, 19, 23], 5, 5)

31

buscar(v, n, t) = Si (n=0) luego contestar(“V Vacío”) Sino buscar1(v, 1, n, t) donde buscar1(v, i, n, t) = Si (i n) luego Si (v[i] = t) luego contestar (Verdadero) Sino buscar1(v, i+1, n, t) Sino contestar(Falso)

Inicializar variables: i =1

Mientras ((i n) y t v[i]) Hacer i=i+1

Buscar(v,n,t) =

Fin-Mientras

Si (i> n) Contestar (Falso) Sino contestar(Verdadero)

Page 32: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

Criterios: Cuándo usar recursión ?

• Cuando el dato está definido recursivamente:

Ejemplo: las listas o vectores, árboles.

• Cuando el algoritmo sea repetitivo y trata valores cada vez más

pequeños:

Ejemplo: invertir un entero, cantidad de dígitos de un número.

• Cuando obtener una solución iterativa sea mucho más complicado que

una solución recursiva.

Ejemplo: búsqueda secuencial

32

Page 33: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

Criterios: Cuándo No usar recursión ?

• Cuando el lenguaje de programación no lo permita:

Ejemplo: Fortran, Cobol

• Cuando la solución iterativa sea clara a simple vista.

33

• Cuando el tamaño de los argumentos sea muy grande.

Page 34: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

El Lenguaje de Programación: Haskell

Breve historia

Compiladores y EDI.

El lenguaje

Bibliografía Haskell

Comandos mas utilizados en los compiladores.

Demo: Haskell

34

Page 35: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

El Lenguaje de Programación: Haskell

Breve historia es un lenguaje de programación multi-propósito puramente funcional con fuerte tipificación.

Su nombre se debe al lógico estadounidense Haskell Curry.

1987: Comienza a diseñarse Lenguaje Haskell .

1990: Haskell 1.0

1995: Haskell 1.3

1998: Haskell98: Vesión estable de Haskell y GOFER como subconjunto de Haskell

Implementaciones :

HUG 98 versión Libre de Haskell : Intérprete de Haskell (2006 última versión).

http://www.haskell.org/hugs/

WinGHC: Ultima versión 2015: 7.10.3. para 32 y 64 bits

https://www.haskell.org/platform/windows.html

35

Page 36: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

El Lenguaje de Programación: Haskell

Es un lenguaje funcional puro.

Todos los cómputos vienen descritos a través de la evaluación

de expresiones (términos sintácticos) para producir valores (entidades abstractas

que son vistas como respuestas).

Todo valor tiene asociado un tipo.

Ejemplos de expresiones de tipo son los tipos atómicos:

Integer (enteros con precisión ilimitada), es el conjunto de los enteros {…, -3; -2; -1; 0; 1; 2;

3;…}

Int: enteros de rango limitado que cubren al menos el intervalo -229 .. 229

Float y Double: reales de menor a mayor precisión

Char : representa un carácter. Se escribe entre comillas simples: ‘a’

Integer->Integer (funciones que aplican Integer sobre Integer),

Bool : True y False

36

Page 37: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

El Lenguaje de Programación: Haskell

Los tipos estructurados:

Listas:

[Integer] lista homogénea de enteros

[Char] lista de caracteres ó strings

Tuplas:

(Char, Integer) (una tupla formada por un carácter y un entero).

37

Page 38: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

El Lenguaje de Programación: Haskell

Sintáxis:

Los nombres de función comienzan por minúscula: f , suma, mayor

Los nombres de argumentos comienzan por minúscula: x, y, a, b

Los nombres de tipos: comienzan por mayúscula: Integer, Bool, Char, etc

38

Page 39: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

El Lenguaje de Programación: Haskell

Funciones

Ya que Haskell es un lenguaje funcional, podemos esperar que las funciones

jueguen un papel esencial.

Consideremos la siguiente definición de función que suma sus dos argumentos:

suma :: Integer -> Integer -> Integer --Declaración de la fc

tipo 1er arg tipo 2do arg tipo resultado

suma x y = x + y -- Definición de la fc

Este es un ejemplo de función parcializada o currificada (curried).

El origen del nombre curry proviene de la persona que popularizó el uso de la

parcialización: Haskell Curry.

39

Page 40: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

El Lenguaje de Programación: Haskell

Funciones

La función anterior en forma no parcializada o no currificada (uncurried), podemos

usar una tupla:

suma :: (Integer, Integer) -> Integer -- Declaración de la fc

tipo del arg tipo del resultado

suma (x,y) = x + y

40

Page 41: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

Compilador Hugs 98: 41

Page 42: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

Compilador WinGHC: 42

Page 43: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

Bibliografía Lenguaje Haskell:

Introducción Agradable al Haskell:

http://www.lcc.uma.es/~blas/pfHaskell/gentle/

http://www.lcc.uma.es/~pepeg/mates/tema1.pdf al tema 3. Universidad

de Málaga

Libro electrónico Razonando con Haskell de Richard Bird (en S.R.O)

http://books.google.com.ar/books?id=xIlyOiGOC6EC&printsec=frontcover&d

q=haskell&hl=es&ei=5NFaTpmfG8bY0QHDr4mVCQ&sa=X&oi=book_result

&ct=result&resnum=2&ved=0CDEQ6AEwA#v=onepage

43

Page 44: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

Comandos más utilizados en los

compiladores: 44

:edit nombre.hs edita el archivo

:e nombre.hs edita el archivo

:e edita el último archivo

:? muestra la lista de comandos

:load “archivo.hs” carga el archivo.hs

:quit exit GHCi

:q exit GHCi

:l “archivo.hs” carga el archivo.hs

carácter ` (por ejemplo en `mod`) alt 96

/= distinto

== igual de comparación

&& y (conjunción)

|| o (disyunción)

Aclaraciones de Sintáxis Haskell:

Page 45: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

Ejemplo: 45

Determinar el mayor de dos números a y b.

Ejemplo de Código Haskell: (si … sino) (if … then)

función mayor:

may(a,b) = if (a > b) then a

else b

1) Escribimos en el EDI de WinGHCi: *Main> :e tp0recursion.hs

Como es un archivo nuevo, se abre el Block de Notas:

2) Escribimos el código del algoritmo:

Page 46: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

46

4.1) Cargamos a memoria el archivo .hs: *Main> :l "tp0recursion.hs"

4.2) Ejecutamos el algoritmo: *Main> may(39,69)

69

Ejemplo: Determinar el mayor de dos números a y b.

3) Guardamos el algoritmo : Archivo/Guardar como …:

4) Probamos el algoritmo:

Page 47: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

47

Ejemplo: Funciones cuadrado(x), minimo(x,y), otras

Page 48: Algoritmos y Estructuras de Datos Carrera T.U · Algoritmos y Estructuras de Datos – Carrera T.U.P Clases Teóricas: Lic. Jaquelina Jallés (Lunes y Miércoles de 8 a 10:30 hs )

Para resumir la clase de hoy ….

Algoritmo - Características

Comentarios

Identificadores

Notación

Algorítmica -

Matemática

Instrucciones

Función

=

Algoritmo

Notación para definirla

Aplicación A otra función

Invocación A sí misma (Recursión)

Asignación

Retorno

Condicionales

Definición

Etapas del diseño

Ejemplos

Criterios

Tipos de datos

48

Implementación

Haskell