====== Algoritmos y Estructuras de Datos I - 2016 2do cuatrimestre ====== {{ :algo1:portada.jpg?150 }} ¡Bienvenido a la página de Algoritmos I! [[http://www.famaf.proed.unc.edu.ar/course/view.php?id=295|Aula Virtual]] (recuerden inscribirse). ===== Novedades ===== * 1/11/2016: Práctico 5 publicado. * 18/10/2016: Práctico 4 publicado. * 11/10/2016: Práctico 3 publicado. * 27/09/2016: Práctico extra 1 publicado. * 30/08/2016: Práctico 2 publicado. * 16/08/2016: Empiezan las clases. ===== Aula Virtual (Moodle) ====== * [[http://www.famaf.proed.unc.edu.ar/course/view.php?id=10|Página principal]] * [[http://www.famaf.proed.unc.edu.ar/mod/forum/view.php?f=626|Foro de Novedades y Anuncios]] * [[http://www.famaf.proed.unc.edu.ar/mod/forum/view.php?f=627|Foro para hacer preguntas]] ===== Docentes ===== **Teórico/Práctico**: [[http://cs.famaf.unc.edu.ar/~francolq|Franco M. Luque]], Laura Alonso Alemany, Demetrio Vilela, Mauricio Telechea y Marco Rocchietti. Ayudantes: Verónica Dias e Ignacio Queralt. **Laboratorio**: Martín Domínguez, Renato Cherini, Juan Cruz Rodríguez, Emmanuel Gunther, Leonardo Rodriguez, Demetrio Vilela. Ayudantes: Emiliano Cuenca, Guillermo Incataciato, Jonathan Mutal, Matías Silva e Illak Zapata. ===== Horarios ===== **Teórico/Practico**: martes y jueves de 9 a 13 hs, aula D4 (baterías D). **Laboratorio**: lunes de 14 a 18 hs. labs. 28 y 30. ===== Regularidad / Promoción ===== * Para **regularizar** la materia: 2 parciales aprobados con nota >= 4 o un recuperatorio equivalente y el taller aprobado. * Para **promocionar** la materia: 2 parciales aprobados con nota >= 6, promedio >= 7.5 y el taller aprobado. * Para rendir **libre** la materia, hay condiciones particulares respecto al taller. Ver [[algo1:taller:modalidad|Modalidad del taller]] para los detalles. Nota: El taller también se considerará aprobado si lo fue en el segundo cuatrimestre de 2015 o en el primero de 2016. /* - las notas son números redondos */ ===== Preguntas Frecuentes (FAQs) ===== === ¿Se pueden recuperar los dos parciales? === Sí, pero sólo para regularizar, y contando con el mismo tiempo que si recuperara uno solo. Para promocionar sólo se puede recuperar uno de los dos parciales. === ¿Se puede recuperar para levantar nota de promoción? === Sí, pero sólo un parcial, y queda la nota del recuperatorio, a riesgo de bajar la nota de promoción o incluso de perderla. /* ¿Qué pasa si promociono el teórico y no apruebo el taller? */ ===== Fechas de Parciales y Recuperatorios ==== * Primer parcial: 4 de octubre * Segundo parcial: 15 de noviembre * Recuperatorios: 24 de noviembre /* * {{:algo1:2014-2:ejemplo_parcial1.pdf|Ejemplo de 1er parcial.}} * {{:algo1:2016-1:ejemplo_parcial2.pdf|Ejemplo de 2do parcial.}} */ ===== Material ===== * [[http://www.cs.famaf.unc.edu.ar/~damian/calcprog|"Borrador" del libro de la materia]] * Notas de clase: * {{:algo1:clases_teoricas_2014-2.pdf|Programación funcional (Marianela Morales, 2014)}} * {{:algo1:clases_teoricas_2016-2.pdf|Programación imperativa (Lucía González, 2016)}} Programación funcional: * {{:algo1:2016-2:digesto.pdf|Digesto}} de axiomas y teoremas para cálculo proposicional y expresiones cuantificadas. * {{:algo1:2014-2:cuantificador_n.pdf|Anexo}} (axiomas y teoremas cuantificador de conteo). * {{:algo1:2014-2:listas.pdf|Digesto}} de funciones de listas y propiedades. * {{:algo1:2016-2:consejos_funcional.pdf|Consejos para la Derivación de Programas Funcionales}}. Programación imperativa: * {{:algo1:2016-2:imperativo.pdf|Digesto}} para la programación imperativa. /* * {{:algo1:2014-2:ejemplo_parcial1.pdf|Ejemplo de 1er parcial.}} * {{:algo1:2016-1:ejemplo_parcial2.pdf|Ejemplo de 2do parcial.}} */ [[:algo1:bibliografia2|Más bibliografía y material acá.]] ===== Prácticos ===== * {{:algo1:2016-2:practico1.pdf|Práctico 1: Cálculo Proposicional y Expresiones Cuantificadas}} * {{:algo1:2016-2:practico2.pdf|Práctico 2: Especificación, Derivación y Verificación de Programas Funcionales}} * {{:algo1:2016-2:extra1.pdf|Práctico extra 1: Expresiones Cuantificadas y Programación Funcional}} * {{:algo1:2016-2:practico3.pdf|Práctico 3: Introducción a la Programación Imperativa}} * {{:algo1:2016-2:practico4.pdf|Práctico 4: Introducción al Cálculo de Programas Imperativos}} * {{:algo1:2016-2:practico5.pdf|Práctico 5: Programación Imperativa}} ===== Parciales y Recuperatorios ===== * {{:algo1:2016-2:2016c2par1.pdf|1er parcial}} * {{:algo1:2016-2:2016c2par2.pdf|2do parcial}} * {{:algo1:2016-2:2016c2recup1.pdf|Recuperatorio 1er parcial}} (con solución ej. 3) * {{:algo1:2016-2:2016c2recup2.pdf|Recuperatorio 2do parcial}} (con solución ej. 3) ===== Laboratorio ===== | ^ Enunciado ^ Teóricos ^ Fecha corrección ^ ^ Presentación | [[http://www.cs.famaf.unc.edu.ar/~mdoming/docencia/algo1/presentacion_2016_1.html|Presentación]] ||| ^ Proyecto 1 | [[http://www.cs.famaf.unc.edu.ar/~mdoming/docencia/algo1/proy1.pdf|Proyecto 1]] |[[http://www.cs.famaf.unc.edu.ar/~mdoming/docencia/algo1/Linux_y_consola.html|Linux y consola]] | 5/9| ^ ::: | ::: | [[http://www.cs.famaf.unc.edu.ar/~mdoming/docencia/algo1/Ejercicio_extra_clase_1.hs|Ejercicios de Haskell.]] | ::: | ^ ::: | ::: | [[http://www.cs.famaf.unc.edu.ar/~mdoming/docencia/algo1/CLASE_1_proy_1.html|Haskell, GHCI, secciones, map, filter]] | | ^ ::: | ::: | [[http://www.cs.famaf.unc.edu.ar/~mdoming/docencia/algo1/CLASE_2_proy_1.html|Tipos, polimorfismo, clases de tipos y más]] | : | ^ Proyecto 2 | [[http://www.cs.famaf.unc.edu.ar/~mdoming/docencia/algo1/proy2.pdf|Proyecto 2]] | [[http://www.cs.famaf.unc.edu.ar/~mdoming/docencia/algo1/clase_2_ejemplo_tipos.hs|Ejemplos tipos de datos (archivo .hs)]] | | ^ ::: | ::: |[[http://www.cs.famaf.unc.edu.ar/~mdoming/docencia/algo1/Tipos_en_Haskell.pdf|Tipos de datos en Haskell]] | 26/9 | ^ ::: | ::: |[[http://www.cs.famaf.unc.edu.ar/~mdoming/docencia/algo1/proyecto_2_CLASE_1.html|Tipos de datos, deriving, case, Maybe]] | ^ Proyecto 3|[[http://www.cs.famaf.unc.edu.ar/~mdoming/docencia/algo1/proy3.pdf|Proyecto 3]]([[http://www.cs.famaf.unc.edu.ar/~mdoming/docencia/algo1/hal-gui.zip|Archivos HAL]])|[[https://docs.google.com/presentation/d/104uhjnehOSZ5tu11AQRB2D-Mt71cuEa8zZE7Zi4Xex8/edit?usp=sharing|Presentación de HAL]]| 31/10| ^ ::: | ::: | [[http://www.cs.famaf.unc.edu.ar/~mdoming/docencia/algo1/presentacio_modelo_comp.pdf|Modelo Computacional]] | ::: | ^ ::: | ::: | [[http://www.cs.famaf.unc.edu.ar/~mdoming/docencia/algo1/Examples-HAL.zip|Ejemplos de programas en HAL]] | ::: | ^ ::: | ::: | [[algo1:instalarhal|Instalar HAL]]| ::: | ^ Proyecto 4 | [[http://www.cs.famaf.unc.edu.ar/~mdoming/docencia/algo1/proy4_2016_2.pdf|Proyecto 4]] | [[http://www.cs.famaf.unc.edu.ar/~mdoming/docencia/algo1/Clase_1_de_C_con_hal.html|Programación C, GDB]]; [[http://www.cs.famaf.unc.edu.ar/~mdoming/docencia/algo1/funciones_en_c.c|Ejemplo de funciones en C]] | ^ | [[http://www.cs.famaf.unc.edu.ar/~mdoming/docencia/algo1/archivos_ejercicios.zip|Archivos complementarios Proy. 4]] |[[http://www.cs.famaf.unc.edu.ar/~mdoming/docencia/algo1/clase_arreglo.html|Teórico de Arreglos]], [[http://www.cs.famaf.unc.edu.ar/~mdoming/docencia/algo1/arreglo.c|Código Arreglo]], [[http://www.cs.famaf.unc.edu.ar/~mdoming/docencia/algo1/inicializar.c|Ejemplo de inicialización de arreglos]]; [[http://www.cs.famaf.unc.edu.ar/~mdoming/docencia/algo1/clase_struct.html|Teórico de Estructuras]], [[http://www.cs.famaf.unc.edu.ar/~mdoming/docencia/algo1/struct_ejemplo.c|Struct]], | 21/11| Enunciados y teóricos de años previos: * Introduccion a GDB. Por Marco Brunello y Leandro Ramos. {{:algo1:2011-2:gdb.pdf|Presentación}}, {{:algo1:2011-2:ejemplo_gdb.tar.gz|ejemplos}}. [[https://gist.github.com/zhaidongplus/5113855|Resumen de comandos de consola Linux]] y [[http://cli.learncodethehardway.org/book/| un libro sobre el tema]]. ===== Calendario Tentativo ===== Acá pondremos el calendario completo de la materia como esperamos darla. ==== Teórico Práctico ==== ==== Taller ==== * 22/8: Armado de Grupos. Presentación Proyecto 1 y auto-repaso linux. * 29/8: Teórico de Taller: Haskell, GHCI, secciones, map, filter. Tipos, clases de tipos y más. * 5/9: Corrección Proyecto 1. Presentación Proyecto 2. * 12/9: Teórico de Taller: Tipos de datos no recursivos (data y type) * 19/9: Teórico de Taller: Tipo de datos recursivos, deriving, case, Maybe. * 26/9: Corrección proyecto 2. Presentación Proyecto 3. * 3/10:Presentación de proyecto 3. Teórico primera parte. Uso de Hal * 10/10: FERIADO * 17/10: Teórico semántica. * 31/10: Corrección proyecto 3. Presentación proyecto 4 * 7/11: Teórico de Taller: Programación C, GDB. * 14/11: Teórico de Taller: Arreglos y Estructuras en C. * 21/11: Corrección proyecto 4. ===== Bitácora ===== Acá pondremos lo que efectivamente fuimos dando en cada clase. * 17/08: Presentación de la materia. Cuantificación general. * 18/08: Reglas hasta participón de rango. * 23/08: Reglas hasta anidado. * 25/08: Reglas de anidado, intercambio y de morgan. Cuantificador de conteo. * 30/08: Demostración por inducción. Inducción en números. Esquemas de inducción. * 01/09: Inducción en listas. Demostración vs. derivación. * 06/09: Modularización. Subinducción. //Pattern matching// vs. análisis por casos. * 08/09: Generalización. * 13/09: Segmentos de lista. * 15/09: Complejidad y tuplas. * 20/09: Semana del estudiante. * 22/09: Semana del estudiante. * 27/09: Introducción a la programación imperativa. Sintaxis y semántica informal de skip, asignación ('':=''), composición ('';'') y condicional (''if''). * 29/09: Sintaxis y semántica informal de la repetición (''do''). Arreglos. * 04/10: [[http://www.adiuc.org.ar/index.php/nacional/722-paritaria-salarial-docentes-unc-adiuc-conadu-paro|Paro]]. * 06/10: 1er parcial. * 11/10: Anotaciones de programa. Precondición y postcondición. Especificación. * 13/10: Precondición más débil. Demostración de programas imperativos. Demostración de skip, asignación, composición y condicional. * 18/10: Demostración de ciclos. Invariante y función de cota. * 20/10: Demostración completa de un programa. * 25/10: Introducción a la derivación de programas. Derivación de asignaciones. * 27/10: Derivación de condicionales. Derivación de ciclos. Técnicas para determinar invariantes: Tomar términos de una conjunción (ejemplo: algoritmo de la división). * 1/11: Técnicas para determinar invariantes: * Tomar términos de una conjunción (ejemplo: búsqueda lineal). * Reemplazo de constantes por variables (ejemplo: suma de arreglo, exponenciación). * 3/11: Fortalecimiento de invariantes (ejemplo: ''sumant''). * 8/11: Problemas de borde al fortalecer invariantes (ejemplos: segmento de suma máxima, máxima distancia entre elementos). * 10/11: Estados intermedios (ejemplo: varianza). * 15/11: 2do parcial. * 17/11: Consulta. * 22/11: Consulta. * 24/11: Recuperatorios.