====== Algoritmos y Estructuras de Datos I ====== * **Docentes:** Javier O. Blanco, [[http://www.cs.famaf.unc.edu.ar/~laura|Laura Alonso Alemany]], Renato Cherini, Valeria Rulloni, [[http://www.cs.famaf.unc.edu.ar/~damian|Damián Barsotti]], Martín Dominguez, Walter Alini, Tomás Cohen Arazi, Luis Ferrer Fiority, Franco Luque, Ignacio Moretti, Jorge Venzon, Santiago Videla. ===== Notas ===== [[ http://www.cs.famaf.unc.edu.ar/ayed1/notas.html | Notas del recuperatorio ]] ===== Calendario de parciales ===== 28 de Septiembre -- primer parcial 16 de Noviembre -- segundo parcial 23 de Noviembre -- recuperatorio del primer o segundo parcial ===== 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/~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 * [[http://hal.famaf.unc.edu.ar/tutorial_C/www.phim.unibe.ch/comp_doc/c_manual/C/cref.html|Manual de referencia C]] (en inglés). * 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]]. ===== Prácticos ===== el [[http://www.cs.famaf.unc.edu.ar/ayed1/teoremas.pdf | machete de axiomas y teoremas]] * 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: [[http://www.cs.famaf.unc.edu.ar/ayed1/2006pra3.pdf | Funciones Recursivas]] * Práctico 4: [[http://www.cs.famaf.unc.edu.ar/ayed1/2006pra4.pdf | Recursión Final]] * Práctico 5: [[http://www.cs.famaf.unc.edu.ar/ayed1/2006pra5.pdf | Programación Imperativa]] * Práctico 6: [[http://www.cs.famaf.unc.edu.ar/ayed1/2006pra6.pdf | Programación Imperativa: derivación de ciclos]] * Práctico 7: [[http://www.cs.famaf.unc.edu.ar/ayed1/2006pra7.pdf | Tipos Abstractos de Datos]] * Práctico 8: [[http://www.cs.famaf.unc.edu.ar/ayed1/2006pra8.pdf | Recursión Final en Programación Imperativa]] ===== 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. * FIXME (martín escribime!!) ==== Clases ==== * 17/8: Conceptos básicos de Sistemas Operativos. Manejo de File System de Linux. * 24/8: Modelo computacional. Expresiones en Haskell. Creación de programas en haskell (definiciones). Uso de Hugs. Lanzamiento proyecto 1 (pip). * 31/8: Tipos de datos definidos por el usuario en Haskell. Tipos simples y recursivos. Razonamiento sobre tipos de datos inductivos. Tipo sinónimos, newtype. Polimorfismo paramétrico y ah hoc (conceptos básicos y ejemplos del prelude de Haskell). * 7/9: Clases en Haskell. Ejemplo de clases con tipo Digito Binario {{:algo1:digbin.hs.gz|digbin.hs.gz}}. * 14/9: Continuación de clases en haskell. Ejemplo de NumInf {{:algo1:numinf.hs.gz|numinf.hs.gz}}. * 21/9: Feriado. * 28/9: FIXME * 5/10: Primera clase de C. Procesos y programas. Compilación. Uso de librerías. Sentencias básicas. * 12/10: Repaso de última clase. Uso de librerías de entrada salida. Precompilación (''#include'', ''#define''). Definición de constates ''TRUE'' y ''FALSE'' en C. Sentencias ''if'' y ''while''. * 19/10: Funciones en C. Explicación de pasaje de parametros por valor. Uso de gcc. * 26/10: No hubo clases. * 2/11: Simulación de pasajes de parametros por referencia en C (punteros). Modelo de memoria. Stack. Uso de gdb. * 9/11: Arreglos en C. Pasaje de argumentos de tipo arreglo a funciones. Modelo de memoria para arreglos. Relación con punteros. ==== Proyectos ==== * {{:algo1:pip.pdf|Proyecto 1}}: pip. * {{:algo1:proy2.pdf|Proyecto 2}}: productoria y fibonachi. * {{:algo1:proy3.pdf|Proyecto 3}}: razonamiento inductivo I. * {{:algo1:proy4.pdf|Proyecto 4}}: razonamiento inductivo II. * {{:algo1:proy5.pdf|Proyecto 5}}: primer proyecto en C. * {{:algo1:proy6.pdf|Proyecto 6}}: algoritmos iterativos y funciones. * {{:algo1:proy7.pdf|Proyecto 7}}: algoritmo de la división - pasaje por referencia. * {{:algo1:proy8.pdf|Proyecto 8}}: arreglos. * {{:algo1:proy9.pdf|Proyecto 9}}: TAD Poly. {{:algo1:poly.tgz|Poly.hs}}.