Plan de Estudio 2011 Asignatura: PROGRAMACION PROCEDURAL CARRERA: LIC. EN CIENCIAS DE LA COMPUTACION LIC. EN SISTEMAS DE INFORMACION AÑO: Primer Año CREDITO HORARIO: 9 horas DESPLIEGUE: Segundo Cuatrimestre I - CUERPO DOCENTE Apellido y Nombres Cargo docente Situación Valenzuela, Francisca A. Profesor Titular Exclusivo Ordinario Dedicación en horas semanales al cargo 10 Llarena, Myriam G. Profesor Asociado Exclusivo Ordinario 10 Gutiérrez, Laura V. Jefe de Trabajos Prácticos Exclusivo Ordinario 11 Diaz, Mario Jefe de Trabajos Prácticos Exclusivo Ordinario 10 II - OBJETIVOS GENERALES Al término de esta asignatura se espera que el alumno sea capaz de: - Distinguir y utilizar los aspectos relevantes del modelo de computación procedural en el diseño e implementación de algoritmos que resuelvan problemas de mediana complejidad. - Adquirir habilidades en la construcción y ejecución de programas a través de la discusión grupal de las soluciones. III - ORGANIZACIÓN DE LOS CONTENIDOS EN UNIDADES y OBJETIVOS ESPECIFICOS Los contenidos se organizaron en siete (7) temas que se desarrollarán de la siguiente forma: Tema 1: Objetivos Específicos: Al término de este tema se espera que el alumno: - Identifique características principales del lenguaje C como lenguaje procedural - Desarrolle habilidades para la verificación formal de programas. - Adquiera hábitos para la investigación y el trabajo grupal. Introducción a los Lenguaje de programación: Algunas cuestiones de diseño e implementación: Traductores y computadoras simuladas por software. Modelos de computación. Lenguajes de Programación Imperativos: Concepto de estado de máquina. Lenguajes imperativos como completos de Turing. Buenas prácticas de diseño de lenguajes imperativos. El lenguaje C como lenguaje imperativo. Verificación Formal de programas. Derivación de ciclos y Verificación de ciclos. El rol de los invariantes en la construcción de programas con ciclos. Indicios para encontrar invariantes. Ejemplos. Tema 2: Objetivos Específicos: Al término de este tema se espera que el alumno: - Discierna entre verificación dinámica y verificación estática, las ventajas y desventajas que cada una de ellas provee. - Adquiera habilidad en la construcción y ejecución de programas que involucren las distintas estructuras de datos y las distintas operaciones que se pueden realizar sobre ellos. - Interprete, a través de ejemplos, la especificación e implementación que admiten los tipos de datos registro, arreglos y registros variantes. - Adquiera capacidad en el manejo de punteros a través del desarrollo de distintos programas. Objetos de Datos. Tiempo de Vida. Enlace (ligadura). Declaraciones y Verificación de tipo. Verificación de tipos en lenguaje C. Conversión y coerción de tipos. Semántica de la operación de Asignación: Valor L y Valor R. Tipo Apuntador. Operadores de apuntadores. Asignación de punteros. Ejercicios de Aplicación. Tipos de Datos Estructurados: Especificación de Tipo de Datos Estructurados. Arreglos y Struct. Implementación de Operaciones sobre estructuras de datos. Declaraciones y Verificaciones de Tipo. Arreglos y Punteros en Lenguaje C. Ejercicios de Aplicación. Cadenas de Caracteres. Uso De Funciones de Cadena de la Biblioteca Estándar. Ejercicios de Aplicación. Tema 3: Objetivos Específicos: Al término de este tema se espera que el alumno: - Utilice subrogramas función para abstraer procesos u operaciones que actúan sobre distintos tipos de datos. - Construya subprogramas y muestre el manejo de memoria cuando se ejecutan en el contexto de un programa en lenguaje C. - Construya programas a través del uso de funciones que se comunican con distintos tipos de parámetros. - Reconozca la importancia de la tabla de símbolos en el proceso de compilación de un programa. - Adquiera hábitos para la investigación y el trabajo grupal. Tipos abstractos de datos. Definición de tipos. Encapsulamiento a través de subprogramas. Subprogramas: Especificación e implementación de subprogramas. Definición, invocación y activación de subprogramas. Concepto de función en C: Función main(). Declaración y definición de funciones. Organización de memoria: Almacenamiento Estático, Pila y Montículo. Ejecución de un programa en C. Pasajes de parámetros: Pasajes de parámetros: valor, constante, por dirección. Variables referenciadas. Pasaje de parámetro por referencia. Arreglos como parámetros. Funciones que devuelven más de un valor. Ejercicios de aplicación. Traducción y Tabla de Símbolos (TS): Compilación de un programa fuente. Lenguaje C como un lenguaje estructurado en bloque. Importancia de las declaraciones en C. Alcance de un vínculo en lenguaje C. Generación de la TS en un programa en C. Ejercicios de aplicación. Clasificación de las variables según alcance y tiempo de vida: Variables automáticas, estáticas y externas. Ejercicios de aplicación. Tema 4: Al término de este tema se espera que el alumno: - Distinga con claridad las ventajas y desventajas de funciones recursivas frente a las soluciones iterativas. - Construya subprogramas recursivos y muestre el manejo de memoria cuando se ejecutan en el contexto de un programa en lenguaje C. Recursividad. Funciones Recursivas en C. Definición. Caso base y caso general. Distintas combinaciones. Manejo de memoria (pila). Aplicaciones: Serie de Fibonacci y QuickSort. Recursión e Iteración. Ejercicios de aplicación. Tema 5: Al término de este tema se espera que el alumno: - Adquiera destreza en el manejos de estructuras dinámicas implementadas a través de arreglos y de listas enlazadas con punteros. - Entienda la elección de representaciones de almacenamiento para las distintas estructuras dinámicas que utiliza. - Construya programas que utilicen distintas estructuras dinámicas adecuadas al contexto de la situación problemática que se plantea. Estructuras dinámicas. Almacenamiento estático y dinámico. Variables dinámicas. El montículo: Operaciones sobre el montículo o heap. Manejo del montículo en lenguaje C: funciones malloc y free. Variables dinámicas simples. Basura y referencias desactivadas. Arreglos dinámicos en lenguaje C. Arreglos dinámicos uni y bidimensionales. Mapa de memoria. Cadena de caracteres dinámicas. Arreglo de cadenas dinámicas. Ejercicios de Aplicación. Listas: listas secuenciales y listas enlazadas. Manipulación de listas enlazadas: creación, inserción. Búsqueda, recorrido, modificación, supresión de elementos. Ordenamiento y eliminación de una lista. Gestión de almacenamiento. Problemas de gestión de almacenamiento: referencias bamboleantes y basura como cola. Recursividad en listas. Ejercicios de Aplicación. Tema 6: Archivos. Al término de este tema se espera que el alumno: - Reconozca la importancia del uso de archivos como una de las alternativas para lograr el almacenamiento permanente de los datos. - Procese archivos de textos a través de lenguaje C. - Construya programas en Lenguaje C que manejen archivos binarios organizados secuencialmente y que puedan accederse secuencialmente y/o de forma aleatoria. Concepto de archivo en lenguaje C. Distintas clasificaciones. Archivos secuenciales: Archivos de caracteres y sin formato. Acceso secuencial de archivos: Funciones para la creación y utilización de archivos secuenciales. Archivos secuenciales con cortes de control. Acceso directo de archivos secuenciales. Funciones seek, filepos, getpos, etc. Ejercicios de aplicación. Tema 7: Al término de este tema se espera que el alumno: - Capacidad para encontrar soluciones informáticas a problemas mediante la modelización disciplinada de soluciones y descomposición en módulos - Adquiera habilidad para medir la calidad de un conjunto de módulos, planteados como solución de una determinada problemática. - Diseñe y codifique de manera eficiente, la solución a problemas planteados. - Justifique con sustento teórico, el diseño elegido para el abordaje de un problema. - Que el alumno adquiera hábitos para la investigación y el trabajo grupal. Metodología de Diseño Modular: Concepto de módulo en C. Programas de múltiples archivos. Diseño Modular: Concepto de módulo. Ventajas del Diseño Modular. Independencia Funcional. Criterios que miden la independencia modular. Cohesión y Acoplamiento Modular. Distintos Tipos. Construcción de programas a través del uso del diseño modular. Ejercicios de aplicación. IV – RÉGIMEN DE EVALUACIÓN Esta asignatura fue específicamente programada para un régimen regular (no admite régimen libre ni promocional) y contempla un cursado cuatrimestral con un crédito horario de 9 horas semanales. Para que el alumno obtenga la certificación definitiva en la asignatura debe cumplir los siguientes requisitos: 1 - Aprobar cuatro (4) parciales. 2 - Cumplir el 70 % de asistencia a las clases prácticas asignadas a cada parcial. La aprobación final se obtiene a través de un examen que es oral, y estará basado en el programa analítico presentado por el titular de la asignatura. V - BIBLIOGRAFÍA PRINCIPAL 1. Lenguajes de Programación Diseño e Implementación. Pratt Terrence y Marvin Zelkowitz. Editorial Prentice Hall. Hispano americana, S.A. Segunda Edición. 1987. 2. Como programar en C, C++ / H. M. Deitel, Harvey M. y Deitel, Paul J. Mexico: Buenos Aires: Pearson Educación. Cuarta Edición. 2003. 3. Programación en C. Byron S. Gottfried. Madrid. Buenos Aires: McGraw-Hill. 1997. 4. Programación en C - Metodología, algoritmos y estructura de datos. Luís Joyanes Aguilar. Madrid. Buenos Aires: McGraw-Hill, 2001. 5. APRENDIENDO C. Editorial de la Universidad Nacional de San Juan. (Editorial de la Fundación de la Universidad de San Juan). ISBN: 950 - 605 -359 - 6. Año 2004. 6. Lenguajes de Programación Principios y Práctica. Louden, Kenneth C. Mexico, D.F. Editorial Thomson. 2004. 7. Programación Orientada a Objetos. Técnicas Avanzadas de Programación. Fontela, Carlos. Buenos Aires. Editorial Nueva Librería. 2003. 8. Técnicas Avanzadas de Programación. Programación Orientada a Objetos. Fontela, Carlos. Editorial Nueva Librería. 9. Cálculo de Programas. Blanco, Javier, Smith, Silvina, Damián Barsotti. Universidad Nacional de Córdoba. ISBN 978-950-33-0642-0. 2009. - BIBLIOGRAFÍA COMPLEMENTARIA Desarrollo y evaluación de técnicas de construcción de Procesadores de Lenguajes para máquinas abstractas orientadas a objetos. Luengo Díez, María. Tesis Doctoral. Universidad de Oviedo. Año 2002. (archivo pdf) . Documentos de Internet Administración de Tablas de Símbolos http://www.scribd.com/doc/13719894/Administrador-de-Tabla-de-Simbolos Lenguaje C http://c.conclase.net/curso/ Diseño Modular www.ecomchaco.com.ar/utn/disenodesistemas/apuntes/de/diseño_estructurado.htmEnñaces: http://www.inf.udec.cl/~mvaras/estprog/cap3.html#3.2.1 http://www.dosideas.com/noticias/java/502-acoplamiento-y-cohesion.html www.carlospes.com/.../capitulo_03_ciclo_de_vida_de_un_programa.pdf www.exa.unicen.edu.ar/.../TP6-CriteriosEvaluarCalidadDisenoModular.pdf Verificación de programas http://www.infor.uva.es/~jvalvarez/docencia/tema8.pdf http://www.cs.famaf.unc.edu.ar/~damian/calcprog/main.pdf Documentos, filminas y guías propuestos por el equipo de cátedra.