====== 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]], Matías Lee. **Laboratorio**: Martín Dominguez, Guillaume Hoffmann. ===== Horarios ===== **Teórico/Practico**: lunes, aula 17, de 14 a 18 hs. Jueves, aula 25 de 14 a 16 hs. y aula 17 de 16 a 18 hs. **Laboratorio**: miércoles de 9 a 13 hs., Lab. 30 ===== 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 un recuperatorio equivalente con nota >= 4 y el taller aprobado. * Para **promocionar** la materia: 2 parciales aprobados con nota >= 7, promedio >= 8 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 segundo cuatrimestre del año 2012. /* poner promocion como: * Para **promocionar** la materia: 2 parciales aprobados con nota >= 6, promedio >= 8 y el taller aprobado. */ ===== Parciales ===== * 25/4 y 17/6 * Recuperatorio 24/6. * {{:algo1:2013-1:algoritmos_i_2013_recursado_-_teorico._parcial1.pdf|Notas primer parcial}}. * {{:algo1:2013-1:algoritmos_i_2013_recursado_-_teorico_pueden_recuperar.pdf|Notas segundo parcial}}. * {{:algo1:2013-1:algoritmos_i_2013_recursado_-_teorico_recup.pdf|Notas recuperatorio y condición final}}. * {{:algo1:algoritmos_i_2013_recursado_-_teorico_lab.pdf|Condición final de la materia}}. ===== Finales ===== * {{:algo1:2013-1:algoritmos_i_2013_recursado_-_exam1.pdf|Examen Final 1}}. * {{:algo1:algoritmos_i_2013_recursado_-_exam3.pdf|Examen Final 3}}. ===== Bitácora ===== * 11/3 Presentación de la materia. Derivación y verificación de programas. **Practico 1**. Expresiones Cuantificadas. Dado ejercicio 3 a. Pueden hacer hasta el ejercicio 4. * 14/3 Reglas para la cuantificación general. * 18/3 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). * 21/3 **Practico 2**. Inducción. Demostración por inducción de propiedades. Inducción sobre listas. Hasta ej 2. * 25/3 Derivación de recursión lineal. Hasta ejercicio 4. * 28/3 Feriado * 1/4 Feriado * 4/4 Esquemas inductivos con ejercicio 5. * 8/4 Ejercicio 6 de modularización. Suma de potencias en clase. Tuplas (ejercicio 7.a). * 11/4 Generalizacion por abstraccion: ejercicio 8.a) psum. * 15/4 Ejercicio sum_ant. Consulta. Hasta ej 9. * 18/4 Segmentos. Ejercicio suma mínima de un segmento. * 22/4 Consulta de práctico. * 25/4 **Parcial**. * 29/4 **Practico 3** Modelo computacional imperativo. Hasta ej 2 * 2/5 Terna de Hoare. Weakesr Precondition. Wp de asignacion. Hasta ejercicio 3.e). Chun da wp del if * 6/5 wp del if. Especificación y derivación. Hasta ejercicio 5.d * 9/5 Teorema de la invariancia. Ej 5.e y f * 13/5 Derivación de asignaciones y if (ej 6 y 7). Pueden hacer hasta el ejercicio 8. * 16/5 Derivación mcd. Salte el ej 9 (arreglos) * 20/5 Ej 9. Exp de ejercicio 10 * 23/5 **Practico 4**. Tecnicas para encontrar invariantes: termino de la conjunción. Ejercicios 1 y 2 en clase. Pueden hacer hasta el 4. * 27/5 Técnica de reemplazo cte. por variable. Ej 6 y 6.a). Pueden hacer hasta ej 8 * 30/5 Técnica de predicados intermedios Ej 9 y 11.a) * 3/6 Técnica de fortalecimiento de invariantes. Ej 12 * 6/6 Problemas de Borde. * 10/6 Problemas de Borde. * 13/6 Consulta/Repaso. Problemas de asignación de arreglos. * 17/6 **Parcial**. * 20/6 Feriado. * 24/6 **Recuperatorio**. ===== Bibliografía / Media ===== /* * [[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 ==== * [[http://www.cs.famaf.unc.edu.ar/~hoffmann/aprendehaskell/main.html|¡Aprende Haskell por el bien de todos!]] * [[http://www.lcc.uma.es/~blas/pfHaskell/gentle/index.html|Una introducción agradable a Haskell]] * [[http://www.haskell.org/hoogle/|Hoogle, búsqueda de funciones por nombre o tipo]]. * [[http://www.haskell.org/ghc/docs/latest/html/users_guide/ghci.html|Using GHCI]] ==== 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.cse.chalmers.se/~rjmh/Papers/whyfp.html|Why Functional Programming Matters]] John Hughes. * [[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]]. * [[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!]]. ==== Media ==== * [[http://www.cs.famaf.unc.edu.ar/~damian/media/charla_fede.html|Charla sobre Software Libre]] de Federico Heinz 6/5/2013. ===== Prácticos ===== * {{:algo1:2013-1:digesto.pdf|Digesto}} de axiomas y teoremas para cálculo proposicional y expresiones cuantificadas. * {{:algo1:2013-1:imperativo.pdf|Digesto}} para la programación imperativa. * {{:algo1:2013-1:practico1.pdf|Práctico 1}} - Repaso cálculo proposicional y expresiones cuantificadas. * {{:algo1:2013-1:practico2.pdf|Práctico 2}} - Especificación derivación y verificación de programas funcionales. * {{:algo1:2013-1:practico3.pdf|Práctico 3}} - Introducción a la programación imperativa. * {{:algo1:2013-1:practico4.pdf|Práctico 4}} - Programación imperativa. ===== Calendario tentativo ===== * 11/3 Presentación de la materia. **Practico 1** (lógica). Expresiones Cuantificadas. * 14/3 Reglas para la cuantificación general. * 18/3 Pruebas de implicaciones y por casos. * 21/3 **Practico 2** (programación funcional). Inducción. Demostración por inducción de propiedades. Esquemas de inducción (k-induccion, induccion generalizada). Inducción sobre listas. * 25/3 Derivación de recursión lineal * //27/3 **Corrección Proyecto 1 laboratorio**.// * 28/3 Feriado * 1/4 Feriado * 4/4 Modularización. Esquemas inductivos. * 8/4 Tuplas. * 11/4 Generalizacion por abstraccion. * 15/4 Consulta. * //17/4 **Corrección Proyecto 2 laboratorio**.// * 18/4 Segmentos. * 22/4 Repaso/Consulta. * 25/4 **Parcial**. * 29/4 **Practico 3**. Modelo computacional imperativo. * 2/5 Ternas de Hoare. * 6/5 Precondición más débil (weakest precondition). * 9/5 Repetición (bucles). Teorema de la invariancia. * 13/5 Derivación imperativa (asignación e if). * //15/5 **Corrección Proyecto 3 laboratorio**.// * 16/5 Demostración con invariantes. * 20/5 Repaso/Consulta. * 23/5 **Practico 4**. Tecnicas para encontrar invariantes: termino de la conjunción. * 27/5 Técnica de reemplazo cte. por variable. * 30/5 Técnica de predicados intermedios. * 3/6 Técnica de fortalecimiento de invariantes. * //5/6 **Corrección Proyecto 4 laboratorio**.// * 6/6 Problemas de Borde. * 10/6 Problemas de asignación de arreglos. * 13/6 Consulta/Repaso * 17/6 **Parcial**. * 20/6 Feriado. * 24/6 **Recuperatorio**. * //26/6 **Corrección Proyecto 5 laboratorio**.// ===== 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:2013-1:proy1.pdf|Proyecto 1}} * {{:algo1:2013-1:proy2.pdf|Proyecto 2}} * {{:algo1:2013-1:proy3.pdf|Proyecto 3}} y {{:algo1:2013-1:proyecto3_archivos_alumnos.tar.gz|archivos del proyecto}} * {{:algo1:2013-1:proy4.pdf|Proyecto 4}} * {{:algo1:2013-1:proy5.pdf|Proyecto 5}} ==== Material ==== * [[http://www.cs.famaf.unc.edu.ar/~hoffmann/algo1/2013-1/algo1.clase1.html|Introducción a la materia]] * Proyecto 1: * [[http://www.cs.famaf.unc.edu.ar/~hoffmann/algo1/2013-1/algo1.clase2.html|Haskell, GHCI, secciones, map, filter, foldr]] * [[http://www.cs.famaf.unc.edu.ar/~hoffmann/algo1/2013-1/algo1.clase3.html|Tipos, error, clases de tipos]] * Proyecto 2: * [[http://www.cs.famaf.unc.edu.ar/~hoffmann/algo1/proy2_tiposdedatos.hs|Proyecto 2: tipos de datos (archivo Haskell)]] * [[http://www.cs.famaf.unc.edu.ar/~hoffmann/algo1/proy2_fact.hs| Activar los patrones n+k con ghci, ejemplo de chequeo que fact cumple con la propiedad dada en el práctico]] * Proyecto 3: * [[http://www.cs.famaf.unc.edu.ar/~hoffmann/algo1/2013-1/algo1.clase4.html|Repaso sobre los tipos, Tipos Abstractos de Datos (TAD)]] * [[http://www.cs.famaf.unc.edu.ar/~hoffmann/algo1/2013-1/ejemplo_case.hs|Ejemplo con case]] * [[http://www.cs.famaf.unc.edu.ar/~hoffmann/algo1/2013-1/proy3_lista_invariante.hs|Ejemplo de lista con invariante de orden]] * Proyecto 4 / Proyecto 5: * [[http://www.cs.famaf.unc.edu.ar/~hoffmann/algo1/2013-1/algo1.clase5.html|Introducción a C]] * Código C: [[http://www.cs.famaf.unc.edu.ar/~hoffmann/algo1/2013-1/helloworld.c|Hello, World!]] * Código C: [[http://www.cs.famaf.unc.edu.ar/~hoffmann/algo1/2013-1/assignacion.c|Assignación múltiple]] * Código C: [[http://www.cs.famaf.unc.edu.ar/~hoffmann/algo1/2013-1/while.c|While]] * Código C: [[http://www.cs.famaf.unc.edu.ar/~hoffmann/algo1/2013-1/mcd.c|Mcd]] * Código C: [[http://www.cs.famaf.unc.edu.ar/~hoffmann/algo1/2013-1/mcdFuncion.c|Mcd con función]] * Código C: [[http://www.cs.famaf.unc.edu.ar/~hoffmann/algo1/2013-1/arreglo.c|Arreglo]], [[http://www.cs.famaf.unc.edu.ar/~hoffmann/algo1/2013-1/inicializar.c|Inicialización]] * Código C: [[http://www.cs.famaf.unc.edu.ar/~hoffmann/algo1/2013-1/struct.c|Struct]], [[http://www.cs.famaf.unc.edu.ar/~hoffmann/algo1/2013-1/struct2.c|Struct 2]] * 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://github.com/WilliamHackmore/linuxgems/blob/master/cheat_sheet.org.sh|Resumen de comandos de consola Linux]] y [[http://cli.learncodethehardway.org/book/| un libro sobre el tema]]. ===== Información para Docentes ===== ==== Bitácora tentativa del teórico/práctico ==== * 11/3 Presentación de la materia. Derivación y verificación de programas. **Practico 1**. Expresiones Cuantificadas. Dado ejercicio 3 a. Pueden hacer hasta el ejercicio 4. * 14/3 Reglas para la cuantificación general. * 18/3 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). * 21/3 **Practico 2**. Inducción. Demostración por inducción de propiedades. Esquemas de inducción (k-induccion, induccion generalizada). Inducción sobre listas. Hasta ej 2. * 25/3 Derivación de recursión lineal. Hasta ejercicio 3. * 28/3 Feriado * 1/4 Feriado * 4/4 Ejercicio 6 de modularización. Suma de potencias en clase. Esquemas inductivos con ejercicio 5. * 8/4 Tuplas (ejercicio 7). * 11/4 Generalizacion por abstraccion: ejercicio 8.a) psum. * 15/4 Ejercicio sum_ant. Consulta. * 18/4 Ejercicio suma mínima de un segmento. Consulta de práctico. * 22/4 Consulta de práctico. * 25/4 **Parcial**. * 29/4 **Practico 3** Modelo computacional imperativo. Hasta ej 2 * 2/5 Terna de Hoare. Weakest Precondition. Wp de skip, abort y asignacion. Hasta ejercicio 3.e) * 6/5 wp del if. Especificación y derivación. Hasta ejercicio 5.d * 9/5 Teorema de la invariancia. Ej 5.e y f * 13/5 Derivación de asignaciones y if (ej 6 y 7). Pueden hacer hasta el ejercicio 8. * 16/5 Derivación mcd. Salte el ej 9 (arreglos) * 20/5 Ej 9. Exp de ejercicio 10 * 23/5 **Practico 4**. Tecnicas para encontrar invariantes: termino de la conjunción. Ejercicios 1 y 2 en clase. Pueden hacer hasta el 4. * 27/5 Técnica de reemplazo cte. por variable. Ej 6 y 6.a). Pueden hacer hasta ej 8 * 30/5 Técnica de predicados intermedios Ej 9 y 11.a) * 3/6 Técnica de fortalecimiento de invariantes. Ej 12 * 6/6 Problemas de Borde. * 10/6 Problemas de Borde. Problemas de asignación de arreglos. * 13/6 Consulta/Repaso * 17/6 **Parcial**. * 20/6 Feriado. * 24/6 **Recuperatorio**.