temario_Python3

4101708 - Programación de computadores




 * Profesor: [|Diego Andrés Alvarez Marín] (daalvarez@unal.edu.co)
 * Intensidad horaria semanal presencial: 4 horas


 * Grupo 2:
 * Lunes 14:00-16:00 C208
 * Jueves 14:00-16:00 C306


 * Horas de actividad autónoma: 8 horas
 * Semanas: 16
 * Créditos: 3

**Citas para preguntas**

 * Únicamente solicitándolas previamente, ya sea por correo electrónico o antes/después de la clase.

**Criterio de evaluación**

 * Examen 1: 12%
 * Examen 2: 12%
 * Examen 3: 12%
 * Examen 4: 12%
 * Examen 5: 12%
 * Taller de programación 1 + sustentación: 20%
 * Taller de programación 2 + sustentación: 20%

**Asistencia al curso**
Generalmente los exámenes se califican sobre 6.0 o sobre 6.5. Para ganarse esas unidades extra, se deberá garantizar por parte del estudiante una asistencia mínima al 80% de las clases. La puerta se cerrará 10 minutos después de haber iniciado la clase (de acuerdo con el reloj del computador del salón). Si no se cumple la asistencia mínima, los exámenes se calificarán sobre 5.0. y por lo tanto los exámenes presentados se ponderarán con el coeficiente de ajuste correspondiente.

**Falta a los exámenes**
Siempre que usted falte a un examen, debe haber algún documento que lo exonere de dicha inasistencia. Cuando usted por algún motivo de fuerza mayor no pueda asistir al examen, usted debe avisarle al profesor con anterioridad ya sea personalmente o por correo. En esos casos en lo posible, debe demostrarlo. Por ejemplo: si le tocó viajar a su pueblo esa semana porque algo sucedió un evento familiar de trascendencia, entonces una forma de certificar que usted viajó son los tiquetes de ida y vuelta a su pueblo. Sin una excusa o una notificación previa no se repetirán los exámenes y usted tendrá como nota un cero.

**Fraude en los exámenes o trabajos**
Estos se penalizarán con un cero en la nota y con una carta a la Dirección del Departamento de Ingeniería Civil, reportando el suceso.

=JUSTIFICACIÓN= La naturaleza de la profesión del ingeniero requiere hacer cálculos con la ayuda del computador. Si bien el empleo de hojas de cálculo como MS EXCEL es frecuente para esta tarea, dicho tipo de software no es el mejor para realizar tareas complicadas y repetitivas que requieren de toma de decisiones, por lo que se requiere que el estudiante aprenda a utilizar efectivamente un lenguaje de programación. Este es de hecho la única puerta que existe para entender y practicar efectivamente los algoritmos que se encuentran en las teorías de ingeniería modernas.

=OBJETIVOS=
 * Enseñar al estudiante la lógica de programación de modo que pueda resolver problemas prácticos de la vida práctica ingenieril y científica haciendo uso del computador, mediante el uso de lenguajes de programación alto nivel.
 * Analizar y diseñar soluciones algorítmicas construyendo un modelo del problema e identificando sus requerimientos funcionales.
 * Enseñar al estudiante el uso y aplicación de las variables, estructuradas de control, estructuras de datos, comandos y las diferentes librerías y funciones provistas por los lenguajes de alto nivel.

=AL FINALIZAR EL CURSO EL ESTUDIANTE DEBE ESTAR EN CAPACIDAD DE=
 * Utilizar las herramientas adecuadas para resolver un problema simple en términos de un programa de computador.
 * Especificar, diseñar, analizar y elaborar (implementar) un algoritmo a partir de un problema que se le plantee, habiendo estudiado previamente el concepto de algoritmo y sus distintas representaciones.
 * Diseñar e implementar programas, independientemente del lenguaje de programación.
 * Escribir programas correctos, eficientes, bien organizados, bien documentados y legibles.
 * Conocer tipos generales de problemas susceptibles de resolución por computador y las herramientas necesarias para ello.

