====== Algoritmos y Estructuras de Datos I ====== ===== Novedades ===== Pueden consultar por el momento las notas del final tomado el 17/12 en la siguiente [[http://cs.famaf.unc.edu.ar/~renato/ayed1/notas.html|lista]]. Las notas deberían aparecer publicadas su historia académica dentro del sistema Guaraní en las próximas horas. Al mismo pueden acceder desde las terminales ubicadas para tal fin frente a Despacho de Alumnos, o vía web en [[http://guarani3w.unc.edu.ar/famaf/ | http://guarani3w.unc.edu.ar/famaf/]]. ===== Docentes ===== Javier O. Blanco, [[http://www.cs.famaf.unc.edu.ar/~damian|Damián Barsotti]], Silvina Smith, Renato Cherini, Valeria Rulloni, Martín Dominguez, Marcos Dione, Walter Alini, Jorge Venzon, .... ===== Parciales ===== ==== Calendario ==== * Primer parcial: 2 de Octubre * Segundo parcial: 15 de Noviembre * Recuperatorio: 22 de Noviembre ==== Consultas ==== * Fecha del Miércoles 5/12: Lunes 3/12, 10hs. * Fecha del Lunes 17/12: Jueves 13/12, 10hs En todos los casos se dejará un cartel en la oficina de Javier Blanco (of. 364) señalando el aula donde se dará la consulta. ==== Notas ==== {{algo1:notas.pdf|Listado de notas de parciales, taller y condición de regularidad}} (Final) * Los alumnos marcados con rojo no figuran como inscriptos a la materia. * La nota que figura para algunos alumnos en la columna "Condicion/Nota" es la nota final que les corresponde si hacen uso de la promoción. * Donde no figure nota de parcial (o de taller) corresponde un 1 (o "Libre"). * Los alumnos que desen rendir en condicion de "Libre", DEBERÁN RENDIR el taller al momento del exámen. * 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. * 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. * 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. * Cualquier error debe ser reportado a la brevedad. ===== Bibliografía ===== * [[http://www.cs.famaf.unc.edu.ar/~damian/algoritmos1/apunte/main.pdf | Cálculo de Programas]] (contiene los teóricos y ejercicios del práctico). * [[http://www.cs.famaf.unc.edu.ar/ayed1/teoremas.pdf | Machete de axiomas y teoremas]] * [[http://www.cs.famaf.unc.edu.ar/~damian/algoritmos1/introlinux/introlinux.pdf | Introducción a Linux]]. === Haskell === * [[http://www.cs.famaf.unc.edu.ar/~ayed1/taller/doc_haskell/haskell-98-tutorial-html|Tutorial Haskell]]. * [[http://ww.cs.famaf.unc.edu.ar/~ayed1/taller/doc_haskell/manual/index.html|Manual Hugs]]. * [[http://www.cs.famaf.unc.edu.ar/~ayed1/taller/doc_haskell/report/haskell98-report/index.html|Especificación del lenguaje Haskell 98]]. * [[http://ww.cs.famaf.unc.edu.ar/~ayed1/taller/doc_haskell/report/haskell98-library-report/index.html|Especificación de las librerías de Haskell 98]]. * [[http://www.haskell.org/learning.html|En la web]]. === Lenguaje C === * Tutoriales de lenguaje C * {{algo2:cursc.html | En castellano pero básico}} * [[http://www.cs.cf.ac.uk/Dave/C/ | En ingles pero muy completo]] * [[http://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/~ayed1/taller/lecturas/dicosmo.html|Trampa en el cyberespacio]]. * [[http://www.cs.famaf.unc.edu.ar/~ayed1/taller/lecturas/SciAmSept1994.html|Software's Chronic Crisis]]. * {{algo1:2007:pjlester.ps.gz|Implementing Functional Languages: a Tutorial.}} Simon L. Peyton Jones. ===== Prácticos ===== * Práctico 1: [[http://www.cs.famaf.unc.edu.ar/ayed1/2006pra1.pdf | Cuantificación Generalizada]] * Práctico 2: [[http://www.cs.famaf.unc.edu.ar/ayed1/2006pra2.pdf | Inducción]] * Práctico 3: {{algo1:2007:2007pra3.pdf| Funciones Recursivas}} * Práctico 4: {{algo1:2007:2007pra4.pdf| Tipos Abstractos de Datos}} * Práctico 5: {{algo1:2007:2007pra5.pdf| Programación Imperativa}} * Práctico 6: {{algo1:2007:2007pra6.pdf| Programación Imperativa - Derivación de Ciclos}} ===== Laboratorio ===== ==== Modalidad ==== === Generalidades === * Los teóricos del laboratorio se dictan los jueves de 12 hs. a 13 hs. despues del práctico (en la misma aula). * El taller se reliza en tres comisiones. Los horarios de ellas son: lunes de 9 hs a 13 hs y de 14 a 18 hs el mismo día, y martes de 14 hs. a 18 hs. Cada alumnos debe inscribirse en una. * 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 permanecen fijos para todos los proyectos. * Cada grupo tendrá un ayudante asignado. Los ayudantes harán un seguimiento de los proyectos. * Existe el horario reservado para práctica libre en el laboratorio los jueves de 14 hs. a 18 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) Para aprobar el taller, se debe tener un promedio total equivalente al 70% de los proyectos totales con la nota **B** ==== Clases ==== * 16/8: Razonamiento inductivo. Recursión lineal. Uso de foldr. Quicksort. {{algo1:2007:clase1.hs.pdf|Ejemplos en clase}}. * 28/8: Razonamiento inductivo. Insertion sort y merge sort. Hanoi. {{algo1:2007:clase2.hs.pdf|Ejemplos en clase}}. * 3/9: Razonamiento inductivo. Modelo Computacional. Ordren de reduccion normal, aplicativo y lazy. Listas infinitas. {{algo1:2007:clase3.hs.pdf|Ejemplos en clase}}. * 10/9: Listas infinitas. Criba de Eratostenes ({{algo1:2007:clase4.hs.pdf|programa}}). Modulos básico (sin export list). * 18/9: Concepto de abstraccion (ejemplo taxi y S.O.). Tipos de datos definidos por el usuario: sentencia data y sinónimo de tipos ([[http://www.cs.famaf.unc.edu.ar/~ayed1/taller/doc_haskell/haskell-98-tutorial-html/goodies.html#sect2.2|bibliografía]]). Encapsulamiento con modulos (export list) ([[http://www.cs.famaf.unc.edu.ar/~ayed1/taller/doc_haskell/haskell-98-tutorial-html/modules.html#sect11|bibliografía]]). Utilización de clases en Haskell ([[http://www.cs.famaf.unc.edu.ar/~ayed1/taller/doc_haskell/haskell-98-tutorial-html/classes.html|bibliografía]]). * 24/9: Repaso proyecto 3. * 1/10: Estuve enfermo. * 8/10: Paradigma Imperativo. Interpretes y compiladores. Transformadores de estados. Anotaciones en programas. Sentencias y expresiones en C. Estructura básica de un programa C. * 15/10: Feriado. * 22/10: Directivas de preprocesamiento. Funciones. printf/scanf. * 29/10: Pasaje del lenguaje del teórico a C. Punteros. Pasaje de punteros a funciones. * 5/11: Arreglos, pasados como parametros, devueltos por funciones, sin memoria dinámica. Strings, uso de librerías, sin memoria dinámica. Sinónimo de tipos (typedef). Etructuras. * 12/11: Archivos separados en C. Construcción de librerías con compilación separadas (no se dió librías dinámicas no estáticas). Construcción de TAD's en C con archivos separados (sin punteros a estructuras): explicación del proyecto. * 19/11: Consulta proyecto 5. * 26/11: Consulta proyecto 5. ==== Proyectos ==== * {{algo1:2007:proy1.pdf|Proyecto 1}} - Recursión. * {{algo1:2007:proy2.pdf|Proyecto 2}} - Recursión. * {{algo1:2007:proy3.pdf|Proyecto 3}} - Tipos Abstractos de Datos en Haskell. {{algo1:2007:interface.tgz|Interface para correr el programa}}. * {{algo1:2007:proy4.pdf|Proyecto 4}} - Primer proyecto en C. * {{algo1:2007:proy5.pdf|Proyecto 5/Parte I}}. * {{algo1:proy5_2da_parte.pdf|Proyecto 5/Parte II}} (versión corregida).