75.40 – 95.14 Algoritmos y Programación I Curso Prof. Arturo Servetto Propósitos del Curso • Presentar al alumno un panorama general de la Informática a partir del concepto de algoritmo, que le sirva como base para apreciar la importancia e interrelaciones de cursos futuros. • Que el alumno comprenda los fundamentos de la tecnología actual y la forma en que influye en el diseño de computadoras. • Que el alumno comprenda cómo el software de sistema controla el funcionamiento de una computadora y establece las rutas de comunicación básica entre una máquina y las personas que la usan, y cómo pueden conectarse computadoras para compartir información y recursos. • Capacitar al alumno en el descubrimiento y representación de algoritmos aplicando el principio de dividir y conquistar y refinamientos sucesivos, e inculcarle la búsqueda de eficiencia y la comprobación de corrección y completitud. • Capacitar al alumno en la comunicación de algoritmos a las computadoras mediante el proceso de programación y el dominio del lenguaje C, en el diseño de datos para representar información y manipularlos con la mayor eficiencia, y en la presentación efectiva de información al usuario. 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 2 Contenidos Descripción analítica del alcance del curso 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 3 Introducción a la Informática • Fundamentos Algoritmos y programación. Alcance de la informática. Repercusiones sociales. Desarrollo de máquinas algorítmicas. Arquitectura de computadoras. Sistemas de numeración binario y hexadecimal. Operaciones booleanas. • Representación y Almacenamiento de Datos Memoria principal. Almacenamiento masivo: sistemas magnéticos, ópticos y memorias flash. Representación de información como patrones de bits: texto, valores numéricos, imágenes y sonido. Confiabilidad: métodos de detección y corrección de errores. • Manipulación de Datos La unidad central de procesamiento (CPU). Codificación y almacenamiento de programas. Lenguaje de máquina. Ejecución de programas. Ejercitación en una máquina virtual. • Nociones de Software Software de sistema, de desarrollo y de aplicación. Sistemas operativos: historia, arquitectura, funciones y seguridad. Redes (clasificación, protocolos, comunicación entre procesos y sistemas distribuidos) e Internet (arquitectura, aplicaciones, la www y seguridad). 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 4 Algoritmia y Lenguajes de Programación • Algoritmia y Programación Teoría de resolución de problemas de Pólya aplicada a la algoritmia. Enfoques descendente (top down) y ascendente (bottom up). Tipos estándar y definición de constantes y variables globales. Expresiones: álgebra de Boole y Leyes de De Morgan. Estructuras de control: de transferencia-retorno (entrada y salida estándar y definición de subalgoritmos), de asignación, selectivas e iterativas. Procesamiento de secuencias. Eficiencia, generalidad y corrección de algoritmos. • Lenguajes de Programación Historia. La programación imperativa o por procedimientos como paradigma de comunicación de algoritmos a computadoras. Traducción e interpretación de programas. Paradigmas de programación abstracta: programación orientada a objetos, programación lógica, programación funcional y lenguajes que las sustentan. 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 5 Programación Imperativa en Lenguaje C • Ambientes de Desarrollo y Programas Ambientes integrados de desarrollo. Estructura de programas y documentación interna. Definición de tipos: estructuras, uniones y enumeraciones. Memoria estática en programas. Archivos de texto (memoria persistente): estructura, caracteres de control, funciones predefinidas y aplicaciones para captura de datos y comunicación de resultados de programas. • Definición de Subprogramas Parámetros por referencia y por valor. Definición de constantes, tipos y variables locales; reglas de alcance. Reusabilidad del software. Principios de modularización: cohesión y acoplamiento. Invocación recursiva de subprogramas. Memoria de pila (stack memory) en programas: registros de activación de subprogramas. 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 6 Estructuras de Datos en el Lenguaje C • Agrupamiento de Datos en Arreglos (Memoria Principal) Definición y manipulación de arreglos de una o más dimensiones. Arreglos como parámetros. Algoritmos de búsqueda y de ordenamiento de elementos en arreglos. Aplicaciones: aritmética de alta precisión, álgebra de polinomios y matrices, resolución algebraica de sistemas de ecuaciones. • Persistencia de Datos en Archivos Binarios (Memoria Secundaria) Procesamiento de archivos. Funciones predefinidas; accesos secuencial y relativo. Creación y actualización de archivos con registros desordenados con control de espacio libre. Ordenamiento de archivos. Algoritmos de corte de control y de procesamiento coordinado de archivos ordenados. • Apuntadores (pointers) a Datos (Memoria Principal) Definición de apuntadores a datos, asignación y liberación de memoria para datos apuntados, referenciación de datos con apuntadores. Conceptos de listas, colas y pilas. Memoria dinámica (heap memory) en programas. 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 7 Bibliografía • Introducción a la computación (11ª edición) J. Glenn Brookshear Addison Wesley, 2012 • Fundamentos de programación Algoritmos, estructura de datos y objetos (4ª edición) Luis Joyanes Aguilar McGraw-Hill, 2008 • Introducción a la Programación Estructurada en C Teresa G. Márquez, Sonia Osorio y Noemí Olvera Pearson, 2011 • CÓMO PROGRAMAR EN C, C++ y JAVA 4/E Harvey M. Deitel y Paul J. Deitel Pearson, 2004 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 8 Régimen de Cursado y Promoción Modalidad de clases y de evaluaciones 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 9 Modalidad de Clases • Clases teórico-prácticas (6 hs semanales) • Principios conceptuales y procedimentales de cada unidad temática con planteo y discusión de problemas • Desarrollo analítico de casos de estudio • Atención de consultas para el desarrollo de trabajos en pares y demostración de soluciones • Los pares se conformarán cada clase según los alumnos que tengan computadoras portátiles y trabajarán en aula o en un laboratorio del Departamento de Computación • Materiales y Consultas (Campus Virtual) • Síntesis de unidades temáticas y documentación de consulta • Guías de problemas para cada unidad temática • Atención de consultas sobre problemas de unidades temáticas 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 10 Modalidad de Promoción • Trabajos Prácticos en Pares • Se exigirá la resolución en clases de laboratorio de uno o más problemas, realizada por alumnos agrupados de a dos; cada alumno deberá acreditar al menos el 70% de los trabajos que se exijan • La corrección de los trabajos se basará en rúbricas y comprenderá tanto el proceso de desarrollo (interacción con docentes) como la calidad (claridad, prediseño de datos de prueba, corrección y eficiencia) de los resultados • Evaluación Parcial Individual (teórico-práctica) • Manejo de conceptos, aplicación de conocimientos y dominio de técnicas, mediante respuestas a preguntas y resolución de problemas (3 oportunidades para aprobar: dos fechas durante el cursado y la tercera en la primer semana postcursado) • Comprende Introducción a la Informática, Algoritmia y Lenguajes de Programación, y Programación Imperativa en Lenguaje C • Evaluación Integradora Individual (complementaria a la parcial) • Ídem evaluación parcial (en hasta 3 fechas de evaluación integradora de las 15 siguientes al cursado) • Comprende Estructuras de Datos en Lenguaje C 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 11 Cronograma Planificación de clases y evaluaciones parciales 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 12 Clases Semana Conceptos Práctica 1 Fundamentos Sistemas de numeración binario y hexadecimal (operaciones y conversiones de representación) 2 Representación y Almacenamiento de Datos Codificación de símbolos y números (enteros y fraccionarios) Codificación de programas en una máquina virtual, en el lenguaje de la máquina expresado en hexadecimal 3 Manipulación de Datos 4 Nociones de Software 5 Algoritmia Representación de algoritmos en lenguaje natural 6 Lenguajes de Programación 7 Ambientes de Desarrollo y Programas 8 75.40 - 95.14 Algoritmos y Programación I Codificación de programas en C con estructuras selectivas y repetitivas, y archivos de texto para captura de datos y comunicación de resultados; edición de salidas Curso Prof. Servetto 13 Clases Semana Teoría 9 Subprogramas Modularización de programas, subprogramas recursivos e implementación de tipos de datos abstractos; reglas de estilo de programación Arreglos Aplicaciones con arreglos implementando tipos de datos abstractos Archivos Binarios Aplicaciones con archivos binarios como tipos de datos abstractos Apuntadores Programas con apuntadores 10 11 12 13 14 15 16 Práctica 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 14 Evaluaciones Parciales • Primera fecha: semana 10 • Segunda fecha: semana 14 • Tercera fecha: semana 17 Las evaluaciones se desarrollarán en un día y horario normal de clases, y el día de cada evaluación en la semana especificada para cada fecha se determinará oportunamente según el avance en los contenidos. 75.40 - 95.14 Algoritmos y Programación I Curso Prof. Servetto 15