=METODOLOGÍA= El curso se desarrollará teniendo en cuenta diferentes aspectos pedagógicos como son:
 * Clases presenciales: el profesor explica los conceptos relevantes en el salón de clase.
 * Realización de talleres prácticos de programación que faciliten, refuercen y aplique los conocimientos adquiridos en la parte teórica cada vez que el tema lo amerite.
 * Presentación y sustentación de proyectos por parte de los estudiantes.
 * Trabajo dirigido fuera de clase, ya sea individual o por grupo, por parte de los estudiantes con el propósito de afianzar los conceptos aprendidos.

=LENGUAJE DE PROGRAMACIÓN A ENSEÑAR= Se enseñará Python 3 ya que a diferencia de otros lenguajes de programación como C o C++ este es un lenguaje con una sintaxis simple y mucho más fácil de aprender. Adicionalmente existe en internet mucho material educativo gratis y de excelente calidad sobre el tema.

El curso se debe dirigir hacia el aprendizaje de los lenguajes C y C++, ya que como se muestra en el índice TIOBE, el cual mide la popularidad de los lenguajes de programación (http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html), estos dos lenguajes son los más populares en el ámbito de la programación moderna (C 17% C++ 9%, favoritismo conjunto 26%, Enero 2013) y además son los que frecuentemente se utilizan para las tareas de programación científica de alto desempeño por su velocidad y por la gran cantidad de librerías de funciones complementarias que existen. Además con estos lenguajes se pueden enseñar conceptos relativos a la programación que son importantes y que no se pueden enseñar con el lenguaje MATLAB. Una vez se sepa programar en C y en C++, la transición al lenguaje MATLAB sólo toma dos semanas de clase, y esta se puede hacer sin contratiempos en el curso 4101553 "Métodos numéricos aplicados a la ingeniería civil" (de hecho en el programa de esta materia ya se ha especificado utilizar las dos primeras semanas para el aprendizaje de MATLAB).

=CONTENIDO=
 * 1. La esencia de la lógica de programación**
 * Planteamiento, abordaje de problemas, estrategias de solución, análisis de problemas, entradas y salidas
 * Algoritmos
 * Pseudocódigo
 * Diagramas de flujo


 * 2. Conceptos fundamentales sobre el tratamiento de datos**
 * Tipos de datos
 * Lógica binaria y álgebra de Boole
 * Variables
 * Cadenas de texto
 * Asignaciones, operadores y precedencia de operadores, expresiones


 * 3. Introducción a la programación**
 * Programa "Hola Mundo"
 * Entrada salida básica (input/print)
 * El interprete de Python
 * La importancia de la documentación y los comentarios en el código
 * Entorno de desarrollo
 * Estructura de los programas
 * Palabras reservadas


 * 4. Sentencias de Control Condicionales y Ciclos**
 * Condicionales (if, if-else)
 * Ciclos (while, for, break, continue, ciclos anidados)
 * 5. Funciones**
 * Definición
 * Ambito de las variables
 * Paso de parámetros a una función
 * Recursibilidad


 * 6. Arrays y matrices**
 * Cadenas
 * Listas


 * 7. Tipos definidos por el usuario**
 * tuplas, conjuntos, diccionarios
 * 9. Librerias varias de Python**
 * numpy, pygame, sys, etc.

=BIBLIOGRAFIA=
 * Omar Ivan Trejos Buriticá. La Esencia de la Lógica de Programación. Pereira:Papiro, 1999. Disponible en Internet.
 * Luis Joyanes Aguilar. Fundamentos de programación: algoritmos, estructuras de datos y objetos. Madrid:McGraw-Hill 2008.
 * R.C. T. Lee. Introducción al diseño y análisis de algoritmos :un enfoque estratégico. México:McGraw-Hill, 2007.