====== Algoritmos y Estructuras de Datos I ====== {{ :algo1:portada.jpg?150 }} ===== Docentes ===== **Teórico/práctico**: [[http://www.cs.famaf.unc.edu.ar/~damian|Damián Barsotti]], Araceli Acosta, [[http://www.cs.famaf.unc.edu.ar/~francolq|Franco Luque]], Matías Lee, Mauricio Telechea, Demetrio Vilela. **Laboratorio**: [[http://www.cs.famaf.unc.edu.ar/~gabriel|Gabriel Infante-Lopez]], Martín Dominguez, [[http://www.cs.famaf.unc.edu.ar/~francolq|Franco Luque]], Cherini Renato, Leonardo Rodriguez. ===== Horarios ===== **Teórico**: martes y jueves de 9 a 11 hs., Aula D1 **Práctico**: martes y jueves de 11 a 13 hs., Aula D1 D7 **Laboratorio**: viernes de 9 a 13 hs., Lab. 28 ===== Novedades ===== * Creada [[http://www.famaf.proed.unc.edu.ar/course/view.php?id=102|aula virtual]]. ===== Regularidad / Promoción ===== * Para **regularizar** la materia: 2 parciales aprobados (o sus equivalentes recuperatorios) con nota >= 5 y el taller aprobado. * Para **promocionar** la materia: 2 parciales aprobados (o sus equivalentes recuperatorios) con nota >= 7 y el taller aprobado. * Para rendir **libre** la materia: seguiremos la modalidad del dictado ordinario de la materia, que aparece en "Condiciones para rendir libre el taller" en [[2010-2|la página de la materia del año pasado]]. Nota: El taller también se considerará aprobado si lo fue en el primer cuatrimestre del año 2012. /* Para **promocionar** la materia: 2 parciales aprobados con nota >= 6 obteniendo un promedio >= 7 y el taller aprobado. */ ===== Parciales ===== * 25/9 y 22/11 * Recuperatorio 29/11 ===== Bitácora ===== * 21/8 Presentación de la materia. Derivación y verificación de programas. Expresiones Cuantificadas. Dado ejercicio 3 a. Pueden hacer hasta el ejercicio 4. * 23/8 Reglas para la cuantificación general. * 28/8 Ejercicio del rango unitario para N el cual introduce los conceptos de prueba de análisis por casos y pruebas de implicación descargando antecedentes. Esto último para B => E, B => E = E', B1 /\ B2 => E (usando intercambio). * 30/8 **Practico 2**. Inducción. Hasta ej 2. * 4/9 Derivación de recursión lineal. Hasta ejercicio 3. * 6/9 Ejercicio 6 de modularización. Suma de potencias en clase. Esquemas inductivos con ejercicio 5. * 11/9 Tuplas. * 13/9 Generalizacion por abstraccion: ejercicio 8.a) psum. * 18/9 Ejercicio sum_ant. Consulta. * 20/9 Ejercicio suma mínima de un segmento. Consulta de práctico. * 25/9 Consulta de práctico. * 27/9 **Parcial**. * 2/10 Estuve enfermo * 4/10 **Practico 3** Modelo computacional imperativo. Hasta ej 2 * 9/10 Terna de Hoare. Wp de skip, abort y asignacion. Hasta ejercicio 3.e) * 11/10 wp del if. Especificación y derivación. Hasta ejercicio 5.d * 16/10 Teorema de la invariancia. Ej 5.e y f * 18/10 Derivación de asignaciones y if (ej 6 y 7). Pueden hacer hasta el ejercicio 8. * 23/10 Derivación mcd. Salte el ej 9 (arreglos) * 25/10 Ej 9. Exp de ejercicio 10 * 30/10 **Practico 3**. Tecnicas para encontrar invariantes: termino de la conjunción. Ejercicios 1 y 2 en clase. Pueden hacer hasta el 4. * 1/11 Técnica de reemplazo cte. por variable. Ej 6 y 6.a). Pueden hacer hasta ej 8 * 6/11 Técnica de predicados intermedios Ej 9 y 11.a) * 8/11 Técnica de fortalecimiento de invariantes. Ej 12 * 13/11 Problemas de Borde. * 15/11 Problemas de Borde. * 20/11 Problemas de asignación de arreglos. * 22/11 Parcial ===== Bibliografía ===== /* * [[http://www.cs.famaf.unc.edu.ar/~damian/algoritmos1/main.pdf | Cálculo de Programas]] (contiene los teóricos y ejercicios del práctico). * [[http://www.cs.famaf.unc.edu.ar/~damian/algoritmos1/introlinux.pdf | Introducción a Linux]]. */ ==== Haskell ==== === Español === * [[algo1:2010-2:haskell-intro | Cosas básicas sobre Haskell]] * [[http://www.lcc.uma.es/~blas/pfHaskell/gentle/index.html|Tutorial Haskell]]. * [[http://horru.lsi.uniovi.es/~labra/FTP/IntHaskell98.pdf|Introducción a Haskell]]. * [[http://www.frt.utn.edu.ar/sistemas/paradigmas/Haskell.htm|Lenguaje de Programación Funcional Haskell]]. * [[http://es.wikipedia.org/wiki/Haskell|Wikipedia]]. === Inglés === * [[http://www.haskell.org/tutorial/|Tutorial Haskell]]. * [[http://cvs.haskell.org/Hugs/pages/users_guide/index.html|Manual Hugs]]. * [[http://www.haskell.org/haskellwiki/Language_and_library_specification|Especificación del lenguaje Haskell 98]]. * [[http://www.haskell.org/learning.html|En la web]]. * [[http://www.haskell.org/hoogle/|Hoogle]]. Búsqueda de funciones por nombre o tipo. ==== Lenguaje C ==== * [[http://www.cs.famaf.unc.edu.ar/~damian/algoritmos1/lenguaje_C/cursc.html|En castellano pero básico]]. * [[http://www.cs.cf.ac.uk/Dave/C/ | En ingles pero muy completo]]. * [[http://www.cs.famaf.unc.edu.ar/~damian/algoritmos1/lenguaje_C/www.phim.unibe.ch/comp_doc/c_manual/C/cref.html|Manual de referencia en inglés]]. * {{algo1:curso-c.pdf|Otro en castellano}}. ==== Lecturas recomendadas ==== * [[http://www.cs.famaf.unc.edu.ar/~damian/algoritmos1/lecturas/dicosmo.html|Trampa en el cyberespacio]]. * [[http://www.cs.famaf.unc.edu.ar/~damian/algoritmos1/lecturas/sciam_scc/SciAmSept1994.html|Software's Chronic Crisis]]. * {{algo1:2007:pjlester.ps.gz|Implementing Functional Languages: a Tutorial.}} Simon L. Peyton Jones. * [[http://www.vialibre.org.ar/wp-content/uploads/2009/03/evoto.pdf|Voto electrónico. Los riesgos de una ilusión]]. Federico Heinz. * [[http://www.xmonad.org/|X11 windows manager in Haskell!]]. ===== Prácticos ===== * {{:algo1:2012-2:digesto.pdf|Digesto}} de axiomas y teoremas para cálculo proposicional y expresiones cuantificadas. * {{:algo1:2012-2:imperativo.pdf|Digesto}} para la programación imperativa. * {{:algo1:2012-2:practico1.pdf|Práctico 1}} - Repaso cálculo proposicional y expresiones cuantificadas. * {{:algo1:2012-2:practico2.pdf|Práctico 2}} - Especificación derivación y verificación de programas funcionales. * {{:algo1:2012-2:practico3.pdf|Práctico 3}} - Introducción a la programación imperativa. * {{:algo1:2012-2:practico4.pdf|Práctico 4}} - Programación imperativa. ===== Calendario tentativo ===== * 21/8 **Practico 1** (lógica). Expresiones cuantificadas (cuantificación generalizada). * 23/8 Reglas generales para expresiones cuantificadas. * 28/8 Pruebas por casos. * 30/8 **Practico 2** (programación funcional). Demostración por inducción de propiedades. Esquemas de inducción (k-induccion, induccion generalizada). Inducción sobre listas. * 4/9 Derivación de programas con recursión lineal. * 6/9 Reempazo constantes por variables y modularización. * //7/9 **Corrección Proyecto 1 lab**//. * 11/9 Uso de tuplas. Inducción en dos parámetros. * 13/9 Generalizacion por abstracción. * 18/9 Segmentos. * 20/9 Repaso. * 25/9 Consulta y **Parcial** * 27/9 **Práctico 3**. Modelo computacional imperativo. * //28/9 **Corrección Proyecto 2 lab**// * 2/10 Ternas de hoare. * 4/10 Precondición más débil (weakest precondition). * 9/10 Repetición (bucles). Teorema invariancia. * 11/10 Derivacion de asignaciones. Especificacion y derivacion de ''if''. * 16/10 Errores en programas imperativos. Demostración con invariantes. * 18/10 Consulta de práctico * //19/10 **Corrección Proyecto 3 lab**// * 23/10 **Practico 4**. Búsqueda de invariantes. Término de la conjunción. * 25/10 Remplazo de constante por variable. Heurística para derivar un programas. * 30/10 Consulta. Técnica de predicados intermedios: Ej 9 y 10. * 1/11 Problemas de borde. * 6/11 Recursión final. * 8/11 Recursión final * //9/11 **Corrección Proyecto 4 lab**// * 13/11 Repaso * 15/11 **Parcial** imperativo * 20/11 Update de arreglos. Repaso. * 22/11 **Recuperatorios** * //26/11 **Corrección Proyecto 5 lab**// ===== Laboratorio ===== El laboratorio consistirá en la aplicación práctica de los temas que se ven en la materia. Aproximadamente clase de por medio, se tomará, en los últimos minutos de las clases, una pequeña evaluación ("parcialito") que consistirá en uno o dos ejercicios similares (o iguales) a los que aparecen en los laboratorios. Estos ejercicios serán parte de la evaluación que determinará la aprobación del taller, necesario para la regularidad y promoción de la materia. Los parcialitos serán evaluados en "bien" (1), "regular" (0.5) o "mal" (0). Para aprobar el taller, es condición necesaria tener el 70% de los puntos de los parcialitos. No todos los parcialitos tendrán la misma incidencia en la nota final, incidencia que se informará sobre el final del dictado de la materia. ==== Proyectos ==== * {{:algo1:2012-1:2012.c1.p1.pdf|Proyecto 1}}. * {{:algo1:2012-2:proy2.pdf|Proyecto 2}}. * {{:algo1:2012-1:2012.c1.p3.pdf|Proyecto 3}} y los {{:algo1:2012-1:proy3_archivos.tar.gz|Archivos necesarios}}. * {{:algo1:2012-1:2012.c1.p4.pdf|Proyecto 4}}. * {{:algo1:2012-1:2012.c1.p5.pdf|Proyecto 5}}. ==== Material ==== * [[http://walter.alini.com.ar/algo1.clase1.html|Introducción a la materia]] * [[http://walter.alini.com.ar/algo1.clase2.html|Introducción a Haskell, parte 1]] * [[http://walter.alini.com.ar/algo1.clase3.html|Introducción a Haskell: sinónimos y tipos definidos]] * [[http://walter.alini.com.ar/algo1.clase4.html|Tipo Abstracto de Datos]] * [[http://walter.alini.com.ar/algo1.clase5.html|Introducción a C]] * {{:algo1:2011-2:emacs-config.tgz|Configuración para Emacs}}. * [[http://cs.famaf.unc.edu.ar/~gabriel/algo1/clase1.pdf|Conceptos necesarios para el proyecto 1]] * [[http://cs.famaf.unc.edu.ar/~gabriel/algo1/orden.hs|Script que demuestra que el orden importa]] * [[http://cs.famaf.unc.edu.ar/~gabriel/algo1/clase2.pdf|Conceptos necesarios para el proyecto 2]] * [[http://cs.famaf.unc.edu.ar/~gabriel/algo1/clase3.pdf|Conceptos necesarios para el proyecto 3]] * [[http://walter.alini.com.ar/algo1.clase5.html#slide1 |Conceptos necesarios para el proyecto 4]] ===== Información para Docentes ===== ==== Bitácora tentativa ==== * 21/8 **Practico 1** (lógica). Presentación de expresiones cuantificadas. Hasta cuantGen. * 23/8 Reglas generales para expresiones cuantificadas. Pueden hacer todo el práctico 1. * 28/8 Ejercicio del rango unitario para N el cual introduce los conceptos de prueba de análisis por casos y pruebas de implicación descargando antecedentes. Esto último para B => E, B => E = E', B1 /\ B2 => E (usando intercambio). * 30/8 **Practico 2** (programación funcional). Clase teórico/practica de 4 hs. Demostración por inducción de propiedades. Esquemas de inducción (k-induccion, induccion gen). Derivación de programas con inducción sin aplicar técnicas. Pueden hacer hasta ejercicio 5. * 4/9 Derivación ejercicio sum del práctico. Técnica de análisis por casos en ejercicio de sumar los pares. * 6/9 Modularización con ej del práctico: suma de potencias agregando parametro x. Está en el libro p173-176. No se da reemplazo de ctes por variables. * //7/9 **Corrección Proyecto 1 lab**//. * 11/9 Tuplas con suma de potencias del libro. Generalización por abstracción con ej de cuadrado. * 13/9 Ejemplo de generalizacion por abstraccion (p. 180). Practico listas iguales. * 18/9 Ejemplo con segmentos. Dado sum_ant (ej b) con esta técnica (se supone que ya lo hicieron sin ella). Ejercicio 13 y 14 de práctica. * 20/9 Practico * 25/9 Practico * 27/9 **Práctico 3** (modelo computacional imperativo, sin busqueda de invariantes). Modelo computacional imperativo hasta ej 2. Consulta parcial en práctico. * //28/9 **Corrección Proyecto 2 lab**// * 2/10 Ternas de hoare. Parcial * 4/10 wp hasta if. Hasta ejercicio 5 d) * 9/10 Bucle. Teorema invariancia. Hasta ej 5 * 11/10 Derivacion de asignaciones (ej 6). Especificacion y derivacion de if (ej 7) * 16/10 Encontrar errores (ej 9). mcd (ej 11.a) * 18/10 Ej 11.b.a * //19/10 **Corrección Proyecto 3 lab**// * 23/10 Ej 11.b.b. Se podría haber comenzado el practico 4. * 25/10 **Practico 4**. Término de la conjunción. Dado ej 1. Pueden hacer hasta el 4. * 30/10 Remplazo de constante por variable. Dado ejercicio 5. Dado pasos heurísticos para derivar un programa. Pueden hacer hasta el 8. * 1/11 Ej 5 y 6 como cuantificación generalizada. Ej 7 (minimo definido). Tecnica de predicados intermedios: Ej 9 y 10. * 6/11 Ej de suma de los anteriores igual al elemento y de máxima diferencia de elementos. * 8/11 Repaso * //9/11 **Corrección Proyecto 4 lab**// * 13/11 Parcial Imperativo * 15/11 Update de arreglos: ej 20. Repaso. * 20/11 Recuperatorios * //26/11 **Corrección Proyecto 5 lab**//