====== Algoritmos y Estructuras de Datos I - 2017 2do cuatrimestre ====== {{ :algo1:portada.jpg?150 }} ¡¡Bienvenidos a la página de Algoritmos I!! [[http://www.famaf.proed.unc.edu.ar/course/view.php?id=367|Aula Virtual]] (recuerden inscribirse). ===== Novedades ===== * 14/11/2017: Nuevo material: finales y "Consejos para la Derivación de Programas Imperativos". * 14/11/2017: **Nueva fecha de recuperatorio: 28 de noviembre.** * 14/11/2017: Ejemplos de finales publicados. * 2/11/2017: Práctico 5 publicado. * 12/10/2017: Práctico 4 publicado. * 28/9/2017: Práctico 3 publicado. * 7/9/2017: Nueva versión de los "Consejos para la Derivación de Programas Funcionales" publicada. * 29/8/2017: Práctico 2 publicado. * 15/8/2017: Práctico 1 y nuevos digestos publicados. * 7/8/2017: Página publicada. /* ===== 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]], Demetrio Martín Vilela, Pedro Sanchez Terraf, Milagros Teruel. /* Ayudantes: Jonathan David Mutal, Illak Zapata. */ **Laboratorio**: Martín Domínguez, Renato Cherini, Demetrio Martín Vilela, Juan Cruz Rodríguez, Emmanuel Gunther, Marco Rochietti, Leonardo Rodríguez. /* Ayudantes: Ignacio Tiraboschi, Matías Silva, Nicolas Hormann Manriquez, Emanuel Meriles. */ ===== Horarios ===== **Teórico/Practico**: martes y jueves de 9 a 13 hs, aula D1 (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 2016 o en el primero de 2017. /* - 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: 26 de septiembre * Segundo parcial: 21 de noviembre * Recuperatorios: 28 de noviembre /* * {{:algo1:2014-2:ejemplo_parcial1.pdf|Ejemplo de 1er parcial.}} * {{:algo1:2016-1:ejemplo_parcial2.pdf|Ejemplo de 2do parcial.}} */ ===== Material de Teórico/Práctico ===== * [[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:2017-2:digesto.pdf|Digesto}} de axiomas y teoremas para cálculo proposicional y expresiones cuantificadas. * {{:algo1:2017-2:cuantificador_n.pdf|Anexo}} (axiomas y teoremas cuantificador de conteo). * {{:algo1:2017-2:listas.pdf|Digesto}} de funciones de listas y propiedades. * {{:algo1:2017-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:2017-2:consejos_imperativo.pdf|Consejos para la Derivación de Programas Imperativos}}. /* * {{:algo1:2014-2:ejemplo_parcial1.pdf|Ejemplo de 1er parcial.}} * {{:algo1:2016-1:ejemplo_parcial2.pdf|Ejemplo de 2do parcial.}} */ Ejemplos de finales: (**OJO:** los ejercicios varían por cambios en los contenidos de la materia y por diferencias entre cursado y recursado.) * {{:algo1:2017-2:2016c2final1.pdf|5 de diciembre de 2016}} * {{:algo1:2017-2:2016c2final2.pdf|X de diciembre de 2016}} * {{:algo1:2017-2:2016c2final3.pdf|15 de febrero de 2017}} * {{:algo1:2017-2:2016c2final4.pdf|3 de marzo de 2017}} [[:algo1:bibliografia2|Más bibliografía y material acá.]] ===== Prácticos ===== * {{:algo1:2017-2:practico1.pdf|Práctico 1: Expresiones Cuantificadas y Formalismo Básico}} * {{:algo1:2017-2:practico2.pdf|Práctico 2: Especificación, Derivación y Verificación de Programas Funcionales}} * {{:algo1:2017-2:practico3.pdf|Práctico 3: Introducción a la Programación Imperativa}} * {{:algo1:2017-2:practico4.pdf|Práctico 4: Introducción al Cálculo de Programas Imperativos}} * {{:algo1:2017-2:practico5.pdf|Práctico 5: Programación Imperativa}} /* ===== Notas de 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) */ ===== Material de laboratorio ===== | ^ Enunciado ^ Material ^ Fecha corrección ^ ^ Proyecto 1 | {{:algo1:2017.c2.proy1.pdf| Proyecto 1}} | [[http://aprendehaskell.es/main.html|Aprende Haskell por el bien de todos! (cap. 1 al 6)]] | 4/9| ^ ::: | {{:algo1:proy1-estrella-2017.c2.pdf|ej-estrella.pdf}} | {{:algo1:tipos_y_polimorfismo-2017.c2.pdf|Tipos: polimorfismo y alto orden}} | ::: | ^ Proyecto 2 | [[http://www.cs.famaf.unc.edu.ar/~mdoming/docencia/algo1/proy2_2017_2.pdf|Proyecto 2]] | [[http://www.cs.famaf.unc.edu.ar/~mdoming/docencia/algo1/clase_2_ejemplo_tipos.hs|Ejemplos tipos de datos (archivo .hs)]] | 25/9| ^ ::: | ::: |[[https://docs.google.com/presentation/d/15dhZOodeKXUirtK9Lf2Nwy1AgMdovnVdm5CenyGnFiY/edit?usp=sharing|Tipos de datos en Haskell]] | ::: | ^ ::: | ::: |[[http://www.cs.famaf.unc.edu.ar/~mdoming/docencia/algo1/proyecto_2_CLASE_1.html|Tipos de datos, deriving, case, Maybe]] | ::: | ^ Proyecto 3| {{:algo1:2017-c2-proy3.pdf|Proyecto 3}} |[[https://docs.google.com/presentation/d/1RgMHdplxxLrt4VEHWc6n1oaHwZHAOiVBNp_hBTaBlnA/edit?usp=sharing|Presentación de HAL]]| 23/10| ^ ::: | ::: | [[https://docs.google.com/presentation/d/1bdbjz1kg5cWMONob9puz9aEKNTr_IxN0TVFqjKhn2cg/edit?usp=sharing|Modelo Computacional]] | ::: | ^ ::: | ::: | [[http://www.cs.famaf.unc.edu.ar/~mdoming/docencia/algo1/Examples-HAL.zip|Ejemplos de programas en HAL]] | ::: | ^ ::: | ::: | {{:algo1:hal-gui.zip|Código fuente de HAL incompleto}} | ::: | ^ ::: | ::: | [[algo1:instalarhal_local|Instalar HAL incompleto en el lab]] | ::: | ^ ::: | ::: | [[algo1:instalarhal|Instalar HAL incompleto en tu maquina personal]] | ::: | ^ 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/archivos_ejercicios.zip|Archivos complementarios Proy. 4]] | 22/11| ^ ::: | ::: | [[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/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]] | ::: | /* 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. ==== Taller ==== *14/8: Presentación de proyecto 1 y auto-repaso de linux *21/8: FERIADO. *28/8: Teórico: map, filter, polimorfismo paramétrico, clases, aplicación parcial. *4/9: Corrección de proyecto 1. Presentación de proyecto 2. *11/9: Teórico de Taller: Tipos de datos, deriving, case, Maybe. *18/9: Trabajo sobre proyecto 2 *25/9: Corrección de proyecto 2. Presentación de proyecto 3. *2/10: Teórico: uso de Hal. *9/10: Teórico: semántica de programas imperativos. *16/10: FERIADO *23/10: Corrección de proyecto 3. Presentación de proyecto 4 *30/10: Teórico: programación en C, debugging con GDB. *6/11: Teórico: arreglos y estructuras en C. *13/11: Corrección de proyecto 4. *20/11: FERIADO. /* ===== 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. */