====== Algoritmos y Estructuras de Datos I ====== ===== Docentes ===== Javier O. Blanco, [[http://www.cs.famaf.unc.edu.ar/~damian|Damián Barsotti]], Martín Domínguez, Walter Alini, Miguel Pagano, Natalia Bidart, [[http://www.cs.famaf.unc.edu.ar/~lee|Matías Lee]], Ezequiel Velez, Leonardo, Rodriguez, Santiago Videla, Emmanuel Gunther, Renato Cherini, Mariana Badano, Mauricio Tellechea, Demetrio Vilela. ===== Calendario ===== * 10/8: Expresiones cuantificadas * 17/8: Especificaciones - Introducción a la derivación de programas * 24/8 Técnicas elementales. Modularización - Generalización * 31/8 Ejemplos * 7/9 Ejemplos (segmentos) * 14/9 Tipos abstractos de datos - especificaciones implícitas. * 21/9 semana del estudiante - consultas * 28/9 parcial. Introducción a la programación imperativa. * 5/10 Lógica de Hoare - guarded commands * 12/10 invariantes - derivación de programas imperativos * 19/10 Técnicas para encontrar invariantes. Fortalecimiento de invariantes. * 26/10 Recursión final. Ejemplos. * 2/11 Ejemplos. Parcial. * 9/11 Modificación de arreglos. Ejemplo de la bandera holandesa. Métodos de ordenación. * 16/11 Repaso. Recuperatorio ===== Parciales ===== ==== Calendario ==== ==== Consultas ==== ==== Notas ==== {{:algo1:notas_reg.pdf| Listado de notas parciales, regularidades y promociones}} ===== 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]]. ==== 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:2010.c2.p1.pdf|Práctico 1}} - Cálculo proposicional, de predicados y cuantificación generalizada. * {{:algo1:2010.c2.p2.pdf|Práctico 2}} - Especificación, derivación y verificación de programas funcionales. * {{:algo1:2010.c2.p3.pdf|Práctico 3}} - Tipos abstractos de datos. * {{:algo1:2010.c2.p4.pdf|Práctico 4}} - Programación imperativa. ===== Laboratorio ===== ==== Modalidad ==== === Generalidades === * El taller se reliza en dos comisiones. Los horarios de ellas son los lunes de 14 a 18 hs. Cada alumnos debe inscribirse en una en el despacho de alumnos. * Los teóricos del laboratorio se dictan durante el taller. * El taller consiste en la realización de una serie de proyectos. * Los contenidos necesarios para su realización serán impartidos en los teóricos del taller. * Los proyectos podrán ser consultados en los laboratorios del taller. * La realización de los mismos es grupal. Los grupos son de 4 personas. Los grupos permanecen fijos para todos los proyectos. * Cada grupo tendrá un ayudante asignado. Los ayudantes harán un seguimiento de los proyectos. * Existen horarios reservados para práctica libre y consultas a programar en el laboratorio los jueves de 14 hs. a 16 hs. === Criterios generales para la corrección de proyectos === *** Los proyectos se evaluarán de forma individual aunque su realización haya sido grupal.** Las posibles notas son las siguientes: * **B+** (superó los objetivos que se plantearon para el proyecto, por ejemplo, haciendo una implementación novedosa) * **B** (cumplió con todas las pautas estipuladas para el proyecto) * **B-** (el proyecto funciona, pero se evidencia cierta inseguridad en las respuesta) * **R** (El proyecto no fue implementado en su totalidad, o las respuestas son poco precisas) * **M** (no presentó el proyecto, o lo presento y no conoce la resolución del mismo) ==== Proyectos ==== /* {{:algo1:2009:proy1.pdf|Proyecto 1}} - Recursión. */ * {{:algo1:2010-2:proy1.pdf|Proyecto 1}} - Recursión. * {{:algo1:2010-2:proyecto2.pdf|Proyecto 2}} - Tipos de datos. * {{:algo1:2010-2:proy3.pdf|Proyecto 3}} - TAD's en Haskell. {{:algo1:2010-2:interface.tgz|Interface y diccionarios}}. * {{:algo1:2010-2:proy4.pdf|Proyecto 4}} - Pasar derivaciones a C. ==== Condiciones para rendir libre el taller ==== Para rendir el taller se deberá presentar 5 dias hábiles antes de rendir el examen: * Una carpeta por cada proyecto del taller de la materia. * Cada carpeta debe contener: * Título del proyecto. * Una sección por cada ejercicio. * Cada seccion debe contener las siguientes subsecciones: * Enunciado del proyecto. * El programa resultado escrito en el formalismo del teórico. * La demostración o derivación de este resultado. * El programa resultado escrito en el lenguaje de programación correspondiente. * Este debe ser el mismo programa que el del item anterior. Es decir debe ser una traducción del anterior. * Si el ejercicio tiene preguntas, se deberá agregar una nueva subsección con las preguntas y las respuestas correctas. * Cualquier otro agregado que crea conveniente para la correcta interpretación del trabajo. * Se deben hacer todos los puntos extras o ejercicios estrella del proyecto. * Se deberá entregar además un CD o disquette con todos los programas de los proyectos. * Los programas de cada proyecto deberán estar en un directorio separado cuyo nombre deberá ser el numero del proyecto. * Se pueden crear subdirectorios para cada ejercicio si lo considera necesario. * Los programas deben poder compilar sin ningún problema y deben coincidir con los de las carpetas. * Para el caso de programas en C, deben poder compilar sin "warnings" con las directivas -Wall -ansi -pedantic. * Si todos los resultados presentados en las carpetas y el CD o disquette son correctos y cumplen con todos los requisitos anteriores entonces el alumno pasará a un examen oral. Este examen se realizará en un horario a convenir con los profesores de la materia. ===== Instrucciones para inscribirse en la lista de mails ===== Desde el [[http://webmail.famaf.unc.edu.ar/src/login.php|webmail del FaMAF]] enviar un mail a: alualgo1-join@famaf.unc.edu.ar con cualquier subject o cuerpo del mail. Después de enviarlo debe llegar un mail con un link a una página donde donde se deben llenar los datos personales. Todo esto hay que hacerlo desde el [[http://webmail.famaf.unc.edu.ar/|webmail del FaMAF]]. === ¡¡ Tener en cuenta !! === Si se cometió un error el sistema enviará un mail avisando. Por lo cual, siempre lea el mail de respuesta a la inscripción y verifique que no hubo un error. Si es así, repita el proceso. Cualquier problema consultar con los administradores del laboratorio.